ts-data-forge 3.2.0 → 3.3.1

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 (426) hide show
  1. package/README.md +45 -21
  2. package/dist/array/impl/array-utils-creation.d.mts +116 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
  4. package/dist/array/impl/array-utils-creation.mjs +110 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -0
  6. package/dist/array/impl/array-utils-element-access.d.mts +61 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
  8. package/dist/array/impl/array-utils-element-access.mjs +66 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
  10. package/dist/array/impl/array-utils-iterators.d.mts +59 -0
  11. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
  12. package/dist/array/impl/array-utils-iterators.mjs +104 -0
  13. package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
  14. package/dist/array/impl/array-utils-modification.d.mts +154 -0
  15. package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
  16. package/dist/array/impl/array-utils-modification.mjs +139 -0
  17. package/dist/array/impl/array-utils-modification.mjs.map +1 -0
  18. package/dist/array/impl/array-utils-reducing-value.d.mts +214 -0
  19. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
  20. package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +179 -0
  23. package/dist/array/impl/array-utils-search.d.mts.map +1 -0
  24. package/dist/array/impl/array-utils-search.mjs +153 -0
  25. package/dist/array/impl/array-utils-search.mjs.map +1 -0
  26. package/dist/array/impl/array-utils-set-op.d.mts +100 -0
  27. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
  28. package/dist/array/impl/array-utils-set-op.mjs +137 -0
  29. package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
  30. package/dist/array/impl/array-utils-size.d.mts +24 -0
  31. package/dist/array/impl/array-utils-size.d.mts.map +1 -0
  32. package/dist/array/impl/array-utils-size.mjs +28 -0
  33. package/dist/array/impl/array-utils-size.mjs.map +1 -0
  34. package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
  35. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
  36. package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
  37. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
  38. package/dist/array/impl/array-utils-slicing.d.mts +120 -0
  39. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
  40. package/dist/array/impl/array-utils-slicing.mjs +140 -0
  41. package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
  42. package/dist/array/impl/array-utils-transformation.d.mts +348 -0
  43. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
  44. package/dist/array/impl/array-utils-transformation.mjs +331 -0
  45. package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
  46. package/dist/array/impl/array-utils-validation.d.mts +149 -0
  47. package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
  48. package/dist/array/impl/array-utils-validation.mjs +166 -0
  49. package/dist/array/impl/array-utils-validation.mjs.map +1 -0
  50. package/dist/array/impl/index.d.mts +13 -0
  51. package/dist/array/impl/index.d.mts.map +1 -0
  52. package/dist/array/impl/index.mjs +13 -0
  53. package/dist/array/impl/index.mjs.map +1 -0
  54. package/dist/array/index.d.mts +1 -1
  55. package/dist/array/index.d.mts.map +1 -1
  56. package/dist/array/index.mjs +2 -1
  57. package/dist/array/index.mjs.map +1 -1
  58. package/dist/collections/imap-mapped.d.mts +83 -253
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +33 -164
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -163
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +74 -94
  65. package/dist/collections/imap.mjs.map +1 -1
  66. package/dist/collections/iset-mapped.d.mts +828 -345
  67. package/dist/collections/iset-mapped.d.mts.map +1 -1
  68. package/dist/collections/iset-mapped.mjs +200 -242
  69. package/dist/collections/iset-mapped.mjs.map +1 -1
  70. package/dist/collections/iset.d.mts +397 -205
  71. package/dist/collections/iset.d.mts.map +1 -1
  72. package/dist/collections/iset.mjs +102 -184
  73. package/dist/collections/iset.mjs.map +1 -1
  74. package/dist/collections/queue.d.mts +155 -135
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +55 -156
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -154
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +54 -203
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +3 -0
  83. package/dist/entry-point.d.mts.map +1 -0
  84. package/dist/entry-point.mjs +62 -0
  85. package/dist/entry-point.mjs.map +1 -0
  86. package/dist/expect-type.d.mts +43 -172
  87. package/dist/expect-type.d.mts.map +1 -1
  88. package/dist/expect-type.mjs +43 -172
  89. package/dist/expect-type.mjs.map +1 -1
  90. package/dist/functional/match.d.mts +35 -140
  91. package/dist/functional/match.d.mts.map +1 -1
  92. package/dist/functional/match.mjs.map +1 -1
  93. package/dist/functional/optional.d.mts +282 -160
  94. package/dist/functional/optional.d.mts.map +1 -1
  95. package/dist/functional/optional.mjs +131 -71
  96. package/dist/functional/optional.mjs.map +1 -1
  97. package/dist/functional/pipe.d.mts +59 -113
  98. package/dist/functional/pipe.d.mts.map +1 -1
  99. package/dist/functional/pipe.mjs.map +1 -1
  100. package/dist/functional/result.d.mts +433 -332
  101. package/dist/functional/result.d.mts.map +1 -1
  102. package/dist/functional/result.mjs +233 -239
  103. package/dist/functional/result.mjs.map +1 -1
  104. package/dist/globals.d.mts +12 -5
  105. package/dist/guard/has-key.d.mts +23 -74
  106. package/dist/guard/has-key.d.mts.map +1 -1
  107. package/dist/guard/has-key.mjs +23 -74
  108. package/dist/guard/has-key.mjs.map +1 -1
  109. package/dist/guard/is-non-empty-string.d.mts +20 -87
  110. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  111. package/dist/guard/is-non-empty-string.mjs +20 -87
  112. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  113. package/dist/guard/is-non-null-object.d.mts +14 -84
  114. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  115. package/dist/guard/is-non-null-object.mjs +14 -84
  116. package/dist/guard/is-non-null-object.mjs.map +1 -1
  117. package/dist/guard/is-primitive.d.mts +13 -126
  118. package/dist/guard/is-primitive.d.mts.map +1 -1
  119. package/dist/guard/is-primitive.mjs +13 -126
  120. package/dist/guard/is-primitive.mjs.map +1 -1
  121. package/dist/guard/is-record.d.mts +21 -132
  122. package/dist/guard/is-record.d.mts.map +1 -1
  123. package/dist/guard/is-record.mjs +21 -132
  124. package/dist/guard/is-record.mjs.map +1 -1
  125. package/dist/guard/is-type.d.mts +201 -238
  126. package/dist/guard/is-type.d.mts.map +1 -1
  127. package/dist/guard/is-type.mjs +201 -238
  128. package/dist/guard/is-type.mjs.map +1 -1
  129. package/dist/guard/key-is-in.d.mts +22 -139
  130. package/dist/guard/key-is-in.d.mts.map +1 -1
  131. package/dist/guard/key-is-in.mjs +22 -139
  132. package/dist/guard/key-is-in.mjs.map +1 -1
  133. package/dist/index.d.mts +0 -1
  134. package/dist/index.d.mts.map +1 -1
  135. package/dist/index.mjs +0 -1
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/iterator/range.d.mts +29 -62
  138. package/dist/iterator/range.d.mts.map +1 -1
  139. package/dist/iterator/range.mjs.map +1 -1
  140. package/dist/json/json.d.mts +191 -121
  141. package/dist/json/json.d.mts.map +1 -1
  142. package/dist/json/json.mjs +238 -136
  143. package/dist/json/json.mjs.map +1 -1
  144. package/dist/number/branded-types/finite-number.d.mts +24 -156
  145. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  146. package/dist/number/branded-types/finite-number.mjs +27 -159
  147. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  148. package/dist/number/branded-types/int.d.mts +122 -120
  149. package/dist/number/branded-types/int.d.mts.map +1 -1
  150. package/dist/number/branded-types/int.mjs +122 -120
  151. package/dist/number/branded-types/int.mjs.map +1 -1
  152. package/dist/number/branded-types/int16.d.mts +22 -30
  153. package/dist/number/branded-types/int16.d.mts.map +1 -1
  154. package/dist/number/branded-types/int16.mjs +22 -30
  155. package/dist/number/branded-types/int16.mjs.map +1 -1
  156. package/dist/number/branded-types/int32.d.mts +22 -31
  157. package/dist/number/branded-types/int32.d.mts.map +1 -1
  158. package/dist/number/branded-types/int32.mjs +22 -31
  159. package/dist/number/branded-types/int32.mjs.map +1 -1
  160. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  161. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  162. package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
  163. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  164. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  165. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  166. package/dist/number/branded-types/non-negative-int16.mjs +24 -34
  167. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  168. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  169. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  170. package/dist/number/branded-types/non-negative-int32.mjs +26 -35
  171. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  172. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  173. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  174. package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
  175. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  176. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  177. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  178. package/dist/number/branded-types/non-zero-int.mjs +15 -30
  179. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  180. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  181. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  182. package/dist/number/branded-types/non-zero-int16.mjs +27 -35
  183. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  184. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  185. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  186. package/dist/number/branded-types/non-zero-int32.mjs +29 -36
  187. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  188. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  189. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  190. package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
  191. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  192. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  193. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  194. package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
  195. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  196. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  197. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  198. package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
  199. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  200. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  201. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  202. package/dist/number/branded-types/positive-finite-number.mjs +29 -43
  203. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  204. package/dist/number/branded-types/positive-int.d.mts +133 -123
  205. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  206. package/dist/number/branded-types/positive-int.mjs +133 -123
  207. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  208. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  209. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  210. package/dist/number/branded-types/positive-int16.mjs +24 -35
  211. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  212. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  213. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  214. package/dist/number/branded-types/positive-int32.mjs +24 -35
  215. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  216. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  217. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  218. package/dist/number/branded-types/positive-safe-int.mjs +160 -34
  219. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  220. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  221. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  222. package/dist/number/branded-types/positive-uint16.mjs +24 -35
  223. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  224. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  225. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  226. package/dist/number/branded-types/positive-uint32.mjs +26 -36
  227. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  228. package/dist/number/branded-types/safe-int.d.mts +140 -99
  229. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  230. package/dist/number/branded-types/safe-int.mjs +142 -101
  231. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  232. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  233. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  234. package/dist/number/branded-types/safe-uint.mjs +25 -34
  235. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  236. package/dist/number/branded-types/uint.d.mts +121 -30
  237. package/dist/number/branded-types/uint.d.mts.map +1 -1
  238. package/dist/number/branded-types/uint.mjs +121 -30
  239. package/dist/number/branded-types/uint.mjs.map +1 -1
  240. package/dist/number/branded-types/uint16.d.mts +26 -34
  241. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  242. package/dist/number/branded-types/uint16.mjs +26 -34
  243. package/dist/number/branded-types/uint16.mjs.map +1 -1
  244. package/dist/number/branded-types/uint32.d.mts +26 -68
  245. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  246. package/dist/number/branded-types/uint32.mjs +26 -68
  247. package/dist/number/branded-types/uint32.mjs.map +1 -1
  248. package/dist/number/enum/int8.d.mts +37 -101
  249. package/dist/number/enum/int8.d.mts.map +1 -1
  250. package/dist/number/enum/int8.mjs +39 -170
  251. package/dist/number/enum/int8.mjs.map +1 -1
  252. package/dist/number/enum/uint8.d.mts +45 -55
  253. package/dist/number/enum/uint8.d.mts.map +1 -1
  254. package/dist/number/enum/uint8.mjs +46 -155
  255. package/dist/number/enum/uint8.mjs.map +1 -1
  256. package/dist/number/num.d.mts +145 -206
  257. package/dist/number/num.d.mts.map +1 -1
  258. package/dist/number/num.mjs +143 -199
  259. package/dist/number/num.mjs.map +1 -1
  260. package/dist/number/refined-number-utils.d.mts +97 -21
  261. package/dist/number/refined-number-utils.d.mts.map +1 -1
  262. package/dist/number/refined-number-utils.mjs +91 -20
  263. package/dist/number/refined-number-utils.mjs.map +1 -1
  264. package/dist/object/object.d.mts +126 -208
  265. package/dist/object/object.d.mts.map +1 -1
  266. package/dist/object/object.mjs +68 -102
  267. package/dist/object/object.mjs.map +1 -1
  268. package/dist/others/cast-mutable.d.mts +12 -88
  269. package/dist/others/cast-mutable.d.mts.map +1 -1
  270. package/dist/others/cast-mutable.mjs +13 -89
  271. package/dist/others/cast-mutable.mjs.map +1 -1
  272. package/dist/others/cast-readonly.d.mts +12 -168
  273. package/dist/others/cast-readonly.d.mts.map +1 -1
  274. package/dist/others/cast-readonly.mjs +13 -169
  275. package/dist/others/cast-readonly.mjs.map +1 -1
  276. package/dist/others/if-then.d.mts +6 -83
  277. package/dist/others/if-then.d.mts.map +1 -1
  278. package/dist/others/if-then.mjs +6 -83
  279. package/dist/others/if-then.mjs.map +1 -1
  280. package/dist/others/map-nullable.d.mts +12 -136
  281. package/dist/others/map-nullable.d.mts.map +1 -1
  282. package/dist/others/map-nullable.mjs.map +1 -1
  283. package/dist/others/memoize-function.d.mts +14 -157
  284. package/dist/others/memoize-function.d.mts.map +1 -1
  285. package/dist/others/memoize-function.mjs +14 -157
  286. package/dist/others/memoize-function.mjs.map +1 -1
  287. package/dist/others/tuple.d.mts +33 -151
  288. package/dist/others/tuple.d.mts.map +1 -1
  289. package/dist/others/tuple.mjs +33 -151
  290. package/dist/others/tuple.mjs.map +1 -1
  291. package/dist/others/unknown-to-string.d.mts +11 -125
  292. package/dist/others/unknown-to-string.d.mts.map +1 -1
  293. package/dist/others/unknown-to-string.mjs +14 -127
  294. package/dist/others/unknown-to-string.mjs.map +1 -1
  295. package/dist/promise/promise.d.mts +33 -20
  296. package/dist/promise/promise.d.mts.map +1 -1
  297. package/dist/promise/promise.mjs +34 -21
  298. package/dist/promise/promise.mjs.map +1 -1
  299. package/dist/types.d.mts +1 -1
  300. package/package.json +54 -50
  301. package/src/array/impl/array-utils-creation.mts +192 -0
  302. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  303. package/src/array/impl/array-utils-element-access.mts +115 -0
  304. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  305. package/src/array/impl/array-utils-iterators.mts +79 -0
  306. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  307. package/src/array/impl/array-utils-modification.mts +434 -0
  308. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  309. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  310. package/src/array/impl/array-utils-reducing-value.mts +551 -0
  311. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
  312. package/src/array/impl/array-utils-search.mts +509 -0
  313. package/src/array/impl/array-utils-search.test.mts +346 -0
  314. package/src/array/impl/array-utils-set-op.mts +166 -0
  315. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  316. package/src/array/impl/array-utils-size.mts +30 -0
  317. package/src/array/impl/array-utils-size.test.mts +9 -0
  318. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  319. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
  320. package/src/array/impl/array-utils-slicing.mts +275 -0
  321. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  322. package/src/array/impl/array-utils-transformation.mts +746 -0
  323. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  324. package/src/array/impl/array-utils-validation.mts +241 -0
  325. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  326. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  327. package/src/array/impl/index.mts +12 -0
  328. package/src/array/index.mts +1 -1
  329. package/src/collections/imap-mapped.mts +99 -265
  330. package/src/collections/imap.mts +477 -174
  331. package/src/collections/imap.test.mts +12 -19
  332. package/src/collections/iset-mapped.mts +892 -358
  333. package/src/collections/iset.mts +429 -213
  334. package/src/collections/queue.mts +174 -200
  335. package/src/collections/stack.mts +172 -245
  336. package/src/collections/stack.test.mts +9 -1
  337. package/src/entry-point.mts +2 -0
  338. package/src/expect-type.mts +43 -172
  339. package/src/functional/match.mts +35 -145
  340. package/src/functional/optional.mts +285 -163
  341. package/src/functional/optional.test.mts +4 -1
  342. package/src/functional/pipe.mts +60 -113
  343. package/src/functional/result.mts +452 -351
  344. package/src/functional/result.test.mts +9 -2
  345. package/src/globals.d.mts +12 -5
  346. package/src/guard/has-key.mts +23 -74
  347. package/src/guard/is-non-empty-string.mts +20 -87
  348. package/src/guard/is-non-null-object.mts +14 -84
  349. package/src/guard/is-non-null-object.test.mts +1 -1
  350. package/src/guard/is-primitive.mts +13 -126
  351. package/src/guard/is-primitive.test.mts +1 -1
  352. package/src/guard/is-record.mts +21 -132
  353. package/src/guard/is-record.test.mts +0 -1
  354. package/src/guard/is-type.mts +201 -238
  355. package/src/guard/is-type.test.mts +7 -7
  356. package/src/guard/key-is-in.mts +22 -139
  357. package/src/index.mts +0 -1
  358. package/src/iterator/range.mts +29 -62
  359. package/src/json/json.mts +202 -134
  360. package/src/json/json.test.mts +1 -3
  361. package/src/number/branded-types/finite-number.mts +27 -159
  362. package/src/number/branded-types/int.mts +122 -120
  363. package/src/number/branded-types/int16.mts +22 -30
  364. package/src/number/branded-types/int16.test.mts +24 -24
  365. package/src/number/branded-types/int32.mts +22 -31
  366. package/src/number/branded-types/int32.test.mts +39 -39
  367. package/src/number/branded-types/non-negative-finite-number.mts +31 -39
  368. package/src/number/branded-types/non-negative-int16.mts +24 -34
  369. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  370. package/src/number/branded-types/non-negative-int32.mts +26 -35
  371. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  372. package/src/number/branded-types/non-zero-finite-number.mts +25 -40
  373. package/src/number/branded-types/non-zero-int.mts +15 -30
  374. package/src/number/branded-types/non-zero-int16.mts +27 -35
  375. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  376. package/src/number/branded-types/non-zero-int32.mts +29 -36
  377. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  378. package/src/number/branded-types/non-zero-safe-int.mts +39 -40
  379. package/src/number/branded-types/non-zero-uint16.mts +24 -35
  380. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  381. package/src/number/branded-types/non-zero-uint32.mts +24 -35
  382. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  383. package/src/number/branded-types/positive-finite-number.mts +29 -43
  384. package/src/number/branded-types/positive-int.mts +134 -124
  385. package/src/number/branded-types/positive-int16.mts +24 -35
  386. package/src/number/branded-types/positive-int16.test.mts +14 -14
  387. package/src/number/branded-types/positive-int32.mts +24 -35
  388. package/src/number/branded-types/positive-int32.test.mts +26 -26
  389. package/src/number/branded-types/positive-safe-int.mts +160 -34
  390. package/src/number/branded-types/positive-uint16.mts +24 -35
  391. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  392. package/src/number/branded-types/positive-uint32.mts +26 -36
  393. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  394. package/src/number/branded-types/safe-int.mts +142 -101
  395. package/src/number/branded-types/safe-uint.mts +25 -34
  396. package/src/number/branded-types/uint.mts +121 -30
  397. package/src/number/branded-types/uint16.mts +26 -34
  398. package/src/number/branded-types/uint16.test.mts +16 -16
  399. package/src/number/branded-types/uint32.mts +26 -68
  400. package/src/number/branded-types/uint32.test.mts +28 -28
  401. package/src/number/enum/int8.mts +39 -170
  402. package/src/number/enum/uint8.mts +46 -155
  403. package/src/number/num.mts +157 -212
  404. package/src/number/num.test.mts +4 -4
  405. package/src/number/refined-number-utils.mts +109 -26
  406. package/src/object/object.mts +130 -212
  407. package/src/object/object.test.mts +29 -0
  408. package/src/others/cast-mutable.mts +13 -89
  409. package/src/others/cast-mutable.test.mts +80 -0
  410. package/src/others/cast-readonly.mts +13 -169
  411. package/src/others/if-then.mts +6 -83
  412. package/src/others/map-nullable.mts +12 -136
  413. package/src/others/map-nullable.test.mts +6 -6
  414. package/src/others/memoize-function.mts +14 -157
  415. package/src/others/tuple.mts +33 -151
  416. package/src/others/unknown-to-string.mts +15 -127
  417. package/src/others/unknown-to-string.test.mts +14 -2
  418. package/src/promise/promise.mts +34 -21
  419. package/src/promise/promise.test.mts +43 -0
  420. package/dist/array/array-utils.d.mts +0 -2956
  421. package/dist/array/array-utils.d.mts.map +0 -1
  422. package/dist/array/array-utils.mjs +0 -1838
  423. package/dist/array/array-utils.mjs.map +0 -1
  424. package/src/array/array-utils-search.test.mts +0 -169
  425. package/src/array/array-utils-slicing.test.mts +0 -274
  426. package/src/array/array-utils.mts +0 -4834
@@ -1,187 +1,31 @@
1
1
  /**
2
2
  * Casts a mutable type `T` to its `Readonly<T>` equivalent.
3
3
  *
4
- * This is a safe type assertion that adds immutability constraints at the type level.
5
- * The runtime value remains unchanged - only TypeScript's view of it becomes readonly.
6
- * This helps prevent accidental mutations and makes code intentions clearer.
4
+ * This is a safe type assertion that adds immutability constraints at the type
5
+ * level. The runtime value remains unchanged - only TypeScript's view of it
6
+ * becomes readonly. This helps prevent accidental mutations and makes code
7
+ * intentions clearer.
7
8
  *
8
9
  * @template T - The type of the mutable value
9
10
  * @param mutable - The mutable value to cast to readonly
10
11
  * @returns The same value with readonly modifiers added to its type
11
- *
12
- * @example Basic usage with arrays and objects
13
- * ```typescript
14
- * const mutableArr: number[] = [1, 2, 3];
15
- * const readonlyArr = castReadonly(mutableArr);
16
- * // readonlyArr.push(4); // ❌ TypeScript Error: no 'push' on readonly array
17
- *
18
- * const mutableObj = { x: 1, y: 2 };
19
- * const readonlyObj = castReadonly(mutableObj);
20
- * // readonlyObj.x = 5; // ❌ TypeScript Error: cannot assign to readonly property
21
- * ```
22
- *
23
- * @example Protecting function return values
24
- * ```typescript
25
- * // Prevent callers from mutating internal state
26
- * class UserService {
27
- * private users: User[] = [];
28
- *
29
- * getUsers(): readonly User[] {
30
- * return castReadonly(this.users); // Callers can't mutate the array
31
- * }
32
- * }
33
- *
34
- * const service = new UserService();
35
- * const users = service.getUsers();
36
- * // users.push(newUser); // ❌ TypeScript prevents this
37
- * ```
38
- *
39
- * @example Creating immutable configurations
40
- * ```typescript
41
- * // Start with mutable object for initialization
42
- * const config = {
43
- * apiUrl: 'https://api.example.com',
44
- * timeout: 5000,
45
- * retries: 3
46
- * };
47
- *
48
- * // Validate and process config...
49
- *
50
- * // Export as readonly to prevent modifications
51
- * export const APP_CONFIG = castReadonly(config);
52
- * // APP_CONFIG.timeout = 10000; // ❌ TypeScript Error
53
- * ```
54
- *
55
- * @example Working with array methods
56
- * ```typescript
57
- * const numbers: number[] = [1, 2, 3, 4, 5];
58
- * const readonlyNumbers = castReadonly(numbers);
59
- *
60
- * // Read operations still work
61
- * const doubled = readonlyNumbers.map(n => n * 2); // ✅ Returns new array
62
- * const sum = readonlyNumbers.reduce((a, b) => a + b, 0); // ✅ Works
63
- * const first = readonlyNumbers[0]; // ✅ Reading is allowed
64
- *
65
- * // Mutations are prevented
66
- * // readonlyNumbers[0] = 10; // ❌ TypeScript Error
67
- * // readonlyNumbers.sort(); // ❌ TypeScript Error (sort mutates)
68
- * ```
69
- *
70
12
  * @see castDeepReadonly - For deeply nested structures
71
13
  * @see castMutable - For the opposite operation (use with caution)
72
14
  */
73
15
  export declare const castReadonly: <T>(mutable: T) => Readonly<T>;
74
16
  /**
75
- * Casts a mutable type `T` to its `DeepReadonly<T>` equivalent, recursively adding readonly modifiers.
17
+ * Casts a mutable type `T` to its `DeepReadonly<T>` equivalent, recursively
18
+ * adding readonly modifiers.
76
19
  *
77
- * This is a safe type assertion that adds immutability constraints at ALL levels of nesting.
78
- * Provides complete protection against mutations in complex data structures.
79
- * The runtime value is unchanged - only TypeScript's type checking is enhanced.
20
+ * This is a safe type assertion that adds immutability constraints at ALL
21
+ * levels of nesting. Provides complete protection against mutations in complex
22
+ * data structures. The runtime value is unchanged - only TypeScript's type
23
+ * checking is enhanced.
80
24
  *
81
25
  * @template T - The type of the mutable value
82
26
  * @param mutable - The mutable value to cast to deeply readonly
83
- * @returns The same value with readonly modifiers recursively added to all properties
84
- *
85
- * @example Basic usage with nested structures
86
- * ```typescript
87
- * const mutableNested = {
88
- * a: { b: [1, 2, 3] },
89
- * c: { d: { e: 'value' } }
90
- * };
91
- *
92
- * const readonlyNested = castDeepReadonly(mutableNested);
93
- * // readonlyNested.a.b.push(4); // ❌ Error: readonly at all levels
94
- * // readonlyNested.c.d.e = 'new'; // ❌ Error: readonly at all levels
95
- * // readonlyNested.a = {}; // ❌ Error: cannot reassign readonly property
96
- * ```
97
- *
98
- * @example Protecting complex state objects
99
- * ```typescript
100
- * interface AppState {
101
- * user: {
102
- * id: number;
103
- * profile: {
104
- * name: string;
105
- * settings: {
106
- * theme: string;
107
- * notifications: boolean[];
108
- * };
109
- * };
110
- * };
111
- * data: {
112
- * items: Array<{ id: number; value: string }>;
113
- * };
114
- * }
115
- *
116
- * class StateManager {
117
- * private state: AppState = initialState;
118
- *
119
- * getState(): DeepReadonly<AppState> {
120
- * return castDeepReadonly(this.state);
121
- * }
122
- *
123
- * // Mutations only allowed through specific methods
124
- * updateTheme(theme: string) {
125
- * this.state.user.profile.settings.theme = theme;
126
- * }
127
- * }
128
- * ```
129
- *
130
- * @example Creating immutable API responses
131
- * ```typescript
132
- * async function fetchUserData(): Promise<DeepReadonly<UserData>> {
133
- * const response = await api.get<UserData>('/user');
134
- *
135
- * // Process and validate data...
136
- *
137
- * // Return as deeply immutable to prevent accidental mutations
138
- * return castDeepReadonly(response.data);
139
- * }
140
- *
141
- * const userData = await fetchUserData();
142
- * // userData is fully protected from mutations at any depth
143
- * // userData.preferences.emails.push('new@email.com'); // ❌ TypeScript Error
144
- * ```
145
- *
146
- * @example Working with Redux or state management
147
- * ```typescript
148
- * // Redux reducer example
149
- * type State = DeepReadonly<AppState>;
150
- *
151
- * function reducer(state: State, action: Action): State {
152
- * switch (action.type) {
153
- * case 'UPDATE_USER_NAME':
154
- * // Must create new objects, can't mutate
155
- * return castDeepReadonly({
156
- * ...state,
157
- * user: {
158
- * ...state.user,
159
- * profile: {
160
- * ...state.user.profile,
161
- * name: action.payload
162
- * }
163
- * }
164
- * });
165
- * default:
166
- * return state;
167
- * }
168
- * }
169
- * ```
170
- *
171
- * @example Type inference with generics
172
- * ```typescript
173
- * function processData<T>(data: T): DeepReadonly<T> {
174
- * // Perform processing...
175
- * console.log('Processing:', data);
176
- *
177
- * // Return immutable version
178
- * return castDeepReadonly(data);
179
- * }
180
- *
181
- * const result = processData({ nested: { value: [1, 2, 3] } });
182
- * // Type of result is DeepReadonly<{ nested: { value: number[] } }>
183
- * ```
184
- *
27
+ * @returns The same value with readonly modifiers recursively added to all
28
+ * properties
185
29
  * @see castReadonly - For shallow readonly casting
186
30
  * @see castDeepMutable - For the opposite operation (use with extreme caution)
187
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cast-readonly.d.mts","sourceRoot":"","sources":["../../src/others/cast-readonly.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAG,SAAS,CAAC,KAAG,QAAQ,CAAC,CAAC,CAChC,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiHG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAG,SAAS,CAAC,KAAG,YAAY,CAAC,CAAC,CAEpC,CAAC"}
1
+ {"version":3,"file":"cast-readonly.d.mts","sourceRoot":"","sources":["../../src/others/cast-readonly.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAG,SAAS,CAAC,KAAG,QAAQ,CAAC,CAAC,CAChC,CAAC;AAEzB;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAG,SAAS,CAAC,KAAG,YAAY,CAAC,CAAC,CAEpC,CAAC"}
@@ -1,192 +1,36 @@
1
1
  /**
2
2
  * Casts a mutable type `T` to its `Readonly<T>` equivalent.
3
3
  *
4
- * This is a safe type assertion that adds immutability constraints at the type level.
5
- * The runtime value remains unchanged - only TypeScript's view of it becomes readonly.
6
- * This helps prevent accidental mutations and makes code intentions clearer.
4
+ * This is a safe type assertion that adds immutability constraints at the type
5
+ * level. The runtime value remains unchanged - only TypeScript's view of it
6
+ * becomes readonly. This helps prevent accidental mutations and makes code
7
+ * intentions clearer.
7
8
  *
8
9
  * @template T - The type of the mutable value
9
10
  * @param mutable - The mutable value to cast to readonly
10
11
  * @returns The same value with readonly modifiers added to its type
11
- *
12
- * @example Basic usage with arrays and objects
13
- * ```typescript
14
- * const mutableArr: number[] = [1, 2, 3];
15
- * const readonlyArr = castReadonly(mutableArr);
16
- * // readonlyArr.push(4); // ❌ TypeScript Error: no 'push' on readonly array
17
- *
18
- * const mutableObj = { x: 1, y: 2 };
19
- * const readonlyObj = castReadonly(mutableObj);
20
- * // readonlyObj.x = 5; // ❌ TypeScript Error: cannot assign to readonly property
21
- * ```
22
- *
23
- * @example Protecting function return values
24
- * ```typescript
25
- * // Prevent callers from mutating internal state
26
- * class UserService {
27
- * private users: User[] = [];
28
- *
29
- * getUsers(): readonly User[] {
30
- * return castReadonly(this.users); // Callers can't mutate the array
31
- * }
32
- * }
33
- *
34
- * const service = new UserService();
35
- * const users = service.getUsers();
36
- * // users.push(newUser); // ❌ TypeScript prevents this
37
- * ```
38
- *
39
- * @example Creating immutable configurations
40
- * ```typescript
41
- * // Start with mutable object for initialization
42
- * const config = {
43
- * apiUrl: 'https://api.example.com',
44
- * timeout: 5000,
45
- * retries: 3
46
- * };
47
- *
48
- * // Validate and process config...
49
- *
50
- * // Export as readonly to prevent modifications
51
- * export const APP_CONFIG = castReadonly(config);
52
- * // APP_CONFIG.timeout = 10000; // ❌ TypeScript Error
53
- * ```
54
- *
55
- * @example Working with array methods
56
- * ```typescript
57
- * const numbers: number[] = [1, 2, 3, 4, 5];
58
- * const readonlyNumbers = castReadonly(numbers);
59
- *
60
- * // Read operations still work
61
- * const doubled = readonlyNumbers.map(n => n * 2); // ✅ Returns new array
62
- * const sum = readonlyNumbers.reduce((a, b) => a + b, 0); // ✅ Works
63
- * const first = readonlyNumbers[0]; // ✅ Reading is allowed
64
- *
65
- * // Mutations are prevented
66
- * // readonlyNumbers[0] = 10; // ❌ TypeScript Error
67
- * // readonlyNumbers.sort(); // ❌ TypeScript Error (sort mutates)
68
- * ```
69
- *
70
12
  * @see castDeepReadonly - For deeply nested structures
71
13
  * @see castMutable - For the opposite operation (use with caution)
72
14
  */
73
15
  const castReadonly = (mutable) => mutable;
74
16
  /**
75
- * Casts a mutable type `T` to its `DeepReadonly<T>` equivalent, recursively adding readonly modifiers.
17
+ * Casts a mutable type `T` to its `DeepReadonly<T>` equivalent, recursively
18
+ * adding readonly modifiers.
76
19
  *
77
- * This is a safe type assertion that adds immutability constraints at ALL levels of nesting.
78
- * Provides complete protection against mutations in complex data structures.
79
- * The runtime value is unchanged - only TypeScript's type checking is enhanced.
20
+ * This is a safe type assertion that adds immutability constraints at ALL
21
+ * levels of nesting. Provides complete protection against mutations in complex
22
+ * data structures. The runtime value is unchanged - only TypeScript's type
23
+ * checking is enhanced.
80
24
  *
81
25
  * @template T - The type of the mutable value
82
26
  * @param mutable - The mutable value to cast to deeply readonly
83
- * @returns The same value with readonly modifiers recursively added to all properties
84
- *
85
- * @example Basic usage with nested structures
86
- * ```typescript
87
- * const mutableNested = {
88
- * a: { b: [1, 2, 3] },
89
- * c: { d: { e: 'value' } }
90
- * };
91
- *
92
- * const readonlyNested = castDeepReadonly(mutableNested);
93
- * // readonlyNested.a.b.push(4); // ❌ Error: readonly at all levels
94
- * // readonlyNested.c.d.e = 'new'; // ❌ Error: readonly at all levels
95
- * // readonlyNested.a = {}; // ❌ Error: cannot reassign readonly property
96
- * ```
97
- *
98
- * @example Protecting complex state objects
99
- * ```typescript
100
- * interface AppState {
101
- * user: {
102
- * id: number;
103
- * profile: {
104
- * name: string;
105
- * settings: {
106
- * theme: string;
107
- * notifications: boolean[];
108
- * };
109
- * };
110
- * };
111
- * data: {
112
- * items: Array<{ id: number; value: string }>;
113
- * };
114
- * }
115
- *
116
- * class StateManager {
117
- * private state: AppState = initialState;
118
- *
119
- * getState(): DeepReadonly<AppState> {
120
- * return castDeepReadonly(this.state);
121
- * }
122
- *
123
- * // Mutations only allowed through specific methods
124
- * updateTheme(theme: string) {
125
- * this.state.user.profile.settings.theme = theme;
126
- * }
127
- * }
128
- * ```
129
- *
130
- * @example Creating immutable API responses
131
- * ```typescript
132
- * async function fetchUserData(): Promise<DeepReadonly<UserData>> {
133
- * const response = await api.get<UserData>('/user');
134
- *
135
- * // Process and validate data...
136
- *
137
- * // Return as deeply immutable to prevent accidental mutations
138
- * return castDeepReadonly(response.data);
139
- * }
140
- *
141
- * const userData = await fetchUserData();
142
- * // userData is fully protected from mutations at any depth
143
- * // userData.preferences.emails.push('new@email.com'); // ❌ TypeScript Error
144
- * ```
145
- *
146
- * @example Working with Redux or state management
147
- * ```typescript
148
- * // Redux reducer example
149
- * type State = DeepReadonly<AppState>;
150
- *
151
- * function reducer(state: State, action: Action): State {
152
- * switch (action.type) {
153
- * case 'UPDATE_USER_NAME':
154
- * // Must create new objects, can't mutate
155
- * return castDeepReadonly({
156
- * ...state,
157
- * user: {
158
- * ...state.user,
159
- * profile: {
160
- * ...state.user.profile,
161
- * name: action.payload
162
- * }
163
- * }
164
- * });
165
- * default:
166
- * return state;
167
- * }
168
- * }
169
- * ```
170
- *
171
- * @example Type inference with generics
172
- * ```typescript
173
- * function processData<T>(data: T): DeepReadonly<T> {
174
- * // Perform processing...
175
- * console.log('Processing:', data);
176
- *
177
- * // Return immutable version
178
- * return castDeepReadonly(data);
179
- * }
180
- *
181
- * const result = processData({ nested: { value: [1, 2, 3] } });
182
- * // Type of result is DeepReadonly<{ nested: { value: number[] } }>
183
- * ```
184
- *
27
+ * @returns The same value with readonly modifiers recursively added to all
28
+ * properties
185
29
  * @see castReadonly - For shallow readonly casting
186
30
  * @see castDeepMutable - For the opposite operation (use with extreme caution)
187
31
  */
188
32
  const castDeepReadonly = (mutable) =>
189
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
33
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
190
34
  mutable;
191
35
 
192
36
  export { castDeepReadonly, castReadonly };
@@ -1 +1 @@
1
- {"version":3,"file":"cast-readonly.mjs","sources":["../../src/others/cast-readonly.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEG;AACI,MAAM,YAAY,GAAG,CAAK,OAAU,KACzC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHG;AACI,MAAM,gBAAgB,GAAG,CAAK,OAAU;AAC7C;AACA;;;;"}
1
+ {"version":3,"file":"cast-readonly.mjs","sources":["../../src/others/cast-readonly.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;AAaG;AACI,MAAM,YAAY,GAAG,CAAK,OAAU,KACzC;AAEF;;;;;;;;;;;;;;;AAeG;AACI,MAAM,gBAAgB,GAAG,CAAK,OAAU;AAC7C;AACA;;;;"}
@@ -1,98 +1,21 @@
1
1
  /**
2
2
  * Implements the logical implication (if-then) operator.
3
3
  *
4
- * Returns `true` if the antecedent is `false` or the consequent is `true`.
5
- * In logical terms: `antecedent → consequent` is equivalent to `¬antecedent ∨ consequent`.
4
+ * Returns `true` if the antecedent is `false` or the consequent is `true`. In
5
+ * logical terms: `antecedent → consequent` is equivalent to `¬antecedent ∨
6
+ * consequent`.
6
7
  *
7
8
  * **Truth table:**
9
+ *
8
10
  * - `true → true` = `true` (valid implication)
9
11
  * - `true → false` = `false` (invalid implication)
10
12
  * - `false → true` = `true` (vacuously true)
11
13
  * - `false → false` = `true` (vacuously true)
12
14
  *
13
15
  * @param antecedent - The condition (if part)
14
- * @param consequent - The result that should hold if the condition is true (then part)
16
+ * @param consequent - The result that should hold if the condition is true
17
+ * (then part)
15
18
  * @returns `true` if the implication holds, `false` otherwise
16
- *
17
- * @example Basic truth table demonstration
18
- * ```typescript
19
- * ifThen(true, true); // true (if true then true = true)
20
- * ifThen(true, false); // false (if true then false = false)
21
- * ifThen(false, true); // true (if false then true = true - vacuously true)
22
- * ifThen(false, false); // true (if false then false = true - vacuously true)
23
- * ```
24
- *
25
- * @example Validation logic - "if required then must have value"
26
- * ```typescript
27
- * function validateField(value: string, isRequired: boolean): boolean {
28
- * const hasValue = value.trim().length > 0;
29
- * return ifThen(isRequired, hasValue);
30
- * }
31
- *
32
- * validateField('hello', true); // true (required and has value)
33
- * validateField('', true); // false (required but no value)
34
- * validateField('', false); // true (not required, so valid)
35
- * validateField('hello', false); // true (not required, but has value is fine)
36
- * ```
37
- *
38
- * @example Access control - "if admin then has all permissions"
39
- * ```typescript
40
- * function checkPermission(user: User, permission: string): boolean {
41
- * const isAdmin = user.role === 'admin';
42
- * const hasPermission = user.permissions.includes(permission);
43
- *
44
- * // Admin must have all permissions
45
- * return ifThen(isAdmin, hasPermission);
46
- * }
47
- *
48
- * const adminUser = { role: 'admin', permissions: ['read', 'write'] };
49
- * checkPermission(adminUser, 'delete'); // false (admin without delete permission = invalid)
50
- *
51
- * const regularUser = { role: 'user', permissions: ['read'] };
52
- * checkPermission(regularUser, 'delete'); // true (non-admin without permission is valid)
53
- * ```
54
- *
55
- * @example Contract validation - "if premium then features enabled"
56
- * ```typescript
57
- * interface Subscription {
58
- * isPremium: boolean;
59
- * features: {
60
- * advancedAnalytics: boolean;
61
- * unlimitedStorage: boolean;
62
- * prioritySupport: boolean;
63
- * };
64
- * }
65
- *
66
- * function validateSubscription(sub: Subscription): boolean {
67
- * // If premium, then all premium features must be enabled
68
- * return ifThen(sub.isPremium,
69
- * sub.features.advancedAnalytics &&
70
- * sub.features.unlimitedStorage &&
71
- * sub.features.prioritySupport
72
- * );
73
- * }
74
- * ```
75
- *
76
- * @example Chaining multiple implications
77
- * ```typescript
78
- * // "If A then B" AND "If B then C"
79
- * function validateChain(a: boolean, b: boolean, c: boolean): boolean {
80
- * return ifThen(a, b) && ifThen(b, c);
81
- * }
82
- *
83
- * validateChain(true, true, true); // true (valid chain)
84
- * validateChain(true, false, true); // false (breaks at first implication)
85
- * validateChain(false, false, false); // true (vacuously true chain)
86
- * ```
87
- *
88
- * @example Negation patterns
89
- * ```typescript
90
- * // "If not expired then valid" is equivalent to "expired OR valid"
91
- * const isExpired = Date.now() > expiryDate;
92
- * const isValid = checkValidity();
93
- * const result = ifThen(!isExpired, isValid);
94
- * // Same as: isExpired || isValid
95
- * ```
96
19
  */
97
20
  export declare const ifThen: (antecedent: boolean, consequent: boolean) => boolean;
98
21
  //# sourceMappingURL=if-then.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"if-then.d.mts","sourceRoot":"","sources":["../../src/others/if-then.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AACH,eAAO,MAAM,MAAM,GAAI,YAAY,OAAO,EAAE,YAAY,OAAO,KAAG,OACvC,CAAC"}
1
+ {"version":3,"file":"if-then.d.mts","sourceRoot":"","sources":["../../src/others/if-then.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,MAAM,GAAI,YAAY,OAAO,EAAE,YAAY,OAAO,KAAG,OACvC,CAAC"}
@@ -1,98 +1,21 @@
1
1
  /**
2
2
  * Implements the logical implication (if-then) operator.
3
3
  *
4
- * Returns `true` if the antecedent is `false` or the consequent is `true`.
5
- * In logical terms: `antecedent → consequent` is equivalent to `¬antecedent ∨ consequent`.
4
+ * Returns `true` if the antecedent is `false` or the consequent is `true`. In
5
+ * logical terms: `antecedent → consequent` is equivalent to `¬antecedent ∨
6
+ * consequent`.
6
7
  *
7
8
  * **Truth table:**
9
+ *
8
10
  * - `true → true` = `true` (valid implication)
9
11
  * - `true → false` = `false` (invalid implication)
10
12
  * - `false → true` = `true` (vacuously true)
11
13
  * - `false → false` = `true` (vacuously true)
12
14
  *
13
15
  * @param antecedent - The condition (if part)
14
- * @param consequent - The result that should hold if the condition is true (then part)
16
+ * @param consequent - The result that should hold if the condition is true
17
+ * (then part)
15
18
  * @returns `true` if the implication holds, `false` otherwise
16
- *
17
- * @example Basic truth table demonstration
18
- * ```typescript
19
- * ifThen(true, true); // true (if true then true = true)
20
- * ifThen(true, false); // false (if true then false = false)
21
- * ifThen(false, true); // true (if false then true = true - vacuously true)
22
- * ifThen(false, false); // true (if false then false = true - vacuously true)
23
- * ```
24
- *
25
- * @example Validation logic - "if required then must have value"
26
- * ```typescript
27
- * function validateField(value: string, isRequired: boolean): boolean {
28
- * const hasValue = value.trim().length > 0;
29
- * return ifThen(isRequired, hasValue);
30
- * }
31
- *
32
- * validateField('hello', true); // true (required and has value)
33
- * validateField('', true); // false (required but no value)
34
- * validateField('', false); // true (not required, so valid)
35
- * validateField('hello', false); // true (not required, but has value is fine)
36
- * ```
37
- *
38
- * @example Access control - "if admin then has all permissions"
39
- * ```typescript
40
- * function checkPermission(user: User, permission: string): boolean {
41
- * const isAdmin = user.role === 'admin';
42
- * const hasPermission = user.permissions.includes(permission);
43
- *
44
- * // Admin must have all permissions
45
- * return ifThen(isAdmin, hasPermission);
46
- * }
47
- *
48
- * const adminUser = { role: 'admin', permissions: ['read', 'write'] };
49
- * checkPermission(adminUser, 'delete'); // false (admin without delete permission = invalid)
50
- *
51
- * const regularUser = { role: 'user', permissions: ['read'] };
52
- * checkPermission(regularUser, 'delete'); // true (non-admin without permission is valid)
53
- * ```
54
- *
55
- * @example Contract validation - "if premium then features enabled"
56
- * ```typescript
57
- * interface Subscription {
58
- * isPremium: boolean;
59
- * features: {
60
- * advancedAnalytics: boolean;
61
- * unlimitedStorage: boolean;
62
- * prioritySupport: boolean;
63
- * };
64
- * }
65
- *
66
- * function validateSubscription(sub: Subscription): boolean {
67
- * // If premium, then all premium features must be enabled
68
- * return ifThen(sub.isPremium,
69
- * sub.features.advancedAnalytics &&
70
- * sub.features.unlimitedStorage &&
71
- * sub.features.prioritySupport
72
- * );
73
- * }
74
- * ```
75
- *
76
- * @example Chaining multiple implications
77
- * ```typescript
78
- * // "If A then B" AND "If B then C"
79
- * function validateChain(a: boolean, b: boolean, c: boolean): boolean {
80
- * return ifThen(a, b) && ifThen(b, c);
81
- * }
82
- *
83
- * validateChain(true, true, true); // true (valid chain)
84
- * validateChain(true, false, true); // false (breaks at first implication)
85
- * validateChain(false, false, false); // true (vacuously true chain)
86
- * ```
87
- *
88
- * @example Negation patterns
89
- * ```typescript
90
- * // "If not expired then valid" is equivalent to "expired OR valid"
91
- * const isExpired = Date.now() > expiryDate;
92
- * const isValid = checkValidity();
93
- * const result = ifThen(!isExpired, isValid);
94
- * // Same as: isExpired || isValid
95
- * ```
96
19
  */
97
20
  const ifThen = (antecedent, consequent) => !antecedent || consequent;
98
21
 
@@ -1 +1 @@
1
- {"version":3,"file":"if-then.mjs","sources":["../../src/others/if-then.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FG;AACI,MAAM,MAAM,GAAG,CAAC,UAAmB,EAAE,UAAmB,KAC7D,CAAC,UAAU,IAAI;;;;"}
1
+ {"version":3,"file":"if-then.mjs","sources":["../../src/others/if-then.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,MAAM,GAAG,CAAC,UAAmB,EAAE,UAAmB,KAC7D,CAAC,UAAU,IAAI;;;;"}