ts-data-forge 3.3.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 (424) hide show
  1. package/README.md +37 -13
  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 +1 -0
  83. package/dist/entry-point.d.mts.map +1 -1
  84. package/dist/entry-point.mjs +2 -1
  85. package/dist/entry-point.mjs.map +1 -1
  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 +12 -126
  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/package.json +47 -39
  300. package/src/array/impl/array-utils-creation.mts +192 -0
  301. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  302. package/src/array/impl/array-utils-element-access.mts +115 -0
  303. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  304. package/src/array/impl/array-utils-iterators.mts +79 -0
  305. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  306. package/src/array/impl/array-utils-modification.mts +434 -0
  307. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  308. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  309. package/src/array/impl/array-utils-reducing-value.mts +551 -0
  310. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
  311. package/src/array/impl/array-utils-search.mts +509 -0
  312. package/src/array/impl/array-utils-search.test.mts +346 -0
  313. package/src/array/impl/array-utils-set-op.mts +166 -0
  314. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  315. package/src/array/impl/array-utils-size.mts +30 -0
  316. package/src/array/impl/array-utils-size.test.mts +9 -0
  317. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  318. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
  319. package/src/array/impl/array-utils-slicing.mts +275 -0
  320. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  321. package/src/array/impl/array-utils-transformation.mts +746 -0
  322. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  323. package/src/array/impl/array-utils-validation.mts +241 -0
  324. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  325. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  326. package/src/array/impl/index.mts +12 -0
  327. package/src/array/index.mts +1 -1
  328. package/src/collections/imap-mapped.mts +99 -265
  329. package/src/collections/imap.mts +477 -174
  330. package/src/collections/imap.test.mts +12 -19
  331. package/src/collections/iset-mapped.mts +892 -358
  332. package/src/collections/iset.mts +429 -213
  333. package/src/collections/queue.mts +174 -200
  334. package/src/collections/stack.mts +172 -245
  335. package/src/collections/stack.test.mts +9 -1
  336. package/src/entry-point.mts +1 -0
  337. package/src/expect-type.mts +43 -172
  338. package/src/functional/match.mts +35 -145
  339. package/src/functional/optional.mts +285 -163
  340. package/src/functional/optional.test.mts +4 -1
  341. package/src/functional/pipe.mts +60 -113
  342. package/src/functional/result.mts +452 -351
  343. package/src/functional/result.test.mts +9 -2
  344. package/src/globals.d.mts +12 -5
  345. package/src/guard/has-key.mts +23 -74
  346. package/src/guard/is-non-empty-string.mts +20 -87
  347. package/src/guard/is-non-null-object.mts +14 -84
  348. package/src/guard/is-non-null-object.test.mts +1 -1
  349. package/src/guard/is-primitive.mts +13 -126
  350. package/src/guard/is-primitive.test.mts +1 -1
  351. package/src/guard/is-record.mts +21 -132
  352. package/src/guard/is-type.mts +201 -238
  353. package/src/guard/is-type.test.mts +7 -7
  354. package/src/guard/key-is-in.mts +22 -139
  355. package/src/index.mts +0 -1
  356. package/src/iterator/range.mts +29 -62
  357. package/src/json/json.mts +202 -134
  358. package/src/json/json.test.mts +1 -3
  359. package/src/number/branded-types/finite-number.mts +27 -159
  360. package/src/number/branded-types/int.mts +122 -120
  361. package/src/number/branded-types/int16.mts +22 -30
  362. package/src/number/branded-types/int16.test.mts +24 -24
  363. package/src/number/branded-types/int32.mts +22 -31
  364. package/src/number/branded-types/int32.test.mts +39 -39
  365. package/src/number/branded-types/non-negative-finite-number.mts +31 -39
  366. package/src/number/branded-types/non-negative-int16.mts +24 -34
  367. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  368. package/src/number/branded-types/non-negative-int32.mts +26 -35
  369. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  370. package/src/number/branded-types/non-zero-finite-number.mts +25 -40
  371. package/src/number/branded-types/non-zero-int.mts +15 -30
  372. package/src/number/branded-types/non-zero-int16.mts +27 -35
  373. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  374. package/src/number/branded-types/non-zero-int32.mts +29 -36
  375. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  376. package/src/number/branded-types/non-zero-safe-int.mts +39 -40
  377. package/src/number/branded-types/non-zero-uint16.mts +24 -35
  378. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  379. package/src/number/branded-types/non-zero-uint32.mts +24 -35
  380. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  381. package/src/number/branded-types/positive-finite-number.mts +29 -43
  382. package/src/number/branded-types/positive-int.mts +134 -124
  383. package/src/number/branded-types/positive-int16.mts +24 -35
  384. package/src/number/branded-types/positive-int16.test.mts +14 -14
  385. package/src/number/branded-types/positive-int32.mts +24 -35
  386. package/src/number/branded-types/positive-int32.test.mts +26 -26
  387. package/src/number/branded-types/positive-safe-int.mts +160 -34
  388. package/src/number/branded-types/positive-uint16.mts +24 -35
  389. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  390. package/src/number/branded-types/positive-uint32.mts +26 -36
  391. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  392. package/src/number/branded-types/safe-int.mts +142 -101
  393. package/src/number/branded-types/safe-uint.mts +25 -34
  394. package/src/number/branded-types/uint.mts +121 -30
  395. package/src/number/branded-types/uint16.mts +26 -34
  396. package/src/number/branded-types/uint16.test.mts +16 -16
  397. package/src/number/branded-types/uint32.mts +26 -68
  398. package/src/number/branded-types/uint32.test.mts +28 -28
  399. package/src/number/enum/int8.mts +39 -170
  400. package/src/number/enum/uint8.mts +46 -155
  401. package/src/number/num.mts +157 -212
  402. package/src/number/num.test.mts +4 -4
  403. package/src/number/refined-number-utils.mts +109 -26
  404. package/src/object/object.mts +130 -212
  405. package/src/object/object.test.mts +29 -0
  406. package/src/others/cast-mutable.mts +13 -89
  407. package/src/others/cast-mutable.test.mts +80 -0
  408. package/src/others/cast-readonly.mts +13 -169
  409. package/src/others/if-then.mts +6 -83
  410. package/src/others/map-nullable.mts +12 -136
  411. package/src/others/map-nullable.test.mts +6 -6
  412. package/src/others/memoize-function.mts +14 -157
  413. package/src/others/tuple.mts +33 -151
  414. package/src/others/unknown-to-string.mts +12 -126
  415. package/src/others/unknown-to-string.test.mts +13 -1
  416. package/src/promise/promise.mts +34 -21
  417. package/src/promise/promise.test.mts +43 -0
  418. package/dist/array/array-utils.d.mts +0 -2956
  419. package/dist/array/array-utils.d.mts.map +0 -1
  420. package/dist/array/array-utils.mjs +0 -1838
  421. package/dist/array/array-utils.mjs.map +0 -1
  422. package/src/array/array-utils-search.test.mts +0 -169
  423. package/src/array/array-utils-slicing.test.mts +0 -274
  424. package/src/array/array-utils.mts +0 -4834
@@ -1,24 +1,29 @@
1
1
  import { Optional } from '../functional/index.mjs';
2
2
  /**
3
- * Interface for a high-performance queue with FIFO (First-In, First-Out) behavior.
3
+ * Interface for a high-performance queue with FIFO (First-In, First-Out)
4
+ * behavior.
4
5
  *
5
- * This interface defines a mutable queue data structure where elements are added to the back
6
- * and removed from the front, maintaining the order in which they were added. The implementation
7
- * uses a circular buffer for optimal performance, providing O(1) operations for both enqueue
8
- * and dequeue operations.
6
+ * This interface defines a mutable queue data structure where elements are
7
+ * added to the back and removed from the front, maintaining the order in which
8
+ * they were added. The implementation uses a circular buffer for optimal
9
+ * performance, providing O(1) operations for both enqueue and dequeue
10
+ * operations.
9
11
  *
10
12
  * **FIFO Behavior:**
13
+ *
11
14
  * - **enqueue**: Adds elements to the back of the queue
12
15
  * - **dequeue**: Removes and returns elements from the front of the queue
13
16
  * - Elements are processed in the exact order they were added
14
17
  *
15
18
  * **Performance Characteristics:**
16
- * - enqueue: O(1) amortized (O(n) when buffer needs resizing)
17
- * - dequeue: O(1) always
18
- * - size/isEmpty: O(1) always
19
+ *
20
+ * - Enqueue: O(1) amortized (O(n) when buffer needs resizing)
21
+ * - Dequeue: O(1) always
22
+ * - Size/isEmpty: O(1) always
19
23
  * - Memory efficient with automatic garbage collection of removed elements
20
24
  *
21
25
  * **Use Cases:**
26
+ *
22
27
  * - Task scheduling and job queues
23
28
  * - Breadth-first search algorithms
24
29
  * - Event processing systems
@@ -26,64 +31,137 @@ import { Optional } from '../functional/index.mjs';
26
31
  * - Buffer management for streaming data
27
32
  *
28
33
  * @template T The type of elements stored in the queue.
29
- *
30
- * @example
31
- * ```typescript
32
- * import { createQueue, Queue } from './queue';
33
- *
34
- * // Example 1: Basic FIFO operations
35
- * const messageQueue: Queue<string> = createQueue<string>();
36
- *
37
- * messageQueue.enqueue("first message"); // Add to back
38
- * messageQueue.enqueue("second message"); // Add to back
39
- * messageQueue.enqueue("third message"); // Add to back
40
- *
41
- * console.log(messageQueue.size); // Output: 3
42
- *
43
- * // Process messages in FIFO order
44
- * console.log(messageQueue.dequeue().unwrap()); // "first message" (first in, first out)
45
- * console.log(messageQueue.dequeue().unwrap()); // "second message"
46
- * console.log(messageQueue.size); // Output: 1
47
- *
48
- * // Example 2: Task processing system
49
- * type Task = { id: number; priority: string; action: () => void };
50
- * const taskQueue: Queue<Task> = createQueue<Task>();
51
- *
52
- * taskQueue.enqueue({ id: 1, priority: "high", action: () => console.log("Task 1") });
53
- * taskQueue.enqueue({ id: 2, priority: "low", action: () => console.log("Task 2") });
54
- *
55
- * // Process tasks in order
56
- * while (!taskQueue.isEmpty) {
57
- * const task = taskQueue.dequeue().unwrap();
58
- * console.log(`Processing task ${task.id} with ${task.priority} priority`);
59
- * task.action();
60
- * }
61
- * ```
62
34
  */
63
35
  export type Queue<T> = Readonly<{
64
- /** Checks if the queue is empty. */
36
+ /**
37
+ * Checks if the queue is empty.
38
+ *
39
+ * @example
40
+ *
41
+ * ```ts
42
+ * const queue = createQueue<number>();
43
+ *
44
+ * assert.ok(queue.isEmpty);
45
+ * assert(queue.size === 0);
46
+ *
47
+ * queue.enqueue(1);
48
+ * queue.enqueue(2);
49
+ *
50
+ * assert.notOk(queue.isEmpty);
51
+ * assert(queue.size === 2);
52
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
53
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
54
+ * assert.deepStrictEqual(queue.dequeue(), Optional.none);
55
+ *
56
+ * const seededQueue = createQueue(['first', 'second']);
57
+ *
58
+ * assert(seededQueue.size === 2);
59
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
60
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
61
+ * ```
62
+ */
65
63
  isEmpty: boolean;
66
- /** The number of elements in the queue. */
64
+ /**
65
+ * The number of elements in the queue.
66
+ *
67
+ * @example
68
+ *
69
+ * ```ts
70
+ * const queue = createQueue<number>();
71
+ *
72
+ * assert.ok(queue.isEmpty);
73
+ * assert(queue.size === 0);
74
+ *
75
+ * queue.enqueue(1);
76
+ * queue.enqueue(2);
77
+ *
78
+ * assert.notOk(queue.isEmpty);
79
+ * assert(queue.size === 2);
80
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
81
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
82
+ * assert.deepStrictEqual(queue.dequeue(), Optional.none);
83
+ *
84
+ * const seededQueue = createQueue(['first', 'second']);
85
+ *
86
+ * assert(seededQueue.size === 2);
87
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
88
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
89
+ * ```
90
+ */
67
91
  size: SizeType.Arr;
68
92
  /**
69
93
  * Removes and returns the element at the front of the queue.
70
- * @returns The element at the front of the queue, or `Optional.none` if the queue is empty.
94
+ *
95
+ * @example
96
+ *
97
+ * ```ts
98
+ * const queue = createQueue<number>();
99
+ *
100
+ * assert.ok(queue.isEmpty);
101
+ * assert(queue.size === 0);
102
+ *
103
+ * queue.enqueue(1);
104
+ * queue.enqueue(2);
105
+ *
106
+ * assert.notOk(queue.isEmpty);
107
+ * assert(queue.size === 2);
108
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
109
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
110
+ * assert.deepStrictEqual(queue.dequeue(), Optional.none);
111
+ *
112
+ * const seededQueue = createQueue(['first', 'second']);
113
+ *
114
+ * assert(seededQueue.size === 2);
115
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
116
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
117
+ * ```
118
+ *
119
+ * @returns The element at the front of the queue, or `Optional.none` if the
120
+ * queue is empty.
71
121
  */
72
122
  dequeue: () => Optional<T>;
73
123
  /**
74
124
  * Adds an element to the back of the queue.
125
+ *
126
+ * @example
127
+ *
128
+ * ```ts
129
+ * const queue = createQueue<number>();
130
+ *
131
+ * assert.ok(queue.isEmpty);
132
+ * assert(queue.size === 0);
133
+ *
134
+ * queue.enqueue(1);
135
+ * queue.enqueue(2);
136
+ *
137
+ * assert.notOk(queue.isEmpty);
138
+ * assert(queue.size === 2);
139
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
140
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
141
+ * assert.deepStrictEqual(queue.dequeue(), Optional.none);
142
+ *
143
+ * const seededQueue = createQueue(['first', 'second']);
144
+ *
145
+ * assert(seededQueue.size === 2);
146
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
147
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
148
+ * ```
149
+ *
75
150
  * @param value The element to add.
76
151
  */
77
152
  enqueue: (value: T) => void;
78
153
  }>;
79
154
  /**
80
- * Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a high-performance circular buffer.
155
+ * Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a
156
+ * high-performance circular buffer.
81
157
  *
82
- * This factory function creates an optimized queue implementation that maintains excellent performance
83
- * characteristics for both enqueue and dequeue operations. The underlying circular buffer automatically
84
- * resizes to accommodate growing workloads while providing predictable O(1) operations.
158
+ * This factory function creates an optimized queue implementation that
159
+ * maintains excellent performance characteristics for both enqueue and dequeue
160
+ * operations. The underlying circular buffer automatically resizes to
161
+ * accommodate growing workloads while providing predictable O(1) operations.
85
162
  *
86
163
  * **Implementation Features:**
164
+ *
87
165
  * - **O(1) enqueue operations** (amortized - occasionally O(n) when resizing)
88
166
  * - **O(1) dequeue operations** (always)
89
167
  * - **Automatic buffer resizing** - starts at 8 elements, doubles when full
@@ -91,100 +169,42 @@ export type Queue<T> = Readonly<{
91
169
  * - **Circular buffer design** - eliminates need for array shifting operations
92
170
  *
93
171
  * **Performance Benefits:**
172
+ *
94
173
  * - No array copying during normal operations
95
174
  * - Minimal memory allocation overhead
96
175
  * - Predictable performance under high load
97
176
  * - Efficient memory usage with automatic cleanup
98
177
  *
99
- * @template T The type of elements stored in the queue.
100
- * @param initialValues Optional array of initial elements to populate the queue.
101
- * Elements will be dequeued in the same order they appear in the array.
102
- * If provided, the initial buffer capacity will be at least twice the array length.
103
- * @returns A new Queue instance optimized for high-performance FIFO operations.
104
- *
105
178
  * @example
106
- * ```typescript
107
- * import { createQueue } from './queue';
108
- *
109
- * // Example 1: Basic FIFO workflow
110
- * const requestQueue = createQueue<string>();
111
- *
112
- * // Add requests to the queue
113
- * requestQueue.enqueue("GET /api/users"); // O(1)
114
- * requestQueue.enqueue("POST /api/orders"); // O(1)
115
- * requestQueue.enqueue("DELETE /api/cache"); // O(1)
116
- *
117
- * // Process requests in order
118
- * while (!requestQueue.isEmpty) {
119
- * const request = requestQueue.dequeue().unwrap(); // O(1)
120
- * console.log(`Processing: ${request}`);
121
- * }
122
- * // Output:
123
- * // Processing: GET /api/users
124
- * // Processing: POST /api/orders
125
- * // Processing: DELETE /api/cache
126
- *
127
- * // Example 2: High-throughput event processing
128
- * type Event = { timestamp: number; type: string; data: any };
129
- * const eventQueue = createQueue<Event>();
130
- *
131
- * // Simulate high-volume event ingestion
132
- * for (const i of range(10000)) {
133
- * eventQueue.enqueue({
134
- * timestamp: Date.now(),
135
- * type: `event-${i % 5}`,
136
- * data: { value: i }
137
- * }); // Each enqueue is O(1) amortized
138
- * }
139
- *
140
- * // Process events efficiently
141
- * let processedCount = 0;
142
- * while (!eventQueue.isEmpty) {
143
- * const event = eventQueue.dequeue().unwrap(); // O(1)
144
- * // Process event...
145
- * processedCount++;
146
- * }
147
- * console.log(`Processed ${processedCount} events`); // 10000
148
- *
149
- * // Example 3: Queue with pre-populated data
150
- * const priorityTasks = createQueue<string>([
151
- * "Initialize system",
152
- * "Load configuration",
153
- * "Start services",
154
- * "Begin processing"
155
- * ]);
156
- *
157
- * console.log(priorityTasks.size); // Output: 4
158
- *
159
- * // Execute tasks in initialization order
160
- * while (!priorityTasks.isEmpty) {
161
- * const task = priorityTasks.dequeue().unwrap();
162
- * console.log(`Executing: ${task}`);
163
- * }
164
- *
165
- * // Example 4: Producer-Consumer pattern
166
- * const workQueue = createQueue<() => Promise<void>>();
167
- *
168
- * // Producer: Add work items
169
- * const addWork = (workFn: () => Promise<void>) => {
170
- * workQueue.enqueue(workFn);
171
- * };
172
- *
173
- * // Consumer: Process work items
174
- * const processWork = async () => {
175
- * while (!workQueue.isEmpty) {
176
- * const workItem = workQueue.dequeue().unwrap();
177
- * await workItem();
178
- * }
179
- * };
180
- *
181
- * // Add some work
182
- * addWork(async () => console.log("Work item 1"));
183
- * addWork(async () => console.log("Work item 2"));
184
- *
185
- * // Process the work
186
- * await processWork();
179
+ *
180
+ * ```ts
181
+ * const queue = createQueue<number>();
182
+ *
183
+ * assert.ok(queue.isEmpty);
184
+ * assert(queue.size === 0);
185
+ *
186
+ * queue.enqueue(1);
187
+ * queue.enqueue(2);
188
+ *
189
+ * assert.notOk(queue.isEmpty);
190
+ * assert(queue.size === 2);
191
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
192
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
193
+ * assert.deepStrictEqual(queue.dequeue(), Optional.none);
194
+ *
195
+ * const seededQueue = createQueue(['first', 'second']);
196
+ *
197
+ * assert(seededQueue.size === 2);
198
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
199
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
187
200
  * ```
201
+ *
202
+ * @template T The type of elements stored in the queue.
203
+ * @param initialValues Optional array of initial elements to populate the
204
+ * queue. Elements will be dequeued in the same order they appear in the
205
+ * array. If provided, the initial buffer capacity will be at least twice the
206
+ * array length.
207
+ * @returns A new Queue instance optimized for high-performance FIFO operations.
188
208
  */
189
209
  export declare const createQueue: <T>(initialValues?: readonly T[]) => Queue<T>;
190
210
  //# sourceMappingURL=queue.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.mts","sourceRoot":"","sources":["../../src/collections/queue.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC9B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IAEjB,2CAA2C;IAC3C,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;IAEnB;;;OAGG;IACH,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3B;;;OAGG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC7B,CAAC,CAAC;AAqMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAG,gBAAgB,SAAS,CAAC,EAAE,KAAG,KAAK,CAAC,CAAC,CACpC,CAAC"}
1
+ {"version":3,"file":"queue.d.mts","sourceRoot":"","sources":["../../src/collections/queue.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC7B,CAAC,CAAC;AAuJH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAG,gBAAgB,SAAS,CAAC,EAAE,KAAG,KAAK,CAAC,CAAC,CACpC,CAAC"}
@@ -33,12 +33,14 @@ import '../number/num.mjs';
33
33
  import '../number/refined-number-utils.mjs';
34
34
 
35
35
  /**
36
- * Class implementation for a queue with FIFO (First-In, First-Out) behavior using a circular buffer.
37
- * This implementation provides O(1) enqueue and dequeue operations by using a fixed-size buffer
38
- * with head and tail pointers that wrap around when they reach the buffer boundary.
36
+ * Class implementation for a queue with FIFO (First-In, First-Out) behavior
37
+ * using a circular buffer. This implementation provides O(1) enqueue and
38
+ * dequeue operations by using a fixed-size buffer with head and tail pointers
39
+ * that wrap around when they reach the buffer boundary.
39
40
  *
40
- * The circular buffer automatically resizes when it becomes full, ensuring that the queue
41
- * can grow to accommodate any number of elements while maintaining efficient operations.
41
+ * The circular buffer automatically resizes when it becomes full, ensuring that
42
+ * the queue can grow to accommodate any number of elements while maintaining
43
+ * efficient operations.
42
44
  *
43
45
  * @template T The type of elements in the queue.
44
46
  * @implements Queue
@@ -58,6 +60,7 @@ class QueueClass {
58
60
  static #INITIAL_CAPACITY = 8;
59
61
  /**
60
62
  * Constructs a new QueueClass instance.
63
+ *
61
64
  * @param initialValues Optional initial values to populate the queue.
62
65
  */
63
66
  constructor(initialValues = []) {
@@ -83,40 +86,16 @@ class QueueClass {
83
86
  /**
84
87
  * Removes and returns the element at the front of the queue (FIFO).
85
88
  *
86
- * This operation removes the element that was added earliest (first-in) and returns it.
87
- * If the queue is empty, returns `Optional.none`. The operation is guaranteed to be O(1)
88
- * and does not require any array shifting or copying.
89
- *
90
- * **Time Complexity:** O(1) - constant time operation
91
- * **Space Complexity:** O(1) - no additional memory allocation
92
- *
93
- * @returns An Optional containing the removed element, or `Optional.none` if the queue is empty.
94
- *
95
- * @example
96
- * ```typescript
97
- * const queue = createQueue<string>();
89
+ * This operation removes the element that was added earliest (first-in) and
90
+ * returns it. If the queue is empty, returns `Optional.none`. The operation
91
+ * is guaranteed to be O(1) and does not require any array shifting or
92
+ * copying.
98
93
  *
99
- * // Add some elements
100
- * queue.enqueue("first");
101
- * queue.enqueue("second");
102
- * queue.enqueue("third");
94
+ * **Time Complexity:** O(1) - constant time operation **Space Complexity:**
95
+ * O(1) - no additional memory allocation
103
96
  *
104
- * // Remove elements in FIFO order
105
- * const first = queue.dequeue();
106
- * if (first.isSome) {
107
- * console.log(first.value); // "first"
108
- * }
109
- *
110
- * const second = queue.dequeue().unwrap(); // "second"
111
- * console.log(queue.size); // 1
112
- *
113
- * // Safe handling of empty queue
114
- * const emptyQueue = createQueue<number>();
115
- * const result = emptyQueue.dequeue();
116
- * if (result.isNone) {
117
- * console.log("Queue is empty");
118
- * }
119
- * ```
97
+ * @returns An Optional containing the removed element, or `Optional.none` if
98
+ * the queue is empty.
120
99
  */
121
100
  dequeue() {
122
101
  if (this.isEmpty) {
@@ -132,44 +111,19 @@ class QueueClass {
132
111
  /**
133
112
  * Adds an element to the back of the queue (FIFO).
134
113
  *
135
- * This operation adds the element to the end of the queue, where it will be the last
136
- * to be dequeued (first-in, first-out ordering). The operation is amortized O(1),
137
- * meaning it's O(1) for most operations with occasional O(n) when the buffer needs resizing.
114
+ * This operation adds the element to the end of the queue, where it will be
115
+ * the last to be dequeued (first-in, first-out ordering). The operation is
116
+ * amortized O(1), meaning it's O(1) for most operations with occasional O(n)
117
+ * when the buffer needs resizing.
138
118
  *
139
- * **Time Complexity:** O(1) amortized - O(n) only when buffer resize is needed
140
- * **Space Complexity:** O(1) - constant additional memory per element
119
+ * **Time Complexity:** O(1) amortized - O(n) only when buffer resize is
120
+ * needed **Space Complexity:** O(1) - constant additional memory per element
141
121
  *
142
- * **Buffer Resizing:** When the internal buffer becomes full, it automatically doubles
143
- * in size and reorganizes elements to maintain the circular buffer structure.
122
+ * **Buffer Resizing:** When the internal buffer becomes full, it
123
+ * automatically doubles in size and reorganizes elements to maintain the
124
+ * circular buffer structure.
144
125
  *
145
126
  * @param value The element to add to the back of the queue.
146
- *
147
- * @example
148
- * ```typescript
149
- * const taskQueue = createQueue<string>();
150
- *
151
- * // Add tasks in order of arrival
152
- * taskQueue.enqueue("Process order #1001"); // O(1)
153
- * taskQueue.enqueue("Send notification"); // O(1)
154
- * taskQueue.enqueue("Update inventory"); // O(1)
155
- *
156
- * console.log(taskQueue.size); // 3
157
- *
158
- * // Tasks will be processed in the order they were added
159
- * while (!taskQueue.isEmpty) {
160
- * const task = taskQueue.dequeue().unwrap();
161
- * console.log(`Executing: ${task}`);
162
- * }
163
- *
164
- * // High-volume enqueueing (demonstrates amortized O(1) performance)
165
- * const dataQueue = createQueue<number>();
166
- *
167
- * for (const i of range(1000000)) {
168
- * dataQueue.enqueue(i); // Each operation is O(1) amortized
169
- * }
170
- *
171
- * console.log(dataQueue.size); // 1000000
172
- * ```
173
127
  */
174
128
  enqueue(value) {
175
129
  // Resize if buffer is full
@@ -200,13 +154,16 @@ class QueueClass {
200
154
  }
201
155
  }
202
156
  /**
203
- * Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a high-performance circular buffer.
157
+ * Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a
158
+ * high-performance circular buffer.
204
159
  *
205
- * This factory function creates an optimized queue implementation that maintains excellent performance
206
- * characteristics for both enqueue and dequeue operations. The underlying circular buffer automatically
207
- * resizes to accommodate growing workloads while providing predictable O(1) operations.
160
+ * This factory function creates an optimized queue implementation that
161
+ * maintains excellent performance characteristics for both enqueue and dequeue
162
+ * operations. The underlying circular buffer automatically resizes to
163
+ * accommodate growing workloads while providing predictable O(1) operations.
208
164
  *
209
165
  * **Implementation Features:**
166
+ *
210
167
  * - **O(1) enqueue operations** (amortized - occasionally O(n) when resizing)
211
168
  * - **O(1) dequeue operations** (always)
212
169
  * - **Automatic buffer resizing** - starts at 8 elements, doubles when full
@@ -214,100 +171,42 @@ class QueueClass {
214
171
  * - **Circular buffer design** - eliminates need for array shifting operations
215
172
  *
216
173
  * **Performance Benefits:**
174
+ *
217
175
  * - No array copying during normal operations
218
176
  * - Minimal memory allocation overhead
219
177
  * - Predictable performance under high load
220
178
  * - Efficient memory usage with automatic cleanup
221
179
  *
222
- * @template T The type of elements stored in the queue.
223
- * @param initialValues Optional array of initial elements to populate the queue.
224
- * Elements will be dequeued in the same order they appear in the array.
225
- * If provided, the initial buffer capacity will be at least twice the array length.
226
- * @returns A new Queue instance optimized for high-performance FIFO operations.
227
- *
228
180
  * @example
229
- * ```typescript
230
- * import { createQueue } from './queue';
231
- *
232
- * // Example 1: Basic FIFO workflow
233
- * const requestQueue = createQueue<string>();
234
- *
235
- * // Add requests to the queue
236
- * requestQueue.enqueue("GET /api/users"); // O(1)
237
- * requestQueue.enqueue("POST /api/orders"); // O(1)
238
- * requestQueue.enqueue("DELETE /api/cache"); // O(1)
239
- *
240
- * // Process requests in order
241
- * while (!requestQueue.isEmpty) {
242
- * const request = requestQueue.dequeue().unwrap(); // O(1)
243
- * console.log(`Processing: ${request}`);
244
- * }
245
- * // Output:
246
- * // Processing: GET /api/users
247
- * // Processing: POST /api/orders
248
- * // Processing: DELETE /api/cache
249
- *
250
- * // Example 2: High-throughput event processing
251
- * type Event = { timestamp: number; type: string; data: any };
252
- * const eventQueue = createQueue<Event>();
253
181
  *
254
- * // Simulate high-volume event ingestion
255
- * for (const i of range(10000)) {
256
- * eventQueue.enqueue({
257
- * timestamp: Date.now(),
258
- * type: `event-${i % 5}`,
259
- * data: { value: i }
260
- * }); // Each enqueue is O(1) amortized
261
- * }
182
+ * ```ts
183
+ * const queue = createQueue<number>();
262
184
  *
263
- * // Process events efficiently
264
- * let processedCount = 0;
265
- * while (!eventQueue.isEmpty) {
266
- * const event = eventQueue.dequeue().unwrap(); // O(1)
267
- * // Process event...
268
- * processedCount++;
269
- * }
270
- * console.log(`Processed ${processedCount} events`); // 10000
185
+ * assert.ok(queue.isEmpty);
186
+ * assert(queue.size === 0);
271
187
  *
272
- * // Example 3: Queue with pre-populated data
273
- * const priorityTasks = createQueue<string>([
274
- * "Initialize system",
275
- * "Load configuration",
276
- * "Start services",
277
- * "Begin processing"
278
- * ]);
188
+ * queue.enqueue(1);
189
+ * queue.enqueue(2);
279
190
  *
280
- * console.log(priorityTasks.size); // Output: 4
191
+ * assert.notOk(queue.isEmpty);
192
+ * assert(queue.size === 2);
193
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
194
+ * assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
195
+ * assert.deepStrictEqual(queue.dequeue(), Optional.none);
281
196
  *
282
- * // Execute tasks in initialization order
283
- * while (!priorityTasks.isEmpty) {
284
- * const task = priorityTasks.dequeue().unwrap();
285
- * console.log(`Executing: ${task}`);
286
- * }
197
+ * const seededQueue = createQueue(['first', 'second']);
287
198
  *
288
- * // Example 4: Producer-Consumer pattern
289
- * const workQueue = createQueue<() => Promise<void>>();
290
- *
291
- * // Producer: Add work items
292
- * const addWork = (workFn: () => Promise<void>) => {
293
- * workQueue.enqueue(workFn);
294
- * };
295
- *
296
- * // Consumer: Process work items
297
- * const processWork = async () => {
298
- * while (!workQueue.isEmpty) {
299
- * const workItem = workQueue.dequeue().unwrap();
300
- * await workItem();
301
- * }
302
- * };
303
- *
304
- * // Add some work
305
- * addWork(async () => console.log("Work item 1"));
306
- * addWork(async () => console.log("Work item 2"));
307
- *
308
- * // Process the work
309
- * await processWork();
199
+ * assert(seededQueue.size === 2);
200
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
201
+ * assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
310
202
  * ```
203
+ *
204
+ * @template T The type of elements stored in the queue.
205
+ * @param initialValues Optional array of initial elements to populate the
206
+ * queue. Elements will be dequeued in the same order they appear in the
207
+ * array. If provided, the initial buffer capacity will be at least twice the
208
+ * array length.
209
+ * @returns A new Queue instance optimized for high-performance FIFO operations.
311
210
  */
312
211
  const createQueue = (initialValues) => new QueueClass(initialValues);
313
212
 
@@ -1 +1 @@
1
- {"version":3,"file":"queue.mjs","sources":["../../src/collections/queue.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.mjs","sources":["../../src/collections/queue.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}