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

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 (308) 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 +6 -3
  20. package/lib/factories/MetadataCollection.js.map +1 -1
  21. package/lib/factories/MetadataCommentTagFactory.js +414 -330
  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/helpers/UnionPredicator.js +1 -1
  96. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  97. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +8 -2
  98. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  99. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +8 -2
  100. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  101. package/lib/programmers/http/HttpAssertQueryProgrammer.js +8 -2
  102. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  103. package/lib/programmers/http/HttpFormDataProgrammer.js +14 -8
  104. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  105. package/lib/programmers/http/HttpHeadersProgrammer.js +21 -15
  106. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  107. package/lib/programmers/http/HttpIsFormDataProgrammer.js +12 -3
  108. package/lib/programmers/http/HttpIsFormDataProgrammer.js.map +1 -1
  109. package/lib/programmers/http/HttpIsHeadersProgrammer.js +12 -3
  110. package/lib/programmers/http/HttpIsHeadersProgrammer.js.map +1 -1
  111. package/lib/programmers/http/HttpIsQueryProgrammer.js +12 -3
  112. package/lib/programmers/http/HttpIsQueryProgrammer.js.map +1 -1
  113. package/lib/programmers/http/HttpParameterProgrammer.js +17 -10
  114. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  115. package/lib/programmers/http/HttpQueryProgrammer.js +14 -8
  116. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  117. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +8 -2
  118. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  119. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +8 -2
  120. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  121. package/lib/programmers/http/HttpValidateQueryProgrammer.js +8 -2
  122. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  123. package/lib/programmers/internal/check_array_length.js +1 -1
  124. package/lib/programmers/internal/check_array_length.js.map +1 -1
  125. package/lib/programmers/internal/check_bigint.js +1 -1
  126. package/lib/programmers/internal/check_bigint.js.map +1 -1
  127. package/lib/programmers/internal/check_dynamic_properties.js +7 -4
  128. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  129. package/lib/programmers/internal/check_everything.js +1 -1
  130. package/lib/programmers/internal/check_everything.js.map +1 -1
  131. package/lib/programmers/internal/check_native.js +1 -1
  132. package/lib/programmers/internal/check_native.js.map +1 -1
  133. package/lib/programmers/internal/check_number.js +1 -1
  134. package/lib/programmers/internal/check_number.js.map +1 -1
  135. package/lib/programmers/internal/check_string.js +1 -1
  136. package/lib/programmers/internal/check_string.js.map +1 -1
  137. package/lib/programmers/internal/check_union_array_like.js +25 -7
  138. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  139. package/lib/programmers/internal/prune_object_properties.js +1 -1
  140. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  141. package/lib/programmers/internal/random_custom.js +1 -1
  142. package/lib/programmers/internal/random_custom.js.map +1 -1
  143. package/lib/programmers/internal/stringify_dynamic_properties.js +4 -4
  144. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  145. package/lib/programmers/json/JsonAssertParseProgrammer.js +8 -2
  146. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  147. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +8 -2
  148. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  149. package/lib/programmers/json/JsonIsParseProgrammer.js +8 -2
  150. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  151. package/lib/programmers/json/JsonIsStringifyProgrammer.js +8 -2
  152. package/lib/programmers/json/JsonIsStringifyProgrammer.js.map +1 -1
  153. package/lib/programmers/json/JsonStringifyProgrammer.js +50 -43
  154. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  155. package/lib/programmers/json/JsonValidateParseProgrammer.js +8 -2
  156. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  157. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +12 -3
  158. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  159. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +8 -2
  160. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  161. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +12 -3
  162. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  163. package/lib/programmers/misc/MiscCloneProgrammer.js +60 -47
  164. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  165. package/lib/programmers/misc/MiscIsCloneProgrammer.js +8 -2
  166. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  167. package/lib/programmers/misc/MiscIsPruneProgrammer.js +8 -2
  168. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -1
  169. package/lib/programmers/misc/MiscPruneProgrammer.js +49 -42
  170. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  171. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +12 -3
  172. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  173. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +16 -4
  174. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  175. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +8 -2
  176. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  177. package/lib/programmers/notations/NotationGeneralProgrammer.js +45 -32
  178. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  179. package/lib/programmers/notations/NotationIsGeneralProgrammer.js +8 -2
  180. package/lib/programmers/notations/NotationIsGeneralProgrammer.js.map +1 -1
  181. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +12 -3
  182. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  183. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +8 -2
  184. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  185. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +8 -2
  186. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  187. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +51 -30
  188. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  189. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +57 -41
  190. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  191. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +12 -3
  192. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  193. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js +8 -2
  194. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js.map +1 -1
  195. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  196. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  197. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +8 -2
  198. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  199. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +12 -3
  200. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  201. package/lib/transformers/features/llm/LlmApplicationTransformer.js +5 -2
  202. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  203. package/lib/utils/MapUtil.d.ts +1 -1
  204. package/lib/utils/MapUtil.js +7 -9
  205. package/lib/utils/MapUtil.js.map +1 -1
  206. package/lib/utils/NameEncoder.d.ts +2 -2
  207. package/lib/utils/NameEncoder.js +4 -6
  208. package/lib/utils/NameEncoder.js.map +1 -1
  209. package/package.json +1 -1
  210. package/src/executable/TypiaGenerateWizard.ts +1 -1
  211. package/src/executable/TypiaSetupWizard.ts +1 -1
  212. package/src/executable/setup/ArgumentParser.ts +27 -28
  213. package/src/executable/setup/FileRetriever.ts +14 -17
  214. package/src/executable/setup/PackageManager.ts +4 -3
  215. package/src/factories/ExpressionFactory.ts +98 -84
  216. package/src/factories/IdentifierFactory.ts +26 -7
  217. package/src/factories/MetadataCollection.ts +7 -3
  218. package/src/factories/MetadataCommentTagFactory.ts +306 -218
  219. package/src/factories/MetadataFactory.ts +2 -1
  220. package/src/factories/MetadataTypeTagFactory.ts +334 -285
  221. package/src/factories/MetadataTypeTagSchemaFactory.ts +75 -52
  222. package/src/factories/NumericRangeFactory.ts +8 -8
  223. package/src/factories/StatementFactory.ts +27 -11
  224. package/src/factories/TemplateFactory.ts +29 -21
  225. package/src/factories/TypeFactory.ts +80 -58
  226. package/src/factories/internal/metadata/iterate_metadata.ts +4 -1
  227. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +6 -4
  228. package/src/factories/internal/metadata/iterate_metadata_escape.ts +5 -3
  229. package/src/factories/internal/metadata/iterate_metadata_function.ts +4 -4
  230. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +6 -3
  231. package/src/factories/internal/metadata/iterate_metadata_map.ts +4 -3
  232. package/src/factories/internal/metadata/iterate_metadata_native.ts +12 -9
  233. package/src/factories/internal/metadata/iterate_metadata_set.ts +5 -1
  234. package/src/programmers/AssertProgrammer.ts +16 -5
  235. package/src/programmers/CheckerProgrammer.ts +16 -13
  236. package/src/programmers/FeatureProgrammer.ts +8 -8
  237. package/src/programmers/IsProgrammer.ts +4 -3
  238. package/src/programmers/RandomProgrammer.ts +37 -30
  239. package/src/programmers/ValidateProgrammer.ts +17 -10
  240. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +4 -4
  241. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +4 -4
  242. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +4 -4
  243. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +7 -7
  244. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +14 -8
  245. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +7 -7
  246. package/src/programmers/helpers/CloneJoiner.ts +13 -6
  247. package/src/programmers/helpers/FunctionImporter.ts +12 -11
  248. package/src/programmers/helpers/NotationJoiner.ts +13 -6
  249. package/src/programmers/helpers/PruneJoiner.ts +3 -2
  250. package/src/programmers/helpers/RandomJoiner.ts +7 -4
  251. package/src/programmers/helpers/StringifyJoinder.ts +1 -1
  252. package/src/programmers/helpers/UnionExplorer.ts +16 -11
  253. package/src/programmers/helpers/UnionPredicator.ts +1 -1
  254. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +8 -2
  255. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +8 -2
  256. package/src/programmers/http/HttpAssertQueryProgrammer.ts +8 -2
  257. package/src/programmers/http/HttpFormDataProgrammer.ts +10 -6
  258. package/src/programmers/http/HttpHeadersProgrammer.ts +14 -10
  259. package/src/programmers/http/HttpIsFormDataProgrammer.ts +12 -6
  260. package/src/programmers/http/HttpIsHeadersProgrammer.ts +12 -6
  261. package/src/programmers/http/HttpIsQueryProgrammer.ts +12 -6
  262. package/src/programmers/http/HttpParameterProgrammer.ts +16 -11
  263. package/src/programmers/http/HttpQueryProgrammer.ts +10 -6
  264. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +8 -2
  265. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +8 -2
  266. package/src/programmers/http/HttpValidateQueryProgrammer.ts +8 -2
  267. package/src/programmers/internal/check_array_length.ts +1 -1
  268. package/src/programmers/internal/check_bigint.ts +1 -1
  269. package/src/programmers/internal/check_dynamic_properties.ts +10 -7
  270. package/src/programmers/internal/check_everything.ts +1 -1
  271. package/src/programmers/internal/check_native.ts +1 -1
  272. package/src/programmers/internal/check_number.ts +1 -1
  273. package/src/programmers/internal/check_string.ts +1 -1
  274. package/src/programmers/internal/check_union_array_like.ts +27 -17
  275. package/src/programmers/internal/prune_object_properties.ts +1 -1
  276. package/src/programmers/internal/random_custom.ts +2 -1
  277. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -160
  278. package/src/programmers/json/JsonAssertParseProgrammer.ts +8 -2
  279. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +8 -2
  280. package/src/programmers/json/JsonIsParseProgrammer.ts +8 -2
  281. package/src/programmers/json/JsonIsStringifyProgrammer.ts +8 -2
  282. package/src/programmers/json/JsonStringifyProgrammer.ts +17 -15
  283. package/src/programmers/json/JsonValidateParseProgrammer.ts +8 -2
  284. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +12 -6
  285. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +8 -2
  286. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +12 -3
  287. package/src/programmers/misc/MiscCloneProgrammer.ts +30 -23
  288. package/src/programmers/misc/MiscIsCloneProgrammer.ts +8 -2
  289. package/src/programmers/misc/MiscIsPruneProgrammer.ts +8 -2
  290. package/src/programmers/misc/MiscPruneProgrammer.ts +16 -14
  291. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +12 -6
  292. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +16 -7
  293. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +8 -2
  294. package/src/programmers/notations/NotationGeneralProgrammer.ts +26 -17
  295. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +8 -2
  296. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +12 -6
  297. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +8 -2
  298. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +8 -2
  299. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +48 -46
  300. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +42 -34
  301. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -6
  302. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +8 -2
  303. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +1 -1
  304. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +8 -2
  305. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +12 -6
  306. package/src/transformers/features/llm/LlmApplicationTransformer.ts +7 -6
  307. package/src/utils/MapUtil.ts +11 -9
  308. package/src/utils/NameEncoder.ts +4 -4
@@ -10,185 +10,241 @@ import { MetadataFactory } from "./MetadataFactory";
10
10
  import { MetadataTypeTagFactory } from "./MetadataTypeTagFactory";
11
11
 
12
12
  /**
13
- * Extremely hard coded, but no reason to maintain.
14
- *
15
13
  * @internal
16
14
  */
17
15
  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
- };
16
+ export const analyze = (props: {
17
+ errors: MetadataFactory.IError[];
18
+ metadata: Metadata;
19
+ tags: ts.JSDocTagInfo[];
20
+ explore: MetadataFactory.IExplore;
21
+ }): void => {
22
+ // PREPARE MESSAGE CONTAINER
23
+ const messages: string[] = [];
24
+ const report = (msg: string) => {
25
+ messages.push(msg);
26
+ return null;
27
+ };
28
+ const validateReport = (next: {
29
+ property: string | null;
30
+ message: string;
31
+ }): false => {
32
+ messages.push(
33
+ `the property ${
34
+ next.property === null
35
+ ? `["typia.tag"]`
36
+ : `["typia.tag.${next.property}"]`
37
+ } ${next.message}.`,
38
+ );
39
+ return false;
40
+ };
41
41
 
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"
42
+ // VALIDATE AND CONSTRUCT COMMENT TAGS
43
+ for (const tag of props.tags) {
44
+ const tagger: TagRecord | null = parse({
45
+ report,
46
+ tag,
47
+ });
48
+ if (tagger === null) continue;
49
+ for (const [key, value] of Object.entries(tagger)) {
50
+ const filtered: IMetadataTypeTag[] = value.filter(
51
+ (v) => v.validate !== null,
52
+ ) as IMetadataTypeTag[];
53
+ if (key === "array") {
54
+ if (props.metadata.arrays.length === 0) {
55
+ report(`requires array type`);
56
+ continue;
57
+ }
58
+ for (const a of props.metadata.arrays) {
59
+ Writable(a).tags = a.tags.filter((x) =>
60
+ MetadataTypeTagFactory.validate({
61
+ report: validateReport,
62
+ type: "array",
63
+ tags: [...x, ...filtered],
64
+ }),
65
+ );
66
+ if (a.tags.length === 0) a.tags.push(filtered);
67
+ else for (const tags of a.tags) tags.push(...filtered);
68
+ }
69
+ } else {
70
+ const atomic = props.metadata.atomics.find((a) => a.type == key);
71
+ if (atomic === undefined)
72
+ if (key === "bigint" || key === "number") {
73
+ const opposite = key === "bigint" ? "number" : "bigint";
74
+ if (
75
+ tagger[opposite] !== undefined &&
76
+ props.metadata.atomics.some((a) => a.type === opposite)
79
77
  )
80
78
  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
- }
79
+ } else if (
80
+ key === "string" &&
81
+ value[0]?.kind === "format" &&
82
+ value[0]?.value === "date-time"
83
+ )
84
+ continue;
85
+ else report(`requires ${key} type`);
86
+ else {
87
+ Writable(atomic).tags = atomic.tags.filter((x) =>
88
+ MetadataTypeTagFactory.validate({
89
+ report: validateReport,
90
+ type: key as "string",
91
+ tags: [...x, ...filtered],
92
+ }),
93
+ );
94
+ if (atomic.tags.length === 0) atomic.tags.push(filtered);
95
+ else for (const tags of atomic.tags) tags.push(...filtered);
91
96
  }
92
97
  }
93
98
  }
99
+ }
94
100
 
95
- // DO REPORT
96
- if (messages.length !== 0)
97
- errors.push({
98
- name: "comment tag(s)",
99
- explore,
100
- messages,
101
- });
102
- };
101
+ // DO REPORT
102
+ if (messages.length !== 0)
103
+ props.errors.push({
104
+ name: "comment tag(s)",
105
+ explore: props.explore,
106
+ messages,
107
+ });
108
+ };
103
109
 
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 {};
110
+ const parse = (props: {
111
+ report: (msg: string) => null;
112
+ tag: ts.JSDocTagInfo;
113
+ }): TagRecord | null => {
114
+ const next = PARSER[props.tag.name];
115
+ if (next === undefined) return {};
109
116
 
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
- };
117
+ const value = (props.tag.text || [])[0]?.text;
118
+ if (value === undefined && props.tag.name !== "uniqueItems")
119
+ return props.report(`no comment tag value`);
120
+ return next({
121
+ report: props.report,
122
+ value: value!,
123
+ });
124
+ };
115
125
  }
116
126
 
127
+ /**
128
+ * @internal
129
+ */
117
130
  type TagRecord = {
118
131
  [P in Target]?: NotDeterminedTypeTag[];
119
132
  };
133
+
134
+ /**
135
+ * @internal
136
+ */
120
137
  type Target = "bigint" | "number" | "string" | "array";
138
+
139
+ /**
140
+ * @internal
141
+ */
121
142
  type NotDeterminedTypeTag = Omit<IMetadataTypeTag, "validate" | "schema"> & {
122
143
  validate: string | null;
123
144
  schema: object | undefined;
124
145
  };
125
146
 
147
+ /**
148
+ * @internal
149
+ */
126
150
  const PARSER: Record<
127
151
  string,
128
- (report: (msg: string) => null) => (text: string) => {
152
+ (props: { report: (msg: string) => null; value: string }) => {
129
153
  [P in Target]?: NotDeterminedTypeTag[];
130
154
  }
131
155
  > = {
132
156
  /* -----------------------------------------------------------
133
157
  ARRAY
134
158
  ----------------------------------------------------------- */
135
- items: (report) => (Value) => ({
159
+ items: ({ report, value }) => ({
136
160
  array: [
137
161
  {
138
- name: `MinItems<${Value}>`,
162
+ name: `MinItems<${value}>`,
139
163
  target: "array",
140
164
  kind: "minItems",
141
- value: parse_integer(report)(true)(Value),
142
- validate: `${Value} <= $input.length`,
165
+ value: parse_integer({
166
+ report,
167
+ value,
168
+ unsigned: true,
169
+ }),
170
+ validate: `${value} <= $input.length`,
143
171
  exclusive: true,
144
172
  schema: {
145
- minItems: parse_integer(report)(true)(Value),
173
+ minItems: parse_integer({
174
+ report,
175
+ value,
176
+ unsigned: true,
177
+ }),
146
178
  },
147
179
  },
148
180
  {
149
- name: `MaxItems<${Value}>`,
181
+ name: `MaxItems<${value}>`,
150
182
  target: "array",
151
183
  kind: "maxItems",
152
- value: parse_integer(report)(true)(Value),
153
- validate: `$input.length <= ${Value}`,
184
+ value: parse_integer({
185
+ report,
186
+ value,
187
+ unsigned: true,
188
+ }),
189
+ validate: `$input.length <= ${value}`,
154
190
  exclusive: true,
155
191
  schema: {
156
- maxItems: parse_integer(report)(true)(Value),
192
+ maxItems: parse_integer({
193
+ report,
194
+ unsigned: true,
195
+ value,
196
+ }),
157
197
  },
158
198
  },
159
199
  ],
160
200
  }),
161
- minItems: (report) => (Value) => ({
201
+ minItems: ({ report, value }) => ({
162
202
  array: [
163
203
  {
164
- name: `MinItems<${Value}>`,
204
+ name: `MinItems<${value}>`,
165
205
  target: "array",
166
206
  kind: "minItems",
167
- value: parse_integer(report)(true)(Value),
168
- validate: `${Value} <= $input.length`,
207
+ value: parse_integer({
208
+ report,
209
+ value,
210
+ unsigned: true,
211
+ }),
212
+ validate: `${value} <= $input.length`,
169
213
  exclusive: true,
170
214
  schema: {
171
- minItems: parse_integer(report)(true)(Value),
215
+ minItems: parse_integer({
216
+ report,
217
+ value,
218
+ unsigned: true,
219
+ }),
172
220
  },
173
221
  },
174
222
  ],
175
223
  }),
176
- maxItems: (report) => (Value) => ({
224
+ maxItems: ({ report, value }) => ({
177
225
  array: [
178
226
  {
179
- name: `MaxItems<${Value}>`,
227
+ name: `MaxItems<${value}>`,
180
228
  target: "array",
181
229
  kind: "maxItems",
182
- value: parse_integer(report)(true)(Value),
183
- validate: `$input.length <= ${Value}`,
230
+ value: parse_integer({
231
+ report,
232
+ value,
233
+ unsigned: true,
234
+ }),
235
+ validate: `$input.length <= ${value}`,
184
236
  exclusive: true,
185
237
  schema: {
186
- maxItems: parse_integer(report)(true)(Value),
238
+ maxItems: parse_integer({
239
+ report,
240
+ value,
241
+ unsigned: true,
242
+ }),
187
243
  },
188
244
  },
189
245
  ],
190
246
  }),
191
- uniqueItems: () => () => ({
247
+ uniqueItems: () => ({
192
248
  array: [
193
249
  {
194
250
  name: `UniqueItems`,
@@ -207,54 +263,54 @@ const PARSER: Record<
207
263
  /* -----------------------------------------------------------
208
264
  NUMBER
209
265
  ----------------------------------------------------------- */
210
- type: () => (Value) => {
266
+ type: ({ value }) => {
211
267
  // EMENDATIONS
212
- if (Value.startsWith("{") && Value.endsWith("}"))
213
- Value = Value.substring(1, Value.length - 1);
214
- if (Value === "int") Value = "int32";
215
- else if (Value === "uint") Value = "uint32";
268
+ if (value.startsWith("{") && value.endsWith("}"))
269
+ value = value.substring(1, value.length - 1);
270
+ if (value === "int") value = "int32";
271
+ else if (value === "uint") value = "uint32";
216
272
 
217
273
  // MUST BE ONE OF THEM
218
274
  if (
219
275
  ["int32", "uint32", "int64", "uint64", "float", "double"].includes(
220
- Value,
276
+ value,
221
277
  ) === false
222
278
  )
223
279
  return {};
224
280
  return {
225
281
  number: [
226
282
  {
227
- name: `Type<${JSON.stringify(Value)}>`,
283
+ name: `Type<${JSON.stringify(value)}>`,
228
284
  target: "number",
229
285
  kind: "type",
230
- value: Value,
286
+ value: value,
231
287
  validate:
232
- Value === "int32"
288
+ value === "int32"
233
289
  ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`
234
- : Value === "uint32"
290
+ : value === "uint32"
235
291
  ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`
236
- : Value === "int64"
292
+ : value === "int64"
237
293
  ? `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`
238
- : Value === "uint64"
294
+ : value === "uint64"
239
295
  ? `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`
240
- : Value === "float"
296
+ : value === "float"
241
297
  ? `-1.175494351e38 <= $input && $input <= 3.4028235e38`
242
298
  : `true`,
243
299
  exclusive: true,
244
- schema: ["int32", "uint32", "int64", "uint64"].includes(Value)
300
+ schema: ["int32", "uint32", "int64", "uint64"].includes(value)
245
301
  ? { type: "integer" }
246
302
  : undefined,
247
303
  },
248
304
  ],
249
305
  bigint:
250
- Value === "int64" || "uint64"
306
+ value === "int64" || "uint64"
251
307
  ? [
252
308
  {
253
- name: `Type<${JSON.stringify(Value)}>`,
309
+ name: `Type<${JSON.stringify(value)}>`,
254
310
  target: "bigint",
255
311
  kind: "type",
256
- value: Value,
257
- validate: Value === "int64" ? "true" : "BigInt(0) <= $input",
312
+ value: value,
313
+ validate: value === "int64" ? "true" : "BigInt(0) <= $input",
258
314
  exclusive: true,
259
315
  schema: undefined,
260
316
  },
@@ -262,148 +318,168 @@ const PARSER: Record<
262
318
  : [],
263
319
  };
264
320
  },
265
- minimum: (report) => (Value) => ({
321
+ minimum: (props) => ({
266
322
  number: [
267
323
  {
268
- name: `Minimum<${Value}>`,
324
+ name: `Minimum<${props.value}>`,
269
325
  target: "number",
270
326
  kind: "minimum",
271
- value: parse_number(report)(Value),
272
- validate: `${Value} <= $input`,
327
+ value: parse_number(props),
328
+ validate: `${props.value} <= $input`,
273
329
  exclusive: ["minimum", "exclusiveMinimum"],
274
330
  schema: {
275
- minimum: parse_number(report)(Value),
331
+ minimum: parse_number(props),
276
332
  },
277
333
  },
278
334
  ],
279
335
  bigint: [
280
336
  {
281
- name: `Minimum<${Value}n>`,
337
+ name: `Minimum<${props.value}n>`,
282
338
  target: "bigint",
283
339
  kind: "minimum",
284
340
  value: (() => {
285
- const value = parse_integer(report)(false)(Value);
286
- return value === null ? null : BigInt(value);
341
+ const parsed = parse_integer({
342
+ report: props.report,
343
+ value: props.value,
344
+ unsigned: false,
345
+ });
346
+ return parsed === null ? null : BigInt(parsed);
287
347
  })(),
288
- validate: `${Value} <= $input`,
348
+ validate: `${props.value} <= $input`,
289
349
  exclusive: ["minimum", "exclusiveMinimum"],
290
350
  schema: undefined,
291
351
  },
292
352
  ],
293
353
  }),
294
- maximum: (report) => (Value) => ({
354
+ maximum: (props) => ({
295
355
  number: [
296
356
  {
297
- name: `Maximum<${Value}>`,
357
+ name: `Maximum<${props.value}>`,
298
358
  target: "number",
299
359
  kind: "maximum",
300
- value: parse_number(report)(Value),
301
- validate: `$input <= ${Value}`,
360
+ value: parse_number(props),
361
+ validate: `$input <= ${props.value}`,
302
362
  exclusive: ["maximum", "exclusiveMaximum"],
303
363
  schema: {
304
- maximum: parse_number(report)(Value),
364
+ maximum: parse_number(props),
305
365
  },
306
366
  },
307
367
  ],
308
368
  bigint: [
309
369
  {
310
- name: `Maximum<${Value}n>`,
370
+ name: `Maximum<${props.value}n>`,
311
371
  target: "bigint",
312
372
  kind: "maximum",
313
373
  value: (() => {
314
- const value = parse_integer(report)(false)(Value);
315
- return value === null ? null : BigInt(value);
374
+ const parsed = parse_integer({
375
+ report: props.report,
376
+ value: props.value,
377
+ unsigned: false,
378
+ });
379
+ return parsed === null ? null : BigInt(parsed);
316
380
  })(),
317
- validate: `$input <= ${Value}`,
381
+ validate: `$input <= ${props.value}`,
318
382
  exclusive: ["maximum", "exclusiveMaximum"],
319
383
  schema: undefined,
320
384
  },
321
385
  ],
322
386
  }),
323
- exclusiveMinimum: (report) => (Value) => ({
387
+ exclusiveMinimum: (props) => ({
324
388
  number: [
325
389
  {
326
- name: `ExclusiveMinimum<${Value}>`,
390
+ name: `ExclusiveMinimum<${props.value}>`,
327
391
  target: "number",
328
392
  kind: "exclusiveMinimum",
329
- value: parse_number(report)(Value),
330
- validate: `${Value} < $input`,
393
+ value: parse_number(props),
394
+ validate: `${props.value} < $input`,
331
395
  exclusive: ["minimum", "exclusiveMinimum"],
332
396
  schema: {
333
397
  exclusiveMinimum: true,
334
- minimum: parse_number(report)(Value),
398
+ minimum: parse_number(props),
335
399
  },
336
400
  },
337
401
  ],
338
402
  bigint: [
339
403
  {
340
- name: `ExclusiveMinimum<${Value}n>`,
404
+ name: `ExclusiveMinimum<${props.value}n>`,
341
405
  target: "bigint",
342
406
  kind: "exclusiveMinimum",
343
407
  value: (() => {
344
- const value = parse_integer(report)(false)(Value);
345
- return value === null ? null : BigInt(value);
408
+ const parsed = parse_integer({
409
+ report: props.report,
410
+ value: props.value,
411
+ unsigned: false,
412
+ });
413
+ return parsed === null ? null : BigInt(parsed);
346
414
  })(),
347
- validate: `${Value} < $input`,
415
+ validate: `${props.value} < $input`,
348
416
  exclusive: ["minimum", "exclusiveMinimum"],
349
417
  schema: undefined,
350
418
  },
351
419
  ],
352
420
  }),
353
- exclusiveMaximum: (report) => (Value) => ({
421
+ exclusiveMaximum: (props) => ({
354
422
  number: [
355
423
  {
356
- name: `ExclusiveMaximum<${Value}>`,
424
+ name: `ExclusiveMaximum<${props.value}>`,
357
425
  target: "number",
358
426
  kind: "exclusiveMaximum",
359
- value: parse_number(report)(Value),
360
- validate: `$input < ${Value}`,
427
+ value: parse_number(props),
428
+ validate: `$input < ${props.value}`,
361
429
  exclusive: ["maximum", "exclusiveMaximum"],
362
430
  schema: {
363
431
  exclusiveMaximum: true,
364
- maximum: parse_number(report)(Value),
432
+ maximum: parse_number(props),
365
433
  },
366
434
  },
367
435
  ],
368
436
  bigint: [
369
437
  {
370
- name: `ExclusiveMaximum<${Value}n>`,
438
+ name: `ExclusiveMaximum<${props.value}n>`,
371
439
  target: "bigint",
372
440
  kind: "exclusiveMaximum",
373
441
  value: (() => {
374
- const value = parse_integer(report)(false)(Value);
375
- return value === null ? null : BigInt(value);
442
+ const parsed = parse_integer({
443
+ report: props.report,
444
+ value: props.value,
445
+ unsigned: false,
446
+ });
447
+ return parsed === null ? null : BigInt(parsed);
376
448
  })(),
377
- validate: `$input < ${Value}`,
449
+ validate: `$input < ${props.value}`,
378
450
  exclusive: ["maximum", "exclusiveMaximum"],
379
451
  schema: undefined,
380
452
  },
381
453
  ],
382
454
  }),
383
- multipleOf: (report) => (Value) => ({
455
+ multipleOf: (props) => ({
384
456
  number: [
385
457
  {
386
- name: `MultipleOf<${Value}>`,
458
+ name: `MultipleOf<${props.value}>`,
387
459
  target: "number",
388
460
  kind: "multipleOf",
389
- value: parse_number(report)(Value),
390
- validate: `$input % ${Value} === 0`,
461
+ value: parse_number(props),
462
+ validate: `$input % ${props.value} === 0`,
391
463
  exclusive: true,
392
464
  schema: {
393
- multipleOf: parse_number(report)(Value),
465
+ multipleOf: parse_number(props),
394
466
  },
395
467
  },
396
468
  ],
397
469
  bigint: [
398
470
  {
399
- name: `MultipleOf<${Value}n>`,
471
+ name: `MultipleOf<${props.value}n>`,
400
472
  target: "bigint",
401
473
  kind: "multipleOf",
402
474
  value: (() => {
403
- const value = parse_integer(report)(false)(Value);
404
- return value === null ? null : BigInt(value);
475
+ const parsed = parse_integer({
476
+ report: props.report,
477
+ value: props.value,
478
+ unsigned: false,
479
+ });
480
+ return parsed === null ? null : BigInt(parsed);
405
481
  })(),
406
- validate: `$input % ${Value}n === 0n`,
482
+ validate: `$input % ${props.value}n === 0n`,
407
483
  exclusive: true,
408
484
  schema: undefined,
409
485
  },
@@ -413,8 +489,8 @@ const PARSER: Record<
413
489
  /* -----------------------------------------------------------
414
490
  STRING
415
491
  ----------------------------------------------------------- */
416
- format: () => (Value) => {
417
- const matched = FORMATS.get(Value);
492
+ format: ({ value }) => {
493
+ const matched = FORMATS.get(value);
418
494
  if (matched === undefined) return {};
419
495
  return {
420
496
  string: [
@@ -432,99 +508,111 @@ const PARSER: Record<
432
508
  ],
433
509
  };
434
510
  },
435
- pattern: () => (Value) => ({
511
+ pattern: ({ value }) => ({
436
512
  string: [
437
513
  {
438
- name: `Pattern<${JSON.stringify(Value)}>`,
514
+ name: `Pattern<${JSON.stringify(value)}>`,
439
515
  target: "string",
440
516
  kind: "pattern",
441
- value: Value,
442
- validate: `RegExp(${JSON.stringify(Value)}).test($input)`,
517
+ value: value,
518
+ validate: `RegExp(${JSON.stringify(value)}).test($input)`,
443
519
  exclusive: ["format"],
444
520
  schema: {
445
- pattern: Value,
521
+ pattern: value,
446
522
  },
447
523
  },
448
524
  ],
449
525
  }),
450
- length: (report) => (Value) => ({
526
+ length: (props) => ({
451
527
  string: [
452
528
  {
453
- name: `MinLength<${Value}>`,
529
+ name: `MinLength<${props.value}>`,
454
530
  target: "string",
455
531
  kind: "minLength",
456
- value: parse_number(report)(Value),
457
- validate: `${Value} <= $input.length`,
532
+ value: parse_number(props),
533
+ validate: `${props.value} <= $input.length`,
458
534
  exclusive: true,
459
535
  schema: {
460
- minLength: parse_number(report)(Value),
536
+ minLength: parse_number(props),
461
537
  },
462
538
  },
463
539
  {
464
- name: `MaxLength<${Value}>`,
540
+ name: `MaxLength<${props.value}>`,
465
541
  target: "string",
466
542
  kind: "maxLength",
467
- value: parse_number(report)(Value),
468
- validate: `$input.length <= ${Value}`,
543
+ value: parse_number(props),
544
+ validate: `$input.length <= ${props.value}`,
469
545
  exclusive: true,
470
546
  schema: {
471
- maxLength: parse_number(report)(Value),
547
+ maxLength: parse_number(props),
472
548
  },
473
549
  },
474
550
  ],
475
551
  }),
476
- minLength: (report) => (Value) => ({
552
+ minLength: ({ report, value }) => ({
477
553
  string: [
478
554
  {
479
- name: `MinLength<${Value}>`,
555
+ name: `MinLength<${value}>`,
480
556
  target: "string",
481
557
  kind: "minLength",
482
- value: parse_number(report)(Value),
483
- validate: `${Value} <= $input.length`,
558
+ value: parse_number({ report, value }),
559
+ validate: `${value} <= $input.length`,
484
560
  exclusive: true,
485
561
  schema: {
486
- minLength: parse_number(report)(Value),
562
+ minLength: parse_number({ report, value }),
487
563
  },
488
564
  },
489
565
  ],
490
566
  }),
491
- maxLength: (report) => (Value) => ({
567
+ maxLength: ({ report, value }) => ({
492
568
  string: [
493
569
  {
494
- name: `MaxLength<${Value}>`,
570
+ name: `MaxLength<${value}>`,
495
571
  target: "string",
496
572
  kind: "maxLength",
497
- value: parse_number(report)(Value),
498
- validate: `$input.length <= ${Value}`,
573
+ value: parse_number({ report, value }),
574
+ validate: `$input.length <= ${value}`,
499
575
  exclusive: true,
500
576
  schema: {
501
- maxLength: parse_number(report)(Value),
577
+ maxLength: parse_number({ report, value }),
502
578
  },
503
579
  },
504
580
  ],
505
581
  }),
506
582
  };
507
583
 
508
- const parse_number =
509
- (report: (msg: string) => null) =>
510
- (str: string): number | null => {
511
- const value: number = Number(str);
512
- if (isNaN(value) === true) return report(`invalid number`);
513
- return value;
514
- };
584
+ /**
585
+ * @internal
586
+ */
587
+ const parse_number = (props: {
588
+ report: (msg: string) => null;
589
+ value: string;
590
+ }): number | null => {
591
+ const parsed: number = Number(props.value);
592
+ if (isNaN(parsed) === true) return props.report(`invalid number`);
593
+ return parsed;
594
+ };
515
595
 
516
- const parse_integer =
517
- (report: (msg: string) => null) =>
518
- (unsigned: boolean) =>
519
- (str: string): number | null => {
520
- const value: number | null = parse_number(report)(str);
521
- if (value === null) return null;
522
- else if (Math.floor(value) !== value) return report(`invalid integer`);
523
- else if (unsigned === true && value < 0)
524
- return report(`invalid unsigned integer`);
525
- return value;
526
- };
596
+ /**
597
+ * @internal
598
+ */
599
+ const parse_integer = (props: {
600
+ report: (msg: string) => null;
601
+ unsigned: boolean;
602
+ value: string;
603
+ }): number | null => {
604
+ const parsed: number | null = parse_number(props);
605
+ if (parsed === null) return null;
606
+ else if (Math.floor(parsed) !== parsed)
607
+ return props.report(`invalid integer`);
608
+ else if (props.unsigned === true && parsed < 0)
609
+ return props.report(`invalid unsigned integer`);
610
+ return parsed;
611
+ };
527
612
 
613
+ /**
614
+ * @internal
615
+ */
528
616
  const FORMATS: Map<string, [string, string]> = new Map([
529
617
  ...Object.entries(FormatCheatSheet).map(
530
618
  ([key, value]) => [key, [key, value]] as any,