typia 13.1.1 → 13.2.0

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 (581) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +44 -0
  4. package/lib/executable/FileSystemIdentity.js +213 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +133 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +272 -106
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +239 -95
  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 +32 -0
  16. package/lib/internal/_ProtobufReader.js +148 -48
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +137 -41
  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/_jsonStringifyArray.d.ts +1 -0
  87. package/lib/internal/_jsonStringifyArray.js +48 -0
  88. package/lib/internal/_jsonStringifyArray.js.map +1 -0
  89. package/lib/internal/_jsonStringifyArray.mjs +40 -0
  90. package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
  91. package/lib/internal/_jsonStringifyElement.d.ts +1 -0
  92. package/lib/internal/_jsonStringifyElement.js +23 -0
  93. package/lib/internal/_jsonStringifyElement.js.map +1 -0
  94. package/lib/internal/_jsonStringifyElement.mjs +23 -0
  95. package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
  96. package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
  97. package/lib/internal/_jsonStringifyProperty.js +31 -0
  98. package/lib/internal/_jsonStringifyProperty.js.map +1 -0
  99. package/lib/internal/_jsonStringifyProperty.mjs +31 -0
  100. package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
  101. package/lib/internal/_llmApplicationFinalize.js +1 -1
  102. package/lib/internal/_llmApplicationFinalize.js.map +1 -1
  103. package/lib/internal/_llmApplicationFinalize.mjs +1 -1
  104. package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
  105. package/lib/internal/_notationAny.js +8 -1
  106. package/lib/internal/_notationAny.js.map +1 -1
  107. package/lib/internal/_notationAny.mjs +7 -1
  108. package/lib/internal/_notationAny.mjs.map +1 -1
  109. package/lib/internal/_notationAssign.d.ts +1 -0
  110. package/lib/internal/_notationAssign.js +18 -0
  111. package/lib/internal/_notationAssign.js.map +1 -0
  112. package/lib/internal/_notationAssign.mjs +17 -0
  113. package/lib/internal/_notationAssign.mjs.map +1 -0
  114. package/lib/internal/_notationCamel.js +30 -9
  115. package/lib/internal/_notationCamel.js.map +1 -1
  116. package/lib/internal/_notationCamel.mjs +13 -5
  117. package/lib/internal/_notationCamel.mjs.map +1 -1
  118. package/lib/internal/_notationKebab.d.ts +1 -0
  119. package/lib/internal/_notationKebab.js +15 -0
  120. package/lib/internal/_notationKebab.js.map +1 -0
  121. package/lib/internal/_notationKebab.mjs +15 -0
  122. package/lib/internal/_notationKebab.mjs.map +1 -0
  123. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  124. package/lib/internal/_notationKeyCollision.js +8 -0
  125. package/lib/internal/_notationKeyCollision.js.map +1 -0
  126. package/lib/internal/_notationKeyCollision.mjs +8 -0
  127. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  128. package/lib/internal/_notationPascal.js +20 -5
  129. package/lib/internal/_notationPascal.js.map +1 -1
  130. package/lib/internal/_notationPascal.mjs +10 -5
  131. package/lib/internal/_notationPascal.mjs.map +1 -1
  132. package/lib/internal/_notationSnake.js +25 -22
  133. package/lib/internal/_notationSnake.js.map +1 -1
  134. package/lib/internal/_notationSnake.mjs +11 -11
  135. package/lib/internal/_notationSnake.mjs.map +1 -1
  136. package/lib/internal/_plainCloneAny.js +174 -38
  137. package/lib/internal/_plainCloneAny.js.map +1 -1
  138. package/lib/internal/_plainCloneAny.mjs +126 -22
  139. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  140. package/lib/internal/_randomArray.d.ts +1 -1
  141. package/lib/internal/_randomArray.js +11 -4
  142. package/lib/internal/_randomArray.js.map +1 -1
  143. package/lib/internal/_randomArray.mjs +9 -3
  144. package/lib/internal/_randomArray.mjs.map +1 -1
  145. package/lib/internal/_randomFormatByte.d.ts +2 -1
  146. package/lib/internal/_randomFormatByte.js +25 -1
  147. package/lib/internal/_randomFormatByte.js.map +1 -1
  148. package/lib/internal/_randomFormatByte.mjs +20 -1
  149. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  150. package/lib/internal/_randomFormatDate.d.ts +3 -4
  151. package/lib/internal/_randomFormatDate.js +3 -10
  152. package/lib/internal/_randomFormatDate.js.map +1 -1
  153. package/lib/internal/_randomFormatDate.mjs +3 -6
  154. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  155. package/lib/internal/_randomFormatDatetime.d.ts +3 -4
  156. package/lib/internal/_randomFormatDatetime.js +26 -8
  157. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  158. package/lib/internal/_randomFormatDatetime.mjs +17 -6
  159. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  160. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  161. package/lib/internal/_randomFormatDuration.js +23 -14
  162. package/lib/internal/_randomFormatDuration.js.map +1 -1
  163. package/lib/internal/_randomFormatDuration.mjs +22 -13
  164. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  165. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  166. package/lib/internal/_randomFormatEmail.js +8 -1
  167. package/lib/internal/_randomFormatEmail.js.map +1 -1
  168. package/lib/internal/_randomFormatEmail.mjs +5 -1
  169. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  170. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  171. package/lib/internal/_randomFormatHostname.js +45 -2
  172. package/lib/internal/_randomFormatHostname.js.map +1 -1
  173. package/lib/internal/_randomFormatHostname.mjs +38 -2
  174. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  175. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  176. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  177. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  178. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  179. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  180. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  181. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  182. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  183. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  184. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  185. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  186. package/lib/internal/_randomFormatIpv4.js +32 -1
  187. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  188. package/lib/internal/_randomFormatIpv4.mjs +23 -1
  189. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  190. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  191. package/lib/internal/_randomFormatIpv6.js +58 -1
  192. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  193. package/lib/internal/_randomFormatIpv6.mjs +45 -1
  194. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  195. package/lib/internal/_randomFormatIri.d.ts +2 -1
  196. package/lib/internal/_randomFormatIri.js +1 -1
  197. package/lib/internal/_randomFormatIri.js.map +1 -1
  198. package/lib/internal/_randomFormatIri.mjs +1 -1
  199. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  200. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  201. package/lib/internal/_randomFormatIriReference.js +1 -1
  202. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  203. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  204. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  205. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  206. package/lib/internal/_randomFormatJsonPointer.js +20 -1
  207. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  208. package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
  209. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  210. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  211. package/lib/internal/_randomFormatPassword.js +7 -5
  212. package/lib/internal/_randomFormatPassword.js.map +1 -1
  213. package/lib/internal/_randomFormatPassword.mjs +5 -1
  214. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  215. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  216. package/lib/internal/_randomFormatRegex.js +15 -1
  217. package/lib/internal/_randomFormatRegex.js.map +1 -1
  218. package/lib/internal/_randomFormatRegex.mjs +14 -1
  219. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  220. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  221. package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
  222. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  223. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
  224. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  225. package/lib/internal/_randomFormatTime.d.ts +2 -1
  226. package/lib/internal/_randomFormatTime.js +34 -7
  227. package/lib/internal/_randomFormatTime.js.map +1 -1
  228. package/lib/internal/_randomFormatTime.mjs +37 -4
  229. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  230. package/lib/internal/_randomFormatUri.d.ts +2 -1
  231. package/lib/internal/_randomFormatUri.js +1 -1
  232. package/lib/internal/_randomFormatUri.js.map +1 -1
  233. package/lib/internal/_randomFormatUri.mjs +1 -1
  234. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  235. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  236. package/lib/internal/_randomFormatUriReference.js +1 -1
  237. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  238. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  239. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  240. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  241. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  242. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  243. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  244. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  245. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  246. package/lib/internal/_randomFormatUrl.js +21 -1
  247. package/lib/internal/_randomFormatUrl.js.map +1 -1
  248. package/lib/internal/_randomFormatUrl.mjs +18 -1
  249. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  250. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  251. package/lib/internal/_randomFormatUuid.js +3 -2
  252. package/lib/internal/_randomFormatUuid.js.map +1 -1
  253. package/lib/internal/_randomFormatUuid.mjs +3 -2
  254. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  255. package/lib/internal/_randomInteger.js +59 -28
  256. package/lib/internal/_randomInteger.js.map +1 -1
  257. package/lib/internal/_randomInteger.mjs +56 -16
  258. package/lib/internal/_randomInteger.mjs.map +1 -1
  259. package/lib/internal/_randomMultiple.d.ts +8 -0
  260. package/lib/internal/_randomMultiple.js +168 -0
  261. package/lib/internal/_randomMultiple.js.map +1 -0
  262. package/lib/internal/_randomMultiple.mjs +158 -0
  263. package/lib/internal/_randomMultiple.mjs.map +1 -0
  264. package/lib/internal/_randomNumber.js +42 -42
  265. package/lib/internal/_randomNumber.js.map +1 -1
  266. package/lib/internal/_randomNumber.mjs +41 -27
  267. package/lib/internal/_randomNumber.mjs.map +1 -1
  268. package/lib/internal/_randomPattern.d.ts +2 -1
  269. package/lib/internal/_randomPattern.js +19 -4
  270. package/lib/internal/_randomPattern.js.map +1 -1
  271. package/lib/internal/_randomPattern.mjs +10 -4
  272. package/lib/internal/_randomPattern.mjs.map +1 -1
  273. package/lib/internal/_randomStringLength.d.ts +64 -0
  274. package/lib/internal/_randomStringLength.js +84 -0
  275. package/lib/internal/_randomStringLength.js.map +1 -0
  276. package/lib/internal/_randomStringLength.mjs +79 -0
  277. package/lib/internal/_randomStringLength.mjs.map +1 -0
  278. package/lib/internal/_stringLength.d.ts +1 -0
  279. package/lib/internal/_stringLength.js +11 -0
  280. package/lib/internal/_stringLength.js.map +1 -0
  281. package/lib/internal/_stringLength.mjs +10 -0
  282. package/lib/internal/_stringLength.mjs.map +1 -0
  283. package/lib/internal/_validateReport.js +4 -1
  284. package/lib/internal/_validateReport.js.map +1 -1
  285. package/lib/internal/_validateReport.mjs +2 -1
  286. package/lib/internal/_validateReport.mjs.map +1 -1
  287. package/lib/internal/private/__notationRename.d.ts +14 -0
  288. package/lib/internal/private/__notationRename.js +25 -0
  289. package/lib/internal/private/__notationRename.js.map +1 -0
  290. package/lib/internal/private/__notationRename.mjs +24 -0
  291. package/lib/internal/private/__notationRename.mjs.map +1 -0
  292. package/lib/internal/private/__randomComposition.d.ts +23 -0
  293. package/lib/internal/private/__randomComposition.js +48 -0
  294. package/lib/internal/private/__randomComposition.js.map +1 -0
  295. package/lib/internal/private/__randomComposition.mjs +54 -0
  296. package/lib/internal/private/__randomComposition.mjs.map +1 -0
  297. package/lib/internal/private/__randomEpoch.d.ts +19 -0
  298. package/lib/internal/private/__randomEpoch.js +31 -0
  299. package/lib/internal/private/__randomEpoch.js.map +1 -0
  300. package/lib/internal/private/__randomEpoch.mjs +28 -0
  301. package/lib/internal/private/__randomEpoch.mjs.map +1 -0
  302. package/lib/json.d.ts +2 -2
  303. package/lib/json.mjs.map +1 -1
  304. package/lib/module.d.ts +2 -2
  305. package/lib/module.js.map +1 -1
  306. package/lib/module.mjs.map +1 -1
  307. package/lib/notations.d.ts +20 -4
  308. package/lib/notations.js.map +1 -1
  309. package/lib/notations.mjs.map +1 -1
  310. package/native/adapter/plugin_options.go +117 -0
  311. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  312. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  313. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  314. package/native/cmd/ttsc-typia/build.go +84 -64
  315. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  316. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  317. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  318. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  319. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  320. package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
  321. package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
  322. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  323. package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
  324. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  325. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  326. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  327. package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
  328. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  329. package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
  330. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  331. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  332. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  333. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  334. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  335. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  336. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  337. package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
  338. package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
  339. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  340. package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
  341. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  342. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  343. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  344. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  345. package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
  346. package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
  347. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  348. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  349. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  350. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  351. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  352. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  353. package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
  354. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  355. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  356. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  357. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  358. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  359. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  360. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  361. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  362. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  363. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  364. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  365. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  366. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  367. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  368. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  369. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  370. package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
  371. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  372. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  373. package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
  374. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  375. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  376. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  377. package/native/cmd/ttsc-typia/transform.go +251 -39
  378. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  379. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  380. package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
  381. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  382. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  383. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  384. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  385. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  386. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  387. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  388. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  389. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  390. package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
  391. package/native/core/factories/FormatCheatSheet.go +40 -7
  392. package/native/core/factories/IdentifierFactory.go +131 -4
  393. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  394. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  395. package/native/core/factories/NumericRangeFactory.go +60 -17
  396. package/native/core/factories/ProtobufFactory.go +13 -5
  397. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  398. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  399. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  400. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  401. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  402. package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
  403. package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
  404. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  405. package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
  406. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
  407. package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
  408. package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
  409. package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
  410. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  411. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  412. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  413. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  414. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  415. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  416. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  417. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  418. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  419. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  420. package/native/core/programmers/IsProgrammer.go +15 -1
  421. package/native/core/programmers/RandomProgrammer.go +51 -14
  422. package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
  423. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  424. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  425. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  426. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  427. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  428. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  429. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  430. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  431. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  432. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  433. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  434. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  435. package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
  436. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  437. package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
  438. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  439. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
  440. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  441. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  442. package/native/core/programmers/iterate/check_template.go +344 -32
  443. package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
  444. package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
  445. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  446. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  447. package/native/core/programmers/iterate/json_schema_object.go +49 -7
  448. package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
  449. package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
  450. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  451. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  452. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  453. package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
  454. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  455. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  456. package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
  457. package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
  458. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  459. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  460. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  461. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  462. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  463. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  464. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  465. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  466. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  467. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  468. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  469. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
  470. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  471. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  472. package/native/core/schemas/metadata/MetadataCollection.go +266 -25
  473. package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
  474. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  475. package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
  476. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  477. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  478. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  479. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  480. package/native/core/utils/PatternUtil.go +13 -0
  481. package/native/core/utils/PromiseTypeFactory.go +59 -0
  482. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  483. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  484. package/native/go.mod +9 -1
  485. package/native/transform/CallExpressionTransformer.go +12 -0
  486. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  487. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  488. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  489. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
  490. package/package.json +12 -4
  491. package/src/executable/FileSystemIdentity.ts +222 -0
  492. package/src/executable/TypiaGenerateWizard.ts +386 -113
  493. package/src/functional.ts +30 -60
  494. package/src/internal/_ProtobufReader.ts +161 -46
  495. package/src/internal/_createStandardSchema.ts +15 -1
  496. package/src/internal/_decimal.ts +69 -0
  497. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  498. package/src/internal/_isFormatByte.ts +2 -5
  499. package/src/internal/_isFormatDate.ts +15 -2
  500. package/src/internal/_isFormatDateTime.ts +28 -2
  501. package/src/internal/_isFormatIri.ts +5 -2
  502. package/src/internal/_isFormatIriReference.ts +11 -3
  503. package/src/internal/_isFormatUriReference.ts +1 -1
  504. package/src/internal/_isMultipleOf.ts +8 -0
  505. package/src/internal/_isTypeFloat.ts +1 -1
  506. package/src/internal/_isTypeInt64.ts +1 -0
  507. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  508. package/src/internal/_isTypeUint64.ts +1 -0
  509. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  510. package/src/internal/_isUniqueItems.ts +134 -132
  511. package/src/internal/_jsonStringifyArray.ts +50 -0
  512. package/src/internal/_jsonStringifyElement.ts +19 -0
  513. package/src/internal/_jsonStringifyProperty.ts +30 -0
  514. package/src/internal/_llmApplicationFinalize.ts +6 -1
  515. package/src/internal/_notationAny.ts +9 -4
  516. package/src/internal/_notationAssign.ts +20 -0
  517. package/src/internal/_notationCamel.ts +31 -10
  518. package/src/internal/_notationKebab.ts +11 -0
  519. package/src/internal/_notationKeyCollision.ts +9 -0
  520. package/src/internal/_notationPascal.ts +19 -6
  521. package/src/internal/_notationSnake.ts +24 -21
  522. package/src/internal/_plainCloneAny.ts +208 -33
  523. package/src/internal/_randomArray.ts +13 -4
  524. package/src/internal/_randomFormatByte.ts +31 -1
  525. package/src/internal/_randomFormatDate.ts +6 -17
  526. package/src/internal/_randomFormatDatetime.ts +34 -15
  527. package/src/internal/_randomFormatDuration.ts +30 -13
  528. package/src/internal/_randomFormatEmail.ts +8 -2
  529. package/src/internal/_randomFormatHostname.ts +48 -1
  530. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  531. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  532. package/src/internal/_randomFormatIpv4.ts +43 -2
  533. package/src/internal/_randomFormatIpv6.ts +67 -2
  534. package/src/internal/_randomFormatIri.ts +3 -1
  535. package/src/internal/_randomFormatIriReference.ts +3 -1
  536. package/src/internal/_randomFormatJsonPointer.ts +28 -2
  537. package/src/internal/_randomFormatPassword.ts +11 -6
  538. package/src/internal/_randomFormatRegex.ts +22 -1
  539. package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
  540. package/src/internal/_randomFormatTime.ts +46 -10
  541. package/src/internal/_randomFormatUri.ts +3 -1
  542. package/src/internal/_randomFormatUriReference.ts +3 -1
  543. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  544. package/src/internal/_randomFormatUrl.ts +25 -2
  545. package/src/internal/_randomFormatUuid.ts +10 -6
  546. package/src/internal/_randomInteger.ts +87 -40
  547. package/src/internal/_randomMultiple.ts +245 -0
  548. package/src/internal/_randomNumber.ts +72 -55
  549. package/src/internal/_randomPattern.ts +29 -4
  550. package/src/internal/_randomStringLength.ts +116 -0
  551. package/src/internal/_stringLength.ts +5 -0
  552. package/src/internal/_validateReport.ts +5 -1
  553. package/src/internal/private/__notationRename.ts +21 -0
  554. package/src/internal/private/__randomComposition.ts +50 -0
  555. package/src/internal/private/__randomEpoch.ts +34 -0
  556. package/src/json.ts +2 -2
  557. package/src/module.ts +4 -6
  558. package/src/notations.ts +20 -4
  559. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  560. package/lib/internal/private/__notationCapitalize.js +0 -6
  561. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  562. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  563. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  564. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  565. package/lib/internal/private/__notationUnsnake.js +0 -26
  566. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  567. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  568. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  569. package/native/adapter/visit.go +0 -173
  570. package/native/adapter/visit_property_chain_edges_test.go +0 -129
  571. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  572. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  573. package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
  574. package/native/core/programmers/iterate/check_union_array_like.go +0 -422
  575. package/native/core/programmers/iterate/prune_object_properties.go +0 -105
  576. package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
  577. package/native/core/programmers/iterate/stringify_native.go +0 -14
  578. package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
  579. package/native/core/schemas/metadata/MetadataApplication.go +0 -41
  580. package/src/internal/private/__notationCapitalize.ts +0 -2
  581. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -0,0 +1,34 @@
1
+ import { _randomInteger } from "../_randomInteger";
2
+
3
+ export interface __IEpochProps {
4
+ minimum?: number;
5
+ maximum?: number;
6
+ }
7
+
8
+ /**
9
+ * Draws an epoch millisecond inside the requested bounds.
10
+ *
11
+ * Shared by the `date` and `date-time` generators, which had the same bound
12
+ * expression written twice: `props?.maximum ?? props?.minimum === undefined`
13
+ * parses as `props?.maximum ?? (props?.minimum === undefined)` because `??`
14
+ * binds looser than `===`, so any supplied `maximum` made the condition truthy
15
+ * and was replaced by `Date.now()`, while `maximum: 0` fell through to
16
+ * `undefined + one year` and produced `NaN` (issue #2287). Keeping the
17
+ * resolution in one place is what stops the two copies from drifting again.
18
+ *
19
+ * With no bound at all the window ends at the present instant; with only a
20
+ * lower bound it spans one year from there.
21
+ */
22
+ export const __randomEpoch = (props?: __IEpochProps): number => {
23
+ const minimum: number = props?.minimum ?? 0;
24
+ const maximum: number =
25
+ props?.maximum ??
26
+ (props?.minimum === undefined ? Date.now() : props.minimum + YEAR);
27
+ return _randomInteger({
28
+ type: "integer",
29
+ minimum,
30
+ maximum,
31
+ });
32
+ };
33
+
34
+ const YEAR = 365 * 24 * 60 * 60 * 1_000;
package/src/json.ts CHANGED
@@ -101,10 +101,10 @@ export function application(): never;
101
101
  *
102
102
  * - Custom LLM function calling schema formats
103
103
  * - API documentation or code generation tools
104
- * - Alternative LLM integrations beyond built-in providers
104
+ * - Alternative LLM integrations that need full JSON Schema
105
105
  *
106
106
  * For standard LLM function calling, use {@link llm.application} instead, which
107
- * provides provider-specific schemas (ChatGPT, Claude, Gemini, etc.).
107
+ * builds the LLM-optimized function schema directly.
108
108
  *
109
109
  * @template Class Target class or interface type
110
110
  * @template Version OpenAPI version (`"3.0"` | `"3.1"`). Default `"3.1"`
package/src/module.ts CHANGED
@@ -637,10 +637,10 @@ export function createAssertGuard(
637
637
  */
638
638
  export function createAssertGuard<T>(
639
639
  errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
640
- ): (input: unknown) => AssertionGuard<T>;
640
+ ): AssertionGuard<T>;
641
641
 
642
642
  /** @internal */
643
- export function createAssertGuard<T>(): (input: unknown) => AssertionGuard<T> {
643
+ export function createAssertGuard<T>(): AssertionGuard<T> {
644
644
  NoTransformConfigurationError("createAssertGuard");
645
645
  }
646
646
 
@@ -809,12 +809,10 @@ export function createAssertGuardEquals(
809
809
  */
810
810
  export function createAssertGuardEquals<T>(
811
811
  errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
812
- ): (input: unknown) => AssertionGuard<T>;
812
+ ): AssertionGuard<T>;
813
813
 
814
814
  /** @internal */
815
- export function createAssertGuardEquals<T>(): (
816
- input: unknown,
817
- ) => AssertionGuard<T> {
815
+ export function createAssertGuardEquals<T>(): AssertionGuard<T> {
818
816
  NoTransformConfigurationError("createAssertGuardEquals");
819
817
  }
820
818
 
package/src/notations.ts CHANGED
@@ -23,7 +23,10 @@ import { NoTransformConfigurationError } from "./transformers/NoTransformConfigu
23
23
  * Converts property names to camelCase.
24
24
  *
25
25
  * Transforms all property names in the object (including nested) to camelCase
26
- * convention. Creates a new object with renamed properties.
26
+ * convention. Creates a new object with renamed properties. Distinct source
27
+ * keys that become the same destination key are rejected with an error instead
28
+ * of silently discarding a value. This collision policy also applies to the
29
+ * assert, is, validate, and factory variants.
27
30
  *
28
31
  * Does not validate the input. For validation, use:
29
32
  *
@@ -34,6 +37,7 @@ import { NoTransformConfigurationError } from "./transformers/NoTransformConfigu
34
37
  * @template T Type of input value
35
38
  * @param input Object to convert
36
39
  * @returns New object with camelCase property names
40
+ * @throws {Error} When two source keys become the same destination key
37
41
  */
38
42
  export function camel<T>(input: T): CamelCase<T>;
39
43
 
@@ -137,7 +141,10 @@ export function validateCamel(): never {
137
141
  * Converts property names to PascalCase.
138
142
  *
139
143
  * Transforms all property names in the object (including nested) to PascalCase
140
- * convention. Creates a new object with renamed properties.
144
+ * convention. Creates a new object with renamed properties. Distinct source
145
+ * keys that become the same destination key are rejected with an error instead
146
+ * of silently discarding a value. This collision policy also applies to the
147
+ * assert, is, validate, and factory variants.
141
148
  *
142
149
  * Does not validate the input. For validation, use:
143
150
  *
@@ -148,6 +155,7 @@ export function validateCamel(): never {
148
155
  * @template T Type of input value
149
156
  * @param input Object to convert
150
157
  * @returns New object with PascalCase property names
158
+ * @throws {Error} When two source keys become the same destination key
151
159
  */
152
160
  export function pascal<T>(input: T): PascalCase<T>;
153
161
 
@@ -251,7 +259,10 @@ export function validatePascal(): never {
251
259
  * Converts property names to snake_case.
252
260
  *
253
261
  * Transforms all property names in the object (including nested) to snake_case
254
- * convention. Creates a new object with renamed properties.
262
+ * convention. Creates a new object with renamed properties. Distinct source
263
+ * keys that become the same destination key are rejected with an error instead
264
+ * of silently discarding a value. This collision policy also applies to the
265
+ * assert, is, validate, and factory variants.
255
266
  *
256
267
  * Does not validate the input. For validation, use:
257
268
  *
@@ -262,6 +273,7 @@ export function validatePascal(): never {
262
273
  * @template T Type of input value
263
274
  * @param input Object to convert
264
275
  * @returns New object with snake_case property names
276
+ * @throws {Error} When two source keys become the same destination key
265
277
  */
266
278
  export function snake<T>(input: T): SnakeCase<T>;
267
279
 
@@ -365,7 +377,10 @@ export function validateSnake(): never {
365
377
  * Converts property names to kebab-case.
366
378
  *
367
379
  * Transforms all property names in the object (including nested) to kebab-case
368
- * convention. Creates a new object with renamed properties.
380
+ * convention. Creates a new object with renamed properties. Distinct source
381
+ * keys that become the same destination key are rejected with an error instead
382
+ * of silently discarding a value. This collision policy also applies to the
383
+ * assert, is, validate, and factory variants.
369
384
  *
370
385
  * Does not validate the input. For validation, use:
371
386
  *
@@ -376,6 +391,7 @@ export function validateSnake(): never {
376
391
  * @template T Type of input value
377
392
  * @param input Object to convert
378
393
  * @returns New object with kebab-case property names
394
+ * @throws {Error} When two source keys become the same destination key
379
395
  */
380
396
  export function kebab<T>(input: T): KebabCase<T>;
381
397
 
@@ -1 +0,0 @@
1
- export declare const __notationCapitalize: (str: string) => string;
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.__notationCapitalize = void 0;
4
- const __notationCapitalize = (str) => str.length ? str[0].toUpperCase() + str.slice(1).toLowerCase() : str;
5
- exports.__notationCapitalize = __notationCapitalize;
6
- //# sourceMappingURL=__notationCapitalize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"__notationCapitalize.js","sourceRoot":"","sources":["../../../src/internal/private/__notationCapitalize.ts"],"names":[],"mappings":";;;AAAO,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,EAAE,CAClD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAD3D,QAAA,oBAAoB,GAApB,oBAAoB,CACuC"}
@@ -1,6 +0,0 @@
1
- //#region src/internal/private/__notationCapitalize.ts
2
- const __notationCapitalize = (str) => str.length ? str[0].toUpperCase() + str.slice(1).toLowerCase() : str;
3
- //#endregion
4
- export { __notationCapitalize };
5
-
6
- //# sourceMappingURL=__notationCapitalize.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"__notationCapitalize.mjs","names":[],"sources":["../../../src/internal/private/__notationCapitalize.ts"],"sourcesContent":["export const __notationCapitalize = (str: string) =>\n str.length ? str[0]!.toUpperCase() + str.slice(1).toLowerCase() : str;\n"],"mappings":";AAAA,MAAa,wBAAwB,QACnC,IAAI,SAAS,IAAI,EAAE,CAAE,YAAY,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI"}
@@ -1,4 +0,0 @@
1
- export declare const __notationUnsnake: (props: {
2
- plain: (str: string) => string;
3
- snake: (str: string, index: number) => string;
4
- }) => (str: string) => string;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.__notationUnsnake = void 0;
4
- const __notationUnsnake = (props) => (str) => {
5
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
- let prefix = "";
7
- for (let i = 0; i < str.length; i++) {
8
- if (str[i] === "_")
9
- prefix += "_";
10
- else
11
- break;
12
- }
13
- if (prefix.length !== 0)
14
- str = str.substring(prefix.length);
15
- const out = (s) => `${prefix}${s}`;
16
- if (str.length === 0)
17
- return out("");
18
- const items = str.split("_").filter((s) => s.length !== 0);
19
- return items.length === 0
20
- ? out("")
21
- : items.length === 1
22
- ? out(props.plain(items[0]))
23
- : out(items.map(props.snake).join(""));
24
- };
25
- exports.__notationUnsnake = __notationUnsnake;
26
- //# sourceMappingURL=__notationUnsnake.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"__notationUnsnake.js","sourceRoot":"","sources":["../../../src/internal/private/__notationUnsnake.ts"],"names":[],"mappings":";;;AAAO,MAAM,iBAAiB,GAC5B,CAAC,KAGA,EAAE,EAAE,CACL,CAAC,GAAW,EAAU,EAAE;IACtB,6DAA6D;IAC7D,IAAI,MAAM,GAAW,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,MAAM,IAAI,GAAG,CAAC;;YAC7B,MAAM;IACb,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;IAErC,MAAM,KAAK,GAAa,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACT,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC;AAvBS,QAAA,iBAAiB,GAAjB,iBAAiB,CAuB1B"}
@@ -1,15 +0,0 @@
1
- //#region src/internal/private/__notationUnsnake.ts
2
- const __notationUnsnake = (props) => (str) => {
3
- let prefix = "";
4
- for (let i = 0; i < str.length; i++) if (str[i] === "_") prefix += "_";
5
- else break;
6
- if (prefix.length !== 0) str = str.substring(prefix.length);
7
- const out = (s) => `${prefix}${s}`;
8
- if (str.length === 0) return out("");
9
- const items = str.split("_").filter((s) => s.length !== 0);
10
- return items.length === 0 ? out("") : items.length === 1 ? out(props.plain(items[0])) : out(items.map(props.snake).join(""));
11
- };
12
- //#endregion
13
- export { __notationUnsnake };
14
-
15
- //# sourceMappingURL=__notationUnsnake.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"__notationUnsnake.mjs","names":[],"sources":["../../../src/internal/private/__notationUnsnake.ts"],"sourcesContent":["export const __notationUnsnake =\n (props: {\n plain: (str: string) => string;\n snake: (str: string, index: number) => string;\n }) =>\n (str: string): string => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let prefix: string = \"\";\n for (let i: number = 0; i < str.length; i++) {\n if (str[i] === \"_\") prefix += \"_\";\n else break;\n }\n if (prefix.length !== 0) str = str.substring(prefix.length);\n\n const out = (s: string) => `${prefix}${s}`;\n if (str.length === 0) return out(\"\");\n\n const items: string[] = str.split(\"_\").filter((s) => s.length !== 0);\n return items.length === 0\n ? out(\"\")\n : items.length === 1\n ? out(props.plain(items[0]!))\n : out(items.map(props.snake).join(\"\"));\n };\n"],"mappings":";AAAA,MAAa,qBACV,WAIA,QAAwB;CAEvB,IAAI,SAAiB;CACrB,KAAK,IAAI,IAAY,GAAG,IAAI,IAAI,QAAQ,KACtC,IAAI,IAAI,OAAO,KAAK,UAAU;MACzB;CAEP,IAAI,OAAO,WAAW,GAAG,MAAM,IAAI,UAAU,OAAO,MAAM;CAE1D,MAAM,OAAO,MAAc,GAAG,SAAS;CACvC,IAAI,IAAI,WAAW,GAAG,OAAO,IAAI,EAAE;CAEnC,MAAM,QAAkB,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,WAAW,CAAC;CACnE,OAAO,MAAM,WAAW,IACpB,IAAI,EAAE,IACN,MAAM,WAAW,IACf,IAAI,MAAM,MAAM,MAAM,EAAG,CAAC,IAC1B,IAAI,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;AAC3C"}
@@ -1,173 +0,0 @@
1
- package adapter
2
-
3
- import (
4
- "path/filepath"
5
- "strings"
6
-
7
- shimast "github.com/microsoft/typescript-go/shim/ast"
8
- shimchecker "github.com/microsoft/typescript-go/shim/checker"
9
- )
10
-
11
- type CallSite struct {
12
- File *shimast.SourceFile
13
- FilePath string
14
- Module string
15
- Method string
16
- Call *shimast.CallExpression
17
- RootName string
18
- Namespaces []string
19
- }
20
-
21
- func CollectCallSites(files []*shimast.SourceFile, checker *shimchecker.Checker) []CallSite {
22
- sites := []CallSite{}
23
- for _, file := range files {
24
- if file == nil || file.IsDeclarationFile {
25
- continue
26
- }
27
- file.ForEachChild(func(node *shimast.Node) bool {
28
- visitCallSite(file, checker, node, &sites)
29
- return false
30
- })
31
- }
32
- return sites
33
- }
34
-
35
- func visitCallSite(file *shimast.SourceFile, checker *shimchecker.Checker, node *shimast.Node, sites *[]CallSite) {
36
- if node == nil {
37
- return
38
- }
39
- if node.Kind == shimast.KindCallExpression {
40
- if site, ok := tryCallSite(file, checker, node); ok {
41
- *sites = append(*sites, site)
42
- }
43
- }
44
- node.ForEachChild(func(child *shimast.Node) bool {
45
- visitCallSite(file, checker, child, sites)
46
- return false
47
- })
48
- }
49
-
50
- func tryCallSite(file *shimast.SourceFile, checker *shimchecker.Checker, node *shimast.Node) (CallSite, bool) {
51
- if checker == nil {
52
- return CallSite{}, false
53
- }
54
- if node.Kind != shimast.KindCallExpression {
55
- return CallSite{}, false
56
- }
57
- call := node.AsCallExpression()
58
- if call == nil {
59
- return CallSite{}, false
60
- }
61
- signature := checker.GetResolvedSignature(node)
62
- if signature == nil {
63
- return CallSite{}, false
64
- }
65
- declaration := signature.Declaration()
66
- if declaration == nil {
67
- return CallSite{}, false
68
- }
69
- sourceFile := shimast.GetSourceFileOfNode(declaration)
70
- if sourceFile == nil {
71
- return CallSite{}, false
72
- }
73
- module, ok := matchTypiaModule(sourceFile.FileName())
74
- if !ok {
75
- return CallSite{}, false
76
- }
77
- method := callSiteMethodName(checker, declaration, call)
78
- if method == "" {
79
- return CallSite{}, false
80
- }
81
- root, namespaces, ok := extractRootAndNamespaces(call, method)
82
- if !ok {
83
- return CallSite{}, false
84
- }
85
- return CallSite{
86
- File: file,
87
- FilePath: file.FileName(),
88
- Module: module,
89
- Method: method,
90
- Call: call,
91
- RootName: root,
92
- Namespaces: namespaces,
93
- }, true
94
- }
95
-
96
- func matchTypiaModule(location string) (string, bool) {
97
- location = filepath.ToSlash(location)
98
- for _, suffix := range []string{".d.ts", ".ts"} {
99
- for _, middle := range []string{"typia/lib/", "typia/src/", "packages/typia/src/"} {
100
- index := strings.LastIndex(location, middle)
101
- if index < 0 {
102
- continue
103
- }
104
- name := location[index+len(middle):]
105
- if !strings.HasSuffix(name, suffix) {
106
- continue
107
- }
108
- name = strings.TrimSuffix(name, suffix)
109
- if strings.Contains(name, "/") {
110
- continue
111
- }
112
- return name, true
113
- }
114
- }
115
- return "", false
116
- }
117
-
118
- func callSiteMethodName(checker *shimchecker.Checker, declaration *shimast.Node, call *shimast.CallExpression) string {
119
- if name := declaration.Name(); name != nil {
120
- if checker != nil {
121
- if symbol := checker.GetSymbolAtLocation(name); symbol != nil && symbol.Name != "" {
122
- return symbol.Name
123
- }
124
- }
125
- if name.Kind == shimast.KindIdentifier {
126
- if id := name.AsIdentifier(); id != nil {
127
- return id.Text
128
- }
129
- }
130
- }
131
- if call.Expression != nil && call.Expression.Kind == shimast.KindPropertyAccessExpression {
132
- if property := call.Expression.AsPropertyAccessExpression(); property != nil {
133
- if name := property.Name(); name != nil && name.Kind == shimast.KindIdentifier {
134
- if id := name.AsIdentifier(); id != nil {
135
- return id.Text
136
- }
137
- }
138
- }
139
- }
140
- return ""
141
- }
142
-
143
- func extractRootAndNamespaces(call *shimast.CallExpression, method string) (string, []string, bool) {
144
- expression := call.Expression
145
- segments := []string{}
146
- for expression != nil && expression.Kind == shimast.KindPropertyAccessExpression {
147
- property := expression.AsPropertyAccessExpression()
148
- if property == nil {
149
- break
150
- }
151
- name := property.Name()
152
- if name == nil || name.Kind != shimast.KindIdentifier {
153
- return "", nil, false
154
- }
155
- id := name.AsIdentifier()
156
- if id == nil || id.Text == "" {
157
- return "", nil, false
158
- }
159
- segments = append([]string{id.Text}, segments...)
160
- expression = property.Expression
161
- }
162
- if expression == nil || expression.Kind != shimast.KindIdentifier {
163
- return "", nil, false
164
- }
165
- root := expression.AsIdentifier()
166
- if root == nil || root.Text == "" || len(segments) == 0 {
167
- return "", nil, false
168
- }
169
- if segments[len(segments)-1] != method {
170
- return "", nil, false
171
- }
172
- return root.Text, segments[:len(segments)-1], true
173
- }
@@ -1,129 +0,0 @@
1
- //go:build typia_native_internal
2
- // +build typia_native_internal
3
-
4
- package adapter
5
-
6
- import (
7
- "path/filepath"
8
- "testing"
9
-
10
- shimast "github.com/microsoft/typescript-go/shim/ast"
11
- shimchecker "github.com/microsoft/typescript-go/shim/checker"
12
- shimcore "github.com/microsoft/typescript-go/shim/core"
13
- shimparser "github.com/microsoft/typescript-go/shim/parser"
14
- )
15
-
16
- // TestVisitPropertyChainEdges verifies call-site property-chain parsing.
17
- //
18
- // Call-site discovery peels a TypeScript expression like
19
- // `typia.json.stringify()` into a root import name, namespace chain, and method.
20
- // Malformed or mismatched chains must be rejected without producing a site.
21
- //
22
- // 1. Build a nested property-access call expression.
23
- // 2. Extract the root name, namespace, and terminal method.
24
- // 3. Reject a method mismatch, a non-property call, and an empty member name.
25
- // 4. Verify nil nodes do not append call sites.
26
- func TestVisitPropertyChainEdges(t *testing.T) {
27
- factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
28
- namespace := factory.NewPropertyAccessExpression(
29
- factory.NewIdentifier("typia"),
30
- nil,
31
- factory.NewIdentifier("json"),
32
- shimast.NodeFlagsNone,
33
- )
34
- method := factory.NewPropertyAccessExpression(
35
- namespace,
36
- nil,
37
- factory.NewIdentifier("stringify"),
38
- shimast.NodeFlagsNone,
39
- )
40
- call := factory.NewCallExpression(method, nil, nil, factory.NewNodeList(nil), shimast.NodeFlagsNone).AsCallExpression()
41
-
42
- root, namespaces, ok := extractRootAndNamespaces(call, "stringify")
43
- if !ok || root != "typia" || len(namespaces) != 1 || namespaces[0] != "json" {
44
- t.Fatalf("unexpected property-chain extraction: root=%q namespaces=%#v ok=%v", root, namespaces, ok)
45
- }
46
- if _, _, ok := extractRootAndNamespaces(call, "is"); ok {
47
- t.Fatal("method mismatch should reject the call chain")
48
- }
49
- statement := factory.NewExpressionStatement(factory.NewIdentifier("noop"))
50
- if method := callSiteMethodName(nil, statement, call); method != "stringify" {
51
- t.Fatalf("property-access method fallback mismatch: %q", method)
52
- }
53
- declaration := factory.NewFunctionDeclaration(
54
- nil,
55
- nil,
56
- factory.NewIdentifier("declared"),
57
- nil,
58
- nil,
59
- nil,
60
- nil,
61
- nil,
62
- )
63
- if method := callSiteMethodName(nil, declaration, call); method != "declared" {
64
- t.Fatalf("declaration-name fallback mismatch: %q", method)
65
- }
66
-
67
- plain := factory.NewCallExpression(
68
- factory.NewIdentifier("plain"),
69
- nil,
70
- nil,
71
- factory.NewNodeList(nil),
72
- shimast.NodeFlagsNone,
73
- ).AsCallExpression()
74
- if _, _, ok := extractRootAndNamespaces(plain, "plain"); ok {
75
- t.Fatal("plain calls without a property chain should be rejected")
76
- }
77
- literal := factory.NewCallExpression(
78
- factory.NewStringLiteral("call", shimast.TokenFlagsNone),
79
- nil,
80
- nil,
81
- factory.NewNodeList(nil),
82
- shimast.NodeFlagsNone,
83
- ).AsCallExpression()
84
- if _, _, ok := extractRootAndNamespaces(literal, "call"); ok {
85
- t.Fatal("non-identifier root expressions should be rejected")
86
- }
87
-
88
- emptyMember := factory.NewPropertyAccessExpression(
89
- factory.NewIdentifier("typia"),
90
- nil,
91
- factory.NewIdentifier(""),
92
- shimast.NodeFlagsNone,
93
- )
94
- emptyCall := factory.NewCallExpression(emptyMember, nil, nil, factory.NewNodeList(nil), shimast.NodeFlagsNone).AsCallExpression()
95
- if _, _, ok := extractRootAndNamespaces(emptyCall, ""); ok {
96
- t.Fatal("empty property name should be rejected")
97
- }
98
- stringMember := factory.NewPropertyAccessExpression(
99
- factory.NewIdentifier("typia"),
100
- nil,
101
- factory.NewStringLiteral("is", shimast.TokenFlagsNone),
102
- shimast.NodeFlagsNone,
103
- )
104
- stringMemberCall := factory.NewCallExpression(stringMember, nil, nil, factory.NewNodeList(nil), shimast.NodeFlagsNone).AsCallExpression()
105
- if _, _, ok := extractRootAndNamespaces(stringMemberCall, "is"); ok {
106
- t.Fatal("non-identifier property names should be rejected")
107
- }
108
- sites := []CallSite{}
109
- visitCallSite(nil, nil, nil, &sites)
110
- if len(sites) != 0 {
111
- t.Fatalf("nil node should not append call sites: %#v", sites)
112
- }
113
- file := shimparser.ParseSourceFile(
114
- shimast.SourceFileParseOptions{FileName: filepath.ToSlash(filepath.Join(t.TempDir(), "visit.ts"))},
115
- `typia.is(input);`,
116
- shimcore.ScriptKindTS,
117
- )
118
- declFile := *file
119
- declFile.IsDeclarationFile = true
120
- if sites := CollectCallSites([]*shimast.SourceFile{nil, &declFile}, nil); len(sites) != 0 {
121
- t.Fatalf("nil and declaration files should not produce call sites: %#v", sites)
122
- }
123
- if _, ok := tryCallSite(file, nil, call.AsNode()); ok {
124
- t.Fatal("nil checker should reject call-site probing")
125
- }
126
- if _, ok := tryCallSite(file, &shimchecker.Checker{}, statement); ok {
127
- t.Fatal("non-call nodes should reject call-site probing")
128
- }
129
- }
@@ -1,26 +0,0 @@
1
- //go:build typia_native_internal
2
- // +build typia_native_internal
3
-
4
- package main
5
-
6
- import (
7
- "path/filepath"
8
- "testing"
9
- )
10
-
11
- // TestPluginOptionsMissingConfigFallsBackToDefaults verifies unreadable config files are ignored.
12
- //
13
- // Plugin option detection is deliberately best-effort because the compiler can
14
- // still run without typia plugin flags. A missing config path must therefore
15
- // return the zero option set instead of surfacing a command error here.
16
- //
17
- // 1. Point option parsing at a nonexistent tsconfig file.
18
- // 2. Resolve the path through a temporary working directory.
19
- // 3. Read typia plugin options.
20
- // 4. Assert every option remains unset.
21
- func TestPluginOptionsMissingConfigFallsBackToDefaults(t *testing.T) {
22
- options := readTypiaPluginOptions(t.TempDir(), filepath.Join("missing", "tsconfig.json"))
23
- if options.Functional || options.Numeric || options.Finite || options.Undefined != nil {
24
- t.Fatalf("missing config should return zero plugin options: %+v", options)
25
- }
26
- }
@@ -1,36 +0,0 @@
1
- package main
2
-
3
- import (
4
- "os"
5
- "path/filepath"
6
- "testing"
7
- )
8
-
9
- // TestPluginOptionsUndefinedFalsePreservesExplicitFalse verifies undefined option parsing.
10
- //
11
- // The exact optional-property workflow depends on distinguishing an omitted
12
- // plugin option from `"undefined": false`. The native command reads tsconfig
13
- // directly, so it must preserve explicit false instead of collapsing it into
14
- // the default nil option.
15
- //
16
- // 1. Write a tsconfig with the typia transformer and `"undefined": false`.
17
- // 2. Read plugin options through the native command helper.
18
- // 3. Assert the undefined option is a non-nil false pointer.
19
- func TestPluginOptionsUndefinedFalsePreservesExplicitFalse(t *testing.T) {
20
- root := t.TempDir()
21
- path := filepath.Join(root, "tsconfig.json")
22
- if err := os.WriteFile(path, []byte(`{
23
- "compilerOptions": {
24
- "plugins": [
25
- { "transform": "typia/lib/transform", "undefined": false }
26
- ]
27
- }
28
- }`), 0o644); err != nil {
29
- t.Fatal(err)
30
- }
31
-
32
- options := readTypiaPluginOptions(root, path)
33
- if options.Undefined == nil || *options.Undefined {
34
- t.Fatalf("undefined=false should be preserved: %#v", options.Undefined)
35
- }
36
- }
@@ -1,10 +0,0 @@
1
- package helpers
2
-
3
- func Disable_function_programmer_declare(functor *FunctionProgrammer) *FunctionProgrammer {
4
- if functor == nil {
5
- return nil
6
- }
7
- disabled := *functor
8
- disabled.disableDeclare = true
9
- return &disabled
10
- }