typia 3.4.13 → 3.4.15

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 (270) hide show
  1. package/README.md +9 -8
  2. package/lib/executable/internal/TypiaSetupWizard.js +1 -1
  3. package/lib/executable/internal/TypiaSetupWizard.js.map +1 -1
  4. package/lib/factories/MetadataFactory.d.ts +1 -0
  5. package/lib/factories/MetadataFactory.js +1 -1
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/MetadataTagFactory.js +4 -1
  8. package/lib/factories/MetadataTagFactory.js.map +1 -1
  9. package/lib/factories/internal/{MetadataHelper.d.ts → metadata/MetadataHelper.d.ts} +1 -1
  10. package/lib/factories/internal/{MetadataHelper.js → metadata/MetadataHelper.js} +1 -1
  11. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -0
  12. package/lib/factories/internal/{emplace_metadata_object.d.ts → metadata/emplace_metadata_object.d.ts} +3 -3
  13. package/lib/factories/internal/{emplace_metadata_object.js → metadata/emplace_metadata_object.js} +5 -5
  14. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -0
  15. package/lib/factories/internal/{explore_metadata.d.ts → metadata/explore_metadata.d.ts} +3 -3
  16. package/lib/factories/internal/{explore_metadata.js → metadata/explore_metadata.js} +5 -3
  17. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -0
  18. package/lib/factories/internal/{iterate_metadata.d.ts → metadata/iterate_metadata.d.ts} +3 -3
  19. package/lib/factories/internal/{iterate_metadata.js → metadata/iterate_metadata.js} +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -0
  21. package/lib/factories/internal/{iterate_metadata_array.d.ts → metadata/iterate_metadata_array.d.ts} +3 -3
  22. package/lib/factories/internal/{iterate_metadata_array.js → metadata/iterate_metadata_array.js} +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -0
  24. package/lib/factories/internal/{iterate_metadata_atomic.d.ts → metadata/iterate_metadata_atomic.d.ts} +1 -1
  25. package/lib/factories/internal/{iterate_metadata_atomic.js → metadata/iterate_metadata_atomic.js} +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -0
  27. package/lib/factories/internal/{iterate_metadata_coalesce.d.ts → metadata/iterate_metadata_coalesce.d.ts} +1 -1
  28. package/lib/factories/internal/{iterate_metadata_coalesce.js → metadata/iterate_metadata_coalesce.js} +2 -2
  29. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js.map +1 -0
  30. package/lib/factories/internal/{iterate_metadata_constant.d.ts → metadata/iterate_metadata_constant.d.ts} +2 -2
  31. package/lib/factories/internal/{iterate_metadata_constant.js → metadata/iterate_metadata_constant.js} +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -0
  33. package/lib/factories/internal/{iterate_metadata_map.d.ts → metadata/iterate_metadata_map.d.ts} +3 -3
  34. package/lib/factories/internal/{iterate_metadata_map.js → metadata/iterate_metadata_map.js} +2 -2
  35. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -0
  36. package/lib/factories/internal/{iterate_metadata_native.d.ts → metadata/iterate_metadata_native.d.ts} +1 -1
  37. package/lib/factories/internal/{iterate_metadata_native.js → metadata/iterate_metadata_native.js} +2 -2
  38. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -0
  39. package/lib/factories/internal/{iterate_metadata_object.d.ts → metadata/iterate_metadata_object.d.ts} +3 -3
  40. package/lib/factories/internal/{iterate_metadata_object.js → metadata/iterate_metadata_object.js} +7 -5
  41. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -0
  42. package/lib/factories/internal/{iterate_metadata_resolve.d.ts → metadata/iterate_metadata_resolve.d.ts} +3 -3
  43. package/lib/factories/internal/{iterate_metadata_resolve.js → metadata/iterate_metadata_resolve.js} +2 -2
  44. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -0
  45. package/lib/factories/internal/{iterate_metadata_set.d.ts → metadata/iterate_metadata_set.d.ts} +3 -3
  46. package/lib/factories/internal/{iterate_metadata_set.js → metadata/iterate_metadata_set.js} +2 -2
  47. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -0
  48. package/lib/factories/internal/{iterate_metadata_template.d.ts → metadata/iterate_metadata_template.d.ts} +3 -3
  49. package/lib/factories/internal/{iterate_metadata_template.js → metadata/iterate_metadata_template.js} +0 -0
  50. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -0
  51. package/lib/factories/internal/{iterate_metadata_tuple.d.ts → metadata/iterate_metadata_tuple.d.ts} +3 -3
  52. package/lib/factories/internal/{iterate_metadata_tuple.js → metadata/iterate_metadata_tuple.js} +3 -3
  53. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -0
  54. package/lib/factories/internal/{iterate_metadata_union.d.ts → metadata/iterate_metadata_union.d.ts} +3 -3
  55. package/lib/factories/internal/{iterate_metadata_union.js → metadata/iterate_metadata_union.js} +3 -3
  56. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -0
  57. package/lib/functional/$number.js +2 -9
  58. package/lib/functional/$number.js.map +1 -1
  59. package/lib/programmers/AssertParseProgrammer.js +12 -1
  60. package/lib/programmers/AssertParseProgrammer.js.map +1 -1
  61. package/lib/programmers/AssertProgrammer.js +2 -1
  62. package/lib/programmers/AssertProgrammer.js.map +1 -1
  63. package/lib/programmers/AssertStringifyProgrammer.js +13 -2
  64. package/lib/programmers/AssertStringifyProgrammer.js.map +1 -1
  65. package/lib/programmers/CheckerProgrammer.js +6 -0
  66. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  67. package/lib/programmers/IsParseProgrammer.js +12 -1
  68. package/lib/programmers/IsParseProgrammer.js.map +1 -1
  69. package/lib/programmers/IsProgrammer.js +5 -2
  70. package/lib/programmers/IsProgrammer.js.map +1 -1
  71. package/lib/programmers/IsStringifyProgrammer.js +13 -2
  72. package/lib/programmers/IsStringifyProgrammer.js.map +1 -1
  73. package/lib/programmers/StringifyProgrammer.js +5 -0
  74. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  75. package/lib/programmers/ValidateParseProgrammer.js +12 -1
  76. package/lib/programmers/ValidateParseProgrammer.js.map +1 -1
  77. package/lib/programmers/ValidateProgrammer.js +2 -1
  78. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  79. package/lib/programmers/ValidateStringifyProgrammer.js +13 -2
  80. package/lib/programmers/ValidateStringifyProgrammer.js.map +1 -1
  81. package/lib/programmers/helpers/OptionPredicator.d.ts +2 -1
  82. package/lib/programmers/helpers/OptionPredicator.js +7 -3
  83. package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
  84. package/lib/programmers/internal/application_schema.js +7 -3
  85. package/lib/programmers/internal/application_schema.js.map +1 -1
  86. package/lib/programmers/internal/check_bigint.d.ts +3 -0
  87. package/lib/programmers/internal/check_bigint.js +97 -0
  88. package/lib/programmers/internal/check_bigint.js.map +1 -0
  89. package/lib/programmers/internal/check_number.js +21 -22
  90. package/lib/programmers/internal/check_number.js.map +1 -1
  91. package/lib/schemas/IJsonSchema.d.ts +3 -5
  92. package/lib/transformers/ITransformOptions.d.ts +42 -1
  93. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +4 -0
  94. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  95. package/lib/transformers/features/stringifiers/StringifyTransformer.js +12 -1
  96. package/lib/transformers/features/stringifiers/StringifyTransformer.js.map +1 -1
  97. package/package.json +3 -2
  98. package/src/IValidation.ts +21 -21
  99. package/src/Primitive.ts +82 -82
  100. package/src/TypeGuardError.ts +36 -36
  101. package/src/executable/internal/CommandParser.ts +15 -15
  102. package/src/executable/internal/TypiaSetupWizard.ts +173 -175
  103. package/src/executable/typia.ts +46 -46
  104. package/src/factories/CommentFactory.ts +10 -10
  105. package/src/factories/ExpressionFactory.ts +66 -66
  106. package/src/factories/IdentifierFactory.ts +72 -72
  107. package/src/factories/LiteralFactory.ts +44 -44
  108. package/src/factories/MetadataCollection.ts +122 -122
  109. package/src/factories/MetadataFactory.ts +47 -46
  110. package/src/factories/MetadataTagFactory.ts +351 -347
  111. package/src/factories/StatementFactory.ts +60 -60
  112. package/src/factories/TemplateFactory.ts +56 -56
  113. package/src/factories/TypeFactory.ts +101 -101
  114. package/src/factories/ValueFactory.ts +12 -12
  115. package/src/factories/internal/{MetadataHelper.ts → metadata/MetadataHelper.ts} +12 -12
  116. package/src/factories/internal/{emplace_metadata_object.ts → metadata/emplace_metadata_object.ts} +140 -140
  117. package/src/factories/internal/{explore_metadata.ts → metadata/explore_metadata.ts} +92 -91
  118. package/src/factories/internal/{iterate_metadata.ts → metadata/iterate_metadata.ts} +80 -80
  119. package/src/factories/internal/{iterate_metadata_array.ts → metadata/iterate_metadata_array.ts} +29 -29
  120. package/src/factories/internal/{iterate_metadata_atomic.ts → metadata/iterate_metadata_atomic.ts} +59 -59
  121. package/src/factories/internal/{iterate_metadata_coalesce.ts → metadata/iterate_metadata_coalesce.ts} +33 -33
  122. package/src/factories/internal/{iterate_metadata_constant.ts → metadata/iterate_metadata_constant.ts} +58 -58
  123. package/src/factories/internal/{iterate_metadata_map.ts → metadata/iterate_metadata_map.ts} +41 -41
  124. package/src/factories/internal/{iterate_metadata_native.ts → metadata/iterate_metadata_native.ts} +227 -227
  125. package/src/factories/internal/{iterate_metadata_object.ts → metadata/iterate_metadata_object.ts} +48 -45
  126. package/src/factories/internal/{iterate_metadata_resolve.ts → metadata/iterate_metadata_resolve.ts} +27 -27
  127. package/src/factories/internal/{iterate_metadata_set.ts → metadata/iterate_metadata_set.ts} +33 -33
  128. package/src/factories/internal/{iterate_metadata_template.ts → metadata/iterate_metadata_template.ts} +38 -38
  129. package/src/factories/internal/{iterate_metadata_tuple.ts → metadata/iterate_metadata_tuple.ts} +45 -45
  130. package/src/factories/internal/{iterate_metadata_union.ts → metadata/iterate_metadata_union.ts} +59 -59
  131. package/src/functional/$every.ts +11 -11
  132. package/src/functional/$guard.ts +35 -35
  133. package/src/functional/$is_email.ts +5 -5
  134. package/src/functional/$is_ipv4.ts +5 -5
  135. package/src/functional/$is_ipv6.ts +5 -5
  136. package/src/functional/$is_url.ts +5 -5
  137. package/src/functional/$is_uuid.ts +5 -5
  138. package/src/functional/$join.ts +50 -50
  139. package/src/functional/$number.ts +12 -19
  140. package/src/functional/$report.ts +15 -15
  141. package/src/functional/$rest.ts +3 -3
  142. package/src/functional/$string.ts +37 -37
  143. package/src/functional/$tail.ts +6 -6
  144. package/src/index.ts +4 -4
  145. package/src/metadata/IJsDocTagInfo.ts +10 -10
  146. package/src/metadata/IMetadata.ts +25 -25
  147. package/src/metadata/IMetadataApplication.ts +7 -7
  148. package/src/metadata/IMetadataConstant.ts +16 -16
  149. package/src/metadata/IMetadataEntry.ts +6 -6
  150. package/src/metadata/IMetadataObject.ts +29 -29
  151. package/src/metadata/IMetadataProperty.ts +11 -11
  152. package/src/metadata/IMetadataTag.ts +122 -122
  153. package/src/metadata/Metadata.ts +477 -477
  154. package/src/metadata/MetadataConstant.ts +3 -3
  155. package/src/metadata/MetadataObject.ts +131 -131
  156. package/src/metadata/MetadataProperty.ts +64 -64
  157. package/src/module.ts +1535 -1535
  158. package/src/programmers/ApplicationProgrammer.ts +55 -55
  159. package/src/programmers/AssertParseProgrammer.ts +55 -45
  160. package/src/programmers/AssertProgrammer.ts +445 -444
  161. package/src/programmers/AssertStringifyProgrammer.ts +65 -45
  162. package/src/programmers/CheckerProgrammer.ts +810 -804
  163. package/src/programmers/FeatureProgrammer.ts +327 -327
  164. package/src/programmers/IsParseProgrammer.ts +61 -51
  165. package/src/programmers/IsProgrammer.ts +175 -172
  166. package/src/programmers/IsStringifyProgrammer.ts +69 -49
  167. package/src/programmers/StringifyProgrammer.ts +762 -756
  168. package/src/programmers/ValidateParseProgrammer.ts +59 -49
  169. package/src/programmers/ValidateProgrammer.ts +237 -236
  170. package/src/programmers/ValidateStringifyProgrammer.ts +80 -60
  171. package/src/programmers/helpers/AtomicPredicator.ts +15 -15
  172. package/src/programmers/helpers/FunctionImporeter.ts +31 -31
  173. package/src/programmers/helpers/IExpressionEntry.ts +10 -10
  174. package/src/programmers/helpers/OptionPredicator.ts +15 -11
  175. package/src/programmers/helpers/StringifyJoinder.ts +111 -111
  176. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  177. package/src/programmers/helpers/UnionExplorer.ts +437 -437
  178. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  179. package/src/programmers/internal/application_array.ts +45 -45
  180. package/src/programmers/internal/application_boolean.ts +17 -17
  181. package/src/programmers/internal/application_constant.ts +29 -29
  182. package/src/programmers/internal/application_default.ts +17 -17
  183. package/src/programmers/internal/application_default_string.ts +32 -32
  184. package/src/programmers/internal/application_native.ts +29 -29
  185. package/src/programmers/internal/application_number.ts +76 -76
  186. package/src/programmers/internal/application_object.ts +103 -103
  187. package/src/programmers/internal/application_schema.ts +228 -221
  188. package/src/programmers/internal/application_string.ts +49 -49
  189. package/src/programmers/internal/application_templates.ts +27 -27
  190. package/src/programmers/internal/application_tuple.ts +25 -25
  191. package/src/programmers/internal/check_array.ts +44 -44
  192. package/src/programmers/internal/check_bigint.ts +85 -0
  193. package/src/programmers/internal/check_dynamic_properties.ts +146 -146
  194. package/src/programmers/internal/check_everything.ts +25 -25
  195. package/src/programmers/internal/check_length.ts +46 -46
  196. package/src/programmers/internal/check_native.ts +9 -9
  197. package/src/programmers/internal/check_number.ts +175 -178
  198. package/src/programmers/internal/check_object.ts +42 -42
  199. package/src/programmers/internal/check_string.ts +24 -24
  200. package/src/programmers/internal/check_string_tags.ts +63 -63
  201. package/src/programmers/internal/check_template.ts +50 -50
  202. package/src/programmers/internal/decode_union_object.ts +73 -73
  203. package/src/programmers/internal/feature_object_entries.ts +49 -49
  204. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  205. package/src/programmers/internal/stringify_dynamic_properties.ts +164 -164
  206. package/src/programmers/internal/stringify_native.ts +8 -8
  207. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  208. package/src/programmers/internal/template_to_pattern.ts +15 -15
  209. package/src/schemas/IJsonApplication.ts +9 -9
  210. package/src/schemas/IJsonComponents.ts +24 -24
  211. package/src/schemas/IJsonSchema.ts +90 -92
  212. package/src/transform.ts +20 -20
  213. package/src/transformers/CallExpressionTransformer.ts +124 -124
  214. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  215. package/src/transformers/FileTransformer.ts +49 -49
  216. package/src/transformers/IProject.ts +11 -11
  217. package/src/transformers/ITransformOptions.ts +47 -4
  218. package/src/transformers/NodeTransformer.ts +19 -19
  219. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -114
  220. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  221. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
  222. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
  223. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
  224. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
  225. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
  226. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
  227. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
  228. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
  229. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
  230. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
  231. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
  232. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
  233. package/src/transformers/features/stringifiers/StringifyTransformer.ts +46 -36
  234. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
  235. package/src/transformers/features/validators/AssertTransformer.ts +43 -43
  236. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
  237. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
  238. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
  239. package/src/transformers/features/validators/IsTransformer.ts +43 -43
  240. package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
  241. package/src/typings/Atomic.ts +17 -17
  242. package/src/typings/ClassProperties.ts +5 -5
  243. package/src/typings/OmitNever.ts +3 -3
  244. package/src/typings/SpecialFields.ts +3 -3
  245. package/src/typings/Writable.ts +11 -11
  246. package/src/utils/ArrayUtil.ts +49 -49
  247. package/src/utils/Escaper.ts +50 -50
  248. package/src/utils/MapUtil.ts +14 -14
  249. package/src/utils/PatternUtil.ts +30 -30
  250. package/src/utils/Singleton.ts +17 -17
  251. package/lib/factories/internal/MetadataHelper.js.map +0 -1
  252. package/lib/factories/internal/emplace_metadata_object.js.map +0 -1
  253. package/lib/factories/internal/explore_metadata.js.map +0 -1
  254. package/lib/factories/internal/iterate_metadata.js.map +0 -1
  255. package/lib/factories/internal/iterate_metadata_array.js.map +0 -1
  256. package/lib/factories/internal/iterate_metadata_atomic.js.map +0 -1
  257. package/lib/factories/internal/iterate_metadata_coalesce.js.map +0 -1
  258. package/lib/factories/internal/iterate_metadata_constant.js.map +0 -1
  259. package/lib/factories/internal/iterate_metadata_map.js.map +0 -1
  260. package/lib/factories/internal/iterate_metadata_native.js.map +0 -1
  261. package/lib/factories/internal/iterate_metadata_object.js.map +0 -1
  262. package/lib/factories/internal/iterate_metadata_resolve.js.map +0 -1
  263. package/lib/factories/internal/iterate_metadata_set.js.map +0 -1
  264. package/lib/factories/internal/iterate_metadata_template.js.map +0 -1
  265. package/lib/factories/internal/iterate_metadata_tuple.js.map +0 -1
  266. package/lib/factories/internal/iterate_metadata_union.js.map +0 -1
  267. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.d.ts +0 -5
  268. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.js +0 -29
  269. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.js.map +0 -1
  270. package/src/transformers/features/miscellaneous/CreateInstanceTransformer.ts +0 -41
@@ -1,140 +1,140 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
- import { MetadataObject } from "../../metadata/MetadataObject";
5
- import { MetadataProperty } from "../../metadata/MetadataProperty";
6
-
7
- import { Writable } from "../../typings/Writable";
8
-
9
- import { ArrayUtil } from "../../utils/ArrayUtil";
10
-
11
- import { CommentFactory } from "../CommentFactory";
12
- import { MetadataCollection } from "../MetadataCollection";
13
- import { MetadataFactory } from "../MetadataFactory";
14
- import { MetadataTagFactory } from "../MetadataTagFactory";
15
- import { MetadataHelper } from "./MetadataHelper";
16
- import { explore_metadata } from "./explore_metadata";
17
-
18
- export const emplace_metadata_object =
19
- (checker: ts.TypeChecker) =>
20
- (options: MetadataFactory.IOptions) =>
21
- (collection: MetadataCollection) =>
22
- (parent: ts.Type, nullable: boolean): MetadataObject => {
23
- // EMPLACE OBJECT
24
- const [obj, newbie] = collection.emplace(checker, parent);
25
- ArrayUtil.add(obj.nullables, nullable, (elem) => elem === nullable);
26
- if (newbie === false) return obj;
27
-
28
- // PREPARE ASSETS
29
- const isClass: boolean = parent.isClass();
30
- const pred: (node: ts.Declaration) => boolean = isClass
31
- ? (node) => {
32
- const kind: ts.SyntaxKind | undefined = node
33
- .getChildren()[0]
34
- ?.getChildren()[0]?.kind;
35
- return (
36
- kind !== ts.SyntaxKind.PrivateKeyword &&
37
- kind !== ts.SyntaxKind.ProtectedKeyword &&
38
- (ts.isParameter(node) || ts.isPropertyDeclaration(node))
39
- );
40
- }
41
- : (node) =>
42
- ts.isPropertyDeclaration(node) ||
43
- ts.isPropertyAssignment(node) ||
44
- ts.isPropertySignature(node) ||
45
- ts.isTypeLiteralNode(node);
46
-
47
- const insert =
48
- (key: Metadata) =>
49
- (value: Metadata) =>
50
- (identifier: () => string) =>
51
- (
52
- symbol: ts.Symbol | undefined,
53
- filter?: (doc: ts.JSDocTagInfo) => boolean,
54
- ): MetadataProperty => {
55
- // COMMENTS AND TAGS
56
- const description: string | undefined =
57
- CommentFactory.generate(
58
- symbol?.getDocumentationComment(checker) || [],
59
- ) || undefined;
60
- const jsDocTags: ts.JSDocTagInfo[] = (
61
- symbol?.getJsDocTags() || []
62
- ).filter(filter || (() => true));
63
-
64
- // THE PROPERTY
65
- const property = MetadataProperty.create({
66
- key,
67
- value,
68
- description,
69
- jsDocTags,
70
- tags: MetadataTagFactory.generate(
71
- () => identifier(),
72
- value,
73
- jsDocTags,
74
- ),
75
- });
76
- obj.properties.push(property);
77
- return property;
78
- };
79
-
80
- //----
81
- // REGULAR PROPERTIES
82
- //----
83
- for (const prop of parent.getApparentProperties()) {
84
- // CHECK INTERNAL TAG
85
- if (
86
- (prop.getJsDocTags(checker) || []).find(
87
- (tag) => tag.name === "internal",
88
- ) !== undefined
89
- )
90
- continue;
91
-
92
- // CHECK NODE IS A FORMAL PROPERTY
93
- const [node, type] = (() => {
94
- const node = (prop.getDeclarations() || [])[0] as
95
- | ts.PropertyDeclaration
96
- | undefined;
97
- const type: ts.Type | undefined = node
98
- ? checker.getTypeOfSymbolAtLocation(prop, node)
99
- : "getTypeOfPropertyOfType" in checker
100
- ? (checker as any).getTypeOfPropertyOfType(
101
- parent,
102
- prop.name,
103
- )
104
- : undefined;
105
- return [node, type];
106
- })();
107
- if ((node && pred(node) === false) || type === undefined) continue;
108
-
109
- // GET EXACT TYPE
110
- const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
111
- const value: Metadata = explore_metadata(checker)(options)(
112
- collection,
113
- )(type, false);
114
-
115
- // INSERT WITH REQUIRED CONFIGURATION
116
- if (node?.questionToken) Writable(value).required = false;
117
- insert(key)(value)(() => `${obj.name}.${prop.name}`)(prop);
118
- }
119
-
120
- //----
121
- // DYNAMIC PROPERTIES
122
- //----
123
- for (const index of checker.getIndexInfosOfType(parent)) {
124
- // GET EXACT TYPE
125
- const analyzer = (type: ts.Type) =>
126
- explore_metadata(checker)(options)(collection)(type, false);
127
- const key: Metadata = analyzer(index.keyType);
128
- const value: Metadata = analyzer(index.type);
129
-
130
- // INSERT WITH REQUIRED CONFIGURATION
131
- insert(key)(value)(() => `${obj.name}[${key.getName()}]`)(
132
- index.declaration?.parent
133
- ? checker.getSymbolAtLocation(index.declaration.parent)
134
- : undefined,
135
- (doc) => doc.name !== "default",
136
- );
137
- }
138
-
139
- return obj;
140
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+ import { MetadataObject } from "../../../metadata/MetadataObject";
5
+ import { MetadataProperty } from "../../../metadata/MetadataProperty";
6
+
7
+ import { Writable } from "../../../typings/Writable";
8
+
9
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
10
+
11
+ import { CommentFactory } from "../../CommentFactory";
12
+ import { MetadataCollection } from "../../MetadataCollection";
13
+ import { MetadataFactory } from "../../MetadataFactory";
14
+ import { MetadataTagFactory } from "../../MetadataTagFactory";
15
+ import { MetadataHelper } from "./MetadataHelper";
16
+ import { explore_metadata } from "./explore_metadata";
17
+
18
+ export const emplace_metadata_object =
19
+ (checker: ts.TypeChecker) =>
20
+ (options: MetadataFactory.IOptions) =>
21
+ (collection: MetadataCollection) =>
22
+ (parent: ts.Type, nullable: boolean): MetadataObject => {
23
+ // EMPLACE OBJECT
24
+ const [obj, newbie] = collection.emplace(checker, parent);
25
+ ArrayUtil.add(obj.nullables, nullable, (elem) => elem === nullable);
26
+ if (newbie === false) return obj;
27
+
28
+ // PREPARE ASSETS
29
+ const isClass: boolean = parent.isClass();
30
+ const pred: (node: ts.Declaration) => boolean = isClass
31
+ ? (node) => {
32
+ const kind: ts.SyntaxKind | undefined = node
33
+ .getChildren()[0]
34
+ ?.getChildren()[0]?.kind;
35
+ return (
36
+ kind !== ts.SyntaxKind.PrivateKeyword &&
37
+ kind !== ts.SyntaxKind.ProtectedKeyword &&
38
+ (ts.isParameter(node) || ts.isPropertyDeclaration(node))
39
+ );
40
+ }
41
+ : (node) =>
42
+ ts.isPropertyDeclaration(node) ||
43
+ ts.isPropertyAssignment(node) ||
44
+ ts.isPropertySignature(node) ||
45
+ ts.isTypeLiteralNode(node);
46
+
47
+ const insert =
48
+ (key: Metadata) =>
49
+ (value: Metadata) =>
50
+ (identifier: () => string) =>
51
+ (
52
+ symbol: ts.Symbol | undefined,
53
+ filter?: (doc: ts.JSDocTagInfo) => boolean,
54
+ ): MetadataProperty => {
55
+ // COMMENTS AND TAGS
56
+ const description: string | undefined =
57
+ CommentFactory.generate(
58
+ symbol?.getDocumentationComment(checker) || [],
59
+ ) || undefined;
60
+ const jsDocTags: ts.JSDocTagInfo[] = (
61
+ symbol?.getJsDocTags() || []
62
+ ).filter(filter || (() => true));
63
+
64
+ // THE PROPERTY
65
+ const property = MetadataProperty.create({
66
+ key,
67
+ value,
68
+ description,
69
+ jsDocTags,
70
+ tags: MetadataTagFactory.generate(
71
+ () => identifier(),
72
+ value,
73
+ jsDocTags,
74
+ ),
75
+ });
76
+ obj.properties.push(property);
77
+ return property;
78
+ };
79
+
80
+ //----
81
+ // REGULAR PROPERTIES
82
+ //----
83
+ for (const prop of parent.getApparentProperties()) {
84
+ // CHECK INTERNAL TAG
85
+ if (
86
+ (prop.getJsDocTags(checker) || []).find(
87
+ (tag) => tag.name === "internal",
88
+ ) !== undefined
89
+ )
90
+ continue;
91
+
92
+ // CHECK NODE IS A FORMAL PROPERTY
93
+ const [node, type] = (() => {
94
+ const node = (prop.getDeclarations() || [])[0] as
95
+ | ts.PropertyDeclaration
96
+ | undefined;
97
+ const type: ts.Type | undefined = node
98
+ ? checker.getTypeOfSymbolAtLocation(prop, node)
99
+ : "getTypeOfPropertyOfType" in checker
100
+ ? (checker as any).getTypeOfPropertyOfType(
101
+ parent,
102
+ prop.name,
103
+ )
104
+ : undefined;
105
+ return [node, type];
106
+ })();
107
+ if ((node && pred(node) === false) || type === undefined) continue;
108
+
109
+ // GET EXACT TYPE
110
+ const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
111
+ const value: Metadata = explore_metadata(checker)(options)(
112
+ collection,
113
+ )(type, false);
114
+
115
+ // INSERT WITH REQUIRED CONFIGURATION
116
+ if (node?.questionToken) Writable(value).required = false;
117
+ insert(key)(value)(() => `${obj.name}.${prop.name}`)(prop);
118
+ }
119
+
120
+ //----
121
+ // DYNAMIC PROPERTIES
122
+ //----
123
+ for (const index of checker.getIndexInfosOfType(parent)) {
124
+ // GET EXACT TYPE
125
+ const analyzer = (type: ts.Type) =>
126
+ explore_metadata(checker)(options)(collection)(type, false);
127
+ const key: Metadata = analyzer(index.keyType);
128
+ const value: Metadata = analyzer(index.type);
129
+
130
+ // INSERT WITH REQUIRED CONFIGURATION
131
+ insert(key)(value)(() => `${obj.name}[${key.getName()}]`)(
132
+ index.declaration?.parent
133
+ ? checker.getSymbolAtLocation(index.declaration.parent)
134
+ : undefined,
135
+ (doc) => doc.name !== "default",
136
+ );
137
+ }
138
+
139
+ return obj;
140
+ };
@@ -1,91 +1,92 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
- import { MetadataObject } from "../../metadata/MetadataObject";
5
-
6
- import { ArrayUtil } from "../../utils/ArrayUtil";
7
-
8
- import { MetadataCollection } from "../MetadataCollection";
9
- import { MetadataFactory } from "../MetadataFactory";
10
- import { iterate_metadata } from "./iterate_metadata";
11
-
12
- export const explore_metadata =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (type: ts.Type | null, parentResolved: boolean): Metadata => {
17
- // CONSTRUCT METADATA
18
- const meta: Metadata = Metadata.initialize(parentResolved);
19
- if (type !== null)
20
- iterate_metadata(checker)(options)(collection)(
21
- meta,
22
- type,
23
- parentResolved,
24
- );
25
-
26
- // SORT OBJECTS
27
- if (meta.objects.length > 1) {
28
- meta.objects.sort((x, y) =>
29
- MetadataObject.covers(x, y)
30
- ? -1
31
- : MetadataObject.covers(y, x)
32
- ? 1
33
- : 0,
34
- );
35
- if (parentResolved === false)
36
- meta.union_index = collection.getUnionIndex(meta);
37
- }
38
-
39
- // SORT ARRAYS AND TUPLES
40
- if (meta.arrays.length > 1)
41
- meta.arrays.sort((x, y) =>
42
- Metadata.covers(x, y) ? -1 : Metadata.covers(y, x) ? 1 : 0,
43
- );
44
- if (meta.tuples.length > 1)
45
- meta.tuples.sort((x, y) => {
46
- const xt = Metadata.initialize();
47
- const yt = Metadata.initialize();
48
-
49
- xt.tuples.push(x);
50
- yt.tuples.push(y);
51
-
52
- return Metadata.covers(xt, yt)
53
- ? -1
54
- : Metadata.covers(yt, xt)
55
- ? 1
56
- : 0;
57
- });
58
-
59
- // EMEND ATOMICS
60
- for (const type of meta.atomics) {
61
- const index: number = meta.constants.findIndex(
62
- (c) => c.type === type,
63
- );
64
- if (index !== -1) meta.constants.splice(index, 1);
65
- }
66
-
67
- // EMEND BOOLEAN
68
- {
69
- const index: number = meta.constants.findIndex(
70
- (c) => c.type === "boolean",
71
- );
72
- if (index !== -1 && meta.constants[index]!.values.length === 2) {
73
- meta.constants.splice(index, 1);
74
- ArrayUtil.take(
75
- meta.atomics,
76
- (type) => type === "boolean",
77
- () => "boolean",
78
- );
79
- }
80
- }
81
-
82
- // EMEND TEMPLATE
83
- if (
84
- meta.templates.length &&
85
- meta.atomics.find((type) => type === "string") !== undefined
86
- )
87
- meta.templates.splice(0, meta.templates.length);
88
-
89
- // RETURNS
90
- return meta;
91
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+ import { MetadataObject } from "../../../metadata/MetadataObject";
5
+
6
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
+
8
+ import { MetadataCollection } from "../../MetadataCollection";
9
+ import { MetadataFactory } from "../../MetadataFactory";
10
+ import { iterate_metadata } from "./iterate_metadata";
11
+
12
+ export const explore_metadata =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (type: ts.Type | null, parentResolved: boolean): Metadata => {
17
+ // CONSTRUCT METADATA
18
+ const meta: Metadata = Metadata.initialize(parentResolved);
19
+ if (type !== null)
20
+ iterate_metadata(checker)(options)(collection)(
21
+ meta,
22
+ type,
23
+ parentResolved,
24
+ );
25
+
26
+ // SORT OBJECTS
27
+ if (meta.objects.length > 1) {
28
+ meta.objects.sort((x, y) =>
29
+ MetadataObject.covers(x, y)
30
+ ? -1
31
+ : MetadataObject.covers(y, x)
32
+ ? 1
33
+ : 0,
34
+ );
35
+ if (parentResolved === false)
36
+ meta.union_index = collection.getUnionIndex(meta);
37
+ }
38
+
39
+ // SORT ARRAYS AND TUPLES
40
+ if (meta.arrays.length > 1)
41
+ meta.arrays.sort((x, y) =>
42
+ Metadata.covers(x, y) ? -1 : Metadata.covers(y, x) ? 1 : 0,
43
+ );
44
+ if (meta.tuples.length > 1)
45
+ meta.tuples.sort((x, y) => {
46
+ const xt = Metadata.initialize();
47
+ const yt = Metadata.initialize();
48
+
49
+ xt.tuples.push(x);
50
+ yt.tuples.push(y);
51
+
52
+ return Metadata.covers(xt, yt)
53
+ ? -1
54
+ : Metadata.covers(yt, xt)
55
+ ? 1
56
+ : 0;
57
+ });
58
+
59
+ // EMEND ATOMICS
60
+ for (const type of meta.atomics) {
61
+ const index: number = meta.constants.findIndex(
62
+ (c) => c.type === type,
63
+ );
64
+ if (index !== -1) meta.constants.splice(index, 1);
65
+ }
66
+
67
+ // EMEND BOOLEAN
68
+ {
69
+ const index: number = meta.constants.findIndex(
70
+ (c) => c.type === "boolean",
71
+ );
72
+ if (index !== -1 && meta.constants[index]!.values.length === 2) {
73
+ meta.constants.splice(index, 1);
74
+ ArrayUtil.take(
75
+ meta.atomics,
76
+ (type) => type === "boolean",
77
+ () => "boolean",
78
+ );
79
+ }
80
+ }
81
+
82
+ // EMEND TEMPLATE
83
+ if (
84
+ meta.templates.length &&
85
+ meta.atomics.find((type) => type === "string") !== undefined
86
+ )
87
+ meta.templates.splice(0, meta.templates.length);
88
+
89
+ // RETURNS WITH VALIDATION
90
+ if (options.validate) options.validate(meta);
91
+ return meta;
92
+ };
@@ -1,80 +1,80 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- import { ArrayUtil } from "../../utils/ArrayUtil";
6
-
7
- import { MetadataCollection } from "../MetadataCollection";
8
- import { MetadataFactory } from "../MetadataFactory";
9
- import { iterate_metadata_array } from "./iterate_metadata_array";
10
- import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
11
- import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
12
- import { iterate_metadata_constant } from "./iterate_metadata_constant";
13
- import { iterate_metadata_map } from "./iterate_metadata_map";
14
- import { iterate_metadata_native } from "./iterate_metadata_native";
15
- import { iterate_metadata_object } from "./iterate_metadata_object";
16
- import { iterate_metadata_resolve } from "./iterate_metadata_resolve";
17
- import { iterate_metadata_set } from "./iterate_metadata_set";
18
- import { iterate_metadata_template } from "./iterate_metadata_template";
19
- import { iterate_metadata_tuple } from "./iterate_metadata_tuple";
20
- import { iterate_metadata_union } from "./iterate_metadata_union";
21
-
22
- export const iterate_metadata =
23
- (checker: ts.TypeChecker) =>
24
- (options: MetadataFactory.IOptions) =>
25
- (collection: MetadataCollection) =>
26
- (meta: Metadata, type: ts.Type, parentResolved: boolean): void => {
27
- if (type.isTypeParameter() === true)
28
- throw new Error(
29
- `Error on typia.MetadataFactory.generate(): non-specified generic argument on ${meta.getName()}.`,
30
- );
31
-
32
- // CHECK UNION & toJSON()
33
- if (
34
- iterate_metadata_union(checker)(options)(collection)(
35
- meta,
36
- type,
37
- parentResolved,
38
- ) ||
39
- iterate_metadata_resolve(checker)(options)(collection)(
40
- meta,
41
- type,
42
- parentResolved,
43
- )
44
- )
45
- return;
46
-
47
- // VALIDATE NODE
48
- const node: ts.TypeNode | undefined = checker.typeToTypeNode(
49
- type,
50
- undefined,
51
- undefined,
52
- );
53
- if (node === undefined) {
54
- // EMPTY TUPLE CASE CAN BE
55
- ArrayUtil.set(meta.tuples, [], () => "[]");
56
- return;
57
- }
58
-
59
- // ITERATE CASES
60
- iterate_metadata_coalesce(meta, type) ||
61
- iterate_metadata_constant(checker)(options)(meta, type) ||
62
- iterate_metadata_template(checker)(options)(collection)(
63
- meta,
64
- type,
65
- ) ||
66
- iterate_metadata_atomic(meta, type) ||
67
- iterate_metadata_tuple(checker)(options)(collection)(
68
- meta,
69
- type as ts.TupleType,
70
- ) ||
71
- iterate_metadata_array(checker)(options)(collection)(meta, type) ||
72
- iterate_metadata_native(checker)(meta, type) ||
73
- iterate_metadata_map(checker)(options)(collection)(meta, type) ||
74
- iterate_metadata_set(checker)(options)(collection)(meta, type) ||
75
- iterate_metadata_object(checker)(options)(collection)(
76
- meta,
77
- type,
78
- parentResolved,
79
- );
80
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+
5
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
6
+
7
+ import { MetadataCollection } from "../../MetadataCollection";
8
+ import { MetadataFactory } from "../../MetadataFactory";
9
+ import { iterate_metadata_array } from "./iterate_metadata_array";
10
+ import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
11
+ import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
12
+ import { iterate_metadata_constant } from "./iterate_metadata_constant";
13
+ import { iterate_metadata_map } from "./iterate_metadata_map";
14
+ import { iterate_metadata_native } from "./iterate_metadata_native";
15
+ import { iterate_metadata_object } from "./iterate_metadata_object";
16
+ import { iterate_metadata_resolve } from "./iterate_metadata_resolve";
17
+ import { iterate_metadata_set } from "./iterate_metadata_set";
18
+ import { iterate_metadata_template } from "./iterate_metadata_template";
19
+ import { iterate_metadata_tuple } from "./iterate_metadata_tuple";
20
+ import { iterate_metadata_union } from "./iterate_metadata_union";
21
+
22
+ export const iterate_metadata =
23
+ (checker: ts.TypeChecker) =>
24
+ (options: MetadataFactory.IOptions) =>
25
+ (collection: MetadataCollection) =>
26
+ (meta: Metadata, type: ts.Type, parentResolved: boolean): void => {
27
+ if (type.isTypeParameter() === true)
28
+ throw new Error(
29
+ `Error on typia.MetadataFactory.generate(): non-specified generic argument on ${meta.getName()}.`,
30
+ );
31
+
32
+ // CHECK UNION & toJSON()
33
+ if (
34
+ iterate_metadata_union(checker)(options)(collection)(
35
+ meta,
36
+ type,
37
+ parentResolved,
38
+ ) ||
39
+ iterate_metadata_resolve(checker)(options)(collection)(
40
+ meta,
41
+ type,
42
+ parentResolved,
43
+ )
44
+ )
45
+ return;
46
+
47
+ // VALIDATE NODE
48
+ const node: ts.TypeNode | undefined = checker.typeToTypeNode(
49
+ type,
50
+ undefined,
51
+ undefined,
52
+ );
53
+ if (node === undefined) {
54
+ // EMPTY TUPLE CASE CAN BE
55
+ ArrayUtil.set(meta.tuples, [], () => "[]");
56
+ return;
57
+ }
58
+
59
+ // ITERATE CASES
60
+ iterate_metadata_coalesce(meta, type) ||
61
+ iterate_metadata_constant(checker)(options)(meta, type) ||
62
+ iterate_metadata_template(checker)(options)(collection)(
63
+ meta,
64
+ type,
65
+ ) ||
66
+ iterate_metadata_atomic(meta, type) ||
67
+ iterate_metadata_tuple(checker)(options)(collection)(
68
+ meta,
69
+ type as ts.TupleType,
70
+ ) ||
71
+ iterate_metadata_array(checker)(options)(collection)(meta, type) ||
72
+ iterate_metadata_native(checker)(meta, type) ||
73
+ iterate_metadata_map(checker)(options)(collection)(meta, type) ||
74
+ iterate_metadata_set(checker)(options)(collection)(meta, type) ||
75
+ iterate_metadata_object(checker)(options)(collection)(
76
+ meta,
77
+ type,
78
+ parentResolved,
79
+ );
80
+ };