typia 3.7.5-dev.20230413 → 3.7.6

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 (231) hide show
  1. package/README.md +35 -228
  2. package/lib/executable/TypiaSetupWizard.d.ts +1 -0
  3. package/lib/executable/TypiaSetupWizard.js +62 -30
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/setup/PackageManager.d.ts +1 -1
  6. package/lib/executable/typia.d.ts +1 -1
  7. package/lib/executable/typia.js +1 -1
  8. package/lib/executable/typia.js.map +1 -1
  9. package/lib/factories/IdentifierFactory.d.ts +1 -1
  10. package/lib/factories/IdentifierFactory.js +1 -1
  11. package/lib/factories/IdentifierFactory.js.map +1 -1
  12. package/lib/factories/TypiaFileFactory.js +9 -4
  13. package/lib/factories/TypiaFileFactory.js.map +1 -1
  14. package/lib/programmers/internal/check_string_tags.js +2 -2
  15. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  16. package/lib/programmers/internal/check_template.js +1 -1
  17. package/lib/programmers/internal/check_template.js.map +1 -1
  18. package/package.json +11 -12
  19. package/src/CustomValidatorMap.ts +126 -126
  20. package/src/IRandomGenerator.ts +33 -33
  21. package/src/IValidation.ts +21 -21
  22. package/src/Primitive.ts +104 -104
  23. package/src/TypeGuardError.ts +36 -36
  24. package/src/executable/TypiaGenerateWizard.ts +85 -85
  25. package/src/executable/TypiaSetupWizard.ts +47 -14
  26. package/src/executable/setup/ArgumentParser.ts +45 -45
  27. package/src/executable/setup/CommandExecutor.ts +8 -8
  28. package/src/executable/setup/FileRetriever.ts +22 -22
  29. package/src/executable/setup/PackageManager.ts +1 -1
  30. package/src/executable/setup/PluginConfigurator.ts +59 -59
  31. package/src/executable/typia.ts +54 -53
  32. package/src/factories/CommentFactory.ts +10 -10
  33. package/src/factories/ExpressionFactory.ts +77 -77
  34. package/src/factories/IdentifierFactory.ts +81 -59
  35. package/src/factories/LiteralFactory.ts +44 -44
  36. package/src/factories/MetadataCollection.ts +122 -122
  37. package/src/factories/MetadataFactory.ts +51 -51
  38. package/src/factories/MetadataTagFactory.ts +302 -302
  39. package/src/factories/StatementFactory.ts +60 -60
  40. package/src/factories/TemplateFactory.ts +56 -56
  41. package/src/factories/TypeFactory.ts +129 -129
  42. package/src/factories/TypiaFileFactory.ts +12 -3
  43. package/src/factories/ValueFactory.ts +12 -12
  44. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  45. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  46. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  47. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  48. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  49. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  50. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  51. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  52. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  53. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  54. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  55. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  56. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  57. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  58. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  59. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  60. package/src/functional/$any.ts +3 -3
  61. package/src/functional/$dictionary.ts +20 -20
  62. package/src/functional/$every.ts +11 -11
  63. package/src/functional/$guard.ts +35 -35
  64. package/src/functional/$is_between.ts +7 -7
  65. package/src/functional/$is_custom.ts +14 -14
  66. package/src/functional/$is_date.ts +4 -4
  67. package/src/functional/$is_datetime.ts +3 -3
  68. package/src/functional/$is_email.ts +5 -5
  69. package/src/functional/$is_ipv4.ts +5 -5
  70. package/src/functional/$is_ipv6.ts +5 -5
  71. package/src/functional/$is_url.ts +5 -5
  72. package/src/functional/$is_uuid.ts +5 -5
  73. package/src/functional/$join.ts +50 -50
  74. package/src/functional/$number.ts +12 -12
  75. package/src/functional/$report.ts +15 -15
  76. package/src/functional/$rest.ts +3 -3
  77. package/src/functional/$string.ts +37 -37
  78. package/src/functional/$tail.ts +6 -6
  79. package/src/functional/Namespace.ts +127 -127
  80. package/src/index.ts +4 -4
  81. package/src/metadata/ICommentTag.ts +4 -4
  82. package/src/metadata/IJsDocTagInfo.ts +10 -10
  83. package/src/metadata/IMetadata.ts +25 -25
  84. package/src/metadata/IMetadataApplication.ts +7 -7
  85. package/src/metadata/IMetadataConstant.ts +16 -16
  86. package/src/metadata/IMetadataEntry.ts +6 -6
  87. package/src/metadata/IMetadataObject.ts +29 -29
  88. package/src/metadata/IMetadataProperty.ts +11 -11
  89. package/src/metadata/IMetadataTag.ts +105 -105
  90. package/src/metadata/Metadata.ts +534 -534
  91. package/src/metadata/MetadataConstant.ts +3 -3
  92. package/src/metadata/MetadataObject.ts +131 -131
  93. package/src/metadata/MetadataProperty.ts +64 -64
  94. package/src/module.ts +2043 -2043
  95. package/src/programmers/ApplicationProgrammer.ts +55 -55
  96. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  97. package/src/programmers/AssertParseProgrammer.ts +65 -65
  98. package/src/programmers/AssertProgrammer.ts +284 -284
  99. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  100. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  101. package/src/programmers/CheckerProgrammer.ts +922 -922
  102. package/src/programmers/CloneProgrammer.ts +388 -388
  103. package/src/programmers/FeatureProgrammer.ts +512 -512
  104. package/src/programmers/IsCloneProgrammer.ts +80 -80
  105. package/src/programmers/IsParseProgrammer.ts +74 -74
  106. package/src/programmers/IsProgrammer.ts +206 -206
  107. package/src/programmers/IsPruneProgrammer.ts +75 -75
  108. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  109. package/src/programmers/LiteralsProgrammer.ts +65 -65
  110. package/src/programmers/PruneProgrammer.ts +343 -343
  111. package/src/programmers/RandomProgrammer.ts +413 -413
  112. package/src/programmers/StringifyProgrammer.ts +801 -801
  113. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  114. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  115. package/src/programmers/ValidateProgrammer.ts +317 -317
  116. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  117. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  118. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  119. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  120. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  121. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  122. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  123. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  124. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  125. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  126. package/src/programmers/helpers/RandomRanger.ts +216 -216
  127. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  128. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  129. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  130. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  131. package/src/programmers/internal/application_array.ts +37 -37
  132. package/src/programmers/internal/application_boolean.ts +17 -17
  133. package/src/programmers/internal/application_constant.ts +29 -29
  134. package/src/programmers/internal/application_default.ts +17 -17
  135. package/src/programmers/internal/application_default_string.ts +32 -32
  136. package/src/programmers/internal/application_native.ts +32 -32
  137. package/src/programmers/internal/application_number.ts +73 -73
  138. package/src/programmers/internal/application_object.ts +153 -153
  139. package/src/programmers/internal/application_schema.ts +184 -184
  140. package/src/programmers/internal/application_string.ts +45 -45
  141. package/src/programmers/internal/application_templates.ts +27 -27
  142. package/src/programmers/internal/application_tuple.ts +29 -29
  143. package/src/programmers/internal/check_array.ts +30 -30
  144. package/src/programmers/internal/check_array_length.ts +35 -35
  145. package/src/programmers/internal/check_bigint.ts +82 -82
  146. package/src/programmers/internal/check_custom.ts +33 -33
  147. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  148. package/src/programmers/internal/check_everything.ts +28 -28
  149. package/src/programmers/internal/check_native.ts +21 -21
  150. package/src/programmers/internal/check_number.ts +177 -177
  151. package/src/programmers/internal/check_object.ts +55 -55
  152. package/src/programmers/internal/check_string.ts +25 -25
  153. package/src/programmers/internal/check_string_tags.ts +9 -15
  154. package/src/programmers/internal/check_template.ts +6 -9
  155. package/src/programmers/internal/check_union_array_like.ts +272 -272
  156. package/src/programmers/internal/check_union_tuple.ts +35 -35
  157. package/src/programmers/internal/decode_union_object.ts +73 -73
  158. package/src/programmers/internal/feature_object_entries.ts +63 -63
  159. package/src/programmers/internal/get_comment_tags.ts +23 -23
  160. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  161. package/src/programmers/internal/prune_object_properties.ts +60 -60
  162. package/src/programmers/internal/random_custom.ts +30 -30
  163. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  164. package/src/programmers/internal/stringify_native.ts +8 -8
  165. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  166. package/src/programmers/internal/template_to_pattern.ts +15 -15
  167. package/src/schemas/IJsonApplication.ts +9 -9
  168. package/src/schemas/IJsonComponents.ts +26 -26
  169. package/src/schemas/IJsonSchema.ts +121 -121
  170. package/src/transform.ts +21 -21
  171. package/src/transformers/CallExpressionTransformer.ts +174 -174
  172. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  173. package/src/transformers/FileTransformer.ts +49 -49
  174. package/src/transformers/IProject.ts +11 -11
  175. package/src/transformers/ITransformOptions.ts +62 -62
  176. package/src/transformers/ImportTransformer.ts +66 -66
  177. package/src/transformers/NodeTransformer.ts +19 -19
  178. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  179. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  180. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  181. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  182. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  183. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  185. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  187. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  189. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  193. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  194. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  195. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  197. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  199. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  200. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  201. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  202. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  203. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  204. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  205. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  206. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  207. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  208. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  209. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  210. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  211. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  212. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  213. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  214. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  215. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  216. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  217. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  218. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  219. package/src/transformers/internal/GenericTransformer.ts +99 -99
  220. package/src/typings/Atomic.ts +17 -17
  221. package/src/typings/ClassProperties.ts +5 -5
  222. package/src/typings/Customizable.ts +5 -5
  223. package/src/typings/OmitNever.ts +3 -3
  224. package/src/typings/SpecialFields.ts +3 -3
  225. package/src/typings/Writable.ts +11 -11
  226. package/src/utils/ArrayUtil.ts +49 -49
  227. package/src/utils/Escaper.ts +50 -50
  228. package/src/utils/MapUtil.ts +14 -14
  229. package/src/utils/PatternUtil.ts +30 -30
  230. package/src/utils/RandomGenerator.ts +96 -96
  231. package/src/utils/Singleton.ts +17 -17
@@ -1,119 +1,119 @@
1
- import ts from "typescript";
2
-
3
- import { LiteralFactory } from "../../../factories/LiteralFactory";
4
- import { MetadataCollection } from "../../../factories/MetadataCollection";
5
- import { MetadataFactory } from "../../../factories/MetadataFactory";
6
-
7
- import { Metadata } from "../../../metadata/Metadata";
8
- import { IJsonApplication } from "../../../schemas/IJsonApplication";
9
-
10
- import { ApplicationProgrammer } from "../../../programmers/ApplicationProgrammer";
11
-
12
- import { IProject } from "../../IProject";
13
-
14
- export namespace ApplicationTransformer {
15
- export function transform(
16
- { checker }: IProject,
17
- _modulo: ts.LeftHandSideExpression,
18
- expression: ts.CallExpression,
19
- ): ts.Expression {
20
- if (!expression.typeArguments?.length)
21
- throw new Error(NO_GENERIC_ARGUMENT);
22
-
23
- //----
24
- // GET ARGUMENTS
25
- //----
26
- // VALIDATE TUPLE ARGUMENTS
27
- const top: ts.Node = expression.typeArguments[0]!;
28
- if (!ts.isTupleTypeNode(top)) return expression;
29
- else if (top.elements.some((child) => !ts.isTypeNode(child)))
30
- return expression;
31
-
32
- // GET TYPES
33
- const types: ts.Type[] = top.elements.map((child) =>
34
- checker.getTypeFromTypeNode(child as ts.TypeNode),
35
- );
36
- if (types.some((t) => t.isTypeParameter()))
37
- throw new Error(GENERIC_ARGUMENT);
38
-
39
- // ADDITIONAL PARAMETERS
40
- const purpose: "swagger" | "ajv" = get_parameter(
41
- checker,
42
- "Purpose",
43
- expression.typeArguments[1],
44
- (str) => str === "swagger" || str === "ajv",
45
- () => "swagger",
46
- );
47
- const prefix: string = get_parameter(
48
- checker,
49
- "Prefix",
50
- expression.typeArguments[2],
51
- () => true,
52
- () =>
53
- purpose === "swagger"
54
- ? "#/components/schemas"
55
- : "components#/schemas",
56
- );
57
-
58
- //----
59
- // GENERATORS
60
- //----
61
- // METADATA
62
- const collection: MetadataCollection = new MetadataCollection({
63
- replace: MetadataCollection.replace,
64
- });
65
- const metadatas: Array<Metadata> = types.map((type) =>
66
- MetadataFactory.generate(checker, collection, type, {
67
- resolve: true,
68
- constant: true,
69
- validate: (meta) => {
70
- if (meta.atomics.find((str) => str === "bigint"))
71
- throw new Error(NO_BIGIT);
72
- },
73
- }),
74
- );
75
-
76
- // APPLICATION
77
- const app: IJsonApplication = ApplicationProgrammer.generate(
78
- metadatas,
79
- {
80
- purpose,
81
- prefix,
82
- },
83
- );
84
-
85
- // RETURNS WITH LITERAL EXPRESSION
86
- return LiteralFactory.generate(app);
87
- }
88
-
89
- function get_parameter<T extends string>(
90
- checker: ts.TypeChecker,
91
- name: string,
92
- node: ts.TypeNode | undefined,
93
- predicator: (value: string) => boolean,
94
- defaulter: () => T,
95
- ): T {
96
- if (!node) return defaulter();
97
-
98
- // CHECK LITERAL TYPE
99
- const type: ts.Type = checker.getTypeFromTypeNode(node);
100
- if (!type.isLiteral())
101
- throw new Error(
102
- `Error on typia.application(): generic argument "${name}" must be constant.`,
103
- );
104
-
105
- // GET VALUE AND VALIDATE IT
106
- const value = type.value;
107
- if (typeof value !== "string" || predicator(value) === false)
108
- throw new Error(
109
- `Error on typia.application(): invalid value on generic argument "${name}".`,
110
- );
111
- return value as T;
112
- }
113
- }
114
-
115
- const NO_GENERIC_ARGUMENT =
116
- "Error on typia.application(): no generic argument.";
117
- const GENERIC_ARGUMENT =
118
- "Error on typia.application(): non-specified generic argument(s).";
119
- const NO_BIGIT = "Error on typia.application(): does not allow bigint type.";
1
+ import ts from "typescript";
2
+
3
+ import { LiteralFactory } from "../../../factories/LiteralFactory";
4
+ import { MetadataCollection } from "../../../factories/MetadataCollection";
5
+ import { MetadataFactory } from "../../../factories/MetadataFactory";
6
+
7
+ import { Metadata } from "../../../metadata/Metadata";
8
+ import { IJsonApplication } from "../../../schemas/IJsonApplication";
9
+
10
+ import { ApplicationProgrammer } from "../../../programmers/ApplicationProgrammer";
11
+
12
+ import { IProject } from "../../IProject";
13
+
14
+ export namespace ApplicationTransformer {
15
+ export function transform(
16
+ { checker }: IProject,
17
+ _modulo: ts.LeftHandSideExpression,
18
+ expression: ts.CallExpression,
19
+ ): ts.Expression {
20
+ if (!expression.typeArguments?.length)
21
+ throw new Error(NO_GENERIC_ARGUMENT);
22
+
23
+ //----
24
+ // GET ARGUMENTS
25
+ //----
26
+ // VALIDATE TUPLE ARGUMENTS
27
+ const top: ts.Node = expression.typeArguments[0]!;
28
+ if (!ts.isTupleTypeNode(top)) return expression;
29
+ else if (top.elements.some((child) => !ts.isTypeNode(child)))
30
+ return expression;
31
+
32
+ // GET TYPES
33
+ const types: ts.Type[] = top.elements.map((child) =>
34
+ checker.getTypeFromTypeNode(child as ts.TypeNode),
35
+ );
36
+ if (types.some((t) => t.isTypeParameter()))
37
+ throw new Error(GENERIC_ARGUMENT);
38
+
39
+ // ADDITIONAL PARAMETERS
40
+ const purpose: "swagger" | "ajv" = get_parameter(
41
+ checker,
42
+ "Purpose",
43
+ expression.typeArguments[1],
44
+ (str) => str === "swagger" || str === "ajv",
45
+ () => "swagger",
46
+ );
47
+ const prefix: string = get_parameter(
48
+ checker,
49
+ "Prefix",
50
+ expression.typeArguments[2],
51
+ () => true,
52
+ () =>
53
+ purpose === "swagger"
54
+ ? "#/components/schemas"
55
+ : "components#/schemas",
56
+ );
57
+
58
+ //----
59
+ // GENERATORS
60
+ //----
61
+ // METADATA
62
+ const collection: MetadataCollection = new MetadataCollection({
63
+ replace: MetadataCollection.replace,
64
+ });
65
+ const metadatas: Array<Metadata> = types.map((type) =>
66
+ MetadataFactory.generate(checker, collection, type, {
67
+ resolve: true,
68
+ constant: true,
69
+ validate: (meta) => {
70
+ if (meta.atomics.find((str) => str === "bigint"))
71
+ throw new Error(NO_BIGIT);
72
+ },
73
+ }),
74
+ );
75
+
76
+ // APPLICATION
77
+ const app: IJsonApplication = ApplicationProgrammer.generate(
78
+ metadatas,
79
+ {
80
+ purpose,
81
+ prefix,
82
+ },
83
+ );
84
+
85
+ // RETURNS WITH LITERAL EXPRESSION
86
+ return LiteralFactory.generate(app);
87
+ }
88
+
89
+ function get_parameter<T extends string>(
90
+ checker: ts.TypeChecker,
91
+ name: string,
92
+ node: ts.TypeNode | undefined,
93
+ predicator: (value: string) => boolean,
94
+ defaulter: () => T,
95
+ ): T {
96
+ if (!node) return defaulter();
97
+
98
+ // CHECK LITERAL TYPE
99
+ const type: ts.Type = checker.getTypeFromTypeNode(node);
100
+ if (!type.isLiteral())
101
+ throw new Error(
102
+ `Error on typia.application(): generic argument "${name}" must be constant.`,
103
+ );
104
+
105
+ // GET VALUE AND VALIDATE IT
106
+ const value = type.value;
107
+ if (typeof value !== "string" || predicator(value) === false)
108
+ throw new Error(
109
+ `Error on typia.application(): invalid value on generic argument "${name}".`,
110
+ );
111
+ return value as T;
112
+ }
113
+ }
114
+
115
+ const NO_GENERIC_ARGUMENT =
116
+ "Error on typia.application(): no generic argument.";
117
+ const GENERIC_ARGUMENT =
118
+ "Error on typia.application(): non-specified generic argument(s).";
119
+ const NO_BIGIT = "Error on typia.application(): does not allow bigint type.";
@@ -1,9 +1,9 @@
1
- import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace AssertCloneTransformer {
6
- export const transform = GenericTransformer.scalar("assertClone")(
7
- (project, modulo) => AssertCloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace AssertCloneTransformer {
6
+ export const transform = GenericTransformer.scalar("assertClone")(
7
+ (project, modulo) => AssertCloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace AssertPruneTransformer {
6
- export const transform = GenericTransformer.scalar("assertPrune")(
7
- (project, modulo) => AssertPruneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace AssertPruneTransformer {
6
+ export const transform = GenericTransformer.scalar("assertPrune")(
7
+ (project, modulo) => AssertPruneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CloneTransformer {
6
- export const transform = GenericTransformer.scalar("clone")(
7
- (project, modulo) => CloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CloneTransformer {
6
+ export const transform = GenericTransformer.scalar("clone")(
7
+ (project, modulo) => CloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateAssertCloneTransformer {
6
- export const transform = GenericTransformer.factory("createAssertClone")(
7
- (project, modulo) => AssertCloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateAssertCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createAssertClone")(
7
+ (project, modulo) => AssertCloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateAssertPruneTransformer {
6
- export const transform = GenericTransformer.factory("createAssertPrune")(
7
- (project, modulo) => AssertPruneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateAssertPruneTransformer {
6
+ export const transform = GenericTransformer.factory("createAssertPrune")(
7
+ (project, modulo) => AssertPruneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateCloneTransformer {
6
- export const transform = GenericTransformer.factory("createClone")(
7
- (project, modulo) => CloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createClone")(
7
+ (project, modulo) => CloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { IsCloneProgrammer } from "../../../programmers/IsCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateIsCloneTransformer {
6
- export const transform = GenericTransformer.factory("createIsClone")(
7
- (project, modulo) => IsCloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { IsCloneProgrammer } from "../../../programmers/IsCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateIsCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createIsClone")(
7
+ (project, modulo) => IsCloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateIsPruneTransformer {
6
- export const transform = GenericTransformer.factory("createIsPrune")(
7
- (project, modulo) => IsPruneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateIsPruneTransformer {
6
+ export const transform = GenericTransformer.factory("createIsPrune")(
7
+ (project, modulo) => IsPruneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { PruneProgrammer } from "../../../programmers/PruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreatePruneTransformer {
6
- export const transform = GenericTransformer.factory("createPrune")(
7
- (project, modulo) => PruneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { PruneProgrammer } from "../../../programmers/PruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreatePruneTransformer {
6
+ export const transform = GenericTransformer.factory("createPrune")(
7
+ (project, modulo) => PruneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,41 +1,41 @@
1
- import ts from "typescript";
2
-
3
- import { RandomProgrammer } from "../../../programmers/RandomProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace CreateRandomTransformer {
8
- export function transform(
9
- project: IProject,
10
- modulo: ts.LeftHandSideExpression,
11
- expression: ts.CallExpression,
12
- ): ts.Expression {
13
- // CHECK GENERIC ARGUMENT EXISTENCE
14
- if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
15
-
16
- // GET TYPE INFO
17
- const node: ts.TypeNode = expression.typeArguments[0];
18
- const type: ts.Type = project.checker.getTypeFromTypeNode(node);
19
-
20
- if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
21
-
22
- // DO TRANSFORM
23
- return RandomProgrammer.generate(
24
- {
25
- ...project,
26
- options: {
27
- ...project.options,
28
- functional: false,
29
- numeric: false,
30
- },
31
- },
32
- modulo,
33
- expression.arguments?.[0],
34
- )(type, node.getFullText().trim());
35
- }
36
- }
37
-
38
- const NOT_SPECIFIED =
39
- "Error on typia.createRandom(): generic argument is not specified.";
40
- const NO_GENERIC_ARGUMENT =
41
- "Error on typia.createRandom(): non-specified generic argument.";
1
+ import ts from "typescript";
2
+
3
+ import { RandomProgrammer } from "../../../programmers/RandomProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace CreateRandomTransformer {
8
+ export function transform(
9
+ project: IProject,
10
+ modulo: ts.LeftHandSideExpression,
11
+ expression: ts.CallExpression,
12
+ ): ts.Expression {
13
+ // CHECK GENERIC ARGUMENT EXISTENCE
14
+ if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
15
+
16
+ // GET TYPE INFO
17
+ const node: ts.TypeNode = expression.typeArguments[0];
18
+ const type: ts.Type = project.checker.getTypeFromTypeNode(node);
19
+
20
+ if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
21
+
22
+ // DO TRANSFORM
23
+ return RandomProgrammer.generate(
24
+ {
25
+ ...project,
26
+ options: {
27
+ ...project.options,
28
+ functional: false,
29
+ numeric: false,
30
+ },
31
+ },
32
+ modulo,
33
+ expression.arguments?.[0],
34
+ )(type, node.getFullText().trim());
35
+ }
36
+ }
37
+
38
+ const NOT_SPECIFIED =
39
+ "Error on typia.createRandom(): generic argument is not specified.";
40
+ const NO_GENERIC_ARGUMENT =
41
+ "Error on typia.createRandom(): non-specified generic argument.";
@@ -1,9 +1,9 @@
1
- import { ValidateCloneProgrammer } from "../../../programmers/ValidateCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateValidateCloneTransformer {
6
- export const transform = GenericTransformer.factory("createValidateClone")(
7
- (project, modulo) => ValidateCloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { ValidateCloneProgrammer } from "../../../programmers/ValidateCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateValidateCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createValidateClone")(
7
+ (project, modulo) => ValidateCloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { ValidatePruneProgrammer } from "../../../programmers/ValidatePruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateValidatePruneTransformer {
6
- export const transform = GenericTransformer.factory("createValidatePrune")(
7
- (project, modulo) => ValidatePruneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { ValidatePruneProgrammer } from "../../../programmers/ValidatePruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateValidatePruneTransformer {
6
+ export const transform = GenericTransformer.factory("createValidatePrune")(
7
+ (project, modulo) => ValidatePruneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { IsCloneProgrammer } from "../../../programmers/IsCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace IsCloneTransformer {
6
- export const transform = GenericTransformer.scalar("isClone")(
7
- (project, modulo) => IsCloneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { IsCloneProgrammer } from "../../../programmers/IsCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace IsCloneTransformer {
6
+ export const transform = GenericTransformer.scalar("isClone")(
7
+ (project, modulo) => IsCloneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace IsPruneTransformer {
6
- export const transform = GenericTransformer.scalar("isPrune")(
7
- (project, modulo) => IsPruneProgrammer.generate(project, modulo),
8
- );
9
- }
1
+ import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace IsPruneTransformer {
6
+ export const transform = GenericTransformer.scalar("isPrune")(
7
+ (project, modulo) => IsPruneProgrammer.generate(project, modulo),
8
+ );
9
+ }
@@ -1,30 +1,30 @@
1
- import ts from "typescript";
2
-
3
- import { LiteralsProgrammer } from "../../../programmers/LiteralsProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace LiteralsTransformer {
8
- export function transform(
9
- project: IProject,
10
- _modulo: ts.LeftHandSideExpression,
11
- expression: ts.CallExpression,
12
- ): ts.Expression {
13
- // CHECK GENERIC ARGUMENT EXISTENCE
14
- if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
15
-
16
- // GET TYPE INFO
17
- const node: ts.TypeNode = expression.typeArguments[0];
18
- const type: ts.Type = project.checker.getTypeFromTypeNode(node);
19
-
20
- if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
21
-
22
- // DO TRANSFORM
23
- return LiteralsProgrammer.generate(project)(type);
24
- }
25
- }
26
-
27
- const NOT_SPECIFIED =
28
- "Error on typia.literals(): generic argument is not specified.";
29
- const NO_GENERIC_ARGUMENT =
30
- "Error on typia.literals(): non-specified generic argument.";
1
+ import ts from "typescript";
2
+
3
+ import { LiteralsProgrammer } from "../../../programmers/LiteralsProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace LiteralsTransformer {
8
+ export function transform(
9
+ project: IProject,
10
+ _modulo: ts.LeftHandSideExpression,
11
+ expression: ts.CallExpression,
12
+ ): ts.Expression {
13
+ // CHECK GENERIC ARGUMENT EXISTENCE
14
+ if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
15
+
16
+ // GET TYPE INFO
17
+ const node: ts.TypeNode = expression.typeArguments[0];
18
+ const type: ts.Type = project.checker.getTypeFromTypeNode(node);
19
+
20
+ if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
21
+
22
+ // DO TRANSFORM
23
+ return LiteralsProgrammer.generate(project)(type);
24
+ }
25
+ }
26
+
27
+ const NOT_SPECIFIED =
28
+ "Error on typia.literals(): generic argument is not specified.";
29
+ const NO_GENERIC_ARGUMENT =
30
+ "Error on typia.literals(): non-specified generic argument.";