typia 3.7.5 → 3.8.0-dev.20230415

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 (235) hide show
  1. package/README.md +0 -32
  2. package/lib/executable/TypiaSetupWizard.d.ts +0 -1
  3. package/lib/executable/TypiaSetupWizard.js +26 -56
  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/metadata/Metadata.js +1 -1
  13. package/lib/metadata/Metadata.js.map +1 -1
  14. package/lib/module.js +1 -1
  15. package/lib/module.js.map +1 -1
  16. package/lib/programmers/CheckerProgrammer.js +1 -3
  17. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  18. package/lib/programmers/internal/check_string_tags.js +2 -2
  19. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  20. package/lib/programmers/internal/check_template.js +1 -1
  21. package/lib/programmers/internal/check_template.js.map +1 -1
  22. package/package.json +13 -12
  23. package/src/CustomValidatorMap.ts +126 -126
  24. package/src/IRandomGenerator.ts +33 -33
  25. package/src/IValidation.ts +21 -21
  26. package/src/Primitive.ts +104 -104
  27. package/src/TypeGuardError.ts +36 -36
  28. package/src/executable/TypiaGenerateWizard.ts +85 -85
  29. package/src/executable/TypiaSetupWizard.ts +118 -150
  30. package/src/executable/setup/ArgumentParser.ts +45 -45
  31. package/src/executable/setup/CommandExecutor.ts +8 -8
  32. package/src/executable/setup/FileRetriever.ts +22 -22
  33. package/src/executable/setup/PackageManager.ts +71 -71
  34. package/src/executable/setup/PluginConfigurator.ts +59 -59
  35. package/src/executable/typia.ts +52 -54
  36. package/src/factories/CommentFactory.ts +10 -10
  37. package/src/factories/ExpressionFactory.ts +77 -77
  38. package/src/factories/IdentifierFactory.ts +59 -81
  39. package/src/factories/LiteralFactory.ts +44 -44
  40. package/src/factories/MetadataCollection.ts +122 -122
  41. package/src/factories/MetadataFactory.ts +51 -51
  42. package/src/factories/MetadataTagFactory.ts +302 -302
  43. package/src/factories/StatementFactory.ts +60 -60
  44. package/src/factories/TemplateFactory.ts +56 -56
  45. package/src/factories/TypeFactory.ts +129 -129
  46. package/src/factories/TypiaFileFactory.ts +120 -120
  47. package/src/factories/ValueFactory.ts +12 -12
  48. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  49. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  50. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  51. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  52. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  53. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  54. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  55. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  56. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  57. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  58. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  59. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  60. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  61. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  62. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  63. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  64. package/src/functional/$any.ts +3 -3
  65. package/src/functional/$dictionary.ts +20 -20
  66. package/src/functional/$every.ts +11 -11
  67. package/src/functional/$guard.ts +35 -35
  68. package/src/functional/$is_between.ts +7 -7
  69. package/src/functional/$is_custom.ts +14 -14
  70. package/src/functional/$is_date.ts +4 -4
  71. package/src/functional/$is_datetime.ts +3 -3
  72. package/src/functional/$is_email.ts +5 -5
  73. package/src/functional/$is_ipv4.ts +5 -5
  74. package/src/functional/$is_ipv6.ts +5 -5
  75. package/src/functional/$is_url.ts +5 -5
  76. package/src/functional/$is_uuid.ts +5 -5
  77. package/src/functional/$join.ts +50 -50
  78. package/src/functional/$number.ts +12 -12
  79. package/src/functional/$report.ts +15 -15
  80. package/src/functional/$rest.ts +3 -3
  81. package/src/functional/$string.ts +37 -37
  82. package/src/functional/$tail.ts +6 -6
  83. package/src/functional/Namespace.ts +127 -127
  84. package/src/index.ts +4 -4
  85. package/src/metadata/ICommentTag.ts +4 -4
  86. package/src/metadata/IJsDocTagInfo.ts +10 -10
  87. package/src/metadata/IMetadata.ts +25 -25
  88. package/src/metadata/IMetadataApplication.ts +7 -7
  89. package/src/metadata/IMetadataConstant.ts +16 -16
  90. package/src/metadata/IMetadataEntry.ts +6 -6
  91. package/src/metadata/IMetadataObject.ts +29 -29
  92. package/src/metadata/IMetadataProperty.ts +11 -11
  93. package/src/metadata/IMetadataTag.ts +105 -105
  94. package/src/metadata/Metadata.ts +533 -534
  95. package/src/metadata/MetadataConstant.ts +3 -3
  96. package/src/metadata/MetadataObject.ts +131 -131
  97. package/src/metadata/MetadataProperty.ts +64 -64
  98. package/src/module.ts +2043 -2043
  99. package/src/programmers/ApplicationProgrammer.ts +55 -55
  100. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  101. package/src/programmers/AssertParseProgrammer.ts +65 -65
  102. package/src/programmers/AssertProgrammer.ts +284 -284
  103. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  104. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  105. package/src/programmers/CheckerProgrammer.ts +920 -922
  106. package/src/programmers/CloneProgrammer.ts +388 -388
  107. package/src/programmers/FeatureProgrammer.ts +512 -512
  108. package/src/programmers/IsCloneProgrammer.ts +80 -80
  109. package/src/programmers/IsParseProgrammer.ts +74 -74
  110. package/src/programmers/IsProgrammer.ts +206 -206
  111. package/src/programmers/IsPruneProgrammer.ts +75 -75
  112. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  113. package/src/programmers/LiteralsProgrammer.ts +65 -65
  114. package/src/programmers/PruneProgrammer.ts +343 -343
  115. package/src/programmers/RandomProgrammer.ts +413 -413
  116. package/src/programmers/StringifyProgrammer.ts +801 -801
  117. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  118. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  119. package/src/programmers/ValidateProgrammer.ts +317 -317
  120. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  121. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  122. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  123. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  124. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  125. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  126. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  127. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  128. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  129. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  130. package/src/programmers/helpers/RandomRanger.ts +216 -216
  131. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  132. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  133. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  134. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  135. package/src/programmers/internal/application_array.ts +37 -37
  136. package/src/programmers/internal/application_boolean.ts +17 -17
  137. package/src/programmers/internal/application_constant.ts +29 -29
  138. package/src/programmers/internal/application_default.ts +17 -17
  139. package/src/programmers/internal/application_default_string.ts +32 -32
  140. package/src/programmers/internal/application_native.ts +32 -32
  141. package/src/programmers/internal/application_number.ts +73 -73
  142. package/src/programmers/internal/application_object.ts +153 -153
  143. package/src/programmers/internal/application_schema.ts +184 -184
  144. package/src/programmers/internal/application_string.ts +45 -45
  145. package/src/programmers/internal/application_templates.ts +27 -27
  146. package/src/programmers/internal/application_tuple.ts +29 -29
  147. package/src/programmers/internal/check_array.ts +30 -30
  148. package/src/programmers/internal/check_array_length.ts +35 -35
  149. package/src/programmers/internal/check_bigint.ts +82 -82
  150. package/src/programmers/internal/check_custom.ts +33 -33
  151. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  152. package/src/programmers/internal/check_everything.ts +28 -28
  153. package/src/programmers/internal/check_native.ts +21 -21
  154. package/src/programmers/internal/check_number.ts +177 -177
  155. package/src/programmers/internal/check_object.ts +55 -55
  156. package/src/programmers/internal/check_string.ts +25 -25
  157. package/src/programmers/internal/check_string_tags.ts +67 -73
  158. package/src/programmers/internal/check_template.ts +56 -59
  159. package/src/programmers/internal/check_union_array_like.ts +272 -272
  160. package/src/programmers/internal/check_union_tuple.ts +35 -35
  161. package/src/programmers/internal/decode_union_object.ts +73 -73
  162. package/src/programmers/internal/feature_object_entries.ts +63 -63
  163. package/src/programmers/internal/get_comment_tags.ts +23 -23
  164. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  165. package/src/programmers/internal/prune_object_properties.ts +60 -60
  166. package/src/programmers/internal/random_custom.ts +30 -30
  167. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  168. package/src/programmers/internal/stringify_native.ts +8 -8
  169. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  170. package/src/programmers/internal/template_to_pattern.ts +15 -15
  171. package/src/schemas/IJsonApplication.ts +9 -9
  172. package/src/schemas/IJsonComponents.ts +26 -26
  173. package/src/schemas/IJsonSchema.ts +121 -121
  174. package/src/transform.ts +21 -21
  175. package/src/transformers/CallExpressionTransformer.ts +174 -174
  176. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  177. package/src/transformers/FileTransformer.ts +49 -49
  178. package/src/transformers/IProject.ts +11 -11
  179. package/src/transformers/ITransformOptions.ts +62 -62
  180. package/src/transformers/ImportTransformer.ts +66 -66
  181. package/src/transformers/NodeTransformer.ts +19 -19
  182. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  183. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  185. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  187. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  189. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  193. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  194. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  198. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  199. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  201. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  203. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  204. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  205. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  206. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  207. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  208. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  209. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  210. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  211. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  212. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  213. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  214. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  215. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  216. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  217. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  218. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  219. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  220. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  221. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  222. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  223. package/src/transformers/internal/GenericTransformer.ts +99 -99
  224. package/src/typings/Atomic.ts +17 -17
  225. package/src/typings/ClassProperties.ts +5 -5
  226. package/src/typings/Customizable.ts +5 -5
  227. package/src/typings/OmitNever.ts +3 -3
  228. package/src/typings/SpecialFields.ts +3 -3
  229. package/src/typings/Writable.ts +11 -11
  230. package/src/utils/ArrayUtil.ts +49 -49
  231. package/src/utils/Escaper.ts +50 -50
  232. package/src/utils/MapUtil.ts +14 -14
  233. package/src/utils/PatternUtil.ts +30 -30
  234. package/src/utils/RandomGenerator.ts +96 -96
  235. 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.";