typia 3.6.0-dev.20230219 → 3.6.0-dev.20230225

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 (291) hide show
  1. package/README.md +2 -2
  2. package/lib/IRandomGenerator.d.ts +8 -8
  3. package/lib/Primitive.d.ts +2 -1
  4. package/lib/executable/TypiaGenerateWizard.js +4 -4
  5. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  6. package/lib/executable/setup/ArgumentParser.js +3 -26
  7. package/lib/executable/setup/ArgumentParser.js.map +1 -1
  8. package/lib/executable/setup/FileRetriever.d.ts +5 -0
  9. package/lib/executable/setup/FileRetriever.js +109 -0
  10. package/lib/executable/setup/FileRetriever.js.map +1 -0
  11. package/lib/executable/setup/PackageManager.js +3 -17
  12. package/lib/executable/setup/PackageManager.js.map +1 -1
  13. package/lib/executable/setup/PluginConfigurator.js +2 -25
  14. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  15. package/lib/executable/typia.js +1 -1
  16. package/lib/executable/typia.js.map +1 -1
  17. package/lib/factories/TypeFactory.js +2 -1
  18. package/lib/factories/TypeFactory.js.map +1 -1
  19. package/lib/factories/TypiaFileFactory.d.ts +8 -0
  20. package/lib/{generate/TypiaGenerator.js → factories/TypiaFileFactory.js} +96 -71
  21. package/lib/factories/TypiaFileFactory.js.map +1 -0
  22. package/lib/module.d.ts +7 -7
  23. package/lib/programmers/AssertCloneProgrammer.js +2 -5
  24. package/lib/programmers/AssertCloneProgrammer.js.map +1 -1
  25. package/lib/programmers/AssertParseProgrammer.js +1 -4
  26. package/lib/programmers/AssertParseProgrammer.js.map +1 -1
  27. package/lib/programmers/AssertProgrammer.js +13 -12
  28. package/lib/programmers/AssertProgrammer.js.map +1 -1
  29. package/lib/programmers/AssertPruneProgrammer.js +1 -2
  30. package/lib/programmers/AssertPruneProgrammer.js.map +1 -1
  31. package/lib/programmers/AssertStringifyProgrammer.js +1 -2
  32. package/lib/programmers/AssertStringifyProgrammer.js.map +1 -1
  33. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  34. package/lib/programmers/CheckerProgrammer.js +16 -16
  35. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  36. package/lib/programmers/CloneProgrammer.d.ts +1 -1
  37. package/lib/programmers/CloneProgrammer.js +26 -18
  38. package/lib/programmers/CloneProgrammer.js.map +1 -1
  39. package/lib/programmers/FeatureProgrammer.d.ts +9 -5
  40. package/lib/programmers/FeatureProgrammer.js +39 -32
  41. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  42. package/lib/programmers/IsCloneProgrammer.js +1 -4
  43. package/lib/programmers/IsCloneProgrammer.js.map +1 -1
  44. package/lib/programmers/IsParseProgrammer.js +1 -4
  45. package/lib/programmers/IsParseProgrammer.js.map +1 -1
  46. package/lib/programmers/IsProgrammer.d.ts +1 -1
  47. package/lib/programmers/IsProgrammer.js +1 -1
  48. package/lib/programmers/IsProgrammer.js.map +1 -1
  49. package/lib/programmers/IsPruneProgrammer.js +1 -2
  50. package/lib/programmers/IsPruneProgrammer.js.map +1 -1
  51. package/lib/programmers/IsStringifyProgrammer.js +1 -2
  52. package/lib/programmers/IsStringifyProgrammer.js.map +1 -1
  53. package/lib/programmers/PruneProgrammer.d.ts +1 -1
  54. package/lib/programmers/PruneProgrammer.js +17 -12
  55. package/lib/programmers/PruneProgrammer.js.map +1 -1
  56. package/lib/programmers/RandomProgrammer.js +64 -58
  57. package/lib/programmers/RandomProgrammer.js.map +1 -1
  58. package/lib/programmers/StringifyProgrammer.d.ts +1 -1
  59. package/lib/programmers/StringifyProgrammer.js +17 -12
  60. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  61. package/lib/programmers/ValidateCloneProgrammer.js +1 -6
  62. package/lib/programmers/ValidateCloneProgrammer.js.map +1 -1
  63. package/lib/programmers/ValidateParseProgrammer.js +1 -6
  64. package/lib/programmers/ValidateParseProgrammer.js.map +1 -1
  65. package/lib/programmers/ValidateProgrammer.js +10 -15
  66. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  67. package/lib/programmers/ValidatePruneProgrammer.js +1 -4
  68. package/lib/programmers/ValidatePruneProgrammer.js.map +1 -1
  69. package/lib/programmers/ValidateStringifyProgrammer.js +2 -5
  70. package/lib/programmers/ValidateStringifyProgrammer.js.map +1 -1
  71. package/lib/programmers/helpers/CloneJoiner.js +5 -4
  72. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  73. package/lib/programmers/helpers/FunctionImporeter.d.ts +4 -0
  74. package/lib/programmers/helpers/FunctionImporeter.js +12 -0
  75. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  76. package/lib/programmers/helpers/RandomJoiner.d.ts +2 -2
  77. package/lib/programmers/helpers/RandomJoiner.js +60 -49
  78. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  79. package/lib/programmers/helpers/RandomRanger.d.ts +1 -1
  80. package/lib/programmers/helpers/RandomRanger.js +22 -20
  81. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  82. package/lib/programmers/internal/check_union_array_like.js +6 -2
  83. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  84. package/lib/programmers/internal/stringify_dynamic_properties.js +1 -1
  85. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  86. package/lib/transformers/ImportTransformer.d.ts +4 -0
  87. package/lib/transformers/ImportTransformer.js +51 -0
  88. package/lib/transformers/ImportTransformer.js.map +1 -0
  89. package/package.json +2 -2
  90. package/src/IRandomGenerator.ts +16 -16
  91. package/src/IValidation.ts +21 -21
  92. package/src/Primitive.ts +104 -82
  93. package/src/TypeGuardError.ts +36 -36
  94. package/src/executable/TypiaGenerateWizard.ts +87 -86
  95. package/src/executable/TypiaSetupWizard.ts +142 -142
  96. package/src/executable/setup/ArgumentParser.ts +91 -89
  97. package/src/executable/setup/CommandExecutor.ts +8 -8
  98. package/src/executable/setup/FileRetriever.ts +33 -0
  99. package/src/executable/setup/PackageManager.ts +92 -99
  100. package/src/executable/setup/PluginConfigurator.ts +99 -97
  101. package/src/executable/typia.ts +38 -38
  102. package/src/factories/CommentFactory.ts +10 -10
  103. package/src/factories/ExpressionFactory.ts +77 -77
  104. package/src/factories/IdentifierFactory.ts +73 -73
  105. package/src/factories/LiteralFactory.ts +44 -44
  106. package/src/factories/MetadataCollection.ts +122 -122
  107. package/src/factories/MetadataFactory.ts +51 -51
  108. package/src/factories/MetadataTagFactory.ts +265 -265
  109. package/src/factories/StatementFactory.ts +60 -60
  110. package/src/factories/TemplateFactory.ts +56 -56
  111. package/src/factories/TypeFactory.ts +129 -129
  112. package/src/factories/TypiaFileFactory.ts +117 -0
  113. package/src/factories/ValueFactory.ts +12 -12
  114. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  115. package/src/factories/internal/metadata/emplace_metadata_object.ts +140 -140
  116. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  117. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  118. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  119. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  120. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  121. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  122. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  123. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  124. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  125. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  126. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  127. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  128. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  129. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  130. package/src/functional/$any.ts +3 -3
  131. package/src/functional/$every.ts +11 -11
  132. package/src/functional/$guard.ts +35 -35
  133. package/src/functional/$is_between.ts +7 -7
  134. package/src/functional/$is_email.ts +5 -5
  135. package/src/functional/$is_ipv4.ts +5 -5
  136. package/src/functional/$is_ipv6.ts +5 -5
  137. package/src/functional/$is_url.ts +5 -5
  138. package/src/functional/$is_uuid.ts +5 -5
  139. package/src/functional/$join.ts +50 -50
  140. package/src/functional/$number.ts +12 -12
  141. package/src/functional/$report.ts +15 -15
  142. package/src/functional/$rest.ts +3 -3
  143. package/src/functional/$string.ts +37 -37
  144. package/src/functional/$tail.ts +6 -6
  145. package/src/functional/Namespace.ts +121 -121
  146. package/src/index.ts +4 -4
  147. package/src/metadata/IJsDocTagInfo.ts +10 -10
  148. package/src/metadata/IMetadata.ts +25 -25
  149. package/src/metadata/IMetadataApplication.ts +7 -7
  150. package/src/metadata/IMetadataConstant.ts +16 -16
  151. package/src/metadata/IMetadataEntry.ts +6 -6
  152. package/src/metadata/IMetadataObject.ts +29 -29
  153. package/src/metadata/IMetadataProperty.ts +11 -11
  154. package/src/metadata/IMetadataTag.ts +113 -113
  155. package/src/metadata/Metadata.ts +534 -534
  156. package/src/metadata/MetadataConstant.ts +3 -3
  157. package/src/metadata/MetadataObject.ts +131 -131
  158. package/src/metadata/MetadataProperty.ts +64 -64
  159. package/src/module.ts +1946 -1946
  160. package/src/programmers/ApplicationProgrammer.ts +55 -55
  161. package/src/programmers/AssertCloneProgrammer.ts +71 -79
  162. package/src/programmers/AssertParseProgrammer.ts +66 -67
  163. package/src/programmers/AssertProgrammer.ts +232 -248
  164. package/src/programmers/AssertPruneProgrammer.ts +67 -66
  165. package/src/programmers/AssertStringifyProgrammer.ts +71 -75
  166. package/src/programmers/CheckerProgrammer.ts +892 -883
  167. package/src/programmers/CloneProgrammer.ts +387 -365
  168. package/src/programmers/FeatureProgrammer.ts +505 -490
  169. package/src/programmers/IsCloneProgrammer.ts +80 -81
  170. package/src/programmers/IsParseProgrammer.ts +75 -76
  171. package/src/programmers/IsProgrammer.ts +200 -200
  172. package/src/programmers/IsPruneProgrammer.ts +75 -77
  173. package/src/programmers/IsStringifyProgrammer.ts +80 -82
  174. package/src/programmers/PruneProgrammer.ts +341 -330
  175. package/src/programmers/RandomProgrammer.ts +392 -381
  176. package/src/programmers/StringifyProgrammer.ts +795 -784
  177. package/src/programmers/ValidateCloneProgrammer.ts +91 -94
  178. package/src/programmers/ValidateParseProgrammer.ts +70 -73
  179. package/src/programmers/ValidateProgrammer.ts +267 -277
  180. package/src/programmers/ValidatePruneProgrammer.ts +84 -85
  181. package/src/programmers/ValidateStringifyProgrammer.ts +88 -92
  182. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  183. package/src/programmers/helpers/CloneJoiner.ts +134 -124
  184. package/src/programmers/helpers/FunctionImporeter.ts +55 -40
  185. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  186. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  187. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  188. package/src/programmers/helpers/RandomJoiner.ts +149 -140
  189. package/src/programmers/helpers/RandomRanger.ts +216 -215
  190. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  191. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  192. package/src/programmers/helpers/UnionExplorer.ts +274 -274
  193. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  194. package/src/programmers/internal/application_array.ts +37 -37
  195. package/src/programmers/internal/application_boolean.ts +17 -17
  196. package/src/programmers/internal/application_constant.ts +29 -29
  197. package/src/programmers/internal/application_default.ts +17 -17
  198. package/src/programmers/internal/application_default_string.ts +32 -32
  199. package/src/programmers/internal/application_native.ts +29 -29
  200. package/src/programmers/internal/application_number.ts +70 -70
  201. package/src/programmers/internal/application_object.ts +153 -153
  202. package/src/programmers/internal/application_schema.ts +184 -184
  203. package/src/programmers/internal/application_string.ts +41 -41
  204. package/src/programmers/internal/application_templates.ts +27 -27
  205. package/src/programmers/internal/application_tuple.ts +29 -29
  206. package/src/programmers/internal/check_array.ts +22 -22
  207. package/src/programmers/internal/check_array_length.ts +44 -44
  208. package/src/programmers/internal/check_bigint.ts +64 -64
  209. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  210. package/src/programmers/internal/check_everything.ts +28 -28
  211. package/src/programmers/internal/check_native.ts +21 -21
  212. package/src/programmers/internal/check_number.ts +145 -145
  213. package/src/programmers/internal/check_object.ts +48 -48
  214. package/src/programmers/internal/check_string.ts +24 -24
  215. package/src/programmers/internal/check_string_tags.ts +63 -63
  216. package/src/programmers/internal/check_template.ts +50 -50
  217. package/src/programmers/internal/check_union_array_like.ts +260 -250
  218. package/src/programmers/internal/check_union_tuple.ts +33 -33
  219. package/src/programmers/internal/decode_union_object.ts +73 -73
  220. package/src/programmers/internal/feature_object_entries.ts +59 -59
  221. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  222. package/src/programmers/internal/prune_object_properties.ts +60 -60
  223. package/src/programmers/internal/stringify_dynamic_properties.ts +165 -164
  224. package/src/programmers/internal/stringify_native.ts +8 -8
  225. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  226. package/src/programmers/internal/template_to_pattern.ts +15 -15
  227. package/src/schemas/IJsonApplication.ts +9 -9
  228. package/src/schemas/IJsonComponents.ts +26 -26
  229. package/src/schemas/IJsonSchema.ts +127 -127
  230. package/src/transform.ts +21 -21
  231. package/src/transformers/CallExpressionTransformer.ts +172 -172
  232. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  233. package/src/transformers/FileTransformer.ts +49 -49
  234. package/src/transformers/IProject.ts +11 -11
  235. package/src/transformers/ITransformOptions.ts +62 -62
  236. package/src/transformers/ImportTransformer.ts +60 -0
  237. package/src/transformers/NodeTransformer.ts +19 -19
  238. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +120 -120
  239. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +38 -38
  240. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +38 -38
  241. package/src/transformers/features/miscellaneous/CloneTransformer.ts +46 -46
  242. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +32 -32
  243. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +32 -32
  244. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +31 -31
  245. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +32 -32
  246. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +32 -32
  247. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +31 -31
  248. package/src/transformers/features/miscellaneous/CreateRandomGenerator.ts +39 -39
  249. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +32 -32
  250. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +32 -32
  251. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +38 -38
  252. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +38 -38
  253. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  254. package/src/transformers/features/miscellaneous/PruneTransformer.ts +46 -46
  255. package/src/transformers/features/miscellaneous/RandomTransformer.ts +45 -45
  256. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +38 -38
  257. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +38 -38
  258. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
  259. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
  260. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
  261. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
  262. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
  263. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
  264. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
  265. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
  266. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
  267. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
  268. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
  269. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
  270. package/src/transformers/features/stringifiers/StringifyTransformer.ts +46 -46
  271. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
  272. package/src/transformers/features/validators/AssertTransformer.ts +43 -43
  273. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
  274. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
  275. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
  276. package/src/transformers/features/validators/IsTransformer.ts +43 -43
  277. package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
  278. package/src/typings/Atomic.ts +17 -17
  279. package/src/typings/ClassProperties.ts +5 -5
  280. package/src/typings/OmitNever.ts +3 -3
  281. package/src/typings/SpecialFields.ts +3 -3
  282. package/src/typings/Writable.ts +11 -11
  283. package/src/utils/ArrayUtil.ts +49 -49
  284. package/src/utils/Escaper.ts +50 -50
  285. package/src/utils/MapUtil.ts +14 -14
  286. package/src/utils/PatternUtil.ts +30 -30
  287. package/src/utils/RandomGenerator.ts +90 -90
  288. package/src/utils/Singleton.ts +17 -17
  289. package/lib/generate/TypiaGenerator.d.ts +0 -8
  290. package/lib/generate/TypiaGenerator.js.map +0 -1
  291. package/src/generate/TypiaGenerator.ts +0 -126
@@ -1,120 +1,120 @@
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(ErrorMessages.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(ErrorMessages.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(ErrorMessages.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 enum ErrorMessages {
116
- NO_GENERIC_ARGUMENT = "Error on typia.application(): no generic argument.",
117
- GENERIC_ARGUMENT = "Error on typia.application(): non-specified generic argument(s).",
118
- NO_BIGIT = "Error on typia.application(): does not allow bigint type.",
119
- NO_ZERO_LENGTH_TUPLE = "Error on typia.application(): swagger does not support zero length tuple type.",
120
- }
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(ErrorMessages.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(ErrorMessages.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(ErrorMessages.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 enum ErrorMessages {
116
+ NO_GENERIC_ARGUMENT = "Error on typia.application(): no generic argument.",
117
+ GENERIC_ARGUMENT = "Error on typia.application(): non-specified generic argument(s).",
118
+ NO_BIGIT = "Error on typia.application(): does not allow bigint type.",
119
+ NO_ZERO_LENGTH_TUPLE = "Error on typia.application(): swagger does not support zero length tuple type.",
120
+ }
@@ -1,38 +1,38 @@
1
- import ts from "typescript";
2
-
3
- import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace AssertCloneTransformer {
8
- export function transform(
9
- project: IProject,
10
- modulo: ts.LeftHandSideExpression,
11
- expression: ts.CallExpression,
12
- ): ts.Expression {
13
- if (expression.arguments.length !== 1)
14
- throw new Error(ErrorMessages.NO_INPUT_VALUE);
15
-
16
- // GET TYPE INFO
17
- const type: ts.Type =
18
- expression.typeArguments && expression.typeArguments[0]
19
- ? project.checker.getTypeFromTypeNode(
20
- expression.typeArguments[0],
21
- )
22
- : project.checker.getTypeAtLocation(expression.arguments[0]!);
23
- if (type.isTypeParameter())
24
- throw new Error(ErrorMessages.GENERIC_ARGUMENT);
25
-
26
- // DO TRANSFORM
27
- return ts.factory.createCallExpression(
28
- AssertCloneProgrammer.generate(project, modulo)(type),
29
- undefined,
30
- [expression.arguments[0]!],
31
- );
32
- }
33
- }
34
-
35
- const enum ErrorMessages {
36
- NO_INPUT_VALUE = "Error on typia.assertClone(): no input value.",
37
- GENERIC_ARGUMENT = "Error on typia.assertClone(): non-specified generic argument.",
38
- }
1
+ import ts from "typescript";
2
+
3
+ import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace AssertCloneTransformer {
8
+ export function transform(
9
+ project: IProject,
10
+ modulo: ts.LeftHandSideExpression,
11
+ expression: ts.CallExpression,
12
+ ): ts.Expression {
13
+ if (expression.arguments.length !== 1)
14
+ throw new Error(ErrorMessages.NO_INPUT_VALUE);
15
+
16
+ // GET TYPE INFO
17
+ const type: ts.Type =
18
+ expression.typeArguments && expression.typeArguments[0]
19
+ ? project.checker.getTypeFromTypeNode(
20
+ expression.typeArguments[0],
21
+ )
22
+ : project.checker.getTypeAtLocation(expression.arguments[0]!);
23
+ if (type.isTypeParameter())
24
+ throw new Error(ErrorMessages.GENERIC_ARGUMENT);
25
+
26
+ // DO TRANSFORM
27
+ return ts.factory.createCallExpression(
28
+ AssertCloneProgrammer.generate(project, modulo)(type),
29
+ undefined,
30
+ [expression.arguments[0]!],
31
+ );
32
+ }
33
+ }
34
+
35
+ const enum ErrorMessages {
36
+ NO_INPUT_VALUE = "Error on typia.assertClone(): no input value.",
37
+ GENERIC_ARGUMENT = "Error on typia.assertClone(): non-specified generic argument.",
38
+ }
@@ -1,38 +1,38 @@
1
- import ts from "typescript";
2
-
3
- import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace AssertPruneTransformer {
8
- export function transform(
9
- project: IProject,
10
- modulo: ts.LeftHandSideExpression,
11
- expression: ts.CallExpression,
12
- ): ts.Expression {
13
- if (expression.arguments.length !== 1)
14
- throw new Error(ErrorMessages.NO_INPUT_VALUE);
15
-
16
- // GET TYPE INFO
17
- const type: ts.Type =
18
- expression.typeArguments && expression.typeArguments[0]
19
- ? project.checker.getTypeFromTypeNode(
20
- expression.typeArguments[0],
21
- )
22
- : project.checker.getTypeAtLocation(expression.arguments[0]!);
23
- if (type.isTypeParameter())
24
- throw new Error(ErrorMessages.GENERIC_ARGUMENT);
25
-
26
- // DO TRANSFORM
27
- return ts.factory.createCallExpression(
28
- AssertPruneProgrammer.generate(project, modulo)(type),
29
- undefined,
30
- [expression.arguments[0]!],
31
- );
32
- }
33
- }
34
-
35
- const enum ErrorMessages {
36
- NO_INPUT_VALUE = "Error on typia.assertPrune(): no input value.",
37
- GENERIC_ARGUMENT = "Error on typia.assertPrune(): non-specified generic argument.",
38
- }
1
+ import ts from "typescript";
2
+
3
+ import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace AssertPruneTransformer {
8
+ export function transform(
9
+ project: IProject,
10
+ modulo: ts.LeftHandSideExpression,
11
+ expression: ts.CallExpression,
12
+ ): ts.Expression {
13
+ if (expression.arguments.length !== 1)
14
+ throw new Error(ErrorMessages.NO_INPUT_VALUE);
15
+
16
+ // GET TYPE INFO
17
+ const type: ts.Type =
18
+ expression.typeArguments && expression.typeArguments[0]
19
+ ? project.checker.getTypeFromTypeNode(
20
+ expression.typeArguments[0],
21
+ )
22
+ : project.checker.getTypeAtLocation(expression.arguments[0]!);
23
+ if (type.isTypeParameter())
24
+ throw new Error(ErrorMessages.GENERIC_ARGUMENT);
25
+
26
+ // DO TRANSFORM
27
+ return ts.factory.createCallExpression(
28
+ AssertPruneProgrammer.generate(project, modulo)(type),
29
+ undefined,
30
+ [expression.arguments[0]!],
31
+ );
32
+ }
33
+ }
34
+
35
+ const enum ErrorMessages {
36
+ NO_INPUT_VALUE = "Error on typia.assertPrune(): no input value.",
37
+ GENERIC_ARGUMENT = "Error on typia.assertPrune(): non-specified generic argument.",
38
+ }
@@ -1,46 +1,46 @@
1
- import ts from "typescript";
2
-
3
- import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace CloneTransformer {
8
- export function transform(
9
- project: IProject,
10
- modulo: ts.LeftHandSideExpression,
11
- expression: ts.CallExpression,
12
- ): ts.Expression {
13
- if (expression.arguments.length !== 1)
14
- throw new Error(ErrorMessages.NO_INPUT_VALUE);
15
-
16
- const type: ts.Type =
17
- expression.typeArguments && expression.typeArguments[0]
18
- ? project.checker.getTypeFromTypeNode(
19
- expression.typeArguments[0],
20
- )
21
- : project.checker.getTypeAtLocation(expression.arguments[0]!);
22
- if (type.isTypeParameter())
23
- throw new Error(ErrorMessages.GENERIC_ARGUMENT);
24
-
25
- return ts.factory.createCallExpression(
26
- CloneProgrammer.generate(
27
- {
28
- ...project,
29
- options: {
30
- ...project.options,
31
- functional: false,
32
- numeric: false,
33
- },
34
- },
35
- modulo,
36
- )(type),
37
- undefined,
38
- [expression.arguments[0]!],
39
- );
40
- }
41
- }
42
-
43
- const enum ErrorMessages {
44
- NO_INPUT_VALUE = "Error on typia.clone(): no input value.",
45
- GENERIC_ARGUMENT = "Error on typia.clone(): non-specified generic argument.",
46
- }
1
+ import ts from "typescript";
2
+
3
+ import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace CloneTransformer {
8
+ export function transform(
9
+ project: IProject,
10
+ modulo: ts.LeftHandSideExpression,
11
+ expression: ts.CallExpression,
12
+ ): ts.Expression {
13
+ if (expression.arguments.length !== 1)
14
+ throw new Error(ErrorMessages.NO_INPUT_VALUE);
15
+
16
+ const type: ts.Type =
17
+ expression.typeArguments && expression.typeArguments[0]
18
+ ? project.checker.getTypeFromTypeNode(
19
+ expression.typeArguments[0],
20
+ )
21
+ : project.checker.getTypeAtLocation(expression.arguments[0]!);
22
+ if (type.isTypeParameter())
23
+ throw new Error(ErrorMessages.GENERIC_ARGUMENT);
24
+
25
+ return ts.factory.createCallExpression(
26
+ CloneProgrammer.generate(
27
+ {
28
+ ...project,
29
+ options: {
30
+ ...project.options,
31
+ functional: false,
32
+ numeric: false,
33
+ },
34
+ },
35
+ modulo,
36
+ )(type),
37
+ undefined,
38
+ [expression.arguments[0]!],
39
+ );
40
+ }
41
+ }
42
+
43
+ const enum ErrorMessages {
44
+ NO_INPUT_VALUE = "Error on typia.clone(): no input value.",
45
+ GENERIC_ARGUMENT = "Error on typia.clone(): non-specified generic argument.",
46
+ }
@@ -1,32 +1,32 @@
1
- import ts from "typescript";
2
-
3
- import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace CreateAssertCloneTransformer {
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])
15
- throw new Error(ErrorMessages.NOT_SPECIFIED);
16
-
17
- // GET TYPE INFO
18
- const type: ts.Type = project.checker.getTypeFromTypeNode(
19
- expression.typeArguments[0],
20
- );
21
- if (type.isTypeParameter())
22
- throw new Error(ErrorMessages.GENERIC_ARGUMENT);
23
-
24
- // DO TRANSFORM
25
- return AssertCloneProgrammer.generate(project, modulo)(type);
26
- }
27
- }
28
-
29
- const enum ErrorMessages {
30
- NOT_SPECIFIED = "Error on typia.assertClone(): generic argument is not specified.",
31
- GENERIC_ARGUMENT = "Error on typia.assertClone(): non-specified generic argument.",
32
- }
1
+ import ts from "typescript";
2
+
3
+ import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace CreateAssertCloneTransformer {
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])
15
+ throw new Error(ErrorMessages.NOT_SPECIFIED);
16
+
17
+ // GET TYPE INFO
18
+ const type: ts.Type = project.checker.getTypeFromTypeNode(
19
+ expression.typeArguments[0],
20
+ );
21
+ if (type.isTypeParameter())
22
+ throw new Error(ErrorMessages.GENERIC_ARGUMENT);
23
+
24
+ // DO TRANSFORM
25
+ return AssertCloneProgrammer.generate(project, modulo)(type);
26
+ }
27
+ }
28
+
29
+ const enum ErrorMessages {
30
+ NOT_SPECIFIED = "Error on typia.assertClone(): generic argument is not specified.",
31
+ GENERIC_ARGUMENT = "Error on typia.assertClone(): non-specified generic argument.",
32
+ }
@@ -1,32 +1,32 @@
1
- import ts from "typescript";
2
-
3
- import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace CreateAssertPruneTransformer {
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])
15
- throw new Error(ErrorMessages.NOT_SPECIFIED);
16
-
17
- // GET TYPE INFO
18
- const type: ts.Type = project.checker.getTypeFromTypeNode(
19
- expression.typeArguments[0],
20
- );
21
- if (type.isTypeParameter())
22
- throw new Error(ErrorMessages.GENERIC_ARGUMENT);
23
-
24
- // DO TRANSFORM
25
- return AssertPruneProgrammer.generate(project, modulo)(type);
26
- }
27
- }
28
-
29
- const enum ErrorMessages {
30
- NOT_SPECIFIED = "Error on typia.assertPrune(): generic argument is not specified.",
31
- GENERIC_ARGUMENT = "Error on typia.assertPrune(): non-specified generic argument.",
32
- }
1
+ import ts from "typescript";
2
+
3
+ import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace CreateAssertPruneTransformer {
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])
15
+ throw new Error(ErrorMessages.NOT_SPECIFIED);
16
+
17
+ // GET TYPE INFO
18
+ const type: ts.Type = project.checker.getTypeFromTypeNode(
19
+ expression.typeArguments[0],
20
+ );
21
+ if (type.isTypeParameter())
22
+ throw new Error(ErrorMessages.GENERIC_ARGUMENT);
23
+
24
+ // DO TRANSFORM
25
+ return AssertPruneProgrammer.generate(project, modulo)(type);
26
+ }
27
+ }
28
+
29
+ const enum ErrorMessages {
30
+ NOT_SPECIFIED = "Error on typia.assertPrune(): generic argument is not specified.",
31
+ GENERIC_ARGUMENT = "Error on typia.assertPrune(): non-specified generic argument.",
32
+ }