typia 13.1.0 → 13.1.19

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 (516) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +21 -0
  4. package/lib/executable/FileSystemIdentity.js +183 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +129 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +264 -104
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +233 -93
  11. package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
  12. package/lib/functional.d.ts +15 -12
  13. package/lib/functional.js.map +1 -1
  14. package/lib/functional.mjs.map +1 -1
  15. package/lib/internal/_ProtobufReader.d.ts +17 -0
  16. package/lib/internal/_ProtobufReader.js +117 -45
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +108 -39
  19. package/lib/internal/_ProtobufReader.mjs.map +1 -1
  20. package/lib/internal/_createStandardSchema.js +18 -1
  21. package/lib/internal/_createStandardSchema.js.map +1 -1
  22. package/lib/internal/_createStandardSchema.mjs +12 -1
  23. package/lib/internal/_createStandardSchema.mjs.map +1 -1
  24. package/lib/internal/_decimal.d.ts +14 -0
  25. package/lib/internal/_decimal.js +61 -0
  26. package/lib/internal/_decimal.js.map +1 -0
  27. package/lib/internal/_decimal.mjs +49 -0
  28. package/lib/internal/_decimal.mjs.map +1 -0
  29. package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
  30. package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
  31. package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
  32. package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
  33. package/lib/internal/_isFormatByte.js +2 -5
  34. package/lib/internal/_isFormatByte.js.map +1 -1
  35. package/lib/internal/_isFormatByte.mjs +2 -5
  36. package/lib/internal/_isFormatByte.mjs.map +1 -1
  37. package/lib/internal/_isFormatDate.js +15 -2
  38. package/lib/internal/_isFormatDate.js.map +1 -1
  39. package/lib/internal/_isFormatDate.mjs +22 -2
  40. package/lib/internal/_isFormatDate.mjs.map +1 -1
  41. package/lib/internal/_isFormatDateTime.js +21 -2
  42. package/lib/internal/_isFormatDateTime.js.map +1 -1
  43. package/lib/internal/_isFormatDateTime.mjs +13 -2
  44. package/lib/internal/_isFormatDateTime.mjs.map +1 -1
  45. package/lib/internal/_isFormatIri.js +3 -2
  46. package/lib/internal/_isFormatIri.js.map +1 -1
  47. package/lib/internal/_isFormatIri.mjs +3 -2
  48. package/lib/internal/_isFormatIri.mjs.map +1 -1
  49. package/lib/internal/_isFormatIriReference.js +10 -2
  50. package/lib/internal/_isFormatIriReference.js.map +1 -1
  51. package/lib/internal/_isFormatIriReference.mjs +9 -2
  52. package/lib/internal/_isFormatIriReference.mjs.map +1 -1
  53. package/lib/internal/_isFormatUriReference.js +1 -1
  54. package/lib/internal/_isFormatUriReference.js.map +1 -1
  55. package/lib/internal/_isFormatUriReference.mjs +1 -1
  56. package/lib/internal/_isFormatUriReference.mjs.map +1 -1
  57. package/lib/internal/_isMultipleOf.d.ts +1 -0
  58. package/lib/internal/_isMultipleOf.js +13 -0
  59. package/lib/internal/_isMultipleOf.js.map +1 -0
  60. package/lib/internal/_isMultipleOf.mjs +12 -0
  61. package/lib/internal/_isMultipleOf.mjs.map +1 -0
  62. package/lib/internal/_isTypeFloat.js +1 -1
  63. package/lib/internal/_isTypeFloat.js.map +1 -1
  64. package/lib/internal/_isTypeFloat.mjs +1 -1
  65. package/lib/internal/_isTypeFloat.mjs.map +1 -1
  66. package/lib/internal/_isTypeInt64.js +1 -0
  67. package/lib/internal/_isTypeInt64.js.map +1 -1
  68. package/lib/internal/_isTypeInt64.mjs.map +1 -1
  69. package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
  70. package/lib/internal/_isTypeInt64Bigint.js +15 -0
  71. package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
  72. package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
  73. package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
  74. package/lib/internal/_isTypeUint64.js +1 -0
  75. package/lib/internal/_isTypeUint64.js.map +1 -1
  76. package/lib/internal/_isTypeUint64.mjs.map +1 -1
  77. package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
  78. package/lib/internal/_isTypeUint64Bigint.js +10 -0
  79. package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
  80. package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
  81. package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
  82. package/lib/internal/_isUniqueItems.js +96 -109
  83. package/lib/internal/_isUniqueItems.js.map +1 -1
  84. package/lib/internal/_isUniqueItems.mjs +62 -50
  85. package/lib/internal/_isUniqueItems.mjs.map +1 -1
  86. package/lib/internal/_notationAny.js +8 -1
  87. package/lib/internal/_notationAny.js.map +1 -1
  88. package/lib/internal/_notationAny.mjs +7 -1
  89. package/lib/internal/_notationAny.mjs.map +1 -1
  90. package/lib/internal/_notationAssign.d.ts +1 -0
  91. package/lib/internal/_notationAssign.js +18 -0
  92. package/lib/internal/_notationAssign.js.map +1 -0
  93. package/lib/internal/_notationAssign.mjs +17 -0
  94. package/lib/internal/_notationAssign.mjs.map +1 -0
  95. package/lib/internal/_notationCamel.js +30 -9
  96. package/lib/internal/_notationCamel.js.map +1 -1
  97. package/lib/internal/_notationCamel.mjs +13 -5
  98. package/lib/internal/_notationCamel.mjs.map +1 -1
  99. package/lib/internal/_notationKebab.d.ts +1 -0
  100. package/lib/internal/_notationKebab.js +15 -0
  101. package/lib/internal/_notationKebab.js.map +1 -0
  102. package/lib/internal/_notationKebab.mjs +15 -0
  103. package/lib/internal/_notationKebab.mjs.map +1 -0
  104. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  105. package/lib/internal/_notationKeyCollision.js +8 -0
  106. package/lib/internal/_notationKeyCollision.js.map +1 -0
  107. package/lib/internal/_notationKeyCollision.mjs +8 -0
  108. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  109. package/lib/internal/_notationPascal.js +20 -5
  110. package/lib/internal/_notationPascal.js.map +1 -1
  111. package/lib/internal/_notationPascal.mjs +10 -5
  112. package/lib/internal/_notationPascal.mjs.map +1 -1
  113. package/lib/internal/_notationSnake.js +25 -22
  114. package/lib/internal/_notationSnake.js.map +1 -1
  115. package/lib/internal/_notationSnake.mjs +11 -11
  116. package/lib/internal/_notationSnake.mjs.map +1 -1
  117. package/lib/internal/_plainCloneAny.js +174 -38
  118. package/lib/internal/_plainCloneAny.js.map +1 -1
  119. package/lib/internal/_plainCloneAny.mjs +126 -22
  120. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  121. package/lib/internal/_randomArray.d.ts +1 -1
  122. package/lib/internal/_randomArray.js +11 -4
  123. package/lib/internal/_randomArray.js.map +1 -1
  124. package/lib/internal/_randomArray.mjs +9 -3
  125. package/lib/internal/_randomArray.mjs.map +1 -1
  126. package/lib/internal/_randomFormatByte.d.ts +2 -1
  127. package/lib/internal/_randomFormatByte.js +2 -1
  128. package/lib/internal/_randomFormatByte.js.map +1 -1
  129. package/lib/internal/_randomFormatByte.mjs +2 -1
  130. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  131. package/lib/internal/_randomFormatDate.d.ts +2 -0
  132. package/lib/internal/_randomFormatDate.js +3 -2
  133. package/lib/internal/_randomFormatDate.js.map +1 -1
  134. package/lib/internal/_randomFormatDate.mjs +3 -2
  135. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  136. package/lib/internal/_randomFormatDatetime.d.ts +2 -0
  137. package/lib/internal/_randomFormatDatetime.js +3 -2
  138. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  139. package/lib/internal/_randomFormatDatetime.mjs +3 -2
  140. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  141. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  142. package/lib/internal/_randomFormatDuration.js +3 -2
  143. package/lib/internal/_randomFormatDuration.js.map +1 -1
  144. package/lib/internal/_randomFormatDuration.mjs +3 -2
  145. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  146. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  147. package/lib/internal/_randomFormatEmail.js +8 -1
  148. package/lib/internal/_randomFormatEmail.js.map +1 -1
  149. package/lib/internal/_randomFormatEmail.mjs +5 -1
  150. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  151. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  152. package/lib/internal/_randomFormatHostname.js +45 -2
  153. package/lib/internal/_randomFormatHostname.js.map +1 -1
  154. package/lib/internal/_randomFormatHostname.mjs +38 -2
  155. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  156. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  157. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  158. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  159. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  160. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  161. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  162. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  163. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  164. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  165. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  166. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  167. package/lib/internal/_randomFormatIpv4.js +2 -1
  168. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  169. package/lib/internal/_randomFormatIpv4.mjs +2 -1
  170. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  171. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  172. package/lib/internal/_randomFormatIpv6.js +2 -1
  173. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  174. package/lib/internal/_randomFormatIpv6.mjs +2 -1
  175. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  176. package/lib/internal/_randomFormatIri.d.ts +2 -1
  177. package/lib/internal/_randomFormatIri.js +1 -1
  178. package/lib/internal/_randomFormatIri.js.map +1 -1
  179. package/lib/internal/_randomFormatIri.mjs +1 -1
  180. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  181. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  182. package/lib/internal/_randomFormatIriReference.js +1 -1
  183. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  184. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  185. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  186. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  187. package/lib/internal/_randomFormatJsonPointer.js +8 -1
  188. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  189. package/lib/internal/_randomFormatJsonPointer.mjs +5 -1
  190. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  191. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  192. package/lib/internal/_randomFormatPassword.js +7 -5
  193. package/lib/internal/_randomFormatPassword.js.map +1 -1
  194. package/lib/internal/_randomFormatPassword.mjs +5 -1
  195. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  196. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  197. package/lib/internal/_randomFormatRegex.js +2 -1
  198. package/lib/internal/_randomFormatRegex.js.map +1 -1
  199. package/lib/internal/_randomFormatRegex.mjs +2 -1
  200. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  201. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  202. package/lib/internal/_randomFormatRelativeJsonPointer.js +3 -2
  203. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  204. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +3 -2
  205. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  206. package/lib/internal/_randomFormatTime.d.ts +2 -1
  207. package/lib/internal/_randomFormatTime.js +3 -2
  208. package/lib/internal/_randomFormatTime.js.map +1 -1
  209. package/lib/internal/_randomFormatTime.mjs +3 -2
  210. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  211. package/lib/internal/_randomFormatUri.d.ts +2 -1
  212. package/lib/internal/_randomFormatUri.js +1 -1
  213. package/lib/internal/_randomFormatUri.js.map +1 -1
  214. package/lib/internal/_randomFormatUri.mjs +1 -1
  215. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  216. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  217. package/lib/internal/_randomFormatUriReference.js +1 -1
  218. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  219. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  220. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  221. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  222. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  223. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  224. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  225. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  226. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  227. package/lib/internal/_randomFormatUrl.js +21 -1
  228. package/lib/internal/_randomFormatUrl.js.map +1 -1
  229. package/lib/internal/_randomFormatUrl.mjs +18 -1
  230. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  231. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  232. package/lib/internal/_randomFormatUuid.js +3 -2
  233. package/lib/internal/_randomFormatUuid.js.map +1 -1
  234. package/lib/internal/_randomFormatUuid.mjs +3 -2
  235. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  236. package/lib/internal/_randomInteger.js +59 -28
  237. package/lib/internal/_randomInteger.js.map +1 -1
  238. package/lib/internal/_randomInteger.mjs +56 -16
  239. package/lib/internal/_randomInteger.mjs.map +1 -1
  240. package/lib/internal/_randomMultiple.d.ts +8 -0
  241. package/lib/internal/_randomMultiple.js +168 -0
  242. package/lib/internal/_randomMultiple.js.map +1 -0
  243. package/lib/internal/_randomMultiple.mjs +158 -0
  244. package/lib/internal/_randomMultiple.mjs.map +1 -0
  245. package/lib/internal/_randomNumber.js +42 -42
  246. package/lib/internal/_randomNumber.js.map +1 -1
  247. package/lib/internal/_randomNumber.mjs +41 -27
  248. package/lib/internal/_randomNumber.mjs.map +1 -1
  249. package/lib/internal/_randomPattern.d.ts +2 -1
  250. package/lib/internal/_randomPattern.js +19 -4
  251. package/lib/internal/_randomPattern.js.map +1 -1
  252. package/lib/internal/_randomPattern.mjs +10 -4
  253. package/lib/internal/_randomPattern.mjs.map +1 -1
  254. package/lib/internal/_randomStringLength.d.ts +33 -0
  255. package/lib/internal/_randomStringLength.js +48 -0
  256. package/lib/internal/_randomStringLength.js.map +1 -0
  257. package/lib/internal/_randomStringLength.mjs +44 -0
  258. package/lib/internal/_randomStringLength.mjs.map +1 -0
  259. package/lib/internal/_stringLength.d.ts +1 -0
  260. package/lib/internal/_stringLength.js +11 -0
  261. package/lib/internal/_stringLength.js.map +1 -0
  262. package/lib/internal/_stringLength.mjs +10 -0
  263. package/lib/internal/_stringLength.mjs.map +1 -0
  264. package/lib/internal/_validateReport.js +4 -1
  265. package/lib/internal/_validateReport.js.map +1 -1
  266. package/lib/internal/_validateReport.mjs +2 -1
  267. package/lib/internal/_validateReport.mjs.map +1 -1
  268. package/lib/internal/private/__notationRename.d.ts +14 -0
  269. package/lib/internal/private/__notationRename.js +25 -0
  270. package/lib/internal/private/__notationRename.js.map +1 -0
  271. package/lib/internal/private/__notationRename.mjs +24 -0
  272. package/lib/internal/private/__notationRename.mjs.map +1 -0
  273. package/lib/json.d.ts +2 -2
  274. package/lib/json.mjs.map +1 -1
  275. package/lib/module.d.ts +2 -2
  276. package/lib/module.js.map +1 -1
  277. package/lib/module.mjs.map +1 -1
  278. package/lib/notations.d.ts +20 -4
  279. package/lib/notations.js.map +1 -1
  280. package/lib/notations.mjs.map +1 -1
  281. package/native/adapter/plugin_options.go +117 -0
  282. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  283. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  284. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  285. package/native/cmd/ttsc-typia/build.go +81 -64
  286. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  287. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  288. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  289. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  290. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  291. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  292. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  293. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  294. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  295. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  296. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  297. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  298. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  299. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  300. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  301. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  302. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  303. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  304. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  305. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  306. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  307. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  308. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  309. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  310. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  311. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  312. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  313. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  314. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  315. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  316. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  317. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  318. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  319. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  320. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  321. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  322. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  323. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  324. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  325. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  326. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  327. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  328. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  329. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  330. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  331. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  332. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  333. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  334. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  335. package/native/cmd/ttsc-typia/transform.go +228 -39
  336. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  337. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  338. package/native/cmd/ttsc-typia/transform_helpers_test.go +159 -1
  339. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  340. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  341. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  342. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  343. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  344. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  345. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  346. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  347. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  348. package/native/core/factories/FormatCheatSheet.go +40 -7
  349. package/native/core/factories/IdentifierFactory.go +131 -4
  350. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  351. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  352. package/native/core/factories/NumericRangeFactory.go +60 -17
  353. package/native/core/factories/ProtobufFactory.go +7 -4
  354. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  355. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  356. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  357. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  358. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  359. package/native/core/factories/internal/metadata/MetadataHelper.go +134 -7
  360. package/native/core/factories/internal/metadata/emplace_metadata_object.go +116 -8
  361. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  362. package/native/core/factories/internal/metadata/iterate_metadata_function.go +4 -11
  363. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +8 -6
  364. package/native/core/factories/internal/metadata/iterate_metadata_map.go +9 -0
  365. package/native/core/factories/internal/metadata/iterate_metadata_native.go +27 -2
  366. package/native/core/factories/internal/metadata/iterate_metadata_set.go +9 -0
  367. package/native/core/factories/internal/metadata/js_doc_link_text_test.go +69 -0
  368. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  369. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  370. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  371. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  372. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  373. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  374. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  375. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  376. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  377. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  378. package/native/core/programmers/IsProgrammer.go +15 -1
  379. package/native/core/programmers/RandomProgrammer.go +51 -14
  380. package/native/core/programmers/compare/CompareEqualProgrammer.go +393 -5
  381. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  382. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  383. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  384. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  385. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  386. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  387. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  388. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  389. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  390. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  391. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  392. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  393. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  394. package/native/core/programmers/helpers/StringifyJoinder.go +32 -1
  395. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  396. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +5 -3
  397. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  398. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  399. package/native/core/programmers/iterate/check_template.go +344 -32
  400. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  401. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  402. package/native/core/programmers/iterate/openapi_v3_downgrader.go +641 -0
  403. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  404. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  405. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  406. package/native/core/programmers/iterate/template_runtime_pattern.go +52 -7
  407. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  408. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  409. package/native/core/programmers/llm/LlmApplicationProgrammer.go +12 -10
  410. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  411. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  412. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  413. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  414. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  415. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  416. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  417. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  418. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  419. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  420. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  421. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +40 -21
  422. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  423. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  424. package/native/core/schemas/metadata/MetadataCollection.go +270 -20
  425. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  426. package/native/core/schemas/metadata/MetadataObjectType.go +17 -4
  427. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  428. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  429. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  430. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  431. package/native/core/utils/PatternUtil.go +13 -0
  432. package/native/core/utils/PromiseTypeFactory.go +59 -0
  433. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  434. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  435. package/native/go.mod +9 -1
  436. package/native/transform/CallExpressionTransformer.go +12 -0
  437. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  438. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  439. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  440. package/package.json +16 -4
  441. package/src/executable/FileSystemIdentity.ts +189 -0
  442. package/src/executable/TypiaGenerateWizard.ts +377 -110
  443. package/src/functional.ts +30 -60
  444. package/src/internal/_ProtobufReader.ts +129 -43
  445. package/src/internal/_createStandardSchema.ts +15 -1
  446. package/src/internal/_decimal.ts +69 -0
  447. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  448. package/src/internal/_isFormatByte.ts +2 -5
  449. package/src/internal/_isFormatDate.ts +15 -2
  450. package/src/internal/_isFormatDateTime.ts +28 -2
  451. package/src/internal/_isFormatIri.ts +5 -2
  452. package/src/internal/_isFormatIriReference.ts +11 -3
  453. package/src/internal/_isFormatUriReference.ts +1 -1
  454. package/src/internal/_isMultipleOf.ts +8 -0
  455. package/src/internal/_isTypeFloat.ts +1 -1
  456. package/src/internal/_isTypeInt64.ts +1 -0
  457. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  458. package/src/internal/_isTypeUint64.ts +1 -0
  459. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  460. package/src/internal/_isUniqueItems.ts +134 -132
  461. package/src/internal/_notationAny.ts +9 -4
  462. package/src/internal/_notationAssign.ts +20 -0
  463. package/src/internal/_notationCamel.ts +31 -10
  464. package/src/internal/_notationKebab.ts +11 -0
  465. package/src/internal/_notationKeyCollision.ts +9 -0
  466. package/src/internal/_notationPascal.ts +19 -6
  467. package/src/internal/_notationSnake.ts +24 -21
  468. package/src/internal/_plainCloneAny.ts +208 -33
  469. package/src/internal/_randomArray.ts +13 -4
  470. package/src/internal/_randomFormatByte.ts +4 -1
  471. package/src/internal/_randomFormatDate.ts +17 -12
  472. package/src/internal/_randomFormatDatetime.ts +15 -10
  473. package/src/internal/_randomFormatDuration.ts +16 -14
  474. package/src/internal/_randomFormatEmail.ts +8 -2
  475. package/src/internal/_randomFormatHostname.ts +48 -1
  476. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  477. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  478. package/src/internal/_randomFormatIpv4.ts +3 -2
  479. package/src/internal/_randomFormatIpv6.ts +3 -2
  480. package/src/internal/_randomFormatIri.ts +3 -1
  481. package/src/internal/_randomFormatIriReference.ts +3 -1
  482. package/src/internal/_randomFormatJsonPointer.ts +8 -2
  483. package/src/internal/_randomFormatPassword.ts +11 -6
  484. package/src/internal/_randomFormatRegex.ts +4 -1
  485. package/src/internal/_randomFormatRelativeJsonPointer.ts +13 -6
  486. package/src/internal/_randomFormatTime.ts +13 -10
  487. package/src/internal/_randomFormatUri.ts +3 -1
  488. package/src/internal/_randomFormatUriReference.ts +3 -1
  489. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  490. package/src/internal/_randomFormatUrl.ts +25 -2
  491. package/src/internal/_randomFormatUuid.ts +10 -6
  492. package/src/internal/_randomInteger.ts +87 -40
  493. package/src/internal/_randomMultiple.ts +245 -0
  494. package/src/internal/_randomNumber.ts +72 -55
  495. package/src/internal/_randomPattern.ts +26 -4
  496. package/src/internal/_randomStringLength.ts +72 -0
  497. package/src/internal/_stringLength.ts +5 -0
  498. package/src/internal/_validateReport.ts +5 -1
  499. package/src/internal/private/__notationRename.ts +24 -0
  500. package/src/json.ts +2 -2
  501. package/src/module.ts +4 -6
  502. package/src/notations.ts +20 -4
  503. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  504. package/lib/internal/private/__notationCapitalize.js +0 -6
  505. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  506. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  507. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  508. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  509. package/lib/internal/private/__notationUnsnake.js +0 -26
  510. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  511. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  512. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  513. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  514. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  515. package/src/internal/private/__notationCapitalize.ts +0 -2
  516. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -0,0 +1,641 @@
1
+ package iterate
2
+
3
+ import (
4
+ "reflect"
5
+ "strings"
6
+
7
+ nativefactories "github.com/samchon/typia/packages/typia/native/core/factories"
8
+ )
9
+
10
+ // OpenApiV3Downgrader rewrites an emended (OpenAPI 3.1) schema collection into
11
+ // the OpenAPI 3.0 dialect. `json.schema`, `json.schemas`, and `json.application`
12
+ // all build their document through json_schema_station, which speaks 3.1 only:
13
+ // it emits `const`, `prefixItems`, and a `{"type": "null"}` union member for a
14
+ // nullable type. None of those exist in 3.0, which spells the same three things
15
+ // as `enum`, `items` + `minItems`/`maxItems`, and the `nullable` flag.
16
+ //
17
+ // This is a port of `@typia/utils`' OpenApiV3Downgrader, which the TypeScript
18
+ // implementation of JsonSchemasProgrammer called through
19
+ // `OpenApiConverter.downgradeComponents` / `downgradeSchema` before the Go port
20
+ // replaced it. The Go transform cannot call into TypeScript, so the two are
21
+ // necessarily separate implementations of one contract; the port is kept
22
+ // deliberately literal so the correspondence stays reviewable, and
23
+ // `tests/test-typia-schema/src/features/json.schemas/test_json_schemas_v3_0_parity_converter.ts`
24
+ // pins the two owners against each other on every emitted construct.
25
+ //
26
+ // Only the components-and-schemas surface is ported. The TypeScript owner also
27
+ // downgrades paths, operations, and security schemes, none of which typia emits.
28
+ type OpenApiV3Downgrader_IComponentsCollection struct {
29
+ // Original is the emended 3.1 collection, read to resolve `$ref` targets
30
+ // while deciding nullability. It is never mutated.
31
+ Original *OpenApi_IComponents
32
+ // Downgraded accumulates the 3.0 result, including the `X.Nullable`
33
+ // companion schemas that a nullable reference forces into existence.
34
+ Downgraded *OpenApi_IComponents
35
+ }
36
+
37
+ // OpenApiV3Downgrader_downgrade_components downgrades every schema of the
38
+ // collection, preserving the discovery order recorded in Order. A schema is
39
+ // downgraded before its own key is registered, so the `X.Nullable` companions
40
+ // that its references create land ahead of it exactly as the TypeScript owner's
41
+ // argument-evaluation order places them.
42
+ func OpenApiV3Downgrader_downgrade_components(input *OpenApi_IComponents) *OpenApiV3Downgrader_IComponentsCollection {
43
+ collection := &OpenApiV3Downgrader_IComponentsCollection{
44
+ Original: input,
45
+ Downgraded: &OpenApi_IComponents{},
46
+ }
47
+ if input == nil || input.Schemas == nil {
48
+ return collection
49
+ }
50
+ collection.Downgraded.Schemas = map[string]JsonSchema{}
51
+ for _, key := range input.Order {
52
+ value, ok := input.Schemas[key]
53
+ if ok == false {
54
+ continue
55
+ }
56
+ downgraded := OpenApiV3Downgrader_downgrade_schema(collection, value)
57
+ collection.Downgraded.emplaceSchemaKey(key)
58
+ collection.Downgraded.Schemas[key] = downgraded
59
+ }
60
+ return collection
61
+ }
62
+
63
+ // OpenApiV3Downgrader_downgrade_schema rewrites one emended schema into 3.0.
64
+ //
65
+ // The emended dialect expresses a union as `oneOf` and nullability as a
66
+ // `{"type": "null"}` member of it. 3.0 has neither, so the schema is flattened
67
+ // into a union of concrete members, the null member is dropped, and the
68
+ // surviving members carry `nullable: true` instead. Constants collapse into the
69
+ // `enum` of a member of the same primitive type.
70
+ func OpenApiV3Downgrader_downgrade_schema(collection *OpenApiV3Downgrader_IComponentsCollection, input JsonSchema) JsonSchema {
71
+ nullable := openApiV3Downgrader_is_nullable(map[string]bool{}, collection.Original, input)
72
+ union := []JsonSchema{}
73
+
74
+ var discriminator any
75
+ if openApiV3Downgrader_is_one_of(input) {
76
+ if value, ok := input["discriminator"]; ok && openApiV3Downgrader_is_nil(value) == false {
77
+ discriminator = openApiV3Downgrader_clone_value(value)
78
+ }
79
+ }
80
+ // A nullable union cannot keep its discriminator: 3.0 requires every mapped
81
+ // branch to stay a distinct `oneOf` member, and the null member is gone.
82
+ preserveDiscriminator := discriminator != nil && nullable == false
83
+
84
+ var visit func(schema JsonSchema)
85
+ visit = func(schema JsonSchema) {
86
+ if openApiV3Downgrader_is_boolean(schema) ||
87
+ openApiV3Downgrader_is_integer(schema) ||
88
+ openApiV3Downgrader_is_number(schema) ||
89
+ openApiV3Downgrader_is_string(schema) ||
90
+ openApiV3Downgrader_is_reference(schema) {
91
+ // A boolean carries the same declared keywords through the downgrade as
92
+ // the other primitives do (at minimum `default`, plus every attribute
93
+ // OpenApiV3.IJsonSchema.IBoolean allows); rebuilding it as
94
+ // `{"type": "boolean"}` dropped them. `omit_examples` keeps the legal
95
+ // 3.0 keys and strips only `examples`, which 3.0 does not define.
96
+ union = append(union, openApiV3Downgrader_omit_examples(schema))
97
+ } else if openApiV3Downgrader_is_array(schema) {
98
+ next := openApiV3Downgrader_omit_examples(schema)
99
+ next["items"] = OpenApiV3Downgrader_downgrade_schema(
100
+ collection,
101
+ openApiV3Downgrader_schema(schema["items"]),
102
+ )
103
+ union = append(union, next)
104
+ } else if openApiV3Downgrader_is_tuple(schema) {
105
+ union = append(union, openApiV3Downgrader_downgrade_tuple(collection, schema))
106
+ } else if openApiV3Downgrader_is_object(schema) {
107
+ union = append(union, openApiV3Downgrader_downgrade_object(collection, schema))
108
+ } else if openApiV3Downgrader_is_one_of(schema) {
109
+ tracked := openApiV3Downgrader_same(schema, input) && discriminator != nil
110
+ for _, branch := range openApiV3Downgrader_schema_array(schema["oneOf"]) {
111
+ previous := len(union)
112
+ visit(branch)
113
+ // A branch that did not contribute exactly one member (a constant,
114
+ // or a nested union) breaks the one-branch-per-mapping rule the
115
+ // discriminator depends on.
116
+ if tracked && len(union) != previous+1 {
117
+ preserveDiscriminator = false
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ insertConstant := func(value any) {
124
+ typeName := openApiV3Downgrader_typeof(value)
125
+ for _, member := range union {
126
+ if member["type"] == typeName {
127
+ enum, _ := member["enum"].([]any)
128
+ member["enum"] = append(enum, value)
129
+ return
130
+ }
131
+ }
132
+ union = append(union, JsonSchema{"type": typeName, "enum": []any{value}})
133
+ }
134
+ visitConstant := func(schema JsonSchema) {
135
+ if openApiV3Downgrader_is_constant(schema) {
136
+ insertConstant(schema["const"])
137
+ } else if openApiV3Downgrader_is_one_of(schema) {
138
+ for _, branch := range openApiV3Downgrader_schema_array(schema["oneOf"]) {
139
+ if openApiV3Downgrader_is_constant(branch) {
140
+ insertConstant(branch["const"])
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ visit(input)
147
+ visitConstant(input)
148
+
149
+ if nullable {
150
+ for _, member := range union {
151
+ // A reference cannot carry `nullable` in 3.0, because the flag would sit
152
+ // beside `$ref` where 3.0 ignores every sibling key. The target is
153
+ // duplicated as an `X.Nullable` companion schema instead.
154
+ if openApiV3Downgrader_is_reference(member) {
155
+ openApiV3Downgrader_downgrade_nullable_reference(map[string]bool{}, collection, member)
156
+ } else {
157
+ member["nullable"] = true
158
+ }
159
+ }
160
+ }
161
+ if nullable && len(union) == 0 {
162
+ output := JsonSchema{"type": "null"}
163
+ openApiV3Downgrader_apply_attribute(output, input)
164
+ return output
165
+ }
166
+
167
+ output := JsonSchema{}
168
+ if len(union) == 0 {
169
+ output["type"] = nil
170
+ } else if len(union) == 1 {
171
+ for key, value := range union[0] {
172
+ output[key] = value
173
+ }
174
+ } else {
175
+ output["oneOf"] = union
176
+ if preserveDiscriminator && discriminator != nil {
177
+ output["discriminator"] = discriminator
178
+ }
179
+ }
180
+ openApiV3Downgrader_apply_attribute(output, input)
181
+ return output
182
+ }
183
+
184
+ // openApiV3Downgrader_downgrade_tuple rewrites `prefixItems` into 3.0's single
185
+ // `items` schema. 3.0 cannot type each position, so the positional types
186
+ // collapse into one `oneOf` and the arity is pinned by minItems/maxItems, which
187
+ // is the closest 3.0 gets to a tuple.
188
+ func openApiV3Downgrader_downgrade_tuple(collection *OpenApiV3Downgrader_IComponentsCollection, schema JsonSchema) JsonSchema {
189
+ next := openApiV3Downgrader_omit_examples(schema)
190
+ prefixItems := openApiV3Downgrader_schema_array(schema["prefixItems"])
191
+ additional := schema["additionalItems"]
192
+
193
+ var items JsonSchema
194
+ if flag, ok := additional.(bool); ok && flag {
195
+ // `additionalItems: true` admits anything at any position.
196
+ items = JsonSchema{}
197
+ } else {
198
+ elements := []JsonSchema{}
199
+ elements = append(elements, prefixItems...)
200
+ if rest := openApiV3Downgrader_schema(additional); rest != nil {
201
+ elements = append(elements, OpenApiV3Downgrader_downgrade_schema(collection, rest))
202
+ }
203
+ if len(elements) == 0 {
204
+ items = JsonSchema{}
205
+ } else {
206
+ oneOf := make([]JsonSchema, 0, len(elements))
207
+ for _, element := range elements {
208
+ oneOf = append(oneOf, OpenApiV3Downgrader_downgrade_schema(collection, element))
209
+ }
210
+ items = JsonSchema{"oneOf": oneOf}
211
+ }
212
+ }
213
+
214
+ next["items"] = items
215
+ next["minItems"] = len(prefixItems)
216
+ if openApiV3Downgrader_truthy(additional) {
217
+ // A rest element leaves the tuple unbounded above.
218
+ delete(next, "maxItems")
219
+ } else {
220
+ next["maxItems"] = len(prefixItems)
221
+ }
222
+ delete(next, "prefixItems")
223
+ delete(next, "additionalItems")
224
+ return next
225
+ }
226
+
227
+ func openApiV3Downgrader_downgrade_object(collection *OpenApiV3Downgrader_IComponentsCollection, schema JsonSchema) JsonSchema {
228
+ next := openApiV3Downgrader_omit_examples(schema)
229
+ if properties, ok := schema["properties"]; ok && openApiV3Downgrader_is_nil(properties) == false {
230
+ next["properties"] = openApiV3Downgrader_map_properties(properties, func(value JsonSchema) JsonSchema {
231
+ return OpenApiV3Downgrader_downgrade_schema(collection, value)
232
+ })
233
+ } else {
234
+ delete(next, "properties")
235
+ }
236
+ if additional, ok := schema["additionalProperties"]; ok && openApiV3Downgrader_is_nil(additional) == false {
237
+ if nested := openApiV3Downgrader_schema(additional); nested != nil {
238
+ next["additionalProperties"] = OpenApiV3Downgrader_downgrade_schema(collection, nested)
239
+ } else {
240
+ next["additionalProperties"] = additional
241
+ }
242
+ } else {
243
+ delete(next, "additionalProperties")
244
+ }
245
+ return next
246
+ }
247
+
248
+ // openApiV3Downgrader_downgrade_nullable_reference redirects a nullable `$ref`
249
+ // at an `X.Nullable` companion schema, creating it on first demand.
250
+ //
251
+ // The companion is registered as an empty placeholder before it is built, so a
252
+ // self-referential type resolves against the in-progress entry instead of
253
+ // recursing forever.
254
+ func openApiV3Downgrader_downgrade_nullable_reference(
255
+ visited map[string]bool,
256
+ collection *OpenApiV3Downgrader_IComponentsCollection,
257
+ schema JsonSchema,
258
+ ) {
259
+ ref, ok := schema["$ref"].(string)
260
+ if ok == false {
261
+ return
262
+ }
263
+ key := openApiV3Downgrader_ref_key(ref)
264
+ if strings.HasSuffix(key, ".Nullable") {
265
+ return
266
+ }
267
+ var found JsonSchema
268
+ if collection.Original != nil && collection.Original.Schemas != nil {
269
+ found = collection.Original.Schemas[key]
270
+ }
271
+ if found == nil {
272
+ return
273
+ }
274
+ // The target already admits null on its own; the plain reference is enough.
275
+ if openApiV3Downgrader_is_nullable(visited, collection.Original, found) {
276
+ return
277
+ }
278
+
279
+ nullableKey := key + ".Nullable"
280
+ if collection.Downgraded.Schemas == nil || collection.Downgraded.Schemas[nullableKey] == nil {
281
+ collection.Downgraded.emplaceSchemaKey(nullableKey)
282
+ collection.Downgraded.Schemas[nullableKey] = JsonSchema{}
283
+
284
+ var target JsonSchema
285
+ if openApiV3Downgrader_is_one_of(found) {
286
+ target = openApiV3Downgrader_shallow_clone(found)
287
+ branches := openApiV3Downgrader_schema_array(found["oneOf"])
288
+ appended := make([]JsonSchema, 0, len(branches)+1)
289
+ appended = append(appended, branches...)
290
+ appended = append(appended, JsonSchema{"type": "null"})
291
+ target["oneOf"] = appended
292
+ } else {
293
+ target = JsonSchema{
294
+ "oneOf": []JsonSchema{found, {"type": "null"}},
295
+ }
296
+ for _, attribute := range []string{"title", "description", "example", "examples"} {
297
+ if value, ok := found[attribute]; ok && openApiV3Downgrader_is_nil(value) == false {
298
+ target[attribute] = value
299
+ }
300
+ }
301
+ for attribute, value := range found {
302
+ if strings.HasPrefix(attribute, "x-") && openApiV3Downgrader_is_nil(value) == false {
303
+ target[attribute] = value
304
+ }
305
+ }
306
+ }
307
+ collection.Downgraded.Schemas[nullableKey] = OpenApiV3Downgrader_downgrade_schema(collection, target)
308
+ }
309
+ schema["$ref"] = ref + ".Nullable"
310
+ }
311
+
312
+ // openApiV3Downgrader_apply_attribute copies the dialect-independent annotations
313
+ // from the source schema onto the rewritten one. An annotation absent from the
314
+ // source is deleted rather than left behind, because the rewritten schema may
315
+ // have inherited one from a single flattened union member that the source itself
316
+ // does not carry.
317
+ func openApiV3Downgrader_apply_attribute(output JsonSchema, input JsonSchema) {
318
+ for _, key := range []string{
319
+ "title",
320
+ "description",
321
+ "deprecated",
322
+ "readOnly",
323
+ "writeOnly",
324
+ "example",
325
+ } {
326
+ if value, ok := input[key]; ok && openApiV3Downgrader_is_nil(value) == false {
327
+ output[key] = value
328
+ } else {
329
+ delete(output, key)
330
+ }
331
+ }
332
+ for key, value := range input {
333
+ if strings.HasPrefix(key, "x-") && openApiV3Downgrader_is_nil(value) == false {
334
+ output[key] = value
335
+ }
336
+ }
337
+ }
338
+
339
+ // openApiV3Downgrader_is_nullable reports whether the schema admits null,
340
+ // following `$ref` targets through the emended components. The visited set stops
341
+ // a recursive type from looping.
342
+ func openApiV3Downgrader_is_nullable(visited map[string]bool, components *OpenApi_IComponents, schema JsonSchema) bool {
343
+ if openApiV3Downgrader_is_null(schema) {
344
+ return true
345
+ }
346
+ if openApiV3Downgrader_is_reference(schema) {
347
+ ref, ok := schema["$ref"].(string)
348
+ if ok == false {
349
+ return false
350
+ }
351
+ if visited[ref] {
352
+ return false
353
+ }
354
+ visited[ref] = true
355
+ if components == nil || components.Schemas == nil {
356
+ return false
357
+ }
358
+ next, ok := components.Schemas[openApiV3Downgrader_ref_key(ref)]
359
+ if ok == false {
360
+ return false
361
+ }
362
+ return openApiV3Downgrader_is_nullable(visited, components, next)
363
+ }
364
+ if openApiV3Downgrader_is_one_of(schema) {
365
+ for _, branch := range openApiV3Downgrader_schema_array(schema["oneOf"]) {
366
+ if openApiV3Downgrader_is_nullable(visited, components, branch) {
367
+ return true
368
+ }
369
+ }
370
+ }
371
+ return false
372
+ }
373
+
374
+ /* -----------------------------------------------------------
375
+ TYPE CHECKERS
376
+ ----------------------------------------------------------- */
377
+
378
+ func openApiV3Downgrader_is_null(schema JsonSchema) bool {
379
+ return schema != nil && schema["type"] == "null"
380
+ }
381
+
382
+ func openApiV3Downgrader_is_constant(schema JsonSchema) bool {
383
+ if schema == nil {
384
+ return false
385
+ }
386
+ value, ok := schema["const"]
387
+ return ok && openApiV3Downgrader_is_nil(value) == false
388
+ }
389
+
390
+ func openApiV3Downgrader_is_boolean(schema JsonSchema) bool {
391
+ return schema != nil && schema["type"] == "boolean"
392
+ }
393
+
394
+ func openApiV3Downgrader_is_integer(schema JsonSchema) bool {
395
+ return schema != nil && schema["type"] == "integer"
396
+ }
397
+
398
+ func openApiV3Downgrader_is_number(schema JsonSchema) bool {
399
+ return schema != nil && schema["type"] == "number"
400
+ }
401
+
402
+ func openApiV3Downgrader_is_string(schema JsonSchema) bool {
403
+ return schema != nil && schema["type"] == "string"
404
+ }
405
+
406
+ func openApiV3Downgrader_is_array(schema JsonSchema) bool {
407
+ if schema == nil || schema["type"] != "array" {
408
+ return false
409
+ }
410
+ value, ok := schema["items"]
411
+ return ok && openApiV3Downgrader_is_nil(value) == false
412
+ }
413
+
414
+ func openApiV3Downgrader_is_tuple(schema JsonSchema) bool {
415
+ if schema == nil || schema["type"] != "array" {
416
+ return false
417
+ }
418
+ value, ok := schema["prefixItems"]
419
+ return ok && openApiV3Downgrader_is_nil(value) == false
420
+ }
421
+
422
+ func openApiV3Downgrader_is_object(schema JsonSchema) bool {
423
+ return schema != nil && schema["type"] == "object"
424
+ }
425
+
426
+ func openApiV3Downgrader_is_reference(schema JsonSchema) bool {
427
+ if schema == nil {
428
+ return false
429
+ }
430
+ value, ok := schema["$ref"]
431
+ return ok && openApiV3Downgrader_is_nil(value) == false
432
+ }
433
+
434
+ func openApiV3Downgrader_is_one_of(schema JsonSchema) bool {
435
+ if schema == nil {
436
+ return false
437
+ }
438
+ value, ok := schema["oneOf"]
439
+ return ok && openApiV3Downgrader_is_nil(value) == false
440
+ }
441
+
442
+ /* -----------------------------------------------------------
443
+ UTILITIES
444
+ ----------------------------------------------------------- */
445
+
446
+ // openApiV3Downgrader_omit_examples shallow-copies the schema without
447
+ // `examples`, which 3.0 does not define. The copy is what keeps the rewritten
448
+ // members from mutating the emended input.
449
+ func openApiV3Downgrader_omit_examples(schema JsonSchema) JsonSchema {
450
+ output := JsonSchema{}
451
+ for key, value := range schema {
452
+ if key == "examples" {
453
+ continue
454
+ }
455
+ output[key] = value
456
+ }
457
+ return output
458
+ }
459
+
460
+ // openApiV3Downgrader_shallow_clone copies a schema's own keys, leaving nested
461
+ // values shared. It stands in for the object spread the TypeScript owner uses
462
+ // when it rebuilds a union with an extra null member.
463
+ func openApiV3Downgrader_shallow_clone(schema JsonSchema) JsonSchema {
464
+ output := JsonSchema{}
465
+ for key, value := range schema {
466
+ output[key] = value
467
+ }
468
+ return output
469
+ }
470
+
471
+ // openApiV3Downgrader_map_properties rewrites each property schema while keeping
472
+ // the emitted key order. Object properties are carried as an ordered literal
473
+ // rather than a Go map precisely because their order is observable in the
474
+ // emitted output.
475
+ func openApiV3Downgrader_map_properties(value any, mapper func(JsonSchema) JsonSchema) any {
476
+ if ordered, ok := value.(nativefactories.LiteralFactory_OrderedObject); ok {
477
+ values := make(map[string]any, len(ordered.Values))
478
+ keys := make([]string, 0, len(ordered.Keys))
479
+ for _, key := range ordered.Keys {
480
+ entry, ok := ordered.Values[key]
481
+ if ok == false || openApiV3Downgrader_is_nil(entry) {
482
+ continue
483
+ }
484
+ if schema := openApiV3Downgrader_schema(entry); schema != nil {
485
+ values[key] = mapper(schema)
486
+ } else {
487
+ values[key] = entry
488
+ }
489
+ keys = append(keys, key)
490
+ }
491
+ return nativefactories.LiteralFactory_OrderedObject{Keys: keys, Values: values}
492
+ }
493
+ if plain, ok := value.(map[string]any); ok {
494
+ output := map[string]any{}
495
+ for key, entry := range plain {
496
+ if openApiV3Downgrader_is_nil(entry) {
497
+ continue
498
+ }
499
+ if schema := openApiV3Downgrader_schema(entry); schema != nil {
500
+ output[key] = mapper(schema)
501
+ } else {
502
+ output[key] = entry
503
+ }
504
+ }
505
+ return output
506
+ }
507
+ return value
508
+ }
509
+
510
+ // openApiV3Downgrader_schema coerces a schema-valued map to JsonSchema, whether
511
+ // it arrived already named or as a bare map. It returns nil for anything that is
512
+ // not a schema, which is how the tuple and additionalProperties paths tell an
513
+ // object apart from a boolean flag.
514
+ func openApiV3Downgrader_schema(value any) JsonSchema {
515
+ switch typed := value.(type) {
516
+ case JsonSchema:
517
+ return typed
518
+ case map[string]any:
519
+ return JsonSchema(typed)
520
+ }
521
+ return nil
522
+ }
523
+
524
+ func openApiV3Downgrader_schema_array(value any) []JsonSchema {
525
+ switch typed := value.(type) {
526
+ case []JsonSchema:
527
+ return typed
528
+ case []any:
529
+ output := make([]JsonSchema, 0, len(typed))
530
+ for _, element := range typed {
531
+ if schema := openApiV3Downgrader_schema(element); schema != nil {
532
+ output = append(output, schema)
533
+ }
534
+ }
535
+ return output
536
+ }
537
+ return nil
538
+ }
539
+
540
+ // openApiV3Downgrader_typeof names the 3.0 primitive type of a constant value,
541
+ // mirroring the JavaScript `typeof` the TypeScript owner keys its enum merge on.
542
+ //
543
+ // A numeric literal arrives as the compiler's `jsnum.Number` (defined `type
544
+ // Number float64`), a named type an explicit `case float64` does not match, so
545
+ // numbers are classified by reflected kind rather than by concrete type. Getting
546
+ // this wrong labels a numeric literal `object`, which then fails to merge with a
547
+ // sibling number member and mislabels the union branch.
548
+ func openApiV3Downgrader_typeof(value any) string {
549
+ switch value.(type) {
550
+ case string:
551
+ return "string"
552
+ case bool:
553
+ return "boolean"
554
+ }
555
+ if value != nil {
556
+ switch reflect.ValueOf(value).Kind() {
557
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
558
+ reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
559
+ reflect.Float32, reflect.Float64:
560
+ return "number"
561
+ }
562
+ }
563
+ return "object"
564
+ }
565
+
566
+ // openApiV3Downgrader_truthy mirrors the JavaScript truthiness the tuple path
567
+ // tests `additionalItems` for: an absent or `false` rest closes the tuple, while
568
+ // `true` or a schema leaves it open.
569
+ func openApiV3Downgrader_truthy(value any) bool {
570
+ if openApiV3Downgrader_is_nil(value) {
571
+ return false
572
+ }
573
+ if flag, ok := value.(bool); ok {
574
+ return flag
575
+ }
576
+ return true
577
+ }
578
+
579
+ // openApiV3Downgrader_is_nil treats a typed nil pointer, map, or slice as absent,
580
+ // matching how LiteralFactory decides a value is not emitted. A plain `value ==
581
+ // nil` misses a nil *string held in an interface, which is what the schema
582
+ // builders store for an absent title or description.
583
+ func openApiV3Downgrader_is_nil(value any) bool {
584
+ if value == nil {
585
+ return true
586
+ }
587
+ reflected := reflect.ValueOf(value)
588
+ switch reflected.Kind() {
589
+ case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice:
590
+ return reflected.IsNil()
591
+ default:
592
+ return false
593
+ }
594
+ }
595
+
596
+ // openApiV3Downgrader_same reports whether two schemas are the same underlying
597
+ // map, standing in for the identity comparison the TypeScript owner uses to tell
598
+ // the root union apart from a nested one.
599
+ func openApiV3Downgrader_same(x JsonSchema, y JsonSchema) bool {
600
+ if x == nil || y == nil {
601
+ return false
602
+ }
603
+ return reflect.ValueOf(x).Pointer() == reflect.ValueOf(y).Pointer()
604
+ }
605
+
606
+ func openApiV3Downgrader_ref_key(ref string) string {
607
+ if index := strings.LastIndex(ref, "/"); index != -1 {
608
+ return ref[index+1:]
609
+ }
610
+ return ref
611
+ }
612
+
613
+ func openApiV3Downgrader_clone_value(value any) any {
614
+ switch typed := value.(type) {
615
+ case JsonSchema:
616
+ output := JsonSchema{}
617
+ for key, entry := range typed {
618
+ output[key] = openApiV3Downgrader_clone_value(entry)
619
+ }
620
+ return output
621
+ case map[string]any:
622
+ output := map[string]any{}
623
+ for key, entry := range typed {
624
+ output[key] = openApiV3Downgrader_clone_value(entry)
625
+ }
626
+ return output
627
+ case []JsonSchema:
628
+ output := make([]JsonSchema, 0, len(typed))
629
+ for _, entry := range typed {
630
+ output = append(output, openApiV3Downgrader_schema(openApiV3Downgrader_clone_value(entry)))
631
+ }
632
+ return output
633
+ case []any:
634
+ output := make([]any, 0, len(typed))
635
+ for _, entry := range typed {
636
+ output = append(output, openApiV3Downgrader_clone_value(entry))
637
+ }
638
+ return output
639
+ }
640
+ return value
641
+ }