typia 5.0.4 → 5.0.5-dev.20230921

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 +1 -1
  2. package/package.json +1 -1
  3. package/src/IRandomGenerator.ts +35 -35
  4. package/src/IValidation.ts +21 -21
  5. package/src/Primitive.ts +135 -135
  6. package/src/Resolved.ts +116 -116
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +85 -85
  9. package/src/executable/TypiaSetupWizard.ts +153 -153
  10. package/src/executable/setup/ArgumentParser.ts +45 -45
  11. package/src/executable/setup/CommandExecutor.ts +8 -8
  12. package/src/executable/setup/FileRetriever.ts +22 -22
  13. package/src/executable/setup/PackageManager.ts +71 -71
  14. package/src/executable/setup/PluginConfigurator.ts +70 -70
  15. package/src/executable/typia.ts +52 -52
  16. package/src/factories/CommentFactory.ts +84 -84
  17. package/src/factories/ExpressionFactory.ts +159 -159
  18. package/src/factories/IdentifierFactory.ts +74 -74
  19. package/src/factories/JsonMetadataFactory.ts +43 -43
  20. package/src/factories/LiteralFactory.ts +47 -47
  21. package/src/factories/MetadataCollection.ts +269 -269
  22. package/src/factories/MetadataCommentTagFactory.ts +629 -629
  23. package/src/factories/MetadataFactory.ts +214 -214
  24. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  25. package/src/factories/NumericRangeFactory.ts +33 -33
  26. package/src/factories/ProtobufFactory.ts +272 -272
  27. package/src/factories/StatementFactory.ts +72 -72
  28. package/src/factories/TemplateFactory.ts +58 -58
  29. package/src/factories/TypeFactory.ts +119 -119
  30. package/src/factories/ValueFactory.ts +12 -12
  31. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  32. package/src/factories/internal/metadata/emend_metadata_atomics.ts +40 -40
  33. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  34. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +41 -41
  35. package/src/factories/internal/metadata/emplace_metadata_object.ts +150 -150
  36. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +60 -60
  37. package/src/factories/internal/metadata/explore_metadata.ts +32 -32
  38. package/src/factories/internal/metadata/iterate_metadata.ts +101 -101
  39. package/src/factories/internal/metadata/iterate_metadata_alias.ts +35 -35
  40. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  41. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  42. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  43. package/src/factories/internal/metadata/iterate_metadata_collection.ts +141 -141
  44. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +197 -197
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -210
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +44 -44
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +42 -42
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_template.ts +47 -47
  54. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  55. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  56. package/src/functional/$ProtobufReader.ts +201 -201
  57. package/src/functional/$ProtobufSizer.ts +147 -147
  58. package/src/functional/$ProtobufWriter.ts +151 -151
  59. package/src/functional/$any.ts +4 -4
  60. package/src/functional/$clone.ts +4 -4
  61. package/src/functional/$dictionary.ts +25 -25
  62. package/src/functional/$every.ts +11 -11
  63. package/src/functional/$guard.ts +35 -35
  64. package/src/functional/$is_between.ts +2 -2
  65. package/src/functional/$join.ts +46 -46
  66. package/src/functional/$number.ts +13 -13
  67. package/src/functional/$report.ts +15 -15
  68. package/src/functional/$rest.ts +3 -3
  69. package/src/functional/$string.ts +50 -50
  70. package/src/functional/$strlen.ts +7 -7
  71. package/src/functional/$tail.ts +5 -5
  72. package/src/functional/$varint.ts +130 -130
  73. package/src/functional/$zigzag.ts +39 -39
  74. package/src/functional/IProtobufWriter.ts +18 -18
  75. package/src/functional/Namespace.ts +133 -133
  76. package/src/index.ts +4 -4
  77. package/src/json.ts +648 -648
  78. package/src/misc.ts +651 -651
  79. package/src/module.ts +656 -656
  80. package/src/programmers/AssertProgrammer.ts +317 -317
  81. package/src/programmers/CheckerProgrammer.ts +1137 -1137
  82. package/src/programmers/FeatureProgrammer.ts +478 -478
  83. package/src/programmers/IsProgrammer.ts +252 -252
  84. package/src/programmers/RandomProgrammer.ts +878 -878
  85. package/src/programmers/TypiaProgrammer.ts +163 -163
  86. package/src/programmers/ValidateProgrammer.ts +346 -346
  87. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  88. package/src/programmers/helpers/CloneJoiner.ts +144 -144
  89. package/src/programmers/helpers/FunctionImporeter.ts +91 -91
  90. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  91. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  92. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  93. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  94. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  95. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  96. package/src/programmers/helpers/RandomJoiner.ts +151 -151
  97. package/src/programmers/helpers/RandomRanger.ts +173 -173
  98. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  99. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  100. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  101. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  102. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  103. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  104. package/src/programmers/internal/application_alias.ts +65 -65
  105. package/src/programmers/internal/application_array.ts +53 -53
  106. package/src/programmers/internal/application_boolean.ts +15 -15
  107. package/src/programmers/internal/application_constant.ts +26 -26
  108. package/src/programmers/internal/application_default.ts +17 -17
  109. package/src/programmers/internal/application_default_string.ts +37 -37
  110. package/src/programmers/internal/application_escaped.ts +55 -55
  111. package/src/programmers/internal/application_native.ts +39 -39
  112. package/src/programmers/internal/application_number.ts +88 -88
  113. package/src/programmers/internal/application_object.ts +162 -162
  114. package/src/programmers/internal/application_schema.ts +175 -175
  115. package/src/programmers/internal/application_string.ts +51 -51
  116. package/src/programmers/internal/application_templates.ts +25 -25
  117. package/src/programmers/internal/application_tuple.ts +58 -58
  118. package/src/programmers/internal/check_array_length.ts +41 -41
  119. package/src/programmers/internal/check_bigint.ts +45 -45
  120. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  121. package/src/programmers/internal/check_everything.ts +28 -28
  122. package/src/programmers/internal/check_native.ts +21 -21
  123. package/src/programmers/internal/check_number.ts +105 -105
  124. package/src/programmers/internal/check_object.ts +55 -55
  125. package/src/programmers/internal/check_string.ts +45 -45
  126. package/src/programmers/internal/check_template.ts +61 -61
  127. package/src/programmers/internal/check_union_array_like.ts +323 -323
  128. package/src/programmers/internal/decode_union_object.ts +84 -84
  129. package/src/programmers/internal/feature_object_entries.ts +58 -58
  130. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  131. package/src/programmers/internal/prune_object_properties.ts +60 -60
  132. package/src/programmers/internal/random_custom.ts +37 -37
  133. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  134. package/src/programmers/internal/stringify_native.ts +7 -7
  135. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  136. package/src/programmers/internal/template_to_pattern.ts +15 -15
  137. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  138. package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
  139. package/src/programmers/json/JsonAssertParseProgrammer.ts +71 -71
  140. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  141. package/src/programmers/json/JsonIsParseProgrammer.ts +77 -77
  142. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  143. package/src/programmers/json/JsonStringifyProgrammer.ts +964 -964
  144. package/src/programmers/json/JsonValidateParseProgrammer.ts +68 -68
  145. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  146. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  147. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  148. package/src/programmers/misc/MiscCloneProgrammer.ts +774 -774
  149. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  150. package/src/programmers/misc/MiscIsPruneProgrammer.ts +73 -73
  151. package/src/programmers/misc/MiscLiteralsProgrammer.ts +69 -69
  152. package/src/programmers/misc/MiscPruneProgrammer.ts +550 -550
  153. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  154. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  155. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  156. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  157. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +655 -655
  158. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +883 -883
  159. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -85
  160. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  161. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +165 -165
  162. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  163. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  164. package/src/protobuf.ts +881 -881
  165. package/src/schemas/json/IJsonApplication.ts +8 -8
  166. package/src/schemas/json/IJsonComponents.ts +33 -33
  167. package/src/schemas/json/IJsonSchema.ts +110 -110
  168. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  169. package/src/schemas/metadata/IMetadata.ts +34 -34
  170. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  171. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  172. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  173. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  174. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  175. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  176. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  177. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  178. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  179. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  180. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  181. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  182. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  183. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  184. package/src/schemas/metadata/IMetadataTypeTag.ts +8 -8
  185. package/src/schemas/metadata/Metadata.ts +685 -685
  186. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  187. package/src/schemas/metadata/MetadataArray.ts +49 -49
  188. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  189. package/src/schemas/metadata/MetadataAtomic.ts +42 -42
  190. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  191. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  192. package/src/schemas/metadata/MetadataObject.ts +139 -139
  193. package/src/schemas/metadata/MetadataProperty.ts +59 -59
  194. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  195. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  196. package/src/tags/ExclusiveMaximum.ts +13 -13
  197. package/src/tags/ExclusiveMinimum.ts +13 -13
  198. package/src/tags/Format.ts +30 -30
  199. package/src/tags/MaxItems.ts +9 -9
  200. package/src/tags/MaxLength.ts +9 -9
  201. package/src/tags/Maximum.ts +13 -13
  202. package/src/tags/MinItems.ts +9 -9
  203. package/src/tags/MinLength.ts +9 -9
  204. package/src/tags/Minimum.ts +13 -13
  205. package/src/tags/MultipleOf.ts +15 -15
  206. package/src/tags/Pattern.ts +8 -8
  207. package/src/tags/TagBase.ts +68 -68
  208. package/src/tags/Type.ts +27 -27
  209. package/src/tags/index.ts +13 -13
  210. package/src/transform.ts +35 -35
  211. package/src/transformers/CallExpressionTransformer.ts +243 -243
  212. package/src/transformers/FileTransformer.ts +57 -57
  213. package/src/transformers/IProject.ts +15 -15
  214. package/src/transformers/ITransformOptions.ts +62 -62
  215. package/src/transformers/ImportTransformer.ts +66 -66
  216. package/src/transformers/NodeTransformer.ts +13 -13
  217. package/src/transformers/TransformerError.ts +55 -55
  218. package/src/transformers/features/AssertTransformer.ts +11 -11
  219. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  220. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  221. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  222. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  223. package/src/transformers/features/IsTransformer.ts +11 -11
  224. package/src/transformers/features/RandomTransformer.ts +46 -46
  225. package/src/transformers/features/ValidateTransformer.ts +11 -11
  226. package/src/transformers/features/json/JsonApplicationTransformer.ts +118 -118
  227. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  228. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  229. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  230. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  231. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  232. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  233. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  234. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  235. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  236. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  237. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  238. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  239. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  240. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  241. package/src/transformers/features/misc/MetadataTransformer.ts +61 -61
  242. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  243. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  244. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  245. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  246. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  247. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  248. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  249. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  250. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  251. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  252. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  253. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  254. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  255. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  256. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  257. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  258. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  259. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  260. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  261. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  262. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  263. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  264. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  265. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  266. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  267. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  268. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  269. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  270. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  271. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  272. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  273. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  274. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  275. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  276. package/src/transformers/internal/GenericTransformer.ts +104 -104
  277. package/src/typings/Atomic.ts +18 -18
  278. package/src/typings/ClassProperties.ts +5 -5
  279. package/src/typings/Customizable.ts +5 -5
  280. package/src/typings/OmitNever.ts +3 -3
  281. package/src/typings/ProtobufAtomic.ts +19 -19
  282. package/src/typings/SpecialFields.ts +3 -3
  283. package/src/typings/ValidationPipe.ts +9 -9
  284. package/src/typings/Writable.ts +11 -11
  285. package/src/utils/ArrayUtil.ts +45 -45
  286. package/src/utils/Escaper.ts +46 -46
  287. package/src/utils/MapUtil.ts +12 -12
  288. package/src/utils/NameEncoder.ts +32 -32
  289. package/src/utils/PatternUtil.ts +33 -33
  290. package/src/utils/RandomGenerator.ts +83 -83
  291. package/src/utils/Singleton.ts +17 -17
@@ -1,46 +1,46 @@
1
- import ts from "typescript";
2
-
3
- import { RandomProgrammer } from "../../programmers/RandomProgrammer";
4
-
5
- import { IProject } from "../IProject";
6
- import { TransformerError } from "../TransformerError";
7
-
8
- export namespace RandomTransformer {
9
- export const transform =
10
- (project: IProject) =>
11
- (modulo: ts.LeftHandSideExpression) =>
12
- (expression: ts.CallExpression): ts.Expression => {
13
- // CHECK GENERIC ARGUMENT EXISTENCE
14
- if (!expression.typeArguments?.[0])
15
- throw new TransformerError({
16
- code: `typia.${modulo.getText()}`,
17
- message: "generic argument is not specified.",
18
- });
19
-
20
- // GET TYPE INFO
21
- const node: ts.TypeNode = expression.typeArguments[0];
22
- const type: ts.Type = project.checker.getTypeFromTypeNode(node);
23
-
24
- if (type.isTypeParameter())
25
- throw new TransformerError({
26
- code: `typia.${modulo.getText()}`,
27
- message: "non-specified generic argument.",
28
- });
29
-
30
- // DO TRANSFORM
31
- return ts.factory.createCallExpression(
32
- RandomProgrammer.write({
33
- ...project,
34
- options: {
35
- ...project.options,
36
- functional: false,
37
- numeric: false,
38
- },
39
- })(modulo)()(type, node.getFullText().trim()),
40
- undefined,
41
- expression.arguments.length
42
- ? [expression.arguments[0]!]
43
- : undefined,
44
- );
45
- };
46
- }
1
+ import ts from "typescript";
2
+
3
+ import { RandomProgrammer } from "../../programmers/RandomProgrammer";
4
+
5
+ import { IProject } from "../IProject";
6
+ import { TransformerError } from "../TransformerError";
7
+
8
+ export namespace RandomTransformer {
9
+ export const transform =
10
+ (project: IProject) =>
11
+ (modulo: ts.LeftHandSideExpression) =>
12
+ (expression: ts.CallExpression): ts.Expression => {
13
+ // CHECK GENERIC ARGUMENT EXISTENCE
14
+ if (!expression.typeArguments?.[0])
15
+ throw new TransformerError({
16
+ code: `typia.${modulo.getText()}`,
17
+ message: "generic argument is not specified.",
18
+ });
19
+
20
+ // GET TYPE INFO
21
+ const node: ts.TypeNode = expression.typeArguments[0];
22
+ const type: ts.Type = project.checker.getTypeFromTypeNode(node);
23
+
24
+ if (type.isTypeParameter())
25
+ throw new TransformerError({
26
+ code: `typia.${modulo.getText()}`,
27
+ message: "non-specified generic argument.",
28
+ });
29
+
30
+ // DO TRANSFORM
31
+ return ts.factory.createCallExpression(
32
+ RandomProgrammer.write({
33
+ ...project,
34
+ options: {
35
+ ...project.options,
36
+ functional: false,
37
+ numeric: false,
38
+ },
39
+ })(modulo)()(type, node.getFullText().trim()),
40
+ undefined,
41
+ expression.arguments.length
42
+ ? [expression.arguments[0]!]
43
+ : undefined,
44
+ );
45
+ };
46
+ }
@@ -1,11 +1,11 @@
1
- import { ValidateProgrammer } from "../../programmers/ValidateProgrammer";
2
-
3
- import { GenericTransformer } from "../internal/GenericTransformer";
4
-
5
- export namespace ValidateTransformer {
6
- export const transform = (equals: boolean) =>
7
- GenericTransformer.scalar(equals ? "validateEquals" : "validate")(
8
- (project) => (modulo) =>
9
- ValidateProgrammer.write(project)(modulo)(equals),
10
- );
11
- }
1
+ import { ValidateProgrammer } from "../../programmers/ValidateProgrammer";
2
+
3
+ import { GenericTransformer } from "../internal/GenericTransformer";
4
+
5
+ export namespace ValidateTransformer {
6
+ export const transform = (equals: boolean) =>
7
+ GenericTransformer.scalar(equals ? "validateEquals" : "validate")(
8
+ (project) => (modulo) =>
9
+ ValidateProgrammer.write(project)(modulo)(equals),
10
+ );
11
+ }
@@ -1,118 +1,118 @@
1
- import ts from "typescript";
2
-
3
- import { JsonMetadataFactory } from "../../../factories/JsonMetadataFactory";
4
- import { LiteralFactory } from "../../../factories/LiteralFactory";
5
- import { MetadataCollection } from "../../../factories/MetadataCollection";
6
- import { MetadataFactory } from "../../../factories/MetadataFactory";
7
-
8
- import { IJsonApplication } from "../../../schemas/json/IJsonApplication";
9
- import { Metadata } from "../../../schemas/metadata/Metadata";
10
-
11
- import { JsonApplicationProgrammer } from "../../../programmers/json/JsonApplicationProgrammer";
12
-
13
- import { ValidationPipe } from "../../../typings/ValidationPipe";
14
-
15
- import { IProject } from "../../IProject";
16
- import { TransformerError } from "../../TransformerError";
17
-
18
- export namespace JsonApplicationTransformer {
19
- export const transform =
20
- ({ checker }: IProject) =>
21
- (expression: ts.CallExpression): ts.Expression => {
22
- if (!expression.typeArguments?.length)
23
- throw new TransformerError({
24
- code: "typia.json.application",
25
- message: "no generic argument.",
26
- });
27
-
28
- //----
29
- // GET ARGUMENTS
30
- //----
31
- // VALIDATE TUPLE ARGUMENTS
32
- const top: ts.Node = expression.typeArguments[0]!;
33
- if (!ts.isTupleTypeNode(top)) return expression;
34
- else if (top.elements.some((child) => !ts.isTypeNode(child)))
35
- return expression;
36
-
37
- // GET TYPES
38
- const types: ts.Type[] = top.elements.map((child) =>
39
- checker.getTypeFromTypeNode(child as ts.TypeNode),
40
- );
41
- if (types.some((t) => t.isTypeParameter()))
42
- throw new TransformerError({
43
- code: "typia.json.application",
44
- message: "non-specified generic argument(s).",
45
- });
46
-
47
- // ADDITIONAL PARAMETERS
48
- const purpose: "swagger" | "ajv" = get_parameter(
49
- checker,
50
- "Purpose",
51
- expression.typeArguments[1],
52
- (str) => str === "swagger" || str === "ajv",
53
- () => "swagger",
54
- );
55
-
56
- //----
57
- // GENERATORS
58
- //----
59
- // METADATA
60
- const collection: MetadataCollection = new MetadataCollection({
61
- replace: MetadataCollection.replace,
62
- });
63
- const results: ValidationPipe<Metadata, MetadataFactory.IError>[] =
64
- types.map((type) =>
65
- MetadataFactory.analyze(checker)({
66
- escape: true,
67
- constant: true,
68
- absorb: false,
69
- validate: JsonMetadataFactory.validate,
70
- })(collection)(type),
71
- );
72
-
73
- // REPORT BUG IF REQUIRED
74
- const metadatas: Metadata[] = [];
75
- const errors: MetadataFactory.IError[] = [];
76
- for (const r of results) {
77
- if (r.success === false) errors.push(...r.errors);
78
- else metadatas.push(r.data);
79
- }
80
- if (errors.length)
81
- throw TransformerError.from("typia.json.application")(errors);
82
-
83
- // APPLICATION
84
- const app: IJsonApplication = JsonApplicationProgrammer.write({
85
- purpose,
86
- })(metadatas);
87
-
88
- // RETURNS WITH LITERAL EXPRESSION
89
- return LiteralFactory.generate(app);
90
- };
91
-
92
- const get_parameter = <T extends string>(
93
- checker: ts.TypeChecker,
94
- name: string,
95
- node: ts.TypeNode | undefined,
96
- predicator: (value: string) => boolean,
97
- defaulter: () => T,
98
- ): T => {
99
- if (!node) return defaulter();
100
-
101
- // CHECK LITERAL TYPE
102
- const type: ts.Type = checker.getTypeFromTypeNode(node);
103
- if (!type.isLiteral())
104
- throw new TransformerError({
105
- code: "typia.json.application",
106
- message: `generic argument "${name}" must be constant.`,
107
- });
108
-
109
- // GET VALUE AND VALIDATE IT
110
- const value = type.value;
111
- if (typeof value !== "string" || predicator(value) === false)
112
- throw new TransformerError({
113
- code: "typia.json.application",
114
- message: `invalid value on generic argument "${name}".`,
115
- });
116
- return value as T;
117
- };
118
- }
1
+ import ts from "typescript";
2
+
3
+ import { JsonMetadataFactory } from "../../../factories/JsonMetadataFactory";
4
+ import { LiteralFactory } from "../../../factories/LiteralFactory";
5
+ import { MetadataCollection } from "../../../factories/MetadataCollection";
6
+ import { MetadataFactory } from "../../../factories/MetadataFactory";
7
+
8
+ import { IJsonApplication } from "../../../schemas/json/IJsonApplication";
9
+ import { Metadata } from "../../../schemas/metadata/Metadata";
10
+
11
+ import { JsonApplicationProgrammer } from "../../../programmers/json/JsonApplicationProgrammer";
12
+
13
+ import { ValidationPipe } from "../../../typings/ValidationPipe";
14
+
15
+ import { IProject } from "../../IProject";
16
+ import { TransformerError } from "../../TransformerError";
17
+
18
+ export namespace JsonApplicationTransformer {
19
+ export const transform =
20
+ ({ checker }: IProject) =>
21
+ (expression: ts.CallExpression): ts.Expression => {
22
+ if (!expression.typeArguments?.length)
23
+ throw new TransformerError({
24
+ code: "typia.json.application",
25
+ message: "no generic argument.",
26
+ });
27
+
28
+ //----
29
+ // GET ARGUMENTS
30
+ //----
31
+ // VALIDATE TUPLE ARGUMENTS
32
+ const top: ts.Node = expression.typeArguments[0]!;
33
+ if (!ts.isTupleTypeNode(top)) return expression;
34
+ else if (top.elements.some((child) => !ts.isTypeNode(child)))
35
+ return expression;
36
+
37
+ // GET TYPES
38
+ const types: ts.Type[] = top.elements.map((child) =>
39
+ checker.getTypeFromTypeNode(child as ts.TypeNode),
40
+ );
41
+ if (types.some((t) => t.isTypeParameter()))
42
+ throw new TransformerError({
43
+ code: "typia.json.application",
44
+ message: "non-specified generic argument(s).",
45
+ });
46
+
47
+ // ADDITIONAL PARAMETERS
48
+ const purpose: "swagger" | "ajv" = get_parameter(
49
+ checker,
50
+ "Purpose",
51
+ expression.typeArguments[1],
52
+ (str) => str === "swagger" || str === "ajv",
53
+ () => "swagger",
54
+ );
55
+
56
+ //----
57
+ // GENERATORS
58
+ //----
59
+ // METADATA
60
+ const collection: MetadataCollection = new MetadataCollection({
61
+ replace: MetadataCollection.replace,
62
+ });
63
+ const results: ValidationPipe<Metadata, MetadataFactory.IError>[] =
64
+ types.map((type) =>
65
+ MetadataFactory.analyze(checker)({
66
+ escape: true,
67
+ constant: true,
68
+ absorb: false,
69
+ validate: JsonMetadataFactory.validate,
70
+ })(collection)(type),
71
+ );
72
+
73
+ // REPORT BUG IF REQUIRED
74
+ const metadatas: Metadata[] = [];
75
+ const errors: MetadataFactory.IError[] = [];
76
+ for (const r of results) {
77
+ if (r.success === false) errors.push(...r.errors);
78
+ else metadatas.push(r.data);
79
+ }
80
+ if (errors.length)
81
+ throw TransformerError.from("typia.json.application")(errors);
82
+
83
+ // APPLICATION
84
+ const app: IJsonApplication = JsonApplicationProgrammer.write({
85
+ purpose,
86
+ })(metadatas);
87
+
88
+ // RETURNS WITH LITERAL EXPRESSION
89
+ return LiteralFactory.generate(app);
90
+ };
91
+
92
+ const get_parameter = <T extends string>(
93
+ checker: ts.TypeChecker,
94
+ name: string,
95
+ node: ts.TypeNode | undefined,
96
+ predicator: (value: string) => boolean,
97
+ defaulter: () => T,
98
+ ): T => {
99
+ if (!node) return defaulter();
100
+
101
+ // CHECK LITERAL TYPE
102
+ const type: ts.Type = checker.getTypeFromTypeNode(node);
103
+ if (!type.isLiteral())
104
+ throw new TransformerError({
105
+ code: "typia.json.application",
106
+ message: `generic argument "${name}" must be constant.`,
107
+ });
108
+
109
+ // GET VALUE AND VALIDATE IT
110
+ const value = type.value;
111
+ if (typeof value !== "string" || predicator(value) === false)
112
+ throw new TransformerError({
113
+ code: "typia.json.application",
114
+ message: `invalid value on generic argument "${name}".`,
115
+ });
116
+ return value as T;
117
+ };
118
+ }
@@ -1,10 +1,10 @@
1
- import { JsonAssertParseProgrammer } from "../../../programmers/json/JsonAssertParseProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonAssertParseTransformer {
6
- export const transform = GenericTransformer.scalar("assertParse")(
7
- (project) => (modulo) =>
8
- JsonAssertParseProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonAssertParseProgrammer } from "../../../programmers/json/JsonAssertParseProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonAssertParseTransformer {
6
+ export const transform = GenericTransformer.scalar("assertParse")(
7
+ (project) => (modulo) =>
8
+ JsonAssertParseProgrammer.write(project)(modulo),
9
+ );
10
+ }
@@ -1,10 +1,10 @@
1
- import { JsonAssertStringifyProgrammer } from "../../../programmers/json/JsonAssertStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonAssertStringifyTransformer {
6
- export const transform = GenericTransformer.scalar("assertStringify")(
7
- (project) => (modulo) =>
8
- JsonAssertStringifyProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonAssertStringifyProgrammer } from "../../../programmers/json/JsonAssertStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonAssertStringifyTransformer {
6
+ export const transform = GenericTransformer.scalar("assertStringify")(
7
+ (project) => (modulo) =>
8
+ JsonAssertStringifyProgrammer.write(project)(modulo),
9
+ );
10
+ }
@@ -1,10 +1,10 @@
1
- import { JsonAssertParseProgrammer } from "../../../programmers/json/JsonAssertParseProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateAssertParseTransformer {
6
- export const transform = GenericTransformer.factory("createAssertParse")(
7
- (project) => (modulo) =>
8
- JsonAssertParseProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonAssertParseProgrammer } from "../../../programmers/json/JsonAssertParseProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateAssertParseTransformer {
6
+ export const transform = GenericTransformer.factory("createAssertParse")(
7
+ (project) => (modulo) =>
8
+ JsonAssertParseProgrammer.write(project)(modulo),
9
+ );
10
+ }
@@ -1,12 +1,12 @@
1
- import { JsonAssertStringifyProgrammer } from "../../../programmers/json/JsonAssertStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateAssertStringifyTransformer {
6
- export const transform = GenericTransformer.factory(
7
- "createAssertStringify",
8
- )(
9
- (project) => (modulo) =>
10
- JsonAssertStringifyProgrammer.write(project)(modulo),
11
- );
12
- }
1
+ import { JsonAssertStringifyProgrammer } from "../../../programmers/json/JsonAssertStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateAssertStringifyTransformer {
6
+ export const transform = GenericTransformer.factory(
7
+ "createAssertStringify",
8
+ )(
9
+ (project) => (modulo) =>
10
+ JsonAssertStringifyProgrammer.write(project)(modulo),
11
+ );
12
+ }
@@ -1,9 +1,9 @@
1
- import { JsonIsParseProgrammer } from "../../../programmers/json/JsonIsParseProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateIsParseTransformer {
6
- export const transform = GenericTransformer.factory("createIsParse")(
7
- (project) => (modulo) => JsonIsParseProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { JsonIsParseProgrammer } from "../../../programmers/json/JsonIsParseProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateIsParseTransformer {
6
+ export const transform = GenericTransformer.factory("createIsParse")(
7
+ (project) => (modulo) => JsonIsParseProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,10 +1,10 @@
1
- import { JsonIsStringifyProgrammer } from "../../../programmers/json/JsonIsStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateIsStringifyTransformer {
6
- export const transform = GenericTransformer.factory("createIsStringify")(
7
- (project) => (modulo) =>
8
- JsonIsStringifyProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonIsStringifyProgrammer } from "../../../programmers/json/JsonIsStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateIsStringifyTransformer {
6
+ export const transform = GenericTransformer.factory("createIsStringify")(
7
+ (project) => (modulo) =>
8
+ JsonIsStringifyProgrammer.write(project)(modulo),
9
+ );
10
+ }
@@ -1,9 +1,9 @@
1
- import { JsonStringifyProgrammer } from "../../../programmers/json/JsonStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateStringifyTransformer {
6
- export const transform = GenericTransformer.factory("createStringify")(
7
- (project) => (modulo) => JsonStringifyProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { JsonStringifyProgrammer } from "../../../programmers/json/JsonStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateStringifyTransformer {
6
+ export const transform = GenericTransformer.factory("createStringify")(
7
+ (project) => (modulo) => JsonStringifyProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,10 +1,10 @@
1
- import { JsonValidateParseProgrammer } from "../../../programmers/json/JsonValidateParseProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateValidateParseTransformer {
6
- export const transform = GenericTransformer.factory("createValidateParse")(
7
- (project) => (modulo) =>
8
- JsonValidateParseProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonValidateParseProgrammer } from "../../../programmers/json/JsonValidateParseProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateValidateParseTransformer {
6
+ export const transform = GenericTransformer.factory("createValidateParse")(
7
+ (project) => (modulo) =>
8
+ JsonValidateParseProgrammer.write(project)(modulo),
9
+ );
10
+ }
@@ -1,12 +1,12 @@
1
- import { JsonValidateStringifyProgrammer } from "../../../programmers/json/JsonValidateStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonCreateValidateStringifyTransformer {
6
- export const transform = GenericTransformer.factory(
7
- "createValidateStringify",
8
- )(
9
- (project) => (modulo) =>
10
- JsonValidateStringifyProgrammer.write(project)(modulo),
11
- );
12
- }
1
+ import { JsonValidateStringifyProgrammer } from "../../../programmers/json/JsonValidateStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonCreateValidateStringifyTransformer {
6
+ export const transform = GenericTransformer.factory(
7
+ "createValidateStringify",
8
+ )(
9
+ (project) => (modulo) =>
10
+ JsonValidateStringifyProgrammer.write(project)(modulo),
11
+ );
12
+ }
@@ -1,9 +1,9 @@
1
- import { JsonIsParseProgrammer } from "../../../programmers/json/JsonIsParseProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonIsParseTransformer {
6
- export const transform = GenericTransformer.scalar("isParse")(
7
- (project) => (modulo) => JsonIsParseProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { JsonIsParseProgrammer } from "../../../programmers/json/JsonIsParseProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonIsParseTransformer {
6
+ export const transform = GenericTransformer.scalar("isParse")(
7
+ (project) => (modulo) => JsonIsParseProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,10 +1,10 @@
1
- import { JsonIsStringifyProgrammer } from "../../../programmers/json/JsonIsStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonIsStringifyTransformer {
6
- export const transform = GenericTransformer.scalar("isStringify")(
7
- (project) => (modulo) =>
8
- JsonIsStringifyProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonIsStringifyProgrammer } from "../../../programmers/json/JsonIsStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonIsStringifyTransformer {
6
+ export const transform = GenericTransformer.scalar("isStringify")(
7
+ (project) => (modulo) =>
8
+ JsonIsStringifyProgrammer.write(project)(modulo),
9
+ );
10
+ }
@@ -1,9 +1,9 @@
1
- import { JsonStringifyProgrammer } from "../../../programmers/json/JsonStringifyProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonStringifyTransformer {
6
- export const transform = GenericTransformer.scalar("stringify")(
7
- (project) => (modulo) => JsonStringifyProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { JsonStringifyProgrammer } from "../../../programmers/json/JsonStringifyProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonStringifyTransformer {
6
+ export const transform = GenericTransformer.scalar("stringify")(
7
+ (project) => (modulo) => JsonStringifyProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,10 +1,10 @@
1
- import { JsonValidateParseProgrammer } from "../../../programmers/json/JsonValidateParseProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace JsonValidateParseTransformer {
6
- export const transform = GenericTransformer.scalar("validatParse")(
7
- (project) => (modulo) =>
8
- JsonValidateParseProgrammer.write(project)(modulo),
9
- );
10
- }
1
+ import { JsonValidateParseProgrammer } from "../../../programmers/json/JsonValidateParseProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace JsonValidateParseTransformer {
6
+ export const transform = GenericTransformer.scalar("validatParse")(
7
+ (project) => (modulo) =>
8
+ JsonValidateParseProgrammer.write(project)(modulo),
9
+ );
10
+ }