typia 7.0.0-dev.20240930 → 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 (373) 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/index.mjs +25 -25
  58. package/lib/index.mjs.map +1 -1
  59. package/lib/programmers/AssertProgrammer.js +36 -22
  60. package/lib/programmers/AssertProgrammer.js.map +1 -1
  61. package/lib/programmers/CheckerProgrammer.js +316 -251
  62. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  63. package/lib/programmers/FeatureProgrammer.js +34 -20
  64. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  65. package/lib/programmers/IsProgrammer.js +41 -22
  66. package/lib/programmers/IsProgrammer.js.map +1 -1
  67. package/lib/programmers/RandomProgrammer.js +171 -135
  68. package/lib/programmers/RandomProgrammer.js.map +1 -1
  69. package/lib/programmers/TypiaProgrammer.d.ts +2 -2
  70. package/lib/programmers/TypiaProgrammer.js +79 -75
  71. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  72. package/lib/programmers/ValidateProgrammer.js +55 -24
  73. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  74. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js +30 -15
  75. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js.map +1 -1
  76. package/lib/programmers/functional/FunctionalAssertReturnProgrammer.js +16 -13
  77. package/lib/programmers/functional/FunctionalAssertReturnProgrammer.js.map +1 -1
  78. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js +11 -8
  79. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js.map +1 -1
  80. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js +8 -2
  81. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js.map +1 -1
  82. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +11 -5
  83. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  84. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +8 -2
  85. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  86. package/lib/programmers/helpers/CloneJoiner.js +13 -4
  87. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  88. package/lib/programmers/helpers/FunctionImporter.js +10 -7
  89. package/lib/programmers/helpers/FunctionImporter.js.map +1 -1
  90. package/lib/programmers/helpers/NotationJoiner.d.ts +2 -1
  91. package/lib/programmers/helpers/NotationJoiner.js +40 -33
  92. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  93. package/lib/programmers/helpers/PruneJoiner.js +6 -3
  94. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  95. package/lib/programmers/helpers/RandomJoiner.d.ts +1 -1
  96. package/lib/programmers/helpers/RandomJoiner.js +4 -1
  97. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  98. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  99. package/lib/programmers/helpers/StringifyJoinder.js +5 -2
  100. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  101. package/lib/programmers/helpers/StringifyPredicator.d.ts +1 -1
  102. package/lib/programmers/helpers/StringifyPredicator.js +4 -3
  103. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  104. package/lib/programmers/helpers/UnionExplorer.d.ts +52 -12
  105. package/lib/programmers/helpers/UnionExplorer.js +183 -144
  106. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  107. package/lib/programmers/helpers/UnionPredicator.d.ts +1 -1
  108. package/lib/programmers/helpers/UnionPredicator.js +7 -7
  109. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +8 -2
  110. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  111. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +8 -2
  112. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  113. package/lib/programmers/http/HttpAssertQueryProgrammer.js +8 -2
  114. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  115. package/lib/programmers/http/HttpFormDataProgrammer.js +84 -71
  116. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  117. package/lib/programmers/http/HttpHeadersProgrammer.js +76 -69
  118. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  119. package/lib/programmers/http/HttpIsFormDataProgrammer.js +12 -3
  120. package/lib/programmers/http/HttpIsFormDataProgrammer.js.map +1 -1
  121. package/lib/programmers/http/HttpIsHeadersProgrammer.js +12 -3
  122. package/lib/programmers/http/HttpIsHeadersProgrammer.js.map +1 -1
  123. package/lib/programmers/http/HttpIsQueryProgrammer.js +12 -3
  124. package/lib/programmers/http/HttpIsQueryProgrammer.js.map +1 -1
  125. package/lib/programmers/http/HttpParameterProgrammer.js +17 -10
  126. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  127. package/lib/programmers/http/HttpQueryProgrammer.js +76 -63
  128. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  129. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +8 -2
  130. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  131. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +8 -2
  132. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  133. package/lib/programmers/http/HttpValidateQueryProgrammer.js +8 -2
  134. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  135. package/lib/programmers/internal/application_escaped.js +4 -4
  136. package/lib/programmers/internal/application_escaped.js.map +1 -1
  137. package/lib/programmers/internal/application_templates.js +8 -2
  138. package/lib/programmers/internal/application_templates.js.map +1 -1
  139. package/lib/programmers/internal/application_union_discriminator.d.ts +1 -1
  140. package/lib/programmers/internal/application_union_discriminator.js +6 -6
  141. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  142. package/lib/programmers/internal/application_v30_object.js +6 -3
  143. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  144. package/lib/programmers/internal/application_v31_object.js +4 -1
  145. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  146. package/lib/programmers/internal/check_array_length.js +21 -26
  147. package/lib/programmers/internal/check_array_length.js.map +1 -1
  148. package/lib/programmers/internal/check_bigint.js +18 -26
  149. package/lib/programmers/internal/check_bigint.js.map +1 -1
  150. package/lib/programmers/internal/check_dynamic_key.d.ts +1 -5
  151. package/lib/programmers/internal/check_dynamic_key.js +109 -91
  152. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  153. package/lib/programmers/internal/check_dynamic_properties.js +92 -91
  154. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  155. package/lib/programmers/internal/check_everything.js +1 -1
  156. package/lib/programmers/internal/check_everything.js.map +1 -1
  157. package/lib/programmers/internal/check_native.js +8 -5
  158. package/lib/programmers/internal/check_native.js.map +1 -1
  159. package/lib/programmers/internal/check_number.js +59 -65
  160. package/lib/programmers/internal/check_number.js.map +1 -1
  161. package/lib/programmers/internal/check_object.js +31 -22
  162. package/lib/programmers/internal/check_object.js.map +1 -1
  163. package/lib/programmers/internal/check_string.js +18 -26
  164. package/lib/programmers/internal/check_string.js.map +1 -1
  165. package/lib/programmers/internal/check_template.js +20 -21
  166. package/lib/programmers/internal/check_template.js.map +1 -1
  167. package/lib/programmers/internal/check_union_array_like.js +86 -53
  168. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  169. package/lib/programmers/internal/decode_union_object.js +59 -49
  170. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  171. package/lib/programmers/internal/feature_object_entries.js +31 -37
  172. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  173. package/lib/programmers/internal/llm_schema_escaped.js +29 -11
  174. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  175. package/lib/programmers/internal/llm_schema_object.js +4 -1
  176. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  177. package/lib/programmers/internal/metadata_to_pattern.js +44 -41
  178. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  179. package/lib/programmers/internal/postfix_of_tuple.d.ts +1 -1
  180. package/lib/programmers/internal/postfix_of_tuple.js +3 -0
  181. package/lib/programmers/internal/postfix_of_tuple.js.map +1 -1
  182. package/lib/programmers/internal/prune_object_properties.js +7 -4
  183. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  184. package/lib/programmers/internal/random_custom.js +8 -14
  185. package/lib/programmers/internal/random_custom.js.map +1 -1
  186. package/lib/programmers/internal/stringify_dynamic_properties.js +8 -5
  187. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  188. package/lib/programmers/internal/stringify_regular_properties.js +4 -4
  189. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  190. package/lib/programmers/internal/template_to_pattern.js +10 -5
  191. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  192. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +1 -2
  193. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +3 -0
  194. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  195. package/lib/programmers/json/JsonAssertParseProgrammer.js +8 -2
  196. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  197. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +8 -2
  198. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  199. package/lib/programmers/json/JsonIsParseProgrammer.js +8 -2
  200. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  201. package/lib/programmers/json/JsonIsStringifyProgrammer.js +8 -2
  202. package/lib/programmers/json/JsonIsStringifyProgrammer.js.map +1 -1
  203. package/lib/programmers/json/JsonStringifyProgrammer.js +126 -95
  204. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  205. package/lib/programmers/json/JsonValidateParseProgrammer.js +8 -2
  206. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  207. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +12 -3
  208. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  209. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +8 -2
  210. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  211. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +12 -3
  212. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  213. package/lib/programmers/misc/MiscCloneProgrammer.js +203 -162
  214. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  215. package/lib/programmers/misc/MiscIsCloneProgrammer.js +8 -2
  216. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  217. package/lib/programmers/misc/MiscIsPruneProgrammer.js +8 -2
  218. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -1
  219. package/lib/programmers/misc/MiscPruneProgrammer.js +114 -92
  220. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  221. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +12 -3
  222. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  223. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +16 -4
  224. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  225. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +8 -2
  226. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  227. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +4 -1
  228. package/lib/programmers/notations/NotationGeneralProgrammer.js +209 -145
  229. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  230. package/lib/programmers/notations/NotationIsGeneralProgrammer.js +8 -2
  231. package/lib/programmers/notations/NotationIsGeneralProgrammer.js.map +1 -1
  232. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +12 -3
  233. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  234. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +8 -2
  235. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  236. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +8 -2
  237. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  238. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +51 -30
  239. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  240. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +89 -65
  241. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  242. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +12 -3
  243. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  244. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js +8 -2
  245. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js.map +1 -1
  246. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +8 -2
  247. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  248. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +12 -3
  249. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  250. package/lib/transformers/features/llm/LlmApplicationTransformer.js +5 -2
  251. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  252. package/lib/utils/NamingConvention/NamingConvention.js +41 -47
  253. package/lib/utils/NamingConvention/NamingConvention.js.map +1 -1
  254. package/package.json +1 -1
  255. package/src/executable/TypiaGenerateWizard.ts +1 -1
  256. package/src/executable/TypiaSetupWizard.ts +1 -1
  257. package/src/executable/setup/ArgumentParser.ts +27 -28
  258. package/src/executable/setup/FileRetriever.ts +14 -17
  259. package/src/executable/setup/PackageManager.ts +4 -3
  260. package/src/factories/ExpressionFactory.ts +98 -84
  261. package/src/factories/IdentifierFactory.ts +26 -7
  262. package/src/factories/MetadataCollection.ts +4 -1
  263. package/src/factories/MetadataCommentTagFactory.ts +97 -88
  264. package/src/factories/MetadataFactory.ts +2 -1
  265. package/src/factories/MetadataTypeTagFactory.ts +334 -285
  266. package/src/factories/MetadataTypeTagSchemaFactory.ts +75 -52
  267. package/src/factories/NumericRangeFactory.ts +8 -8
  268. package/src/factories/StatementFactory.ts +27 -11
  269. package/src/factories/TemplateFactory.ts +29 -21
  270. package/src/factories/TypeFactory.ts +80 -58
  271. package/src/factories/internal/metadata/iterate_metadata.ts +4 -1
  272. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +6 -4
  273. package/src/factories/internal/metadata/iterate_metadata_escape.ts +5 -3
  274. package/src/factories/internal/metadata/iterate_metadata_function.ts +4 -4
  275. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +6 -3
  276. package/src/factories/internal/metadata/iterate_metadata_map.ts +4 -3
  277. package/src/factories/internal/metadata/iterate_metadata_native.ts +12 -9
  278. package/src/factories/internal/metadata/iterate_metadata_set.ts +5 -1
  279. package/src/programmers/AssertProgrammer.ts +46 -32
  280. package/src/programmers/CheckerProgrammer.ts +295 -261
  281. package/src/programmers/FeatureProgrammer.ts +25 -23
  282. package/src/programmers/IsProgrammer.ts +38 -23
  283. package/src/programmers/RandomProgrammer.ts +55 -39
  284. package/src/programmers/TypiaProgrammer.ts +48 -34
  285. package/src/programmers/ValidateProgrammer.ts +67 -37
  286. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +4 -4
  287. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +4 -4
  288. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +4 -4
  289. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +7 -7
  290. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +14 -8
  291. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +7 -7
  292. package/src/programmers/helpers/CloneJoiner.ts +17 -7
  293. package/src/programmers/helpers/FunctionImporter.ts +12 -11
  294. package/src/programmers/helpers/NotationJoiner.ts +91 -82
  295. package/src/programmers/helpers/ProtobufUtil.ts +2 -2
  296. package/src/programmers/helpers/PruneJoiner.ts +7 -3
  297. package/src/programmers/helpers/RandomJoiner.ts +12 -6
  298. package/src/programmers/helpers/RandomRanger.ts +8 -1
  299. package/src/programmers/helpers/StringifyJoinder.ts +5 -2
  300. package/src/programmers/helpers/StringifyPredicator.ts +4 -3
  301. package/src/programmers/helpers/UnionExplorer.ts +287 -205
  302. package/src/programmers/helpers/UnionPredicator.ts +5 -5
  303. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +8 -2
  304. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +8 -2
  305. package/src/programmers/http/HttpAssertQueryProgrammer.ts +8 -2
  306. package/src/programmers/http/HttpFormDataProgrammer.ts +139 -114
  307. package/src/programmers/http/HttpHeadersProgrammer.ts +150 -121
  308. package/src/programmers/http/HttpIsFormDataProgrammer.ts +12 -6
  309. package/src/programmers/http/HttpIsHeadersProgrammer.ts +12 -6
  310. package/src/programmers/http/HttpIsQueryProgrammer.ts +12 -6
  311. package/src/programmers/http/HttpParameterProgrammer.ts +16 -11
  312. package/src/programmers/http/HttpQueryProgrammer.ts +141 -116
  313. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +8 -2
  314. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +8 -2
  315. package/src/programmers/http/HttpValidateQueryProgrammer.ts +8 -2
  316. package/src/programmers/internal/application_escaped.ts +6 -6
  317. package/src/programmers/internal/application_templates.ts +8 -6
  318. package/src/programmers/internal/application_union_discriminator.ts +6 -6
  319. package/src/programmers/internal/application_v30_object.ts +6 -3
  320. package/src/programmers/internal/application_v31_object.ts +4 -1
  321. package/src/programmers/internal/application_v31_tuple.ts +1 -1
  322. package/src/programmers/internal/check_array_length.ts +31 -30
  323. package/src/programmers/internal/check_bigint.ts +31 -31
  324. package/src/programmers/internal/check_dynamic_key.ts +155 -126
  325. package/src/programmers/internal/check_dynamic_properties.ts +155 -154
  326. package/src/programmers/internal/check_everything.ts +1 -1
  327. package/src/programmers/internal/check_native.ts +11 -5
  328. package/src/programmers/internal/check_number.ts +88 -84
  329. package/src/programmers/internal/check_object.ts +45 -31
  330. package/src/programmers/internal/check_string.ts +31 -30
  331. package/src/programmers/internal/check_template.ts +34 -32
  332. package/src/programmers/internal/check_union_array_like.ts +255 -228
  333. package/src/programmers/internal/decode_union_object.ts +92 -75
  334. package/src/programmers/internal/feature_object_entries.ts +43 -46
  335. package/src/programmers/internal/llm_schema_escaped.ts +36 -13
  336. package/src/programmers/internal/llm_schema_object.ts +4 -1
  337. package/src/programmers/internal/metadata_to_pattern.ts +31 -23
  338. package/src/programmers/internal/postfix_of_tuple.ts +3 -0
  339. package/src/programmers/internal/prune_object_properties.ts +7 -4
  340. package/src/programmers/internal/random_custom.ts +25 -23
  341. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -157
  342. package/src/programmers/internal/stringify_regular_properties.ts +7 -7
  343. package/src/programmers/internal/template_to_pattern.ts +12 -4
  344. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +3 -0
  345. package/src/programmers/json/JsonAssertParseProgrammer.ts +8 -2
  346. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +8 -2
  347. package/src/programmers/json/JsonIsParseProgrammer.ts +8 -2
  348. package/src/programmers/json/JsonIsStringifyProgrammer.ts +8 -2
  349. package/src/programmers/json/JsonStringifyProgrammer.ts +88 -66
  350. package/src/programmers/json/JsonValidateParseProgrammer.ts +8 -2
  351. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +12 -6
  352. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +8 -2
  353. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +12 -3
  354. package/src/programmers/misc/MiscCloneProgrammer.ts +186 -155
  355. package/src/programmers/misc/MiscIsCloneProgrammer.ts +8 -2
  356. package/src/programmers/misc/MiscIsPruneProgrammer.ts +8 -2
  357. package/src/programmers/misc/MiscPruneProgrammer.ts +77 -63
  358. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +12 -6
  359. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +16 -7
  360. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +8 -2
  361. package/src/programmers/notations/NotationGeneralProgrammer.ts +218 -160
  362. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +8 -2
  363. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +12 -6
  364. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +8 -2
  365. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +8 -2
  366. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +48 -46
  367. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +67 -55
  368. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -6
  369. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +8 -2
  370. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +8 -2
  371. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +12 -6
  372. package/src/transformers/features/llm/LlmApplicationTransformer.ts +7 -6
  373. package/src/utils/NamingConvention/NamingConvention.ts +40 -42
@@ -7,319 +7,368 @@ import { MetadataFactory } from "./MetadataFactory";
7
7
  import { MetadataTypeTagSchemaFactory } from "./MetadataTypeTagSchemaFactory";
8
8
 
9
9
  export namespace MetadataTypeTagFactory {
10
- export const analyze =
11
- (errors: MetadataFactory.IError[]) =>
12
- (type: "boolean" | "bigint" | "number" | "string" | "array") =>
13
- (
14
- objects: MetadataObject[],
15
- explore: MetadataFactory.IExplore,
16
- ): IMetadataTypeTag[] => {
17
- const messages: string[] = [];
18
- const report =
19
- (property: string | null) =>
20
- (msg: string): false => {
21
- messages.push(
22
- `the property ${
23
- property === null ? `["typia.tag"]` : `["typia.tag.${property}"]`
24
- } ${msg}.`,
25
- );
26
- return false;
27
- };
10
+ export const analyze = (props: {
11
+ errors: MetadataFactory.IError[];
12
+ type: "boolean" | "bigint" | "number" | "string" | "array";
13
+ objects: MetadataObject[];
14
+ explore: MetadataFactory.IExplore;
15
+ }): IMetadataTypeTag[] => {
16
+ const messages: string[] = [];
17
+ const report = (next: {
18
+ property: string | null;
19
+ message: string;
20
+ }): false => {
21
+ messages.push(
22
+ `the property ${
23
+ next.property === null
24
+ ? `["typia.tag"]`
25
+ : `["typia.tag.${next.property}"]`
26
+ } ${next.message}.`,
27
+ );
28
+ return false;
29
+ };
28
30
 
29
- //----
30
- // VALIDATION PROCESS
31
- //----
32
- const filtered: MetadataObject[] = objects.filter((obj) => {
33
- // ONLY ONE PROPERTY
34
- if (obj.properties.length !== 1) return false;
31
+ //----
32
+ // VALIDATION PROCESS
33
+ //----
34
+ const filtered: MetadataObject[] = props.objects.filter((obj) => {
35
+ // ONLY ONE PROPERTY
36
+ if (obj.properties.length !== 1) return false;
35
37
 
36
- // THE TAG.TYPE PROPERTY MUST BE
37
- const top: MetadataProperty = obj.properties[0]!;
38
- if (
39
- top.key.getSoleLiteral() !== "typia.tag" ||
40
- top.value.size() !== 1 ||
41
- top.value.objects.length !== 1
42
- )
43
- return false;
44
- else if (top.value.optional === false)
45
- return report(null)("must be optional object");
38
+ // THE TAG.TYPE PROPERTY MUST BE
39
+ const top: MetadataProperty = obj.properties[0]!;
40
+ if (
41
+ top.key.getSoleLiteral() !== "typia.tag" ||
42
+ top.value.size() !== 1 ||
43
+ top.value.objects.length !== 1
44
+ )
45
+ return false;
46
+ else if (top.value.optional === false)
47
+ return report({
48
+ property: null,
49
+ message: "must be optional object",
50
+ });
46
51
 
47
- // CHECK LIST OF PROPERTIES
48
- const tag: MetadataObject = top.value.objects[0]!;
49
- const statics: string[] = tag.properties
50
- .map((p) => p.key.getSoleLiteral()!)
51
- .filter((str) => str !== null);
52
- if (ESSENTIAL_FIELDS.some((f) => !statics.includes(f)))
53
- return report(null)(
54
- `must have at least three properties - ${ESSENTIAL_FIELDS.map(
55
- (str) => `'${str}'`,
56
- ).join(", ")}`,
57
- );
52
+ // CHECK LIST OF PROPERTIES
53
+ const tag: MetadataObject = top.value.objects[0]!;
54
+ const statics: string[] = tag.properties
55
+ .map((p) => p.key.getSoleLiteral()!)
56
+ .filter((str) => str !== null);
57
+ if (ESSENTIAL_FIELDS.some((f) => !statics.includes(f)))
58
+ return report({
59
+ property: null,
60
+ message: `must have at least three properties - ${ESSENTIAL_FIELDS.map(
61
+ (str) => `'${str}'`,
62
+ ).join(", ")}`,
63
+ });
58
64
 
59
- const each: boolean[] = tag.properties.map((p) => {
60
- const key: string | null = p.key.getSoleLiteral();
61
- if (key === null) return true;
62
- else if (FIELDS.includes(key) === false) return true;
63
- return validate_property(report)(key, p.value);
65
+ const each: boolean[] = tag.properties.map((p) => {
66
+ const key: string | null = p.key.getSoleLiteral();
67
+ if (key === null) return true;
68
+ else if (FIELDS.includes(key) === false) return true;
69
+ return validate_property({
70
+ report,
71
+ key,
72
+ value: p.value,
64
73
  });
65
- return each.every((v) => v === true);
66
74
  });
67
- if (filtered.length === 0) return [];
75
+ return each.every((v) => v === true);
76
+ });
77
+ if (filtered.length === 0) return [];
68
78
 
69
- //----
70
- // CONSTRUCT TYPE TAGS
71
- //----
72
- // CREATE 1ST
73
- const tagList: Array<ITypeTag | null> = filtered.map(
74
- create_metadata_type_tag(report),
75
- );
79
+ //----
80
+ // CONSTRUCT TYPE TAGS
81
+ //----
82
+ // CREATE 1ST
83
+ const tagList: Array<ITypeTag | null> = filtered.map((object) =>
84
+ create_metadata_type_tag({
85
+ report,
86
+ object,
87
+ }),
88
+ );
76
89
 
77
- const output: IMetadataTypeTag[] = [];
78
- for (const tag of tagList)
79
- if (tag !== null)
80
- output.push({
81
- target: tag.target.some((str) => str === type) ? type : null!,
82
- name: tag.name,
83
- kind: tag.kind,
84
- value: tag.value,
85
- validate: tag.validate[type]!,
86
- exclusive: tag.exclusive,
87
- schema: tag.schema,
88
- });
89
- validate(report)(type)(output);
90
+ const output: IMetadataTypeTag[] = [];
91
+ for (const tag of tagList)
92
+ if (tag !== null)
93
+ output.push({
94
+ target: tag.target.some((str) => str === props.type)
95
+ ? props.type
96
+ : null!,
97
+ name: tag.name,
98
+ kind: tag.kind,
99
+ value: tag.value,
100
+ validate: tag.validate[props.type]!,
101
+ exclusive: tag.exclusive,
102
+ schema: tag.schema,
103
+ });
104
+ validate({
105
+ report,
106
+ type: props.type,
107
+ tags: output,
108
+ });
90
109
 
91
- if (messages.length > 0) {
92
- errors.push({
93
- name: [type, ...objects.map((o) => o.name)].join(" & "),
94
- explore,
95
- messages,
110
+ if (messages.length > 0) {
111
+ props.errors.push({
112
+ name: [props.type, ...props.objects.map((o) => o.name)].join(" & "),
113
+ explore: props.explore,
114
+ messages,
115
+ });
116
+ return [];
117
+ }
118
+ return output;
119
+ };
120
+
121
+ export const validate = (props: {
122
+ report: (next: { property: string | null; message: string }) => false;
123
+ type: "boolean" | "bigint" | "number" | "string" | "array";
124
+ tags: IMetadataTypeTag[];
125
+ }): boolean => {
126
+ let success: boolean = true;
127
+ for (const tag of props.tags)
128
+ if (tag.target !== props.type) {
129
+ success &&= props.report({
130
+ property: null,
131
+ message: `target must constains ${props.type} type`,
96
132
  });
97
- return [];
98
133
  }
99
- return output;
100
- };
101
134
 
102
- export const validate =
103
- (report: (property: string | null) => (msg: string) => false) =>
104
- (type: "boolean" | "bigint" | "number" | "string" | "array") =>
105
- (tagList: IMetadataTypeTag[]): boolean => {
106
- let success: boolean = true;
107
- for (const tag of tagList)
108
- if (tag.target !== type) {
109
- success &&= report(null)(`target must constains ${type} type`);
110
- }
135
+ props.tags.forEach((tag, i) => {
136
+ if (tag.exclusive === false) return;
137
+ else if (tag.exclusive === true) {
138
+ const some: boolean = props.tags.some(
139
+ (opposite, j) => i !== j && opposite.kind === tag.kind,
140
+ );
141
+ if (some === true)
142
+ success &&= props.report({
143
+ property: null,
144
+ message: `kind '${tag.kind}' can't be duplicated`,
145
+ });
146
+ } else if (Array.isArray(tag.exclusive)) {
147
+ const some: IMetadataTypeTag | undefined = props.tags.find(
148
+ (opposite, j) =>
149
+ i !== j &&
150
+ opposite.kind === tag.kind &&
151
+ (tag.exclusive as string[]).includes(opposite.name),
152
+ );
153
+ if (some !== undefined)
154
+ success ??= props.report({
155
+ property: null,
156
+ message: `kind '${tag.kind}' can't be used with '${some.name}'`,
157
+ });
158
+ }
159
+ });
160
+ return success;
161
+ };
111
162
 
112
- tagList.forEach((tag, i) => {
113
- if (tag.exclusive === false) return;
114
- else if (tag.exclusive === true) {
115
- const some: boolean = tagList.some(
116
- (opposite, j) => i !== j && opposite.kind === tag.kind,
117
- );
118
- if (some === true)
119
- success &&= report(null)(`kind '${tag.kind}' can't be duplicated`);
120
- } else if (Array.isArray(tag.exclusive)) {
121
- const some: IMetadataTypeTag | undefined = tagList.find(
122
- (opposite, j) =>
123
- i !== j &&
124
- opposite.kind === tag.kind &&
125
- (tag.exclusive as string[]).includes(opposite.name),
126
- );
127
- if (some !== undefined)
128
- success ??= report(null)(
129
- `kind '${tag.kind}' can't be used with '${some.name}'`,
130
- );
131
- }
163
+ const validate_property = (props: {
164
+ report: (next: { property: string | null; message: string }) => false;
165
+ key: string;
166
+ value: Metadata;
167
+ }): boolean => {
168
+ if (
169
+ // TARGET
170
+ props.key === "target" &&
171
+ (props.value.constants.length !== 1 ||
172
+ props.value.constants[0]!.values.length !== props.value.size() ||
173
+ props.value.constants[0]!.values.some(
174
+ (v) =>
175
+ v.value !== "boolean" &&
176
+ v.value !== "bigint" &&
177
+ v.value !== "number" &&
178
+ v.value !== "string" &&
179
+ v.value !== "array",
180
+ ))
181
+ )
182
+ return props.report({
183
+ property: props.key,
184
+ message: `must be one of 'boolean', 'bigint', 'number', 'string', 'array'`,
132
185
  });
133
- return success;
134
- };
135
-
136
- const validate_property =
137
- (report: (property: string | null) => (msg: string) => false) =>
138
- (key: string, value: Metadata): boolean => {
186
+ else if (
187
+ // KIND
188
+ props.key === "kind" &&
189
+ (props.value.size() !== 1 ||
190
+ props.value.constants.length !== 1 ||
191
+ props.value.constants[0]!.type !== "string" ||
192
+ props.value.constants[0]!.values.length !== 1)
193
+ )
194
+ return props.report({
195
+ property: props.key,
196
+ message: "must be a string literal type",
197
+ });
198
+ else if (
199
+ // VALUE
200
+ props.key === "value" &&
201
+ (props.value.size() > 1 ||
202
+ (props.value.size() !== 0 &&
203
+ (props.value.constants.length !== 1 ||
204
+ props.value.constants[0]!.values.length !== 1)))
205
+ )
206
+ return props.report({
207
+ property: props.key,
208
+ message: "must be a constant literal type or undefined value",
209
+ });
210
+ else if (props.key === "exclusive") return get_exclusive(props) !== null;
211
+ else if (props.key === "validate") {
212
+ //----
213
+ // VALIDATE
214
+ //----
215
+ // UNDEFINED CASE
139
216
  if (
140
- // TARGET
141
- key === "target" &&
142
- (value.constants.length !== 1 ||
143
- value.constants[0]!.values.length !== value.size() ||
144
- value.constants[0]!.values.some(
145
- (v) =>
146
- v.value !== "boolean" &&
147
- v.value !== "bigint" &&
148
- v.value !== "number" &&
149
- v.value !== "string" &&
150
- v.value !== "array",
151
- ))
217
+ props.value.size() === 0 &&
218
+ props.value.isRequired() === false &&
219
+ props.value.nullable === false
152
220
  )
153
- return report(key)(
154
- `must be one of 'boolean', 'bigint', 'number', 'string', 'array'`,
155
- );
156
- else if (
157
- // KIND
158
- key === "kind" &&
159
- (value.size() !== 1 ||
160
- value.constants.length !== 1 ||
161
- value.constants[0]!.type !== "string" ||
162
- value.constants[0]!.values.length !== 1)
163
- )
164
- return report(key)("must be a string literal type");
165
- else if (
166
- // VALUE
167
- key === "value" &&
168
- (value.size() > 1 ||
169
- (value.size() !== 0 &&
170
- (value.constants.length !== 1 ||
171
- value.constants[0]!.values.length !== 1)))
172
- )
173
- return report(key)(
174
- "must be a constant literal type or undefined value",
175
- );
176
- else if (key === "exclusive")
177
- return get_exclusive(report)(key)(value) !== null;
178
- else if (key === "validate") {
179
- //----
180
- // VALIDATE
181
- //----
182
- // UNDEFINED CASE
183
- if (
184
- value.size() === 0 &&
185
- value.isRequired() === false &&
186
- value.nullable === false
187
- )
188
- return true;
189
-
190
- // STRING CASE
191
- if (
192
- value.size() === 1 &&
193
- value.constants.length === 1 &&
194
- value.constants[0]!.type === "string" &&
195
- (value.constants[0]!.values.length === 1) === true
196
- )
197
- return true;
221
+ return true;
198
222
 
199
- // RECORD<TARGET, STRING>
200
- const target: string[] | undefined = value.objects[0]?.properties
201
- .map((p) => p.key.getSoleLiteral()!)
202
- .filter((str) => str !== null) as string[] | undefined;
203
- if (target === undefined)
204
- return report("target")(
205
- `must be one of 'boolean', 'bigint', 'number', 'string', 'array'`,
206
- );
207
- const variadic: boolean =
208
- value.size() === 1 &&
209
- value.objects.length === 1 &&
210
- value.objects[0]!.properties.every(
211
- (vp) =>
212
- vp.value.size() === 1 &&
213
- vp.value.isRequired() &&
214
- vp.value.nullable === false &&
215
- vp.value.constants.length === 1 &&
216
- vp.value.constants[0]!.type === "string" &&
217
- vp.value.constants[0]!.values.length === 1 &&
218
- target.includes(vp.key.getSoleLiteral()!),
219
- );
220
- if (variadic === false)
221
- return report(key)(
222
- `must be a string literal type or Record<Target, string> type.`,
223
- );
224
- }
225
- return true;
226
- };
223
+ // STRING CASE
224
+ if (
225
+ props.value.size() === 1 &&
226
+ props.value.constants.length === 1 &&
227
+ props.value.constants[0]!.type === "string" &&
228
+ (props.value.constants[0]!.values.length === 1) === true
229
+ )
230
+ return true;
227
231
 
228
- const create_metadata_type_tag =
229
- (report: (property: string | null) => (msg: string) => false) =>
230
- (obj: MetadataObject): ITypeTag | null => {
231
- const find = (key: string): MetadataProperty | undefined =>
232
- obj.properties[0]?.value.objects[0]?.properties.find(
233
- (p) => p.key.getSoleLiteral() === key,
232
+ // RECORD<TARGET, STRING>
233
+ const target: string[] | undefined = props.value.objects[0]?.properties
234
+ .map((p) => p.key.getSoleLiteral()!)
235
+ .filter((str) => str !== null) as string[] | undefined;
236
+ if (target === undefined)
237
+ return props.report({
238
+ property: "target",
239
+ message: `must be one of 'boolean', 'bigint', 'number', 'string', 'array'`,
240
+ });
241
+ const variadic: boolean =
242
+ props.value.size() === 1 &&
243
+ props.value.objects.length === 1 &&
244
+ props.value.objects[0]!.properties.every(
245
+ (vp) =>
246
+ vp.value.size() === 1 &&
247
+ vp.value.isRequired() &&
248
+ vp.value.nullable === false &&
249
+ vp.value.constants.length === 1 &&
250
+ vp.value.constants[0]!.type === "string" &&
251
+ vp.value.constants[0]!.values.length === 1 &&
252
+ target.includes(vp.key.getSoleLiteral()!),
234
253
  );
254
+ if (variadic === false)
255
+ return props.report({
256
+ property: props.key,
257
+ message: `must be a string literal type or Record<Target, string> type.`,
258
+ });
259
+ }
260
+ return true;
261
+ };
235
262
 
236
- const target = find("target")!.value.constants[0]!.values.map(
237
- (v) => v.value,
238
- ) as ITypeTag["target"];
239
- const kind: string = find("kind")!.value.constants[0]!.values[0]!
240
- .value as string;
241
- const value: boolean | bigint | number | string | undefined =
242
- find("value")?.value.constants[0]?.values[0]!.value;
243
- const exclusive: string[] | boolean | null = get_exclusive(report)(
244
- "exclusive",
245
- )(find("exclusive")?.value);
246
- if (exclusive === null) return null;
263
+ const create_metadata_type_tag = (props: {
264
+ report: (next: { property: string | null; message: string }) => false;
265
+ object: MetadataObject;
266
+ }): ITypeTag | null => {
267
+ const find = (key: string): MetadataProperty | undefined =>
268
+ props.object.properties[0]?.value.objects[0]?.properties.find(
269
+ (p) => p.key.getSoleLiteral() === key,
270
+ );
247
271
 
248
- const validate: Record<string, string> = (() => {
249
- const validate = find("validate")?.value;
250
- if (!validate || validate.size() === 0) return {};
251
- else if (validate.constants.length)
252
- return Object.fromEntries(
253
- target.map((t) => [
254
- t,
255
- validate.constants[0]!.values[0]!.value as string,
256
- ]),
257
- );
272
+ const target = find("target")!.value.constants[0]!.values.map(
273
+ (v) => v.value,
274
+ ) as ITypeTag["target"];
275
+ const kind: string = find("kind")!.value.constants[0]!.values[0]!
276
+ .value as string;
277
+ const value: boolean | bigint | number | string | undefined =
278
+ find("value")?.value.constants[0]?.values[0]!.value;
279
+ const exclusive: string[] | boolean | null = get_exclusive({
280
+ report: props.report,
281
+ key: "exclusive",
282
+ value: find("exclusive")?.value,
283
+ });
284
+ if (exclusive === null) return null;
285
+
286
+ const validate: Record<string, string> = (() => {
287
+ const validate = find("validate")?.value;
288
+ if (!validate || validate.size() === 0) return {};
289
+ else if (validate.constants.length)
258
290
  return Object.fromEntries(
259
- validate.objects[0]!.properties.map((p) => [
260
- p.key.getSoleLiteral()!,
261
- p.value.constants[0]!.values[0]!.value as string,
291
+ target.map((t) => [
292
+ t,
293
+ validate.constants[0]!.values[0]!.value as string,
262
294
  ]),
263
295
  );
264
- })();
265
- const schema: object | undefined = (() => {
266
- const p: Metadata | undefined = find("schema")?.value;
267
- if (p === undefined) return undefined;
268
- else if (p.size() === 0 && p.isRequired() === false) return undefined;
269
- else if (
270
- p.size() === 1 &&
271
- p.nullable === false &&
272
- p.isRequired() === true &&
273
- p.any === false
274
- )
275
- return MetadataTypeTagSchemaFactory.object((msg) =>
276
- report("schema")(msg),
277
- )(p.objects[0]!);
278
- report("schema")("must be an object type");
279
- return undefined;
280
- })();
281
- return {
282
- name: obj.name,
283
- target,
284
- kind,
285
- value,
286
- validate,
287
- exclusive: exclusive ?? false,
288
- schema,
289
- };
290
- };
291
-
292
- const get_exclusive =
293
- (report: (property: string | null) => (msg: string) => false) =>
294
- (key: string) =>
295
- (value: Metadata | undefined): boolean | string[] | null => {
296
- if (value === undefined) return false;
296
+ return Object.fromEntries(
297
+ validate.objects[0]!.properties.map((p) => [
298
+ p.key.getSoleLiteral()!,
299
+ p.value.constants[0]!.values[0]!.value as string,
300
+ ]),
301
+ );
302
+ })();
303
+ const schema: object | undefined = (() => {
304
+ const p: Metadata | undefined = find("schema")?.value;
305
+ if (p === undefined) return undefined;
306
+ else if (p.size() === 0 && p.isRequired() === false) return undefined;
297
307
  else if (
298
- value.size() === 1 &&
299
- value.constants.length === 1 &&
300
- value.constants[0]!.type === "boolean" &&
301
- value.constants[0]!.values.length === 1
308
+ p.size() === 1 &&
309
+ p.nullable === false &&
310
+ p.isRequired() === true &&
311
+ p.any === false
302
312
  )
303
- return value.constants[0]!.values[0]!.value as boolean;
304
- else if (
305
- value.size() === 1 &&
306
- value.tuples.length === 1 &&
307
- value.tuples[0]!.type.elements.every(
308
- (elem) =>
309
- elem.size() === 1 &&
310
- elem.constants.length === 1 &&
311
- elem.constants[0]!.type === "string" &&
312
- elem.constants[0]!.values.length === 1,
313
- )
313
+ return MetadataTypeTagSchemaFactory.object({
314
+ report: (message) =>
315
+ props.report({
316
+ property: "schema",
317
+ message,
318
+ }),
319
+ object: p.objects[0]!,
320
+ });
321
+ props.report({
322
+ property: "schema",
323
+ message: "must be an object type",
324
+ });
325
+ return undefined;
326
+ })();
327
+ return {
328
+ name: props.object.name,
329
+ target,
330
+ kind,
331
+ value,
332
+ validate,
333
+ exclusive: exclusive ?? false,
334
+ schema,
335
+ };
336
+ };
337
+
338
+ const get_exclusive = (props: {
339
+ report: (next: { property: string | null; message: string }) => false;
340
+ key: string;
341
+ value: Metadata | undefined;
342
+ }): boolean | string[] | null => {
343
+ if (props.value === undefined) return false;
344
+ else if (
345
+ props.value.size() === 1 &&
346
+ props.value.constants.length === 1 &&
347
+ props.value.constants[0]!.type === "boolean" &&
348
+ props.value.constants[0]!.values.length === 1
349
+ )
350
+ return props.value.constants[0]!.values[0]!.value as boolean;
351
+ else if (
352
+ props.value.size() === 1 &&
353
+ props.value.tuples.length === 1 &&
354
+ props.value.tuples[0]!.type.elements.every(
355
+ (elem) =>
356
+ elem.size() === 1 &&
357
+ elem.constants.length === 1 &&
358
+ elem.constants[0]!.type === "string" &&
359
+ elem.constants[0]!.values.length === 1,
314
360
  )
315
- return value.tuples[0]!.type.elements.map(
316
- (elem) => elem.constants[0]!.values[0]!.value as string,
317
- );
318
- report(key)(
319
- "must a boolean literal type or a tuple of string literal types.",
361
+ )
362
+ return props.value.tuples[0]!.type.elements.map(
363
+ (elem) => elem.constants[0]!.values[0]!.value as string,
320
364
  );
321
- return null;
322
- };
365
+ props.report({
366
+ property: props.key,
367
+ message:
368
+ "must a boolean literal type or a tuple of string literal types.",
369
+ });
370
+ return null;
371
+ };
323
372
  }
324
373
 
325
374
  interface ITypeTag {