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
package/README.md CHANGED
@@ -58,6 +58,9 @@ export function random<T>(g?: Partial<IRandomGenerator>): T;
58
58
  > - JSON serialization is **200x faster** than `class-transformer`
59
59
  > - LLM function calling harness turns **6.75% → 100%** accuracy
60
60
 
61
+ Write the type on the left, and `typia` compiles it into the validator on the right — at build time, with no schema and no runtime reflection.
62
+
63
+ ![Write a TypeScript type and typia compiles it into a dedicated validator](https://typia.io/images/concepts/transform.svg)
61
64
 
62
65
  ## Setup
63
66
 
@@ -9,9 +9,5 @@ var __exportAll = (all, no_symbols) => {
9
9
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
10
  return target;
11
11
  };
12
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
13
- if (typeof require !== "undefined") return require.apply(this, arguments);
14
- throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
15
- });
16
12
  //#endregion
17
- export { __exportAll, __require };
13
+ export { __exportAll };
@@ -0,0 +1,44 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ export declare namespace FileSystemIdentity {
4
+ interface IIdentity {
5
+ readonly caseSensitive: boolean;
6
+ contains(file: string, directory: string): boolean;
7
+ filesystemKey(file: string): string;
8
+ isDeclarationFile(file: string): boolean;
9
+ isSamePath(x: string, y: string): boolean;
10
+ isSupportedExtension(file: string): boolean;
11
+ projectFileKey(file: string): string;
12
+ }
13
+ function create(caseSensitive: boolean, pathApi?: typeof path.posix): IIdentity;
14
+ class Policy {
15
+ private caseSensitive_;
16
+ private location_;
17
+ observe(caseSensitive: boolean | undefined, location: string): void;
18
+ get(): IIdentity;
19
+ }
20
+ function inspectDirectory(directory: string): Promise<boolean | undefined>;
21
+ function probeDirectory(directory: string): Promise<boolean>;
22
+ /**
23
+ * Builds the key that decides whether two paths are the same filesystem
24
+ * object.
25
+ *
26
+ * The identity is read from `fs.BigIntStats` rather than `fs.Stats`, because
27
+ * `fs.Stats.ino` is a JavaScript number. An NTFS file ID is `(sequenceNumber
28
+ * << 48) | mftRecordIndex` and routinely exceeds `Number.MAX_SAFE_INTEGER` —
29
+ * in a 4000-directory probe, 1879 of them did — where the spacing between
30
+ * representable doubles is 8 or more. Two entries sharing a sequence number
31
+ * with MFT record indices within that spacing round to one double. The
32
+ * traversal callers would then treat a distinct directory or file as already
33
+ * visited and skip it with no diagnostic, and the overwrite guard would
34
+ * refuse a legitimate output (samchon/typia#2269).
35
+ *
36
+ * A filesystem that reports no inode at all keeps the canonical path
37
+ * fallback, which is the only identity available there.
38
+ *
39
+ * @param stat Stats read with `{ bigint: true }`.
40
+ * @param realpath Canonical path of the same object.
41
+ * @returns Key that is equal for two paths only when they are one object.
42
+ */
43
+ function identityKey(stat: Pick<fs.BigIntStats, "dev" | "ino">, realpath: string): string;
44
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.FileSystemIdentity = void 0;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const path_1 = __importDefault(require("path"));
18
+ var FileSystemIdentity;
19
+ (function (FileSystemIdentity) {
20
+ function create(caseSensitive, pathApi = path_1.default) {
21
+ const fold = (value) => caseSensitive ? value : value.toLowerCase();
22
+ const filesystemKey = (file) => fold(pathApi.normalize(file));
23
+ return {
24
+ caseSensitive,
25
+ contains: (file, directory) => {
26
+ const fileKey = filesystemKey(pathApi.resolve(file));
27
+ const directoryKey = filesystemKey(pathApi.resolve(directory));
28
+ const prefix = directoryKey.endsWith(pathApi.sep)
29
+ ? directoryKey
30
+ : `${directoryKey}${pathApi.sep}`;
31
+ return fileKey === directoryKey || fileKey.startsWith(prefix);
32
+ },
33
+ filesystemKey,
34
+ isDeclarationFile: (file) => DTS_PATTERN.test(fold(pathApi.basename(file))),
35
+ isSamePath: (x, y) => filesystemKey(x) === filesystemKey(y),
36
+ isSupportedExtension: (file) => {
37
+ const filename = fold(pathApi.basename(file));
38
+ return (TS_PATTERN.test(filename) && DTS_PATTERN.test(filename) === false);
39
+ },
40
+ projectFileKey: fold,
41
+ };
42
+ }
43
+ FileSystemIdentity.create = create;
44
+ class Policy {
45
+ observe(caseSensitive, location) {
46
+ if (caseSensitive === undefined)
47
+ return;
48
+ if (this.caseSensitive_ === undefined) {
49
+ this.caseSensitive_ = caseSensitive;
50
+ this.location_ = location;
51
+ }
52
+ else if (this.caseSensitive_ !== caseSensitive) {
53
+ throw new URIError(`Error on TypiaGenerateWizard.generate(): inconsistent filesystem case behavior between ${this.location_} and ${location}.`);
54
+ }
55
+ }
56
+ get() {
57
+ if (this.caseSensitive_ === undefined) {
58
+ throw new URIError("Error on TypiaGenerateWizard.generate(): unable to determine filesystem case behavior for this run.");
59
+ }
60
+ return create(this.caseSensitive_);
61
+ }
62
+ }
63
+ FileSystemIdentity.Policy = Policy;
64
+ function inspectDirectory(directory) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const names = yield fs_1.default.promises.readdir(directory);
67
+ const entries = new Set(names);
68
+ for (const name of names) {
69
+ const alternate = alternateCase(name);
70
+ if (alternate === undefined)
71
+ continue;
72
+ if (entries.has(alternate))
73
+ return true;
74
+ try {
75
+ yield fs_1.default.promises.lstat(path_1.default.join(directory, alternate));
76
+ return false;
77
+ }
78
+ catch (error) {
79
+ if (isMissingFileError(error))
80
+ return true;
81
+ throw error;
82
+ }
83
+ }
84
+ return undefined;
85
+ });
86
+ }
87
+ FileSystemIdentity.inspectDirectory = inspectDirectory;
88
+ function probeDirectory(directory) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const inspected = yield inspectDirectory(directory);
91
+ if (inspected !== undefined)
92
+ return inspected;
93
+ for (let attempt = 0; attempt < 10; ++attempt) {
94
+ const name = `.typia-case-probe-${process.pid}-${Date.now()}-${Math.random()
95
+ .toString(36)
96
+ .slice(2)}`.toLowerCase();
97
+ const original = path_1.default.join(directory, name);
98
+ const alternate = path_1.default.join(directory, name.toUpperCase());
99
+ let handle;
100
+ try {
101
+ handle = yield fs_1.default.promises.open(original, "wx");
102
+ }
103
+ catch (error) {
104
+ if (isAlreadyExistsError(error))
105
+ continue;
106
+ throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to probe filesystem case behavior at ${directory}: ${formatUnknownError(error)}`);
107
+ }
108
+ let closed = false;
109
+ try {
110
+ yield handle.close();
111
+ closed = true;
112
+ try {
113
+ yield fs_1.default.promises.lstat(alternate);
114
+ return false;
115
+ }
116
+ catch (error) {
117
+ if (isMissingFileError(error))
118
+ return true;
119
+ throw error;
120
+ }
121
+ }
122
+ finally {
123
+ let cleanupError;
124
+ if (closed === false) {
125
+ try {
126
+ yield handle.close();
127
+ }
128
+ catch (error) {
129
+ cleanupError = error;
130
+ }
131
+ }
132
+ try {
133
+ yield fs_1.default.promises.unlink(original);
134
+ }
135
+ catch (error) {
136
+ if (isMissingFileError(error) === false)
137
+ cleanupError !== null && cleanupError !== void 0 ? cleanupError : (cleanupError = error);
138
+ }
139
+ if (cleanupError !== undefined) {
140
+ throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to clean filesystem case probe ${original}: ${formatUnknownError(cleanupError)}`);
141
+ }
142
+ }
143
+ }
144
+ throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to reserve a filesystem case probe at ${directory}.`);
145
+ });
146
+ }
147
+ FileSystemIdentity.probeDirectory = probeDirectory;
148
+ /**
149
+ * Builds the key that decides whether two paths are the same filesystem
150
+ * object.
151
+ *
152
+ * The identity is read from `fs.BigIntStats` rather than `fs.Stats`, because
153
+ * `fs.Stats.ino` is a JavaScript number. An NTFS file ID is `(sequenceNumber
154
+ * << 48) | mftRecordIndex` and routinely exceeds `Number.MAX_SAFE_INTEGER` —
155
+ * in a 4000-directory probe, 1879 of them did — where the spacing between
156
+ * representable doubles is 8 or more. Two entries sharing a sequence number
157
+ * with MFT record indices within that spacing round to one double. The
158
+ * traversal callers would then treat a distinct directory or file as already
159
+ * visited and skip it with no diagnostic, and the overwrite guard would
160
+ * refuse a legitimate output (samchon/typia#2269).
161
+ *
162
+ * A filesystem that reports no inode at all keeps the canonical path
163
+ * fallback, which is the only identity available there.
164
+ *
165
+ * @param stat Stats read with `{ bigint: true }`.
166
+ * @param realpath Canonical path of the same object.
167
+ * @returns Key that is equal for two paths only when they are one object.
168
+ */
169
+ function identityKey(stat, realpath) {
170
+ // `BigInt(0)` rather than `0n`: this package compiles at ES2016, where a
171
+ // BigInt literal is a syntax error, while the constructor and the `bigint`
172
+ // type are fine.
173
+ return stat.ino === BigInt(0)
174
+ ? `path:${path_1.default.normalize(realpath)}`
175
+ : `inode:${stat.dev}:${stat.ino}`;
176
+ }
177
+ FileSystemIdentity.identityKey = identityKey;
178
+ function alternateCase(name) {
179
+ let changed = false;
180
+ let output = "";
181
+ for (const character of name) {
182
+ if (character >= "a" && character <= "z") {
183
+ output += character.toUpperCase();
184
+ changed = true;
185
+ }
186
+ else if (character >= "A" && character <= "Z") {
187
+ output += character.toLowerCase();
188
+ changed = true;
189
+ }
190
+ else
191
+ output += character;
192
+ }
193
+ return changed ? output : undefined;
194
+ }
195
+ function isAlreadyExistsError(error) {
196
+ return (typeof error === "object" &&
197
+ error !== null &&
198
+ "code" in error &&
199
+ error.code === "EEXIST");
200
+ }
201
+ function isMissingFileError(error) {
202
+ return (typeof error === "object" &&
203
+ error !== null &&
204
+ "code" in error &&
205
+ error.code === "ENOENT");
206
+ }
207
+ function formatUnknownError(error) {
208
+ return error instanceof Error ? error.message : String(error);
209
+ }
210
+ })(FileSystemIdentity || (exports.FileSystemIdentity = FileSystemIdentity = {}));
211
+ const TS_PATTERN = /\.[cm]?tsx?$/;
212
+ const DTS_PATTERN = /\.d\.[cm]?tsx?$/;
213
+ //# sourceMappingURL=FileSystemIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystemIdentity.js","sourceRoot":"","sources":["../../src/executable/FileSystemIdentity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,IAAiB,kBAAkB,CAuNlC;AAvND,WAAiB,kBAAkB;IAWjC,SAAgB,MAAM,CACpB,aAAsB,EACtB,OAAO,GAAsB,cAAI;QAEjC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAU,EAAE,CACrC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,OAAO;YACL,aAAa;YACb,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;gBAC5B,MAAM,OAAO,GAAW,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,MAAM,YAAY,GAAW,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAW,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;oBACvD,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBACpC,OAAO,OAAO,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;YACD,aAAa;YACb,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAC1B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC;YAC3D,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC7B,MAAM,QAAQ,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtD,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAClE,CAAC;YACJ,CAAC;YACD,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IA9Be,mBAAA,MAAM,SA8BrB,CAAA;IAED,MAAa,MAAM;QAIV,OAAO,CAAC,aAAkC,EAAE,QAAgB;YACjE,IAAI,aAAa,KAAK,SAAS;gBAAE,OAAO;YACxC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;gBACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC5B,CAAC;iBAAM,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE,CAAC;gBACjD,MAAM,IAAI,QAAQ,CAChB,0FAA0F,IAAI,CAAC,SAAS,QAAQ,QAAQ,GAAG,CAC5H,CAAC;YACJ,CAAC;QACH,CAAC;QAEM,GAAG;YACR,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,IAAI,QAAQ,CAChB,qGAAqG,CACtG,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;KACF;IAxBY,mBAAA,MAAM,SAwBlB,CAAA;IAED,SAAsB,gBAAgB,CACpC,SAAiB;;YAEjB,MAAM,KAAK,GAAa,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAgB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAuB,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,SAAS,KAAK,SAAS;oBAAE,SAAS;gBACtC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACxC,IAAI,CAAC;oBACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;oBACzD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,kBAAkB,CAAC,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC3C,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAlBqB,mBAAA,gBAAgB,mBAkBrC,CAAA;IAED,SAAsB,cAAc,CAAC,SAAiB;;YACpD,MAAM,SAAS,GAAwB,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACzE,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAE9C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;gBAC9C,MAAM,IAAI,GACR,qBAAqB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;qBAC5D,QAAQ,CAAC,EAAE,CAAC;qBACZ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAW,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACpD,MAAM,SAAS,GAAW,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACnE,IAAI,MAA8B,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,oBAAoB,CAAC,KAAK,CAAC;wBAAE,SAAS;oBAC1C,MAAM,IAAI,QAAQ,CAChB,wFAAwF,SAAS,KAAK,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAClI,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,GAAY,KAAK,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;oBACrB,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,CAAC;wBACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;wBACnC,OAAO,KAAK,CAAC;oBACf,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,kBAAkB,CAAC,KAAK,CAAC;4BAAE,OAAO,IAAI,CAAC;wBAC3C,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,IAAI,YAAqB,CAAC;oBAC1B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;wBACrB,IAAI,CAAC;4BACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;wBACvB,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,YAAY,GAAG,KAAK,CAAC;wBACvB,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,KAAK,KAAK;4BAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,IAAZ,YAAY,GAAK,KAAK,EAAC;oBAClE,CAAC;oBACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC/B,MAAM,IAAI,QAAQ,CAChB,kFAAkF,QAAQ,KAAK,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAClI,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,IAAI,QAAQ,CAChB,yFAAyF,SAAS,GAAG,CACtG,CAAC;QACJ,CAAC;KAAA;IAvDqB,mBAAA,cAAc,iBAuDnC,CAAA;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAgB,WAAW,CACzB,IAAyC,EACzC,QAAgB;QAEhB,yEAAyE;QACzE,2EAA2E;QAC3E,iBAAiB;QACjB,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,QAAQ,cAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACpC,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,CAAC;IAVe,mBAAA,WAAW,cAU1B,CAAA;IAED,SAAS,aAAa,CAAC,IAAY;QACjC,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,IAAI,MAAM,GAAW,EAAE,CAAC;QACxB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBACzC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBAChD,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;;gBAAM,MAAM,IAAI,SAAS,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACtC,CAAC;IAED,SAAS,oBAAoB,CAAC,KAAc;QAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,QAAQ,CACxB,CAAC;IACJ,CAAC;IAED,SAAS,kBAAkB,CAAC,KAAc;QACxC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,QAAQ,CACxB,CAAC;IACJ,CAAC;IAED,SAAS,kBAAkB,CAAC,KAAc;QACxC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,EAvNgB,kBAAkB,aAAlB,kBAAkB,GAAlB,kBAAkB,QAuNlC;AAED,MAAM,UAAU,GAAG,cAAc,CAAC;AAClC,MAAM,WAAW,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,133 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ //#region src/executable/FileSystemIdentity.ts
4
+ let FileSystemIdentity;
5
+ (function(_FileSystemIdentity) {
6
+ function create(caseSensitive, pathApi = path) {
7
+ const fold = (value) => caseSensitive ? value : value.toLowerCase();
8
+ const filesystemKey = (file) => fold(pathApi.normalize(file));
9
+ return {
10
+ caseSensitive,
11
+ contains: (file, directory) => {
12
+ const fileKey = filesystemKey(pathApi.resolve(file));
13
+ const directoryKey = filesystemKey(pathApi.resolve(directory));
14
+ const prefix = directoryKey.endsWith(pathApi.sep) ? directoryKey : `${directoryKey}${pathApi.sep}`;
15
+ return fileKey === directoryKey || fileKey.startsWith(prefix);
16
+ },
17
+ filesystemKey,
18
+ isDeclarationFile: (file) => DTS_PATTERN.test(fold(pathApi.basename(file))),
19
+ isSamePath: (x, y) => filesystemKey(x) === filesystemKey(y),
20
+ isSupportedExtension: (file) => {
21
+ const filename = fold(pathApi.basename(file));
22
+ return TS_PATTERN.test(filename) && DTS_PATTERN.test(filename) === false;
23
+ },
24
+ projectFileKey: fold
25
+ };
26
+ }
27
+ _FileSystemIdentity.create = create;
28
+ class Policy {
29
+ observe(caseSensitive, location) {
30
+ if (caseSensitive === void 0) return;
31
+ if (this.caseSensitive_ === void 0) {
32
+ this.caseSensitive_ = caseSensitive;
33
+ this.location_ = location;
34
+ } else if (this.caseSensitive_ !== caseSensitive) throw new URIError(`Error on TypiaGenerateWizard.generate(): inconsistent filesystem case behavior between ${this.location_} and ${location}.`);
35
+ }
36
+ get() {
37
+ if (this.caseSensitive_ === void 0) throw new URIError("Error on TypiaGenerateWizard.generate(): unable to determine filesystem case behavior for this run.");
38
+ return create(this.caseSensitive_);
39
+ }
40
+ }
41
+ _FileSystemIdentity.Policy = Policy;
42
+ async function inspectDirectory(directory) {
43
+ const names = await fs.promises.readdir(directory);
44
+ const entries = new Set(names);
45
+ for (const name of names) {
46
+ const alternate = alternateCase(name);
47
+ if (alternate === void 0) continue;
48
+ if (entries.has(alternate)) return true;
49
+ try {
50
+ await fs.promises.lstat(path.join(directory, alternate));
51
+ return false;
52
+ } catch (error) {
53
+ if (isMissingFileError(error)) return true;
54
+ throw error;
55
+ }
56
+ }
57
+ }
58
+ _FileSystemIdentity.inspectDirectory = inspectDirectory;
59
+ async function probeDirectory(directory) {
60
+ const inspected = await inspectDirectory(directory);
61
+ if (inspected !== void 0) return inspected;
62
+ for (let attempt = 0; attempt < 10; ++attempt) {
63
+ const name = `.typia-case-probe-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`.toLowerCase();
64
+ const original = path.join(directory, name);
65
+ const alternate = path.join(directory, name.toUpperCase());
66
+ let handle;
67
+ try {
68
+ handle = await fs.promises.open(original, "wx");
69
+ } catch (error) {
70
+ if (isAlreadyExistsError(error)) continue;
71
+ throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to probe filesystem case behavior at ${directory}: ${formatUnknownError(error)}`);
72
+ }
73
+ let closed = false;
74
+ try {
75
+ await handle.close();
76
+ closed = true;
77
+ try {
78
+ await fs.promises.lstat(alternate);
79
+ return false;
80
+ } catch (error) {
81
+ if (isMissingFileError(error)) return true;
82
+ throw error;
83
+ }
84
+ } finally {
85
+ let cleanupError;
86
+ if (closed === false) try {
87
+ await handle.close();
88
+ } catch (error) {
89
+ cleanupError = error;
90
+ }
91
+ try {
92
+ await fs.promises.unlink(original);
93
+ } catch (error) {
94
+ if (isMissingFileError(error) === false) cleanupError ??= error;
95
+ }
96
+ if (cleanupError !== void 0) throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to clean filesystem case probe ${original}: ${formatUnknownError(cleanupError)}`);
97
+ }
98
+ }
99
+ throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to reserve a filesystem case probe at ${directory}.`);
100
+ }
101
+ _FileSystemIdentity.probeDirectory = probeDirectory;
102
+ function identityKey(stat, realpath) {
103
+ return stat.ino === BigInt(0) ? `path:${path.normalize(realpath)}` : `inode:${stat.dev}:${stat.ino}`;
104
+ }
105
+ _FileSystemIdentity.identityKey = identityKey;
106
+ function alternateCase(name) {
107
+ let changed = false;
108
+ let output = "";
109
+ for (const character of name) if (character >= "a" && character <= "z") {
110
+ output += character.toUpperCase();
111
+ changed = true;
112
+ } else if (character >= "A" && character <= "Z") {
113
+ output += character.toLowerCase();
114
+ changed = true;
115
+ } else output += character;
116
+ return changed ? output : void 0;
117
+ }
118
+ function isAlreadyExistsError(error) {
119
+ return typeof error === "object" && error !== null && "code" in error && error.code === "EEXIST";
120
+ }
121
+ function isMissingFileError(error) {
122
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
123
+ }
124
+ function formatUnknownError(error) {
125
+ return error instanceof Error ? error.message : String(error);
126
+ }
127
+ })(FileSystemIdentity || (FileSystemIdentity = {}));
128
+ const TS_PATTERN = /\.[cm]?tsx?$/;
129
+ const DTS_PATTERN = /\.d\.[cm]?tsx?$/;
130
+ //#endregion
131
+ export { FileSystemIdentity };
132
+
133
+ //# sourceMappingURL=FileSystemIdentity.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystemIdentity.mjs","names":[],"sources":["../../src/executable/FileSystemIdentity.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\n\nexport namespace FileSystemIdentity {\n export interface IIdentity {\n readonly caseSensitive: boolean;\n contains(file: string, directory: string): boolean;\n filesystemKey(file: string): string;\n isDeclarationFile(file: string): boolean;\n isSamePath(x: string, y: string): boolean;\n isSupportedExtension(file: string): boolean;\n projectFileKey(file: string): string;\n }\n\n export function create(\n caseSensitive: boolean,\n pathApi: typeof path.posix = path,\n ): IIdentity {\n const fold = (value: string): string =>\n caseSensitive ? value : value.toLowerCase();\n const filesystemKey = (file: string): string =>\n fold(pathApi.normalize(file));\n return {\n caseSensitive,\n contains: (file, directory) => {\n const fileKey: string = filesystemKey(pathApi.resolve(file));\n const directoryKey: string = filesystemKey(pathApi.resolve(directory));\n const prefix: string = directoryKey.endsWith(pathApi.sep)\n ? directoryKey\n : `${directoryKey}${pathApi.sep}`;\n return fileKey === directoryKey || fileKey.startsWith(prefix);\n },\n filesystemKey,\n isDeclarationFile: (file) =>\n DTS_PATTERN.test(fold(pathApi.basename(file))),\n isSamePath: (x, y) => filesystemKey(x) === filesystemKey(y),\n isSupportedExtension: (file) => {\n const filename: string = fold(pathApi.basename(file));\n return (\n TS_PATTERN.test(filename) && DTS_PATTERN.test(filename) === false\n );\n },\n projectFileKey: fold,\n };\n }\n\n export class Policy {\n private caseSensitive_: boolean | undefined;\n private location_: string | undefined;\n\n public observe(caseSensitive: boolean | undefined, location: string): void {\n if (caseSensitive === undefined) return;\n if (this.caseSensitive_ === undefined) {\n this.caseSensitive_ = caseSensitive;\n this.location_ = location;\n } else if (this.caseSensitive_ !== caseSensitive) {\n throw new URIError(\n `Error on TypiaGenerateWizard.generate(): inconsistent filesystem case behavior between ${this.location_} and ${location}.`,\n );\n }\n }\n\n public get(): IIdentity {\n if (this.caseSensitive_ === undefined) {\n throw new URIError(\n \"Error on TypiaGenerateWizard.generate(): unable to determine filesystem case behavior for this run.\",\n );\n }\n return create(this.caseSensitive_);\n }\n }\n\n export async function inspectDirectory(\n directory: string,\n ): Promise<boolean | undefined> {\n const names: string[] = await fs.promises.readdir(directory);\n const entries: Set<string> = new Set(names);\n for (const name of names) {\n const alternate: string | undefined = alternateCase(name);\n if (alternate === undefined) continue;\n if (entries.has(alternate)) return true;\n try {\n await fs.promises.lstat(path.join(directory, alternate));\n return false;\n } catch (error) {\n if (isMissingFileError(error)) return true;\n throw error;\n }\n }\n return undefined;\n }\n\n export async function probeDirectory(directory: string): Promise<boolean> {\n const inspected: boolean | undefined = await inspectDirectory(directory);\n if (inspected !== undefined) return inspected;\n\n for (let attempt = 0; attempt < 10; ++attempt) {\n const name: string =\n `.typia-case-probe-${process.pid}-${Date.now()}-${Math.random()\n .toString(36)\n .slice(2)}`.toLowerCase();\n const original: string = path.join(directory, name);\n const alternate: string = path.join(directory, name.toUpperCase());\n let handle: fs.promises.FileHandle;\n try {\n handle = await fs.promises.open(original, \"wx\");\n } catch (error) {\n if (isAlreadyExistsError(error)) continue;\n throw new URIError(\n `Error on TypiaGenerateWizard.generate(): unable to probe filesystem case behavior at ${directory}: ${formatUnknownError(error)}`,\n );\n }\n let closed: boolean = false;\n try {\n await handle.close();\n closed = true;\n try {\n await fs.promises.lstat(alternate);\n return false;\n } catch (error) {\n if (isMissingFileError(error)) return true;\n throw error;\n }\n } finally {\n let cleanupError: unknown;\n if (closed === false) {\n try {\n await handle.close();\n } catch (error) {\n cleanupError = error;\n }\n }\n try {\n await fs.promises.unlink(original);\n } catch (error) {\n if (isMissingFileError(error) === false) cleanupError ??= error;\n }\n if (cleanupError !== undefined) {\n throw new URIError(\n `Error on TypiaGenerateWizard.generate(): unable to clean filesystem case probe ${original}: ${formatUnknownError(cleanupError)}`,\n );\n }\n }\n }\n throw new URIError(\n `Error on TypiaGenerateWizard.generate(): unable to reserve a filesystem case probe at ${directory}.`,\n );\n }\n\n /**\n * Builds the key that decides whether two paths are the same filesystem\n * object.\n *\n * The identity is read from `fs.BigIntStats` rather than `fs.Stats`, because\n * `fs.Stats.ino` is a JavaScript number. An NTFS file ID is `(sequenceNumber\n * << 48) | mftRecordIndex` and routinely exceeds `Number.MAX_SAFE_INTEGER` —\n * in a 4000-directory probe, 1879 of them did — where the spacing between\n * representable doubles is 8 or more. Two entries sharing a sequence number\n * with MFT record indices within that spacing round to one double. The\n * traversal callers would then treat a distinct directory or file as already\n * visited and skip it with no diagnostic, and the overwrite guard would\n * refuse a legitimate output (samchon/typia#2269).\n *\n * A filesystem that reports no inode at all keeps the canonical path\n * fallback, which is the only identity available there.\n *\n * @param stat Stats read with `{ bigint: true }`.\n * @param realpath Canonical path of the same object.\n * @returns Key that is equal for two paths only when they are one object.\n */\n export function identityKey(\n stat: Pick<fs.BigIntStats, \"dev\" | \"ino\">,\n realpath: string,\n ): string {\n // `BigInt(0)` rather than `0n`: this package compiles at ES2016, where a\n // BigInt literal is a syntax error, while the constructor and the `bigint`\n // type are fine.\n return stat.ino === BigInt(0)\n ? `path:${path.normalize(realpath)}`\n : `inode:${stat.dev}:${stat.ino}`;\n }\n\n function alternateCase(name: string): string | undefined {\n let changed: boolean = false;\n let output: string = \"\";\n for (const character of name) {\n if (character >= \"a\" && character <= \"z\") {\n output += character.toUpperCase();\n changed = true;\n } else if (character >= \"A\" && character <= \"Z\") {\n output += character.toLowerCase();\n changed = true;\n } else output += character;\n }\n return changed ? output : undefined;\n }\n\n function isAlreadyExistsError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"EEXIST\"\n );\n }\n\n function isMissingFileError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n );\n }\n\n function formatUnknownError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n }\n}\n\nconst TS_PATTERN = /\\.[cm]?tsx?$/;\nconst DTS_PATTERN = /\\.d\\.[cm]?tsx?$/;\n"],"mappings":"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"}