@rzl-zone/utils-js 3.12.1-beta.0 → 3.12.1-beta.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 (239) hide show
  1. package/README.md +7 -7
  2. package/dist/.references/index.d.cts +1 -1
  3. package/dist/.references/index.d.ts +1 -1
  4. package/dist/{assertIsArray-BChqwPiP.cjs → assertIsArray-DJXkjHZs.cjs} +3 -3
  5. package/dist/{assertIsArray-BChqwPiP.cjs.map → assertIsArray-DJXkjHZs.cjs.map} +1 -1
  6. package/dist/{assertIsArray-BfAbIUfa.js → assertIsArray-bTA3XLjq.js} +3 -3
  7. package/dist/{assertIsArray-BfAbIUfa.js.map → assertIsArray-bTA3XLjq.js.map} +1 -1
  8. package/dist/{assertIsBoolean-DozdtbNi.cjs → assertIsBoolean-C8WEXVr2.cjs} +8 -8
  9. package/dist/assertIsBoolean-C8WEXVr2.cjs.map +1 -0
  10. package/dist/{assertIsBoolean-BlBct0Fc.js → assertIsBoolean-DR1SaXPD.js} +8 -8
  11. package/dist/assertIsBoolean-DR1SaXPD.js.map +1 -0
  12. package/dist/{assertIsString-Bvk7bUL7.cjs → assertIsString-BiHQSrB2.cjs} +3 -3
  13. package/dist/{assertIsString-Bvk7bUL7.cjs.map → assertIsString-BiHQSrB2.cjs.map} +1 -1
  14. package/dist/{assertIsString-DqV9NwbI.js → assertIsString-CEB07_83.js} +3 -3
  15. package/dist/{assertIsString-DqV9NwbI.js.map → assertIsString-CEB07_83.js.map} +1 -1
  16. package/dist/assertions/index.cjs +5 -5
  17. package/dist/assertions/index.d.cts +2 -2
  18. package/dist/assertions/index.d.ts +2 -2
  19. package/dist/assertions/index.js +5 -5
  20. package/dist/conversions/index.cjs +6 -6
  21. package/dist/conversions/index.d.cts +2 -2
  22. package/dist/conversions/index.d.ts +2 -2
  23. package/dist/conversions/index.js +6 -6
  24. package/dist/{conversions-EMJa3g-D.js → conversions-BNIh_tCH.js} +16 -18
  25. package/dist/conversions-BNIh_tCH.js.map +1 -0
  26. package/dist/{conversions-CBs8-REq.cjs → conversions-D_Kh0a_C.cjs} +16 -18
  27. package/dist/conversions-D_Kh0a_C.cjs.map +1 -0
  28. package/dist/events/index.cjs +4 -4
  29. package/dist/events/index.cjs.map +1 -1
  30. package/dist/events/index.d.cts +153 -151
  31. package/dist/events/index.d.ts +153 -151
  32. package/dist/events/index.js +4 -4
  33. package/dist/events/index.js.map +1 -1
  34. package/dist/{formatEnvPort-hHNvOim-.cjs → formatEnvPort-B3OLxQk9.cjs} +9 -9
  35. package/dist/formatEnvPort-B3OLxQk9.cjs.map +1 -0
  36. package/dist/{formatEnvPort-DpIXzPAZ.js → formatEnvPort-ByFVLjSV.js} +9 -9
  37. package/dist/formatEnvPort-ByFVLjSV.js.map +1 -0
  38. package/dist/formatters/index.cjs +2 -2
  39. package/dist/formatters/index.d.cts +2 -2
  40. package/dist/formatters/index.d.ts +2 -2
  41. package/dist/formatters/index.js +2 -2
  42. package/dist/{formatters-QcZO_Cpx.js → formatters--1m_vpE8.js} +17 -15
  43. package/dist/formatters--1m_vpE8.js.map +1 -0
  44. package/dist/{formatters-lAYgA11L.cjs → formatters-Cbij0XLU.cjs} +17 -15
  45. package/dist/formatters-Cbij0XLU.cjs.map +1 -0
  46. package/dist/generators/index.cjs +12 -8
  47. package/dist/generators/index.cjs.map +1 -1
  48. package/dist/generators/index.d.cts +2 -2
  49. package/dist/generators/index.d.ts +2 -2
  50. package/dist/generators/index.js +12 -8
  51. package/dist/generators/index.js.map +1 -1
  52. package/dist/index-59zbLcPr.d.ts +340 -0
  53. package/dist/index-B6tawc8L.d.cts +1716 -0
  54. package/dist/index-C267akkJ.d.ts +2158 -0
  55. package/dist/index-CeBC2Vvl.d.cts +2361 -0
  56. package/dist/index-CgRDTI6f.d.ts +822 -0
  57. package/dist/index-CoiUBVmr.d.ts +720 -0
  58. package/dist/index-D4fcasfZ.d.cts +720 -0
  59. package/dist/index-DDrSQKIc.d.ts +1716 -0
  60. package/dist/index-DsGxO31H.d.cts +765 -0
  61. package/dist/index-Hg1qJkjl.d.ts +765 -0
  62. package/dist/index-Qm3iFwd0.d.cts +2158 -0
  63. package/dist/index-UPp94Agr.d.ts +2361 -0
  64. package/dist/index-gBA_8SuF.d.cts +340 -0
  65. package/dist/index-jyDqzicx.d.cts +822 -0
  66. package/dist/{isBigInt-B1cijjqm.cjs → isBigInt-C4krUeAw.cjs} +2 -2
  67. package/dist/{isBigInt-B1cijjqm.cjs.map → isBigInt-C4krUeAw.cjs.map} +1 -1
  68. package/dist/{isBigInt-C0bN0Rhu.js → isBigInt-DKe0M6hp.js} +2 -2
  69. package/dist/{isBigInt-C0bN0Rhu.js.map → isBigInt-DKe0M6hp.js.map} +1 -1
  70. package/dist/{isEmptyObject-DeLVIJpl.js → isEmptyObject-DCipFwxJ.js} +3 -3
  71. package/dist/{isEmptyObject-DeLVIJpl.js.map → isEmptyObject-DCipFwxJ.js.map} +1 -1
  72. package/dist/{isEmptyObject-DI42NEo0.cjs → isEmptyObject-ZkSwRC_D.cjs} +3 -3
  73. package/dist/{isEmptyObject-DI42NEo0.cjs.map → isEmptyObject-ZkSwRC_D.cjs.map} +1 -1
  74. package/dist/{isEmptyString-BTUWYTbw.js → isEmptyString-BXzKAC2j.js} +3 -3
  75. package/dist/{isEmptyString-BTUWYTbw.js.map → isEmptyString-BXzKAC2j.js.map} +1 -1
  76. package/dist/{isEmptyString-CCK3bP74.cjs → isEmptyString-UiiUsSQj.cjs} +3 -3
  77. package/dist/{isEmptyString-CCK3bP74.cjs.map → isEmptyString-UiiUsSQj.cjs.map} +1 -1
  78. package/dist/{isEmptyValue-DMSMFTU8.cjs → isEmptyValue-BQzcjVaL.cjs} +5 -5
  79. package/dist/{isEmptyValue-DMSMFTU8.cjs.map → isEmptyValue-BQzcjVaL.cjs.map} +1 -1
  80. package/dist/{isEmptyValue-fjnfQnt5.js → isEmptyValue-jqOr7OHD.js} +5 -5
  81. package/dist/{isEmptyValue-fjnfQnt5.js.map → isEmptyValue-jqOr7OHD.js.map} +1 -1
  82. package/dist/{isEqual-DhyP8fB_.js → isEqual-BX49cF9m.js} +4 -4
  83. package/dist/{isEqual-DhyP8fB_.js.map → isEqual-BX49cF9m.js.map} +1 -1
  84. package/dist/{isEqual-B1fRgEuU.cjs → isEqual-BvumA3RA.cjs} +4 -4
  85. package/dist/{isEqual-B1fRgEuU.cjs.map → isEqual-BvumA3RA.cjs.map} +1 -1
  86. package/dist/{isFinite-BYMOo0os.js → isFinite-BCnaDpod.js} +3 -3
  87. package/dist/{isFinite-BYMOo0os.js.map → isFinite-BCnaDpod.js.map} +1 -1
  88. package/dist/{isFinite-sFkps2TY.cjs → isFinite-D24ZaE6c.cjs} +3 -3
  89. package/dist/{isFinite-sFkps2TY.cjs.map → isFinite-D24ZaE6c.cjs.map} +1 -1
  90. package/dist/{isInteger-FTCthMre.cjs → isInteger-Caeuz0rB.cjs} +2 -2
  91. package/dist/{isInteger-FTCthMre.cjs.map → isInteger-Caeuz0rB.cjs.map} +1 -1
  92. package/dist/{isInteger-DS9V7l_f.js → isInteger-naMbJsxJ.js} +2 -2
  93. package/dist/{isInteger-DS9V7l_f.js.map → isInteger-naMbJsxJ.js.map} +1 -1
  94. package/dist/isPlainObject-BF-2-phb.d.cts +339 -0
  95. package/dist/isPlainObject-DxNDL8XU.d.ts +339 -0
  96. package/dist/{isServer-q-QLFCqE.cjs → isServer-BJHVnixd.cjs} +2 -2
  97. package/dist/{isServer-q-QLFCqE.cjs.map → isServer-BJHVnixd.cjs.map} +1 -1
  98. package/dist/{isServer-D1TXfOs3.js → isServer-Da3o3XSs.js} +2 -2
  99. package/dist/{isServer-D1TXfOs3.js.map → isServer-Da3o3XSs.js.map} +1 -1
  100. package/dist/{isTypedArray-47R0wdrc.js → isTypedArray-DuNA8tK6.js} +3 -3
  101. package/dist/{isTypedArray-47R0wdrc.js.map → isTypedArray-DuNA8tK6.js.map} +1 -1
  102. package/dist/{isTypedArray-DiCoqffZ.cjs → isTypedArray-TJptiw2b.cjs} +3 -3
  103. package/dist/{isTypedArray-DiCoqffZ.cjs.map → isTypedArray-TJptiw2b.cjs.map} +1 -1
  104. package/dist/{isURL-CQiowFq2.js → isURL-C-kSk6KJ.js} +2 -2
  105. package/dist/{isURL-CQiowFq2.js.map → isURL-C-kSk6KJ.js.map} +1 -1
  106. package/dist/{isURL-WZypXsax.cjs → isURL-DeUPO_oR.cjs} +2 -2
  107. package/dist/{isURL-WZypXsax.cjs.map → isURL-DeUPO_oR.cjs.map} +1 -1
  108. package/dist/{isValidDomain-BSXshgkC.cjs → isValidDomain-BB9IGhJs.cjs} +65 -8
  109. package/dist/isValidDomain-BB9IGhJs.cjs.map +1 -0
  110. package/dist/{isValidDomain-DwA2EN79.js → isValidDomain-DoE98yhJ.js} +54 -9
  111. package/dist/isValidDomain-DoE98yhJ.js.map +1 -0
  112. package/dist/next/index.cjs +7 -7
  113. package/dist/next/index.cjs.map +1 -1
  114. package/dist/next/index.d.cts +185 -191
  115. package/dist/next/index.d.ts +185 -191
  116. package/dist/next/index.js +7 -7
  117. package/dist/next/index.js.map +1 -1
  118. package/dist/next/server/index.cjs +2 -2
  119. package/dist/next/server/index.d.cts +26 -26
  120. package/dist/next/server/index.d.ts +26 -26
  121. package/dist/next/server/index.js +2 -2
  122. package/dist/{noop-B2mTBhW-.cjs → noop-B13_ii35.cjs} +2 -2
  123. package/dist/{noop-B2mTBhW-.cjs.map → noop-B13_ii35.cjs.map} +1 -1
  124. package/dist/{noop-BzktGBVz.js → noop-ubqAIbHD.js} +2 -2
  125. package/dist/{noop-BzktGBVz.js.map → noop-ubqAIbHD.js.map} +1 -1
  126. package/dist/{normalizeSpaces-WS_iERJk.js → normalizeSpaces-Bg2IZW7W.js} +3 -3
  127. package/dist/{normalizeSpaces-WS_iERJk.js.map → normalizeSpaces-Bg2IZW7W.js.map} +1 -1
  128. package/dist/{normalizeSpaces-DQHR3Tlr.cjs → normalizeSpaces-ZXnR4Qzp.cjs} +3 -3
  129. package/dist/{normalizeSpaces-DQHR3Tlr.cjs.map → normalizeSpaces-ZXnR4Qzp.cjs.map} +1 -1
  130. package/dist/{normalizeString-2WLth_Gj.js → normalizeString-BDdkaXui.js} +3 -3
  131. package/dist/{normalizeString-2WLth_Gj.js.map → normalizeString-BDdkaXui.js.map} +1 -1
  132. package/dist/{normalizeString-D8euBcRD.cjs → normalizeString-BE6ELqEb.cjs} +3 -3
  133. package/dist/{normalizeString-D8euBcRD.cjs.map → normalizeString-BE6ELqEb.cjs.map} +1 -1
  134. package/dist/operations/index.cjs +10 -10
  135. package/dist/operations/index.cjs.map +1 -1
  136. package/dist/operations/index.d.cts +120 -120
  137. package/dist/operations/index.d.ts +120 -120
  138. package/dist/operations/index.js +10 -10
  139. package/dist/operations/index.js.map +1 -1
  140. package/dist/parsers/index.cjs +2 -2
  141. package/dist/parsers/index.d.cts +222 -222
  142. package/dist/parsers/index.d.ts +222 -222
  143. package/dist/parsers/index.js +2 -2
  144. package/dist/{parsers-Dpuq-V4u.js → parsers-BSBPgvsq.js} +4 -4
  145. package/dist/{parsers-Dpuq-V4u.js.map → parsers-BSBPgvsq.js.map} +1 -1
  146. package/dist/{parsers-DXtpsDyj.cjs → parsers-OqDeffqc.cjs} +4 -4
  147. package/dist/{parsers-DXtpsDyj.cjs.map → parsers-OqDeffqc.cjs.map} +1 -1
  148. package/dist/{parsing-B43x1sxn.js → parsing-Cao8b358.js} +3 -3
  149. package/dist/{parsing-B43x1sxn.js.map → parsing-Cao8b358.js.map} +1 -1
  150. package/dist/{parsing-lRoxn1Nz.cjs → parsing-DOGSCH6N.cjs} +3 -3
  151. package/dist/{parsing-lRoxn1Nz.cjs.map → parsing-DOGSCH6N.cjs.map} +1 -1
  152. package/dist/predicates/index.cjs +15 -15
  153. package/dist/predicates/index.d.cts +3 -3
  154. package/dist/predicates/index.d.ts +3 -3
  155. package/dist/predicates/index.js +15 -15
  156. package/dist/{predicates-gNepszvo.js → predicates-Bj6meyXV.js} +13 -14
  157. package/dist/{predicates-gNepszvo.js.map → predicates-Bj6meyXV.js.map} +1 -1
  158. package/dist/{predicates-DiaYA7Ps.cjs → predicates-D0ubqgqy.cjs} +13 -14
  159. package/dist/{predicates-DiaYA7Ps.cjs.map → predicates-D0ubqgqy.cjs.map} +1 -1
  160. package/dist/promises/index.cjs +4 -4
  161. package/dist/promises/index.d.cts +101 -101
  162. package/dist/promises/index.d.ts +101 -101
  163. package/dist/promises/index.js +4 -4
  164. package/dist/{punyCode-hmiFzLWT.js → punyCode-8SrbMWfM.js} +6 -6
  165. package/dist/punyCode-8SrbMWfM.js.map +1 -0
  166. package/dist/{punyCode-CTWXVVFo.cjs → punyCode-D-Qu6nj6.cjs} +6 -6
  167. package/dist/punyCode-D-Qu6nj6.cjs.map +1 -0
  168. package/dist/{removeSpaces-BE8lfh-4.js → removeSpaces-Bmc5DX4F.js} +3 -3
  169. package/dist/removeSpaces-Bmc5DX4F.js.map +1 -0
  170. package/dist/{removeSpaces-DRRxNWlb.cjs → removeSpaces-CWIvhZHg.cjs} +3 -3
  171. package/dist/removeSpaces-CWIvhZHg.cjs.map +1 -0
  172. package/dist/rzl-utils.global.js +21 -0
  173. package/dist/{safeJsonParse-CXruaP0p.js → safeJsonParse-BP38mwlj.js} +9 -9
  174. package/dist/safeJsonParse-BP38mwlj.js.map +1 -0
  175. package/dist/{safeJsonParse-BBnQElk8.cjs → safeJsonParse-Sms2CJf4.cjs} +9 -9
  176. package/dist/safeJsonParse-Sms2CJf4.cjs.map +1 -0
  177. package/dist/{safeStableStringify-Cc62pfRp.cjs → safeStableStringify-CJtP89qn.cjs} +4 -4
  178. package/dist/{safeStableStringify-Cc62pfRp.cjs.map → safeStableStringify-CJtP89qn.cjs.map} +1 -1
  179. package/dist/{safeStableStringify-BNh3D0K0.js → safeStableStringify-CXOZ9Ub8.js} +4 -4
  180. package/dist/{safeStableStringify-BNh3D0K0.js.map → safeStableStringify-CXOZ9Ub8.js.map} +1 -1
  181. package/dist/strings/index.cjs +12 -9
  182. package/dist/strings/index.cjs.map +1 -1
  183. package/dist/strings/index.d.cts +2 -2
  184. package/dist/strings/index.d.ts +2 -2
  185. package/dist/strings/index.js +12 -9
  186. package/dist/strings/index.js.map +1 -1
  187. package/dist/tailwind/index.cjs +2 -2
  188. package/dist/tailwind/index.d.cts +2 -2
  189. package/dist/tailwind/index.d.ts +2 -2
  190. package/dist/tailwind/index.js +2 -2
  191. package/dist/{tailwind-IJvOdkZp.js → tailwind-B2ssevxq.js} +5 -5
  192. package/dist/tailwind-B2ssevxq.js.map +1 -0
  193. package/dist/{tailwind-DJ4cmLUw.cjs → tailwind-CHIx9uxu.cjs} +5 -5
  194. package/dist/tailwind-CHIx9uxu.cjs.map +1 -0
  195. package/dist/{toStringArrayUnRecursive-xUaU8Ot9.cjs → toStringArrayUnRecursive-C4zYCja7.cjs} +6 -6
  196. package/dist/{toStringArrayUnRecursive-xUaU8Ot9.cjs.map → toStringArrayUnRecursive-C4zYCja7.cjs.map} +1 -1
  197. package/dist/{toStringArrayUnRecursive-CFs0jTEg.js → toStringArrayUnRecursive-DJGtPsFb.js} +6 -6
  198. package/dist/{toStringArrayUnRecursive-CFs0jTEg.js.map → toStringArrayUnRecursive-DJGtPsFb.js.map} +1 -1
  199. package/dist/urls/index.cjs +15 -14
  200. package/dist/urls/index.cjs.map +1 -1
  201. package/dist/urls/index.d.cts +656 -659
  202. package/dist/urls/index.d.ts +656 -659
  203. package/dist/urls/index.js +15 -14
  204. package/dist/urls/index.js.map +1 -1
  205. package/package.json +2 -2
  206. package/dist/assertIsBoolean-BlBct0Fc.js.map +0 -1
  207. package/dist/assertIsBoolean-DozdtbNi.cjs.map +0 -1
  208. package/dist/conversions-CBs8-REq.cjs.map +0 -1
  209. package/dist/conversions-EMJa3g-D.js.map +0 -1
  210. package/dist/formatEnvPort-DpIXzPAZ.js.map +0 -1
  211. package/dist/formatEnvPort-hHNvOim-.cjs.map +0 -1
  212. package/dist/formatters-QcZO_Cpx.js.map +0 -1
  213. package/dist/formatters-lAYgA11L.cjs.map +0 -1
  214. package/dist/index-26W7ItWx.d.ts +0 -760
  215. package/dist/index-BPPQjAfs.d.cts +0 -2359
  216. package/dist/index-BXjlgBLz.d.cts +0 -2139
  217. package/dist/index-B_Wwo91H.d.ts +0 -2359
  218. package/dist/index-CpufydcI.d.cts +0 -704
  219. package/dist/index-Czc4O526.d.ts +0 -333
  220. package/dist/index-DPs1_p5G.d.cts +0 -760
  221. package/dist/index-DRpOyBSC.d.ts +0 -1703
  222. package/dist/index-DWWvtHUn.d.cts +0 -822
  223. package/dist/index-DnM0LD0n.d.cts +0 -333
  224. package/dist/index-GUZ9fK6T.d.ts +0 -2139
  225. package/dist/index-I4fAzwXV.d.ts +0 -704
  226. package/dist/index-JDrOl_19.d.ts +0 -822
  227. package/dist/index-b66P49Qe.d.cts +0 -1703
  228. package/dist/isPlainObject-DcFGh3_5.d.ts +0 -530
  229. package/dist/isPlainObject-doTI11Ib.d.cts +0 -530
  230. package/dist/isValidDomain-BSXshgkC.cjs.map +0 -1
  231. package/dist/isValidDomain-DwA2EN79.js.map +0 -1
  232. package/dist/punyCode-CTWXVVFo.cjs.map +0 -1
  233. package/dist/punyCode-hmiFzLWT.js.map +0 -1
  234. package/dist/removeSpaces-BE8lfh-4.js.map +0 -1
  235. package/dist/removeSpaces-DRRxNWlb.cjs.map +0 -1
  236. package/dist/safeJsonParse-BBnQElk8.cjs.map +0 -1
  237. package/dist/safeJsonParse-CXruaP0p.js.map +0 -1
  238. package/dist/tailwind-DJ4cmLUw.cjs.map +0 -1
  239. package/dist/tailwind-IJvOdkZp.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
  * ========================================================================
3
3
  * @rzl-zone/utils-js
4
4
  * ------------------------------------------------------------------------
5
- * Version: `3.12.1-beta.0`
5
+ * Version: `3.12.1-beta.1`
6
6
  * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
7
  * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
8
  * ========================================================================
@@ -10,130 +10,130 @@
10
10
 
11
11
  import { NumberRangeUnion } from "@rzl-zone/ts-types-plus";
12
12
  /** ----------------------------------------------------------------------
13
- * * ***Utility: `findDuplicates`.***
14
- * ----------------------------------------------------------------------
15
- * **Finds duplicate values in an array by deep equality comparison.**
16
- * - **Behavior:**
17
- * - Uses ***`isEqual` utility function*** to compare elements
18
- * (handles objects, arrays, dates, NaN, etc.).
19
- * - Returns a new array containing only the *first occurrences* of duplicated values.
20
- * - Does **not mutate** the original array.
21
- * - Throws ***{@link TypeError | `TypeError`}*** if input is not an array.
22
- * @template T Type of elements in the input array.
23
- * @param {T[]} values - The array to check for duplicates.
24
- * @returns {T[]} An array of the duplicate values found in the input,
25
- * preserving order of their first duplicate appearance.
26
- * @throws **{@link TypeError | `TypeError`}** if the provided `values` argument is not an array.
27
- * @example
28
- * findDuplicates([1, 2, 2, 3, 4, 4]);
29
- * // ➔ [2, 4]
30
- * findDuplicates(["apple", "banana", "apple", "orange"]);
31
- * // ➔ ["apple"]
32
- * findDuplicates([{ a: 1 }, { a: 1 }, { a: 2 }]);
33
- * // ➔ [{ a: 1 }]
34
- * findDuplicates([NaN, NaN, 1]);
35
- * // ➔ [NaN]
36
- * findDuplicates([true, false, true]);
37
- * // ➔ [true]
38
- * findDuplicates([1, 2, 3]);
39
- * // ➔ []
40
- */
13
+ * * ***Utility: `findDuplicates`.***
14
+ * ----------------------------------------------------------------------
15
+ * **Finds duplicate values in an array by deep equality comparison.**
16
+ * - **Behavior:**
17
+ * - Uses ***`isEqual` utility function*** to compare elements
18
+ * (handles objects, arrays, dates, NaN, etc.).
19
+ * - Returns a new array containing only the *first occurrences* of duplicated values.
20
+ * - Does **not mutate** the original array.
21
+ * - Throws ***{@link TypeError | `TypeError`}*** if input is not an array.
22
+ * @template T Type of elements in the input array.
23
+ * @param {T[]} values - The array to check for duplicates.
24
+ * @returns {T[]} An array of the duplicate values found in the input,
25
+ * preserving order of their first duplicate appearance.
26
+ * @throws **{@link TypeError | `TypeError`}** if the provided `values` argument is not an array.
27
+ * @example
28
+ * findDuplicates([1, 2, 2, 3, 4, 4]);
29
+ * // ➔ [2, 4]
30
+ * findDuplicates(["apple", "banana", "apple", "orange"]);
31
+ * // ➔ ["apple"]
32
+ * findDuplicates([{ a: 1 }, { a: 1 }, { a: 2 }]);
33
+ * // ➔ [{ a: 1 }]
34
+ * findDuplicates([NaN, NaN, 1]);
35
+ * // ➔ [NaN]
36
+ * findDuplicates([true, false, true]);
37
+ * // ➔ [true]
38
+ * findDuplicates([1, 2, 3]);
39
+ * // ➔ []
40
+ */
41
41
  declare const findDuplicates: <T>(values: T[]) => T[];
42
42
  /** --------------------------------
43
- * * ***Utility: `omitKeys`.***
44
- * --------------------------------
45
- * **This function creates a shallow copy of the given object omitting the
46
- * specified keys.**
47
- * - **Behavior:**
48
- * - It will return a new object without mutating the original.
49
- * - It also validates that ***`keysToOmit`*** does not contain duplicate keys.
50
- * - **ℹ️ Internally:**
51
- * - It uses ***`isEqual`*** to check for duplicates in
52
- * the ***`keysToOmit`*** array.
53
- * @template I The type of the input object.
54
- * @template K The keys to omit from the object.
55
- * @param {I} object - The source object to omit keys from.
56
- * @param {K[]} keysToOmit - An array of keys to exclude from the returned object.
57
- * @returns {Omit<I, K>} A new object without the specified keys.
58
- * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
59
- * @throws **{@link Error | `Error`}** if duplicate keys are found in `keysToOmit`.
60
- * @example
61
- * omitKeys({ a: 1, b: 2, c: 3 }, ["b", "c"]);
62
- * //➔ { a: 1 }
63
- * omitKeys({ name: "John", age: 30 }, ["age"]);
64
- * //➔ { name: "John" }
65
- * omitKeys({ a: 1, b: 2 }, []);
66
- * //➔ { a: 1, b: 2 } (no changes)
67
- */
43
+ * * ***Utility: `omitKeys`.***
44
+ * --------------------------------
45
+ * **This function creates a shallow copy of the given object omitting the
46
+ * specified keys.**
47
+ * - **Behavior:**
48
+ * - It will return a new object without mutating the original.
49
+ * - It also validates that ***`keysToOmit`*** does not contain duplicate keys.
50
+ * - **ℹ️ Internally:**
51
+ * - It uses ***`isEqual`*** to check for duplicates in
52
+ * the ***`keysToOmit`*** array.
53
+ * @template I The type of the input object.
54
+ * @template K The keys to omit from the object.
55
+ * @param {I} object - The source object to omit keys from.
56
+ * @param {K[]} keysToOmit - An array of keys to exclude from the returned object.
57
+ * @returns {Omit<I, K>} A new object without the specified keys.
58
+ * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
59
+ * @throws **{@link Error | `Error`}** if duplicate keys are found in `keysToOmit`.
60
+ * @example
61
+ * omitKeys({ a: 1, b: 2, c: 3 }, ["b", "c"]);
62
+ * //➔ { a: 1 }
63
+ * omitKeys({ name: "John", age: 30 }, ["age"]);
64
+ * //➔ { name: "John" }
65
+ * omitKeys({ a: 1, b: 2 }, []);
66
+ * //➔ { a: 1, b: 2 } (no changes)
67
+ */
68
68
  declare const omitKeys: <I extends Record<string, unknown>, K extends keyof I>(object: I, keysToOmit: K[]) => Omit<I, K>;
69
69
  type IndexArray = NumberRangeUnion<0, 30>;
70
70
  type DotPath<T, Prev extends string = ""> = T extends Array<infer U> ? DotPath<U, `${Prev}${Prev extends "" ? "" : "."}${IndexArray}`> : T extends object ? { [K in keyof T & string]: `${Prev}${Prev extends "" ? "" : "."}${K}` | DotPath<T[K], `${Prev}${Prev extends "" ? "" : "."}${K}`> }[keyof T & string] : never;
71
71
  /** ------------------------------------------------------
72
- * * ***Utility: `omitKeysDeep`.***
73
- * ------------------------------------------------------
74
- * **Recursively omits properties from an object using dot notation paths.**
75
- * - **Behavior:**
76
- * - Removes resulting empty objects (`{}`) and arrays (`[]`), cascading upwards
77
- * to remove empty parents until root if needed.
78
- * - **⚠️ Be careful:**
79
- * - If after omission an object or array becomes empty, it will be removed entirely
80
- * including all the way up to the root if necessary, resulting in `{}`.
81
- * - **ℹ️ Note:**
82
- * - For array indices, TypeScript autocomplete only suggests `0`–`30`
83
- * (to prevent editor lag on large unions).
84
- * However, higher indices are still fully supported at runtime — you can
85
- * manually type `"arr.99.key"` and it will work the same.
86
- * @template I - Type of the input object
87
- * @param {I} object
88
- * The object to process, should be a plain nested object or array structure.
89
- * @param {DotPath<I>[]} keysToOmit
90
- * An array of string paths in dot notation indicating the properties to remove, paths
91
- * can include numeric indices to target array elements, e.g. `"arr.0.x"` to
92
- * remove `x` from the first object inside the `arr` array.
93
- * @returns {Partial<I>}
94
- * A new deeply cloned object with the specified keys omitted, with resulting
95
- * empty objects or arrays fully removed (even if it collapses to `{}`).
96
- * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
97
- * @throws **{@link Error | `Error`}** if `keysToOmit` contains duplicate paths.
98
- * @example
99
- * omitKeysDeep({ arr: [{ a: 1 }] }, ["arr.0.a"]);
100
- * // ➔ {} (array becomes empty and removed)
101
- * omitKeysDeep({ a: { b: { c: 1 }, d: 2 }, e: 3 }, ["a.b.c"]);
102
- * // ➔ { a: { d: 2 }, e: 3 }
103
- * omitKeysDeep({ a: [{ b: 1 }, { c: 2 }] }, ["a.0.b"]);
104
- * // ➔ { a: [{ c: 2 }] }
105
- * omitKeysDeep({ a: [{ b: 1 }] }, ["a.0.b"]);
106
- * // ➔ {} (array becomes empty and removed)
107
- * omitKeysDeep({ complex: [{ deep: [{ x: 1, y: 2 }] }] }, ["complex.0.deep.0.x"]);
108
- * // ➔ { complex: [{ deep: [{ y: 2 }] }] }
109
- * omitKeysDeep({ complex: [{ deep: [{ x: 1 }] }] }, ["complex.0.deep.0.x"]);
110
- * // ➔ {} (deep chain emptied and collapsed)
111
- * omitKeysDeep({ data: [[{ foo: 1, bar: 2 }]] }, ["data.0.0.foo"]);
112
- * // ➔ { data: [[{ bar: 2 }]] }
113
- * omitKeysDeep({ data: [[{ foo: 1 }]] }, ["data.0.0.foo"]);
114
- * // ➔ {} (nested arrays emptied completely)
115
- * omitKeysDeep({ x: [{ y: [{ z: 1 }, { w: 2 }] }] }, ["x.0.y.0.z"]);
116
- * // ➔ { x: [{ y: [{ w: 2 }] }] }
117
- * omitKeysDeep({ x: [{ y: [{ z: 1 }] }] }, ["x.0.y.0.z"]);
118
- * // ➔ {} (entire nested arrays removed)
119
- * omitKeysDeep({ p: { q: { r: 5 } }, s: 6 }, ["p.q.r"]);
120
- * // ➔ { s: 6 } (`p` removed because it becomes empty)
121
- * omitKeysDeep({ arr: [{ a: 1, b: 2 }, { c: 3 }] }, ["arr.0.a"]);
122
- * // ➔ { arr: [{ b: 2 }, { c: 3 }] }
123
- * omitKeysDeep({ root: [{ sub: [{ leaf: 10 }] }] }, ["root.0.sub.0.leaf"]);
124
- * // ➔ {} (deep nested arrays emptied to root)
125
- * omitKeysDeep({ meta: { tags: ["x", "y"], count: 2 } }, ["meta.count"]);
126
- * // ➔ { meta: { tags: ["x", "y"] } }
127
- * omitKeysDeep({ arr: [[{ a: 1 }, { b: 2 }]] }, ["arr.0.0.a"]);
128
- * // ➔ { arr: [[{ b: 2 }]] }
129
- * omitKeysDeep({ arr: [[{ a: 1 }]] }, ["arr.0.0.a"]);
130
- * // ➔ {} (double nested emptied)
131
- * omitKeysDeep({ nested: [{ list: [{ id: 1, val: 2 }] }] }, ["nested.0.list.0.val"]);
132
- * // ➔ { nested: [{ list: [{ id: 1 }] }] }
133
- * omitKeysDeep({ nested: [{ list: [{ id: 1 }] }] }, ["nested.0.list.0.id"]);
134
- * // ➔ {} (full collapse to empty)
135
- * omitKeysDeep({ mixed: { a: [1, 2, 3], b: { c: 4 } } }, ["mixed.b.c"]);
136
- * // ➔ { mixed: { a: [1, 2, 3] } }
137
- */
72
+ * * ***Utility: `omitKeysDeep`.***
73
+ * ------------------------------------------------------
74
+ * **Recursively omits properties from an object using dot notation paths.**
75
+ * - **Behavior:**
76
+ * - Removes resulting empty objects (`{}`) and arrays (`[]`), cascading upwards
77
+ * to remove empty parents until root if needed.
78
+ * - **⚠️ Be careful:**
79
+ * - If after omission an object or array becomes empty, it will be removed entirely
80
+ * including all the way up to the root if necessary, resulting in `{}`.
81
+ * - **ℹ️ Note:**
82
+ * - For array indices, TypeScript autocomplete only suggests `0`–`30`
83
+ * (to prevent editor lag on large unions).
84
+ * However, higher indices are still fully supported at runtime — you can
85
+ * manually type `"arr.99.key"` and it will work the same.
86
+ * @template I - Type of the input object
87
+ * @param {I} object
88
+ * The object to process, should be a plain nested object or array structure.
89
+ * @param {DotPath<I>[]} keysToOmit
90
+ * An array of string paths in dot notation indicating the properties to remove, paths
91
+ * can include numeric indices to target array elements, e.g. `"arr.0.x"` to
92
+ * remove `x` from the first object inside the `arr` array.
93
+ * @returns {Partial<I>}
94
+ * A new deeply cloned object with the specified keys omitted, with resulting
95
+ * empty objects or arrays fully removed (even if it collapses to `{}`).
96
+ * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
97
+ * @throws **{@link Error | `Error`}** if `keysToOmit` contains duplicate paths.
98
+ * @example
99
+ * omitKeysDeep({ arr: [{ a: 1 }] }, ["arr.0.a"]);
100
+ * // ➔ {} (array becomes empty and removed)
101
+ * omitKeysDeep({ a: { b: { c: 1 }, d: 2 }, e: 3 }, ["a.b.c"]);
102
+ * // ➔ { a: { d: 2 }, e: 3 }
103
+ * omitKeysDeep({ a: [{ b: 1 }, { c: 2 }] }, ["a.0.b"]);
104
+ * // ➔ { a: [{ c: 2 }] }
105
+ * omitKeysDeep({ a: [{ b: 1 }] }, ["a.0.b"]);
106
+ * // ➔ {} (array becomes empty and removed)
107
+ * omitKeysDeep({ complex: [{ deep: [{ x: 1, y: 2 }] }] }, ["complex.0.deep.0.x"]);
108
+ * // ➔ { complex: [{ deep: [{ y: 2 }] }] }
109
+ * omitKeysDeep({ complex: [{ deep: [{ x: 1 }] }] }, ["complex.0.deep.0.x"]);
110
+ * // ➔ {} (deep chain emptied and collapsed)
111
+ * omitKeysDeep({ data: [[{ foo: 1, bar: 2 }]] }, ["data.0.0.foo"]);
112
+ * // ➔ { data: [[{ bar: 2 }]] }
113
+ * omitKeysDeep({ data: [[{ foo: 1 }]] }, ["data.0.0.foo"]);
114
+ * // ➔ {} (nested arrays emptied completely)
115
+ * omitKeysDeep({ x: [{ y: [{ z: 1 }, { w: 2 }] }] }, ["x.0.y.0.z"]);
116
+ * // ➔ { x: [{ y: [{ w: 2 }] }] }
117
+ * omitKeysDeep({ x: [{ y: [{ z: 1 }] }] }, ["x.0.y.0.z"]);
118
+ * // ➔ {} (entire nested arrays removed)
119
+ * omitKeysDeep({ p: { q: { r: 5 } }, s: 6 }, ["p.q.r"]);
120
+ * // ➔ { s: 6 } (`p` removed because it becomes empty)
121
+ * omitKeysDeep({ arr: [{ a: 1, b: 2 }, { c: 3 }] }, ["arr.0.a"]);
122
+ * // ➔ { arr: [{ b: 2 }, { c: 3 }] }
123
+ * omitKeysDeep({ root: [{ sub: [{ leaf: 10 }] }] }, ["root.0.sub.0.leaf"]);
124
+ * // ➔ {} (deep nested arrays emptied to root)
125
+ * omitKeysDeep({ meta: { tags: ["x", "y"], count: 2 } }, ["meta.count"]);
126
+ * // ➔ { meta: { tags: ["x", "y"] } }
127
+ * omitKeysDeep({ arr: [[{ a: 1 }, { b: 2 }]] }, ["arr.0.0.a"]);
128
+ * // ➔ { arr: [[{ b: 2 }]] }
129
+ * omitKeysDeep({ arr: [[{ a: 1 }]] }, ["arr.0.0.a"]);
130
+ * // ➔ {} (double nested emptied)
131
+ * omitKeysDeep({ nested: [{ list: [{ id: 1, val: 2 }] }] }, ["nested.0.list.0.val"]);
132
+ * // ➔ { nested: [{ list: [{ id: 1 }] }] }
133
+ * omitKeysDeep({ nested: [{ list: [{ id: 1 }] }] }, ["nested.0.list.0.id"]);
134
+ * // ➔ {} (full collapse to empty)
135
+ * omitKeysDeep({ mixed: { a: [1, 2, 3], b: { c: 4 } } }, ["mixed.b.c"]);
136
+ * // ➔ { mixed: { a: [1, 2, 3] } }
137
+ */
138
138
  declare const omitKeysDeep: <I extends Record<string, unknown>>(object: I, keysToOmit: DotPath<I>[]) => Partial<I>;
139
139
  export { findDuplicates, omitKeys, omitKeysDeep };
@@ -2,7 +2,7 @@
2
2
  * ========================================================================
3
3
  * @rzl-zone/utils-js
4
4
  * ------------------------------------------------------------------------
5
- * Version: `3.12.1-beta.0`
5
+ * Version: `3.12.1-beta.1`
6
6
  * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
7
  * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
8
  * ========================================================================
@@ -10,130 +10,130 @@
10
10
 
11
11
  import { NumberRangeUnion } from "@rzl-zone/ts-types-plus";
12
12
  /** ----------------------------------------------------------------------
13
- * * ***Utility: `findDuplicates`.***
14
- * ----------------------------------------------------------------------
15
- * **Finds duplicate values in an array by deep equality comparison.**
16
- * - **Behavior:**
17
- * - Uses ***`isEqual` utility function*** to compare elements
18
- * (handles objects, arrays, dates, NaN, etc.).
19
- * - Returns a new array containing only the *first occurrences* of duplicated values.
20
- * - Does **not mutate** the original array.
21
- * - Throws ***{@link TypeError | `TypeError`}*** if input is not an array.
22
- * @template T Type of elements in the input array.
23
- * @param {T[]} values - The array to check for duplicates.
24
- * @returns {T[]} An array of the duplicate values found in the input,
25
- * preserving order of their first duplicate appearance.
26
- * @throws **{@link TypeError | `TypeError`}** if the provided `values` argument is not an array.
27
- * @example
28
- * findDuplicates([1, 2, 2, 3, 4, 4]);
29
- * // ➔ [2, 4]
30
- * findDuplicates(["apple", "banana", "apple", "orange"]);
31
- * // ➔ ["apple"]
32
- * findDuplicates([{ a: 1 }, { a: 1 }, { a: 2 }]);
33
- * // ➔ [{ a: 1 }]
34
- * findDuplicates([NaN, NaN, 1]);
35
- * // ➔ [NaN]
36
- * findDuplicates([true, false, true]);
37
- * // ➔ [true]
38
- * findDuplicates([1, 2, 3]);
39
- * // ➔ []
40
- */
13
+ * * ***Utility: `findDuplicates`.***
14
+ * ----------------------------------------------------------------------
15
+ * **Finds duplicate values in an array by deep equality comparison.**
16
+ * - **Behavior:**
17
+ * - Uses ***`isEqual` utility function*** to compare elements
18
+ * (handles objects, arrays, dates, NaN, etc.).
19
+ * - Returns a new array containing only the *first occurrences* of duplicated values.
20
+ * - Does **not mutate** the original array.
21
+ * - Throws ***{@link TypeError | `TypeError`}*** if input is not an array.
22
+ * @template T Type of elements in the input array.
23
+ * @param {T[]} values - The array to check for duplicates.
24
+ * @returns {T[]} An array of the duplicate values found in the input,
25
+ * preserving order of their first duplicate appearance.
26
+ * @throws **{@link TypeError | `TypeError`}** if the provided `values` argument is not an array.
27
+ * @example
28
+ * findDuplicates([1, 2, 2, 3, 4, 4]);
29
+ * // ➔ [2, 4]
30
+ * findDuplicates(["apple", "banana", "apple", "orange"]);
31
+ * // ➔ ["apple"]
32
+ * findDuplicates([{ a: 1 }, { a: 1 }, { a: 2 }]);
33
+ * // ➔ [{ a: 1 }]
34
+ * findDuplicates([NaN, NaN, 1]);
35
+ * // ➔ [NaN]
36
+ * findDuplicates([true, false, true]);
37
+ * // ➔ [true]
38
+ * findDuplicates([1, 2, 3]);
39
+ * // ➔ []
40
+ */
41
41
  declare const findDuplicates: <T>(values: T[]) => T[];
42
42
  /** --------------------------------
43
- * * ***Utility: `omitKeys`.***
44
- * --------------------------------
45
- * **This function creates a shallow copy of the given object omitting the
46
- * specified keys.**
47
- * - **Behavior:**
48
- * - It will return a new object without mutating the original.
49
- * - It also validates that ***`keysToOmit`*** does not contain duplicate keys.
50
- * - **ℹ️ Internally:**
51
- * - It uses ***`isEqual`*** to check for duplicates in
52
- * the ***`keysToOmit`*** array.
53
- * @template I The type of the input object.
54
- * @template K The keys to omit from the object.
55
- * @param {I} object - The source object to omit keys from.
56
- * @param {K[]} keysToOmit - An array of keys to exclude from the returned object.
57
- * @returns {Omit<I, K>} A new object without the specified keys.
58
- * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
59
- * @throws **{@link Error | `Error`}** if duplicate keys are found in `keysToOmit`.
60
- * @example
61
- * omitKeys({ a: 1, b: 2, c: 3 }, ["b", "c"]);
62
- * //➔ { a: 1 }
63
- * omitKeys({ name: "John", age: 30 }, ["age"]);
64
- * //➔ { name: "John" }
65
- * omitKeys({ a: 1, b: 2 }, []);
66
- * //➔ { a: 1, b: 2 } (no changes)
67
- */
43
+ * * ***Utility: `omitKeys`.***
44
+ * --------------------------------
45
+ * **This function creates a shallow copy of the given object omitting the
46
+ * specified keys.**
47
+ * - **Behavior:**
48
+ * - It will return a new object without mutating the original.
49
+ * - It also validates that ***`keysToOmit`*** does not contain duplicate keys.
50
+ * - **ℹ️ Internally:**
51
+ * - It uses ***`isEqual`*** to check for duplicates in
52
+ * the ***`keysToOmit`*** array.
53
+ * @template I The type of the input object.
54
+ * @template K The keys to omit from the object.
55
+ * @param {I} object - The source object to omit keys from.
56
+ * @param {K[]} keysToOmit - An array of keys to exclude from the returned object.
57
+ * @returns {Omit<I, K>} A new object without the specified keys.
58
+ * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
59
+ * @throws **{@link Error | `Error`}** if duplicate keys are found in `keysToOmit`.
60
+ * @example
61
+ * omitKeys({ a: 1, b: 2, c: 3 }, ["b", "c"]);
62
+ * //➔ { a: 1 }
63
+ * omitKeys({ name: "John", age: 30 }, ["age"]);
64
+ * //➔ { name: "John" }
65
+ * omitKeys({ a: 1, b: 2 }, []);
66
+ * //➔ { a: 1, b: 2 } (no changes)
67
+ */
68
68
  declare const omitKeys: <I extends Record<string, unknown>, K extends keyof I>(object: I, keysToOmit: K[]) => Omit<I, K>;
69
69
  type IndexArray = NumberRangeUnion<0, 30>;
70
70
  type DotPath<T, Prev extends string = ""> = T extends Array<infer U> ? DotPath<U, `${Prev}${Prev extends "" ? "" : "."}${IndexArray}`> : T extends object ? { [K in keyof T & string]: `${Prev}${Prev extends "" ? "" : "."}${K}` | DotPath<T[K], `${Prev}${Prev extends "" ? "" : "."}${K}`> }[keyof T & string] : never;
71
71
  /** ------------------------------------------------------
72
- * * ***Utility: `omitKeysDeep`.***
73
- * ------------------------------------------------------
74
- * **Recursively omits properties from an object using dot notation paths.**
75
- * - **Behavior:**
76
- * - Removes resulting empty objects (`{}`) and arrays (`[]`), cascading upwards
77
- * to remove empty parents until root if needed.
78
- * - **⚠️ Be careful:**
79
- * - If after omission an object or array becomes empty, it will be removed entirely
80
- * including all the way up to the root if necessary, resulting in `{}`.
81
- * - **ℹ️ Note:**
82
- * - For array indices, TypeScript autocomplete only suggests `0`–`30`
83
- * (to prevent editor lag on large unions).
84
- * However, higher indices are still fully supported at runtime — you can
85
- * manually type `"arr.99.key"` and it will work the same.
86
- * @template I - Type of the input object
87
- * @param {I} object
88
- * The object to process, should be a plain nested object or array structure.
89
- * @param {DotPath<I>[]} keysToOmit
90
- * An array of string paths in dot notation indicating the properties to remove, paths
91
- * can include numeric indices to target array elements, e.g. `"arr.0.x"` to
92
- * remove `x` from the first object inside the `arr` array.
93
- * @returns {Partial<I>}
94
- * A new deeply cloned object with the specified keys omitted, with resulting
95
- * empty objects or arrays fully removed (even if it collapses to `{}`).
96
- * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
97
- * @throws **{@link Error | `Error`}** if `keysToOmit` contains duplicate paths.
98
- * @example
99
- * omitKeysDeep({ arr: [{ a: 1 }] }, ["arr.0.a"]);
100
- * // ➔ {} (array becomes empty and removed)
101
- * omitKeysDeep({ a: { b: { c: 1 }, d: 2 }, e: 3 }, ["a.b.c"]);
102
- * // ➔ { a: { d: 2 }, e: 3 }
103
- * omitKeysDeep({ a: [{ b: 1 }, { c: 2 }] }, ["a.0.b"]);
104
- * // ➔ { a: [{ c: 2 }] }
105
- * omitKeysDeep({ a: [{ b: 1 }] }, ["a.0.b"]);
106
- * // ➔ {} (array becomes empty and removed)
107
- * omitKeysDeep({ complex: [{ deep: [{ x: 1, y: 2 }] }] }, ["complex.0.deep.0.x"]);
108
- * // ➔ { complex: [{ deep: [{ y: 2 }] }] }
109
- * omitKeysDeep({ complex: [{ deep: [{ x: 1 }] }] }, ["complex.0.deep.0.x"]);
110
- * // ➔ {} (deep chain emptied and collapsed)
111
- * omitKeysDeep({ data: [[{ foo: 1, bar: 2 }]] }, ["data.0.0.foo"]);
112
- * // ➔ { data: [[{ bar: 2 }]] }
113
- * omitKeysDeep({ data: [[{ foo: 1 }]] }, ["data.0.0.foo"]);
114
- * // ➔ {} (nested arrays emptied completely)
115
- * omitKeysDeep({ x: [{ y: [{ z: 1 }, { w: 2 }] }] }, ["x.0.y.0.z"]);
116
- * // ➔ { x: [{ y: [{ w: 2 }] }] }
117
- * omitKeysDeep({ x: [{ y: [{ z: 1 }] }] }, ["x.0.y.0.z"]);
118
- * // ➔ {} (entire nested arrays removed)
119
- * omitKeysDeep({ p: { q: { r: 5 } }, s: 6 }, ["p.q.r"]);
120
- * // ➔ { s: 6 } (`p` removed because it becomes empty)
121
- * omitKeysDeep({ arr: [{ a: 1, b: 2 }, { c: 3 }] }, ["arr.0.a"]);
122
- * // ➔ { arr: [{ b: 2 }, { c: 3 }] }
123
- * omitKeysDeep({ root: [{ sub: [{ leaf: 10 }] }] }, ["root.0.sub.0.leaf"]);
124
- * // ➔ {} (deep nested arrays emptied to root)
125
- * omitKeysDeep({ meta: { tags: ["x", "y"], count: 2 } }, ["meta.count"]);
126
- * // ➔ { meta: { tags: ["x", "y"] } }
127
- * omitKeysDeep({ arr: [[{ a: 1 }, { b: 2 }]] }, ["arr.0.0.a"]);
128
- * // ➔ { arr: [[{ b: 2 }]] }
129
- * omitKeysDeep({ arr: [[{ a: 1 }]] }, ["arr.0.0.a"]);
130
- * // ➔ {} (double nested emptied)
131
- * omitKeysDeep({ nested: [{ list: [{ id: 1, val: 2 }] }] }, ["nested.0.list.0.val"]);
132
- * // ➔ { nested: [{ list: [{ id: 1 }] }] }
133
- * omitKeysDeep({ nested: [{ list: [{ id: 1 }] }] }, ["nested.0.list.0.id"]);
134
- * // ➔ {} (full collapse to empty)
135
- * omitKeysDeep({ mixed: { a: [1, 2, 3], b: { c: 4 } } }, ["mixed.b.c"]);
136
- * // ➔ { mixed: { a: [1, 2, 3] } }
137
- */
72
+ * * ***Utility: `omitKeysDeep`.***
73
+ * ------------------------------------------------------
74
+ * **Recursively omits properties from an object using dot notation paths.**
75
+ * - **Behavior:**
76
+ * - Removes resulting empty objects (`{}`) and arrays (`[]`), cascading upwards
77
+ * to remove empty parents until root if needed.
78
+ * - **⚠️ Be careful:**
79
+ * - If after omission an object or array becomes empty, it will be removed entirely
80
+ * including all the way up to the root if necessary, resulting in `{}`.
81
+ * - **ℹ️ Note:**
82
+ * - For array indices, TypeScript autocomplete only suggests `0`–`30`
83
+ * (to prevent editor lag on large unions).
84
+ * However, higher indices are still fully supported at runtime — you can
85
+ * manually type `"arr.99.key"` and it will work the same.
86
+ * @template I - Type of the input object
87
+ * @param {I} object
88
+ * The object to process, should be a plain nested object or array structure.
89
+ * @param {DotPath<I>[]} keysToOmit
90
+ * An array of string paths in dot notation indicating the properties to remove, paths
91
+ * can include numeric indices to target array elements, e.g. `"arr.0.x"` to
92
+ * remove `x` from the first object inside the `arr` array.
93
+ * @returns {Partial<I>}
94
+ * A new deeply cloned object with the specified keys omitted, with resulting
95
+ * empty objects or arrays fully removed (even if it collapses to `{}`).
96
+ * @throws **{@link TypeError | `TypeError`}** if `keysToOmit` is not an array.
97
+ * @throws **{@link Error | `Error`}** if `keysToOmit` contains duplicate paths.
98
+ * @example
99
+ * omitKeysDeep({ arr: [{ a: 1 }] }, ["arr.0.a"]);
100
+ * // ➔ {} (array becomes empty and removed)
101
+ * omitKeysDeep({ a: { b: { c: 1 }, d: 2 }, e: 3 }, ["a.b.c"]);
102
+ * // ➔ { a: { d: 2 }, e: 3 }
103
+ * omitKeysDeep({ a: [{ b: 1 }, { c: 2 }] }, ["a.0.b"]);
104
+ * // ➔ { a: [{ c: 2 }] }
105
+ * omitKeysDeep({ a: [{ b: 1 }] }, ["a.0.b"]);
106
+ * // ➔ {} (array becomes empty and removed)
107
+ * omitKeysDeep({ complex: [{ deep: [{ x: 1, y: 2 }] }] }, ["complex.0.deep.0.x"]);
108
+ * // ➔ { complex: [{ deep: [{ y: 2 }] }] }
109
+ * omitKeysDeep({ complex: [{ deep: [{ x: 1 }] }] }, ["complex.0.deep.0.x"]);
110
+ * // ➔ {} (deep chain emptied and collapsed)
111
+ * omitKeysDeep({ data: [[{ foo: 1, bar: 2 }]] }, ["data.0.0.foo"]);
112
+ * // ➔ { data: [[{ bar: 2 }]] }
113
+ * omitKeysDeep({ data: [[{ foo: 1 }]] }, ["data.0.0.foo"]);
114
+ * // ➔ {} (nested arrays emptied completely)
115
+ * omitKeysDeep({ x: [{ y: [{ z: 1 }, { w: 2 }] }] }, ["x.0.y.0.z"]);
116
+ * // ➔ { x: [{ y: [{ w: 2 }] }] }
117
+ * omitKeysDeep({ x: [{ y: [{ z: 1 }] }] }, ["x.0.y.0.z"]);
118
+ * // ➔ {} (entire nested arrays removed)
119
+ * omitKeysDeep({ p: { q: { r: 5 } }, s: 6 }, ["p.q.r"]);
120
+ * // ➔ { s: 6 } (`p` removed because it becomes empty)
121
+ * omitKeysDeep({ arr: [{ a: 1, b: 2 }, { c: 3 }] }, ["arr.0.a"]);
122
+ * // ➔ { arr: [{ b: 2 }, { c: 3 }] }
123
+ * omitKeysDeep({ root: [{ sub: [{ leaf: 10 }] }] }, ["root.0.sub.0.leaf"]);
124
+ * // ➔ {} (deep nested arrays emptied to root)
125
+ * omitKeysDeep({ meta: { tags: ["x", "y"], count: 2 } }, ["meta.count"]);
126
+ * // ➔ { meta: { tags: ["x", "y"] } }
127
+ * omitKeysDeep({ arr: [[{ a: 1 }, { b: 2 }]] }, ["arr.0.0.a"]);
128
+ * // ➔ { arr: [[{ b: 2 }]] }
129
+ * omitKeysDeep({ arr: [[{ a: 1 }]] }, ["arr.0.0.a"]);
130
+ * // ➔ {} (double nested emptied)
131
+ * omitKeysDeep({ nested: [{ list: [{ id: 1, val: 2 }] }] }, ["nested.0.list.0.val"]);
132
+ * // ➔ { nested: [{ list: [{ id: 1 }] }] }
133
+ * omitKeysDeep({ nested: [{ list: [{ id: 1 }] }] }, ["nested.0.list.0.id"]);
134
+ * // ➔ {} (full collapse to empty)
135
+ * omitKeysDeep({ mixed: { a: [1, 2, 3], b: { c: 4 } } }, ["mixed.b.c"]);
136
+ * // ➔ { mixed: { a: [1, 2, 3] } }
137
+ */
138
138
  declare const omitKeysDeep: <I extends Record<string, unknown>>(object: I, keysToOmit: DotPath<I>[]) => Partial<I>;
139
139
  export { findDuplicates, omitKeys, omitKeysDeep };
@@ -2,17 +2,17 @@
2
2
  * ========================================================================
3
3
  * @rzl-zone/utils-js
4
4
  * ------------------------------------------------------------------------
5
- * Version: `3.12.1-beta.0`
5
+ * Version: `3.12.1-beta.1`
6
6
  * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
7
  * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
8
  * ========================================================================
9
9
  */
10
- import { A as isPlainObject, D as isNaN, M as isArray, S as isUndefined, p as isNonEmptyArray, x as isObjectOrArray } from "../assertIsBoolean-BlBct0Fc.js";
11
- import { t as assertIsArray } from "../assertIsArray-BfAbIUfa.js";
12
- import { n as isEmptyArray } from "../isEmptyObject-DeLVIJpl.js";
13
- import { t as safeStableStringify } from "../safeStableStringify-BNh3D0K0.js";
14
- import { t as isEqual } from "../isEqual-DhyP8fB_.js";
15
- import { t as safeJsonParse } from "../safeJsonParse-CXruaP0p.js";
10
+ import { A as isPlainObject, D as isNaN, M as isArray, S as isUndefined, p as isNonEmptyArray, x as isObjectOrArray } from "../assertIsBoolean-DR1SaXPD.js";
11
+ import { t as assertIsArray } from "../assertIsArray-bTA3XLjq.js";
12
+ import { n as isEmptyArray } from "../isEmptyObject-DCipFwxJ.js";
13
+ import { t as safeStableStringify } from "../safeStableStringify-CXOZ9Ub8.js";
14
+ import { t as isEqual } from "../isEqual-BX49cF9m.js";
15
+ import { t as safeJsonParse } from "../safeJsonParse-BP38mwlj.js";
16
16
  const findDuplicates = (values) => {
17
17
  assertIsArray(values, { message: ({ currentType, validType }) => `First parameter (\`values\`) must be of type \`${validType}\` (array literal or instance), but received: \`${currentType}\`.` });
18
18
  const duplicates = [];
@@ -39,13 +39,13 @@ const omitKeysDeep = (object, keysToOmit) => {
39
39
  const omitAtPath = (obj, pathParts) => {
40
40
  if (!isObjectOrArray(obj)) return obj;
41
41
  const [current, ...rest] = pathParts;
42
- if (isEmptyArray(rest)) if (isArray(obj)) {
42
+ if (isEmptyArray(rest) && current) if (isArray(obj)) {
43
43
  const index = parseInt(current);
44
44
  if (!isNaN(index) && index in obj) obj.splice(index, 1);
45
45
  } else delete obj[current];
46
46
  else {
47
- const next = obj[current];
48
- if (isObjectOrArray(next)) obj[current] = omitAtPath(next, rest);
47
+ const next = current ? obj[current] : void 0;
48
+ if (isObjectOrArray(next) && current) obj[current] = omitAtPath(next, rest);
49
49
  }
50
50
  return obj;
51
51
  };