typia 7.0.0-dev.20241001 → 7.0.0-dev.20241002

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 (294) hide show
  1. package/lib/executable/TypiaGenerateWizard.js +1 -1
  2. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  3. package/lib/executable/TypiaSetupWizard.js +1 -1
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/setup/ArgumentParser.d.ts +1 -1
  6. package/lib/executable/setup/ArgumentParser.js +31 -33
  7. package/lib/executable/setup/ArgumentParser.js.map +1 -1
  8. package/lib/executable/setup/FileRetriever.d.ts +5 -2
  9. package/lib/executable/setup/FileRetriever.js +12 -21
  10. package/lib/executable/setup/FileRetriever.js.map +1 -1
  11. package/lib/executable/setup/PackageManager.js +4 -1
  12. package/lib/executable/setup/PackageManager.js.map +1 -1
  13. package/lib/factories/ExpressionFactory.d.ts +14 -7
  14. package/lib/factories/ExpressionFactory.js +26 -34
  15. package/lib/factories/ExpressionFactory.js.map +1 -1
  16. package/lib/factories/IdentifierFactory.d.ts +2 -2
  17. package/lib/factories/IdentifierFactory.js +10 -6
  18. package/lib/factories/IdentifierFactory.js.map +1 -1
  19. package/lib/factories/MetadataCollection.js +4 -1
  20. package/lib/factories/MetadataCollection.js.map +1 -1
  21. package/lib/factories/MetadataCommentTagFactory.js +133 -128
  22. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  23. package/lib/factories/MetadataFactory.js +1 -1
  24. package/lib/factories/MetadataFactory.js.map +1 -1
  25. package/lib/factories/MetadataTypeTagFactory.d.ts +14 -2
  26. package/lib/factories/MetadataTypeTagFactory.js +312 -267
  27. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  28. package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +4 -1
  29. package/lib/factories/MetadataTypeTagSchemaFactory.js +70 -61
  30. package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
  31. package/lib/factories/NumericRangeFactory.d.ts +2 -2
  32. package/lib/factories/NumericRangeFactory.js +2 -10
  33. package/lib/factories/NumericRangeFactory.js.map +1 -1
  34. package/lib/factories/StatementFactory.d.ts +14 -3
  35. package/lib/factories/StatementFactory.js +16 -8
  36. package/lib/factories/StatementFactory.js.map +1 -1
  37. package/lib/factories/TemplateFactory.js +24 -18
  38. package/lib/factories/TemplateFactory.js.map +1 -1
  39. package/lib/factories/TypeFactory.d.ts +10 -2
  40. package/lib/factories/TypeFactory.js +65 -53
  41. package/lib/factories/TypeFactory.js.map +1 -1
  42. package/lib/factories/internal/metadata/iterate_metadata.js +4 -1
  43. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  44. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +16 -11
  45. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  46. package/lib/factories/internal/metadata/iterate_metadata_escape.js +5 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_escape.js.map +1 -1
  48. package/lib/factories/internal/metadata/iterate_metadata_function.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +6 -1
  50. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  51. package/lib/factories/internal/metadata/iterate_metadata_map.js +5 -1
  52. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  53. package/lib/factories/internal/metadata/iterate_metadata_native.js +11 -3
  54. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata_set.js +5 -1
  56. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  57. package/lib/programmers/AssertProgrammer.js +16 -5
  58. package/lib/programmers/AssertProgrammer.js.map +1 -1
  59. package/lib/programmers/CheckerProgrammer.js +42 -35
  60. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  61. package/lib/programmers/FeatureProgrammer.js +21 -15
  62. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  63. package/lib/programmers/IsProgrammer.js +3 -2
  64. package/lib/programmers/IsProgrammer.js.map +1 -1
  65. package/lib/programmers/RandomProgrammer.js +88 -67
  66. package/lib/programmers/RandomProgrammer.js.map +1 -1
  67. package/lib/programmers/ValidateProgrammer.js +16 -7
  68. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  69. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js +30 -15
  70. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js.map +1 -1
  71. package/lib/programmers/functional/FunctionalAssertReturnProgrammer.js +16 -13
  72. package/lib/programmers/functional/FunctionalAssertReturnProgrammer.js.map +1 -1
  73. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js +11 -8
  74. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js.map +1 -1
  75. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js +8 -2
  76. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js.map +1 -1
  77. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +11 -5
  78. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  79. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +8 -2
  80. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  81. package/lib/programmers/helpers/CloneJoiner.js +9 -3
  82. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  83. package/lib/programmers/helpers/FunctionImporter.js +10 -7
  84. package/lib/programmers/helpers/FunctionImporter.js.map +1 -1
  85. package/lib/programmers/helpers/NotationJoiner.js +9 -3
  86. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  87. package/lib/programmers/helpers/PruneJoiner.js +2 -2
  88. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  89. package/lib/programmers/helpers/RandomJoiner.js +4 -1
  90. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  91. package/lib/programmers/helpers/StringifyJoinder.js +1 -1
  92. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  93. package/lib/programmers/helpers/UnionExplorer.js +7 -7
  94. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  95. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +8 -2
  96. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  97. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +8 -2
  98. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  99. package/lib/programmers/http/HttpAssertQueryProgrammer.js +8 -2
  100. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  101. package/lib/programmers/http/HttpFormDataProgrammer.js +14 -8
  102. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  103. package/lib/programmers/http/HttpHeadersProgrammer.js +20 -14
  104. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  105. package/lib/programmers/http/HttpIsFormDataProgrammer.js +12 -3
  106. package/lib/programmers/http/HttpIsFormDataProgrammer.js.map +1 -1
  107. package/lib/programmers/http/HttpIsHeadersProgrammer.js +12 -3
  108. package/lib/programmers/http/HttpIsHeadersProgrammer.js.map +1 -1
  109. package/lib/programmers/http/HttpIsQueryProgrammer.js +12 -3
  110. package/lib/programmers/http/HttpIsQueryProgrammer.js.map +1 -1
  111. package/lib/programmers/http/HttpParameterProgrammer.js +17 -10
  112. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  113. package/lib/programmers/http/HttpQueryProgrammer.js +14 -8
  114. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  115. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +8 -2
  116. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  117. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +8 -2
  118. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  119. package/lib/programmers/http/HttpValidateQueryProgrammer.js +8 -2
  120. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  121. package/lib/programmers/internal/check_array_length.js +1 -1
  122. package/lib/programmers/internal/check_array_length.js.map +1 -1
  123. package/lib/programmers/internal/check_bigint.js +1 -1
  124. package/lib/programmers/internal/check_bigint.js.map +1 -1
  125. package/lib/programmers/internal/check_dynamic_properties.js +7 -4
  126. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  127. package/lib/programmers/internal/check_everything.js +1 -1
  128. package/lib/programmers/internal/check_everything.js.map +1 -1
  129. package/lib/programmers/internal/check_native.js +1 -1
  130. package/lib/programmers/internal/check_native.js.map +1 -1
  131. package/lib/programmers/internal/check_number.js +1 -1
  132. package/lib/programmers/internal/check_number.js.map +1 -1
  133. package/lib/programmers/internal/check_string.js +1 -1
  134. package/lib/programmers/internal/check_string.js.map +1 -1
  135. package/lib/programmers/internal/check_union_array_like.js +25 -7
  136. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  137. package/lib/programmers/internal/prune_object_properties.js +1 -1
  138. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  139. package/lib/programmers/internal/random_custom.js +1 -1
  140. package/lib/programmers/internal/random_custom.js.map +1 -1
  141. package/lib/programmers/internal/stringify_dynamic_properties.js +4 -4
  142. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  143. package/lib/programmers/json/JsonAssertParseProgrammer.js +8 -2
  144. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  145. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +8 -2
  146. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  147. package/lib/programmers/json/JsonIsParseProgrammer.js +8 -2
  148. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  149. package/lib/programmers/json/JsonIsStringifyProgrammer.js +8 -2
  150. package/lib/programmers/json/JsonIsStringifyProgrammer.js.map +1 -1
  151. package/lib/programmers/json/JsonStringifyProgrammer.js +50 -43
  152. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  153. package/lib/programmers/json/JsonValidateParseProgrammer.js +8 -2
  154. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  155. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +12 -3
  156. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  157. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +8 -2
  158. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  159. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +12 -3
  160. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  161. package/lib/programmers/misc/MiscCloneProgrammer.js +60 -47
  162. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  163. package/lib/programmers/misc/MiscIsCloneProgrammer.js +8 -2
  164. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  165. package/lib/programmers/misc/MiscIsPruneProgrammer.js +8 -2
  166. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -1
  167. package/lib/programmers/misc/MiscPruneProgrammer.js +49 -42
  168. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  169. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +12 -3
  170. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  171. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +16 -4
  172. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  173. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +8 -2
  174. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  175. package/lib/programmers/notations/NotationGeneralProgrammer.js +45 -32
  176. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  177. package/lib/programmers/notations/NotationIsGeneralProgrammer.js +8 -2
  178. package/lib/programmers/notations/NotationIsGeneralProgrammer.js.map +1 -1
  179. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +12 -3
  180. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  181. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +8 -2
  182. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  183. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +8 -2
  184. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  185. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +51 -30
  186. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  187. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +57 -41
  188. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  189. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +12 -3
  190. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  191. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js +8 -2
  192. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js.map +1 -1
  193. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +8 -2
  194. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  195. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +12 -3
  196. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  197. package/lib/transformers/features/llm/LlmApplicationTransformer.js +5 -2
  198. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  199. package/package.json +1 -1
  200. package/src/executable/TypiaGenerateWizard.ts +1 -1
  201. package/src/executable/TypiaSetupWizard.ts +1 -1
  202. package/src/executable/setup/ArgumentParser.ts +27 -28
  203. package/src/executable/setup/FileRetriever.ts +14 -17
  204. package/src/executable/setup/PackageManager.ts +4 -3
  205. package/src/factories/ExpressionFactory.ts +98 -84
  206. package/src/factories/IdentifierFactory.ts +26 -7
  207. package/src/factories/MetadataCollection.ts +4 -1
  208. package/src/factories/MetadataCommentTagFactory.ts +97 -88
  209. package/src/factories/MetadataFactory.ts +2 -1
  210. package/src/factories/MetadataTypeTagFactory.ts +334 -285
  211. package/src/factories/MetadataTypeTagSchemaFactory.ts +75 -52
  212. package/src/factories/NumericRangeFactory.ts +8 -8
  213. package/src/factories/StatementFactory.ts +27 -11
  214. package/src/factories/TemplateFactory.ts +29 -21
  215. package/src/factories/TypeFactory.ts +80 -58
  216. package/src/factories/internal/metadata/iterate_metadata.ts +4 -1
  217. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +6 -4
  218. package/src/factories/internal/metadata/iterate_metadata_escape.ts +5 -3
  219. package/src/factories/internal/metadata/iterate_metadata_function.ts +4 -4
  220. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +6 -3
  221. package/src/factories/internal/metadata/iterate_metadata_map.ts +4 -3
  222. package/src/factories/internal/metadata/iterate_metadata_native.ts +12 -9
  223. package/src/factories/internal/metadata/iterate_metadata_set.ts +5 -1
  224. package/src/programmers/AssertProgrammer.ts +16 -5
  225. package/src/programmers/CheckerProgrammer.ts +16 -13
  226. package/src/programmers/FeatureProgrammer.ts +8 -8
  227. package/src/programmers/IsProgrammer.ts +4 -3
  228. package/src/programmers/RandomProgrammer.ts +37 -30
  229. package/src/programmers/ValidateProgrammer.ts +17 -10
  230. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +4 -4
  231. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +4 -4
  232. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +4 -4
  233. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +7 -7
  234. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +14 -8
  235. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +7 -7
  236. package/src/programmers/helpers/CloneJoiner.ts +13 -6
  237. package/src/programmers/helpers/FunctionImporter.ts +12 -11
  238. package/src/programmers/helpers/NotationJoiner.ts +13 -6
  239. package/src/programmers/helpers/PruneJoiner.ts +3 -2
  240. package/src/programmers/helpers/RandomJoiner.ts +7 -4
  241. package/src/programmers/helpers/StringifyJoinder.ts +1 -1
  242. package/src/programmers/helpers/UnionExplorer.ts +16 -11
  243. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +8 -2
  244. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +8 -2
  245. package/src/programmers/http/HttpAssertQueryProgrammer.ts +8 -2
  246. package/src/programmers/http/HttpFormDataProgrammer.ts +10 -6
  247. package/src/programmers/http/HttpHeadersProgrammer.ts +13 -9
  248. package/src/programmers/http/HttpIsFormDataProgrammer.ts +12 -6
  249. package/src/programmers/http/HttpIsHeadersProgrammer.ts +12 -6
  250. package/src/programmers/http/HttpIsQueryProgrammer.ts +12 -6
  251. package/src/programmers/http/HttpParameterProgrammer.ts +16 -11
  252. package/src/programmers/http/HttpQueryProgrammer.ts +10 -6
  253. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +8 -2
  254. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +8 -2
  255. package/src/programmers/http/HttpValidateQueryProgrammer.ts +8 -2
  256. package/src/programmers/internal/check_array_length.ts +1 -1
  257. package/src/programmers/internal/check_bigint.ts +1 -1
  258. package/src/programmers/internal/check_dynamic_properties.ts +10 -7
  259. package/src/programmers/internal/check_everything.ts +1 -1
  260. package/src/programmers/internal/check_native.ts +1 -1
  261. package/src/programmers/internal/check_number.ts +1 -1
  262. package/src/programmers/internal/check_string.ts +1 -1
  263. package/src/programmers/internal/check_union_array_like.ts +27 -17
  264. package/src/programmers/internal/prune_object_properties.ts +1 -1
  265. package/src/programmers/internal/random_custom.ts +2 -1
  266. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -160
  267. package/src/programmers/json/JsonAssertParseProgrammer.ts +8 -2
  268. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +8 -2
  269. package/src/programmers/json/JsonIsParseProgrammer.ts +8 -2
  270. package/src/programmers/json/JsonIsStringifyProgrammer.ts +8 -2
  271. package/src/programmers/json/JsonStringifyProgrammer.ts +17 -15
  272. package/src/programmers/json/JsonValidateParseProgrammer.ts +8 -2
  273. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +12 -6
  274. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +8 -2
  275. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +12 -3
  276. package/src/programmers/misc/MiscCloneProgrammer.ts +30 -23
  277. package/src/programmers/misc/MiscIsCloneProgrammer.ts +8 -2
  278. package/src/programmers/misc/MiscIsPruneProgrammer.ts +8 -2
  279. package/src/programmers/misc/MiscPruneProgrammer.ts +16 -14
  280. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +12 -6
  281. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +16 -7
  282. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +8 -2
  283. package/src/programmers/notations/NotationGeneralProgrammer.ts +26 -17
  284. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +8 -2
  285. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +12 -6
  286. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +8 -2
  287. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +8 -2
  288. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +48 -46
  289. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +42 -34
  290. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -6
  291. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +8 -2
  292. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +8 -2
  293. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +12 -6
  294. package/src/transformers/features/llm/LlmApplicationTransformer.ts +7 -6
@@ -11,33 +11,32 @@ export namespace ArgumentParser {
11
11
  action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
12
12
  ) => Promise<T>;
13
13
 
14
- export const parse =
15
- (pack: PackageManager) =>
16
- async <T>(
17
- inquiry: (
18
- pack: PackageManager,
19
- command: commander.Command,
20
- prompt: (opt?: inquirer.StreamOptions) => inquirer.PromptModule,
21
- action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
22
- ) => Promise<T>,
23
- ): Promise<T> => {
24
- // TAKE OPTIONS
25
- const action = (closure: (options: Partial<T>) => Promise<T>) =>
26
- new Promise<T>((resolve, reject) => {
27
- commander.program.action(async (options) => {
28
- try {
29
- resolve(await closure(options));
30
- } catch (exp) {
31
- reject(exp);
32
- }
33
- });
34
- commander.program.parseAsync().catch(reject);
14
+ export const parse = async <T>(
15
+ pack: PackageManager,
16
+ inquiry: (
17
+ pack: PackageManager,
18
+ command: commander.Command,
19
+ prompt: (opt?: inquirer.StreamOptions) => inquirer.PromptModule,
20
+ action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
21
+ ) => Promise<T>,
22
+ ): Promise<T> => {
23
+ // TAKE OPTIONS
24
+ const action = (closure: (options: Partial<T>) => Promise<T>) =>
25
+ new Promise<T>((resolve, reject) => {
26
+ commander.program.action(async (options) => {
27
+ try {
28
+ resolve(await closure(options));
29
+ } catch (exp) {
30
+ reject(exp);
31
+ }
35
32
  });
36
- return inquiry(
37
- pack,
38
- commander.program,
39
- inquirer.createPromptModule,
40
- action,
41
- );
42
- };
33
+ commander.program.parseAsync().catch(reject);
34
+ });
35
+ return inquiry(
36
+ pack,
37
+ commander.program,
38
+ inquirer.createPromptModule,
39
+ action,
40
+ );
41
+ };
43
42
  }
@@ -2,21 +2,18 @@ import fs from "fs";
2
2
  import path from "path";
3
3
 
4
4
  export namespace FileRetriever {
5
- export const directory =
6
- (name: string) =>
7
- (dir: string, depth: number = 0): string | null => {
8
- const location: string = path.join(dir, name);
9
- if (fs.existsSync(location)) return dir;
10
- else if (depth > 2) return null;
11
- return directory(name)(path.join(dir, ".."), depth + 1);
12
- };
13
-
14
- export const file =
15
- (name: string) =>
16
- (directory: string, depth: number = 0): string | null => {
17
- const location: string = path.join(directory, name);
18
- if (fs.existsSync(location)) return location;
19
- else if (depth > 2) return null;
20
- return file(name)(path.join(directory, ".."), depth + 1);
21
- };
5
+ export const directory = (props: {
6
+ file: string;
7
+ location: string;
8
+ depth?: number;
9
+ }): string | null => {
10
+ const location: string = path.join(props.location, props.file);
11
+ if (fs.existsSync(location)) return props.location;
12
+ else if ((props.depth ?? 0) > 2) return null;
13
+ return directory({
14
+ file: props.file,
15
+ location: path.join(props.location, ".."),
16
+ depth: (props.depth ?? 0) + 1,
17
+ });
18
+ };
22
19
  }
@@ -11,9 +11,10 @@ export class PackageManager {
11
11
  }
12
12
 
13
13
  public static async mount(): Promise<PackageManager> {
14
- const location: string | null = await FileRetriever.directory(
15
- "package.json",
16
- )(process.cwd());
14
+ const location: string | null = await FileRetriever.directory({
15
+ file: "package.json",
16
+ location: process.cwd(),
17
+ });
17
18
  if (location === null)
18
19
  throw new URIError(`Unable to find "package.json" file`);
19
20
 
@@ -31,68 +31,75 @@ export namespace ExpressionFactory {
31
31
  [input],
32
32
  );
33
33
 
34
- export const isObject =
35
- (options: { checkNull: boolean; checkArray: boolean }) =>
36
- (input: ts.Expression): ts.Expression => {
37
- const conditions: ts.Expression[] = [
34
+ export const isObject = (props: {
35
+ checkNull: boolean;
36
+ checkArray: boolean;
37
+ input: ts.Expression;
38
+ }): ts.Expression => {
39
+ const conditions: ts.Expression[] = [
40
+ ts.factory.createStrictEquality(
41
+ ts.factory.createStringLiteral("object"),
42
+ ts.factory.createTypeOfExpression(props.input),
43
+ ),
44
+ ];
45
+ if (props.checkNull === true)
46
+ conditions.push(
47
+ ts.factory.createStrictInequality(ts.factory.createNull(), props.input),
48
+ );
49
+ if (props.checkArray === true)
50
+ conditions.push(
38
51
  ts.factory.createStrictEquality(
39
- ts.factory.createStringLiteral("object"),
40
- ts.factory.createTypeOfExpression(input),
41
- ),
42
- ];
43
- if (options.checkNull === true)
44
- conditions.push(
45
- ts.factory.createStrictInequality(ts.factory.createNull(), input),
46
- );
47
- if (options.checkArray === true)
48
- conditions.push(
49
- ts.factory.createStrictEquality(
50
- ts.factory.createFalse(),
51
- ts.factory.createCallExpression(
52
- ts.factory.createIdentifier("Array.isArray"),
53
- undefined,
54
- [input],
55
- ),
52
+ ts.factory.createFalse(),
53
+ ts.factory.createCallExpression(
54
+ ts.factory.createIdentifier("Array.isArray"),
55
+ undefined,
56
+ [props.input],
56
57
  ),
57
- );
58
+ ),
59
+ );
58
60
 
59
- return conditions.length === 1
60
- ? conditions[0]!
61
- : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
62
- };
61
+ return conditions.length === 1
62
+ ? conditions[0]!
63
+ : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
64
+ };
63
65
 
64
- export const isInstanceOf =
65
- (type: string) =>
66
- (input: ts.Expression): ts.Expression => {
67
- return ts.factory.createBinaryExpression(
68
- input,
69
- ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
70
- ts.factory.createIdentifier(type),
71
- );
72
- };
66
+ export const isInstanceOf = (
67
+ type: string,
68
+ input: ts.Expression,
69
+ ): ts.Expression => {
70
+ return ts.factory.createBinaryExpression(
71
+ input,
72
+ ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
73
+ ts.factory.createIdentifier(type),
74
+ );
75
+ };
73
76
 
74
- export const coalesce =
75
- (x: ts.Expression) =>
76
- (y: ts.Expression): ts.Expression =>
77
- ts.factory.createBinaryExpression(
78
- x,
79
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
80
- y,
81
- );
77
+ export const coalesce = (x: ts.Expression, y: ts.Expression): ts.Expression =>
78
+ ts.factory.createBinaryExpression(
79
+ x,
80
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
81
+ y,
82
+ );
82
83
 
83
- export const currying =
84
- (target: ts.Expression) => (parameters: ts.Expression[]) => {
85
- if (parameters.length === 0)
86
- return ts.factory.createCallExpression(target, undefined, undefined);
87
- let prev: ts.CallExpression = ts.factory.createCallExpression(
88
- target,
84
+ export const currying = (props: {
85
+ function: ts.Expression;
86
+ arguments: ts.Expression[];
87
+ }) => {
88
+ if (props.arguments.length === 0)
89
+ return ts.factory.createCallExpression(
90
+ props.function,
91
+ undefined,
89
92
  undefined,
90
- [parameters[0]!],
91
93
  );
92
- for (const param of parameters.slice(1))
93
- prev = ts.factory.createCallExpression(prev, undefined, [param]);
94
- return prev;
95
- };
94
+ let prev: ts.CallExpression = ts.factory.createCallExpression(
95
+ props.function,
96
+ undefined,
97
+ [props.arguments[0]!],
98
+ );
99
+ for (const param of props.arguments.slice(1))
100
+ prev = ts.factory.createCallExpression(prev, undefined, [param]);
101
+ return prev;
102
+ };
96
103
 
97
104
  export const selfCall = (body: ts.ConciseBody) =>
98
105
  ts.isCallExpression(body)
@@ -112,39 +119,46 @@ export namespace ExpressionFactory {
112
119
  undefined,
113
120
  );
114
121
 
115
- export const getEscapedText =
116
- (printer: ts.Printer) =>
117
- (input: ts.Expression): string =>
118
- printer.printNode(ts.EmitHint.Expression, input, input.getSourceFile());
122
+ export const getEscapedText = (props: {
123
+ printer: ts.Printer;
124
+ input: ts.Expression;
125
+ }): string =>
126
+ props.printer.printNode(
127
+ ts.EmitHint.Expression,
128
+ props.input,
129
+ props.input.getSourceFile(),
130
+ );
119
131
 
120
- export const transpile =
121
- (context: ts.TransformationContext) => (script: string) => {
122
- const file: ts.SourceFile = ts.createSourceFile(
123
- `${RandomGenerator.uuid()}.ts`,
124
- script,
125
- ts.ScriptTarget.ESNext,
126
- true,
127
- ts.ScriptKind.TS,
132
+ export const transpile = (
133
+ transformer: ts.TransformationContext,
134
+ script: string,
135
+ ) => {
136
+ const file: ts.SourceFile = ts.createSourceFile(
137
+ `${RandomGenerator.uuid()}.ts`,
138
+ script,
139
+ ts.ScriptTarget.ESNext,
140
+ true,
141
+ ts.ScriptKind.TS,
142
+ );
143
+ const statement: ts.Statement | undefined = file.statements[0];
144
+ if (statement === undefined)
145
+ throw new ReferenceError(
146
+ "Error on ExpressionFactory.transpile(): no statement exists.",
128
147
  );
129
- const statement: ts.Statement | undefined = file.statements[0];
130
- if (statement === undefined)
131
- throw new ReferenceError(
132
- "Error on ExpressionFactory.transpile(): no statement exists.",
133
- );
134
- else if (!ts.isExpressionStatement(statement))
135
- throw new TypeError(
136
- "Error on ExpressionFactory.transpile(): statement is not an expression statement.",
148
+ else if (!ts.isExpressionStatement(statement))
149
+ throw new TypeError(
150
+ "Error on ExpressionFactory.transpile(): statement is not an expression statement.",
151
+ );
152
+ return (input: ts.Expression): ts.Expression => {
153
+ const visitor = (node: ts.Node): ts.Node => {
154
+ if (ts.isIdentifier(node) && node.text === "$input") return input;
155
+ return ts.visitEachChild(
156
+ (ts.factory as any).cloneNode(node),
157
+ visitor,
158
+ transformer,
137
159
  );
138
- return (input: ts.Expression): ts.Expression => {
139
- const visitor = (node: ts.Node): ts.Node => {
140
- if (ts.isIdentifier(node) && node.text === "$input") return input;
141
- return ts.visitEachChild(
142
- (ts.factory as any).cloneNode(node),
143
- visitor,
144
- context,
145
- );
146
- };
147
- return visitor(statement.expression) as ts.Expression;
148
160
  };
161
+ return visitor(statement.expression) as ts.Expression;
149
162
  };
163
+ };
150
164
  }
@@ -10,11 +10,27 @@ export namespace IdentifierFactory {
10
10
  ? ts.factory.createIdentifier(name)
11
11
  : ts.factory.createStringLiteral(name);
12
12
 
13
- export const access = (target: ts.Expression) => (property: string) => {
14
- const postfix = identifier(property);
13
+ export const access = (
14
+ input: ts.Expression,
15
+ key: string,
16
+ chain?: boolean,
17
+ ) => {
18
+ const postfix = identifier(key);
15
19
  return ts.isStringLiteral(postfix)
16
- ? ts.factory.createElementAccessExpression(target, postfix)
17
- : ts.factory.createPropertyAccessExpression(target, postfix);
20
+ ? chain === true
21
+ ? ts.factory.createElementAccessChain(
22
+ input,
23
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
24
+ postfix,
25
+ )
26
+ : ts.factory.createElementAccessExpression(input, postfix)
27
+ : chain === true
28
+ ? ts.factory.createPropertyAccessChain(
29
+ input,
30
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
31
+ postfix,
32
+ )
33
+ : ts.factory.createPropertyAccessExpression(input, postfix);
18
34
  };
19
35
 
20
36
  export const getName = (input: ts.Expression): string => {
@@ -29,7 +45,7 @@ export namespace IdentifierFactory {
29
45
  return `${getName(input.expression)}[${getName(
30
46
  input.argumentExpression,
31
47
  )}]`;
32
- return "uknown";
48
+ return "unknown";
33
49
  };
34
50
 
35
51
  export const postfix = (str: string): string =>
@@ -39,8 +55,11 @@ export namespace IdentifierFactory {
39
55
 
40
56
  export const parameter = (
41
57
  name: string | ts.BindingName,
42
- type?: ts.TypeNode,
43
- init?: ts.Expression | ts.PunctuationToken<ts.SyntaxKind.QuestionToken>,
58
+ type?: ts.TypeNode | undefined,
59
+ init?:
60
+ | ts.Expression
61
+ | ts.PunctuationToken<ts.SyntaxKind.QuestionToken>
62
+ | undefined,
44
63
  ): ts.ParameterDeclaration => {
45
64
  // instead of ts.version >= "4.8"
46
65
  if (ts.getDecorators !== undefined)
@@ -80,7 +80,10 @@ export class MetadataCollection {
80
80
 
81
81
  private getName(checker: ts.TypeChecker, type: ts.Type): string {
82
82
  const name: string = (() => {
83
- const str: string = TypeFactory.getFullName(checker)(type);
83
+ const str: string = TypeFactory.getFullName({
84
+ checker,
85
+ type,
86
+ });
84
87
  return this.options?.replace ? this.options.replace(str) : str;
85
88
  })();
86
89
 
@@ -15,103 +15,112 @@ import { MetadataTypeTagFactory } from "./MetadataTypeTagFactory";
15
15
  * @internal
16
16
  */
17
17
  export namespace MetadataCommentTagFactory {
18
- export const analyze =
19
- (errors: MetadataFactory.IError[]) =>
20
- (metadata: Metadata) =>
21
- (
22
- commentList: ts.JSDocTagInfo[],
23
- explore: MetadataFactory.IExplore,
24
- ): void => {
25
- // PREPARE MESSAGE CONTAINER
26
- const messages: string[] = [];
27
- const report = (msg: string) => {
28
- messages.push(msg);
29
- return null;
30
- };
31
- const validateReport =
32
- (property: string | null) =>
33
- (msg: string): false => {
34
- messages.push(
35
- `the property ${
36
- property === null ? `["typia.tag"]` : `["typia.tag.${property}"]`
37
- } ${msg}.`,
38
- );
39
- return false;
40
- };
18
+ export const analyze = (props: {
19
+ errors: MetadataFactory.IError[];
20
+ metadata: Metadata;
21
+ tags: ts.JSDocTagInfo[];
22
+ explore: MetadataFactory.IExplore;
23
+ }): void => {
24
+ // PREPARE MESSAGE CONTAINER
25
+ const messages: string[] = [];
26
+ const report = (msg: string) => {
27
+ messages.push(msg);
28
+ return null;
29
+ };
30
+ const validateReport = (next: {
31
+ property: string | null;
32
+ message: string;
33
+ }): false => {
34
+ messages.push(
35
+ `the property ${
36
+ next.property === null
37
+ ? `["typia.tag"]`
38
+ : `["typia.tag.${next.property}"]`
39
+ } ${next.message}.`,
40
+ );
41
+ return false;
42
+ };
41
43
 
42
- // VALIDATE AND CONSTRUCT COMMENT TAGS
43
- for (const comment of commentList) {
44
- const tagger: TagRecord | null = parse(report)(comment);
45
- if (tagger === null) continue;
46
- for (const [key, value] of Object.entries(tagger)) {
47
- const filtered: IMetadataTypeTag[] = value.filter(
48
- (v) => v.validate !== null,
49
- ) as IMetadataTypeTag[];
50
- if (key === "array") {
51
- if (metadata.arrays.length === 0) {
52
- report(`requires array type`);
53
- continue;
54
- }
55
- for (const a of metadata.arrays) {
56
- Writable(a).tags = a.tags.filter((x) =>
57
- MetadataTypeTagFactory.validate(validateReport)("array")([
58
- ...x,
59
- ...filtered,
60
- ]),
61
- );
62
- if (a.tags.length === 0) a.tags.push(filtered);
63
- else for (const tags of a.tags) tags.push(...filtered);
64
- }
65
- } else {
66
- const atomic = metadata.atomics.find((a) => a.type == key);
67
- if (atomic === undefined)
68
- if (key === "bigint" || key === "number") {
69
- const opposite = key === "bigint" ? "number" : "bigint";
70
- if (
71
- tagger[opposite] !== undefined &&
72
- metadata.atomics.some((a) => a.type === opposite)
73
- )
74
- continue;
75
- } else if (
76
- key === "string" &&
77
- value[0]?.kind === "format" &&
78
- value[0]?.value === "date-time"
44
+ // VALIDATE AND CONSTRUCT COMMENT TAGS
45
+ for (const tag of props.tags) {
46
+ const tagger: TagRecord | null = parse({
47
+ report,
48
+ tag,
49
+ });
50
+ if (tagger === null) continue;
51
+ for (const [key, value] of Object.entries(tagger)) {
52
+ const filtered: IMetadataTypeTag[] = value.filter(
53
+ (v) => v.validate !== null,
54
+ ) as IMetadataTypeTag[];
55
+ if (key === "array") {
56
+ if (props.metadata.arrays.length === 0) {
57
+ report(`requires array type`);
58
+ continue;
59
+ }
60
+ for (const a of props.metadata.arrays) {
61
+ Writable(a).tags = a.tags.filter((x) =>
62
+ MetadataTypeTagFactory.validate({
63
+ report: validateReport,
64
+ type: "array",
65
+ tags: [...x, ...filtered],
66
+ }),
67
+ );
68
+ if (a.tags.length === 0) a.tags.push(filtered);
69
+ else for (const tags of a.tags) tags.push(...filtered);
70
+ }
71
+ } else {
72
+ const atomic = props.metadata.atomics.find((a) => a.type == key);
73
+ if (atomic === undefined)
74
+ if (key === "bigint" || key === "number") {
75
+ const opposite = key === "bigint" ? "number" : "bigint";
76
+ if (
77
+ tagger[opposite] !== undefined &&
78
+ props.metadata.atomics.some((a) => a.type === opposite)
79
79
  )
80
80
  continue;
81
- else report(`requires ${key} type`);
82
- else {
83
- Writable(atomic).tags = atomic.tags.filter((x) =>
84
- MetadataTypeTagFactory.validate(validateReport)(
85
- key as "string",
86
- )([...x, ...filtered]),
87
- );
88
- if (atomic.tags.length === 0) atomic.tags.push(filtered);
89
- else for (const tags of atomic.tags) tags.push(...filtered);
90
- }
81
+ } else if (
82
+ key === "string" &&
83
+ value[0]?.kind === "format" &&
84
+ value[0]?.value === "date-time"
85
+ )
86
+ continue;
87
+ else report(`requires ${key} type`);
88
+ else {
89
+ Writable(atomic).tags = atomic.tags.filter((x) =>
90
+ MetadataTypeTagFactory.validate({
91
+ report: validateReport,
92
+ type: key as "string",
93
+ tags: [...x, ...filtered],
94
+ }),
95
+ );
96
+ if (atomic.tags.length === 0) atomic.tags.push(filtered);
97
+ else for (const tags of atomic.tags) tags.push(...filtered);
91
98
  }
92
99
  }
93
100
  }
101
+ }
94
102
 
95
- // DO REPORT
96
- if (messages.length !== 0)
97
- errors.push({
98
- name: "comment tag(s)",
99
- explore,
100
- messages,
101
- });
102
- };
103
+ // DO REPORT
104
+ if (messages.length !== 0)
105
+ props.errors.push({
106
+ name: "comment tag(s)",
107
+ explore: props.explore,
108
+ messages,
109
+ });
110
+ };
103
111
 
104
- const parse =
105
- (report: (msg: string) => null) =>
106
- (comment: ts.JSDocTagInfo): TagRecord | null => {
107
- const parser = PARSER[comment.name];
108
- if (parser === undefined) return {};
112
+ const parse = (props: {
113
+ report: (msg: string) => null;
114
+ tag: ts.JSDocTagInfo;
115
+ }): TagRecord | null => {
116
+ const next = PARSER[props.tag.name];
117
+ if (next === undefined) return {};
109
118
 
110
- const text = (comment.text || [])[0]?.text;
111
- if (text === undefined && comment.name !== "uniqueItems")
112
- return report(`no comment tag value`);
113
- return parser(report)(text!);
114
- };
119
+ const text = (props.tag.text || [])[0]?.text;
120
+ if (text === undefined && props.tag.name !== "uniqueItems")
121
+ return props.report(`no comment tag value`);
122
+ return next(props.report)(text!);
123
+ };
115
124
  }
116
125
 
117
126
  type TagRecord = {
@@ -162,7 +162,8 @@ export namespace MetadataFactory {
162
162
  (t) => t.validate !== undefined && t.predicate === undefined,
163
163
  ))
164
164
  try {
165
- tag.predicate = ExpressionFactory.transpile(props.transformer)(
165
+ tag.predicate = ExpressionFactory.transpile(
166
+ props.transformer,
166
167
  tag.validate!,
167
168
  );
168
169
  } catch {