@vielzeug/toolkit 1.1.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (764) hide show
  1. package/README.md +325 -452
  2. package/dist/array/chunk.cjs +2 -2
  3. package/dist/array/chunk.cjs.map +1 -1
  4. package/dist/array/chunk.d.ts +29 -0
  5. package/dist/array/chunk.d.ts.map +1 -0
  6. package/dist/array/chunk.js +22 -24
  7. package/dist/array/chunk.js.map +1 -1
  8. package/dist/array/contains.cjs +2 -2
  9. package/dist/array/contains.cjs.map +1 -1
  10. package/dist/array/contains.d.ts +19 -0
  11. package/dist/array/contains.d.ts.map +1 -0
  12. package/dist/array/contains.js +12 -9
  13. package/dist/array/contains.js.map +1 -1
  14. package/dist/array/fold.cjs +2 -0
  15. package/dist/array/fold.cjs.map +1 -0
  16. package/dist/array/fold.d.ts +21 -0
  17. package/dist/array/fold.d.ts.map +1 -0
  18. package/dist/array/fold.js +19 -0
  19. package/dist/array/fold.js.map +1 -0
  20. package/dist/array/group.cjs +2 -2
  21. package/dist/array/group.cjs.map +1 -1
  22. package/dist/array/group.d.ts +19 -0
  23. package/dist/array/group.d.ts.map +1 -0
  24. package/dist/array/group.js +18 -15
  25. package/dist/array/group.js.map +1 -1
  26. package/dist/array/index.d.ts +16 -0
  27. package/dist/array/index.d.ts.map +1 -0
  28. package/dist/array/keyBy.cjs +2 -0
  29. package/dist/array/keyBy.cjs.map +1 -0
  30. package/dist/array/keyBy.d.ts +20 -0
  31. package/dist/array/keyBy.d.ts.map +1 -0
  32. package/dist/array/keyBy.js +19 -0
  33. package/dist/array/keyBy.js.map +1 -0
  34. package/dist/array/list.cjs +2 -2
  35. package/dist/array/list.cjs.map +1 -1
  36. package/dist/array/list.d.ts +58 -0
  37. package/dist/array/list.d.ts.map +1 -0
  38. package/dist/array/list.js +103 -106
  39. package/dist/array/list.js.map +1 -1
  40. package/dist/array/pick.cjs +2 -2
  41. package/dist/array/pick.cjs.map +1 -1
  42. package/dist/array/pick.d.ts +19 -0
  43. package/dist/array/pick.d.ts.map +1 -0
  44. package/dist/array/pick.js +15 -14
  45. package/dist/array/pick.js.map +1 -1
  46. package/dist/array/remoteList.cjs +2 -2
  47. package/dist/array/remoteList.cjs.map +1 -1
  48. package/dist/array/remoteList.d.ts +64 -0
  49. package/dist/array/remoteList.d.ts.map +1 -0
  50. package/dist/array/remoteList.js +121 -122
  51. package/dist/array/remoteList.js.map +1 -1
  52. package/dist/array/replace.cjs +2 -0
  53. package/dist/array/replace.cjs.map +1 -0
  54. package/dist/array/replace.d.ts +20 -0
  55. package/dist/array/replace.d.ts.map +1 -0
  56. package/dist/array/replace.js +19 -0
  57. package/dist/array/replace.js.map +1 -0
  58. package/dist/array/rotate.cjs +2 -0
  59. package/dist/array/rotate.cjs.map +1 -0
  60. package/dist/array/rotate.d.ts +22 -0
  61. package/dist/array/rotate.d.ts.map +1 -0
  62. package/dist/array/rotate.js +19 -0
  63. package/dist/array/rotate.js.map +1 -0
  64. package/dist/array/search.cjs +2 -2
  65. package/dist/array/search.cjs.map +1 -1
  66. package/dist/array/search.d.ts +19 -0
  67. package/dist/array/search.d.ts.map +1 -0
  68. package/dist/array/search.js +23 -13
  69. package/dist/array/search.js.map +1 -1
  70. package/dist/array/select.cjs +2 -2
  71. package/dist/array/select.cjs.map +1 -1
  72. package/dist/array/select.d.ts +21 -0
  73. package/dist/array/select.d.ts.map +1 -0
  74. package/dist/array/select.js +16 -15
  75. package/dist/array/select.js.map +1 -1
  76. package/dist/array/sort.cjs +2 -2
  77. package/dist/array/sort.cjs.map +1 -1
  78. package/dist/array/sort.d.ts +26 -0
  79. package/dist/array/sort.d.ts.map +1 -0
  80. package/dist/array/sort.js +18 -12
  81. package/dist/array/sort.js.map +1 -1
  82. package/dist/array/toggle.cjs +2 -0
  83. package/dist/array/toggle.cjs.map +1 -0
  84. package/dist/array/toggle.d.ts +29 -0
  85. package/dist/array/toggle.d.ts.map +1 -0
  86. package/dist/array/toggle.js +9 -0
  87. package/dist/array/toggle.js.map +1 -0
  88. package/dist/array/uniq.cjs +2 -2
  89. package/dist/array/uniq.cjs.map +1 -1
  90. package/dist/array/uniq.d.ts +21 -0
  91. package/dist/array/uniq.d.ts.map +1 -0
  92. package/dist/array/uniq.js +15 -17
  93. package/dist/array/uniq.js.map +1 -1
  94. package/dist/async/attempt.cjs +2 -2
  95. package/dist/async/attempt.cjs.map +1 -1
  96. package/dist/async/attempt.d.ts +40 -0
  97. package/dist/async/attempt.d.ts.map +1 -0
  98. package/dist/async/attempt.js +19 -14
  99. package/dist/async/attempt.js.map +1 -1
  100. package/dist/async/defer.cjs +2 -2
  101. package/dist/async/defer.cjs.map +1 -1
  102. package/dist/async/defer.d.ts +23 -0
  103. package/dist/async/defer.d.ts.map +1 -0
  104. package/dist/async/defer.js +12 -9
  105. package/dist/async/defer.js.map +1 -1
  106. package/dist/async/index.d.ts +12 -0
  107. package/dist/async/index.d.ts.map +1 -0
  108. package/dist/async/parallel.cjs +2 -2
  109. package/dist/async/parallel.cjs.map +1 -1
  110. package/dist/async/parallel.d.ts +31 -0
  111. package/dist/async/parallel.d.ts.map +1 -0
  112. package/dist/async/parallel.js +26 -27
  113. package/dist/async/parallel.js.map +1 -1
  114. package/dist/async/pool.cjs +2 -2
  115. package/dist/async/pool.cjs.map +1 -1
  116. package/dist/async/pool.d.ts +21 -0
  117. package/dist/async/pool.d.ts.map +1 -0
  118. package/dist/async/pool.js +23 -21
  119. package/dist/async/pool.js.map +1 -1
  120. package/dist/async/predict.cjs +2 -2
  121. package/dist/async/predict.cjs.map +1 -1
  122. package/dist/async/predict.d.ts +24 -0
  123. package/dist/async/predict.d.ts.map +1 -0
  124. package/dist/async/predict.js +10 -12
  125. package/dist/async/predict.js.map +1 -1
  126. package/dist/async/queue.cjs +2 -2
  127. package/dist/async/queue.cjs.map +1 -1
  128. package/dist/async/queue.d.ts +43 -0
  129. package/dist/async/queue.d.ts.map +1 -0
  130. package/dist/async/queue.js +52 -56
  131. package/dist/async/queue.js.map +1 -1
  132. package/dist/async/race.cjs +2 -2
  133. package/dist/async/race.cjs.map +1 -1
  134. package/dist/async/race.d.ts +16 -0
  135. package/dist/async/race.d.ts.map +1 -0
  136. package/dist/async/race.js +8 -7
  137. package/dist/async/race.js.map +1 -1
  138. package/dist/async/retry.cjs +2 -2
  139. package/dist/async/retry.cjs.map +1 -1
  140. package/dist/async/retry.d.ts +32 -0
  141. package/dist/async/retry.d.ts.map +1 -0
  142. package/dist/async/retry.js +19 -24
  143. package/dist/async/retry.js.map +1 -1
  144. package/dist/async/scheduler.cjs +2 -0
  145. package/dist/async/scheduler.cjs.map +1 -0
  146. package/dist/async/scheduler.d.ts +51 -0
  147. package/dist/async/scheduler.d.ts.map +1 -0
  148. package/dist/async/scheduler.js +43 -0
  149. package/dist/async/scheduler.js.map +1 -0
  150. package/dist/async/sleep.cjs +2 -2
  151. package/dist/async/sleep.cjs.map +1 -1
  152. package/dist/async/sleep.d.ts +16 -0
  153. package/dist/async/sleep.d.ts.map +1 -0
  154. package/dist/async/sleep.js +11 -11
  155. package/dist/async/sleep.js.map +1 -1
  156. package/dist/async/waitFor.cjs +2 -2
  157. package/dist/async/waitFor.cjs.map +1 -1
  158. package/dist/async/waitFor.d.ts +33 -0
  159. package/dist/async/waitFor.d.ts.map +1 -0
  160. package/dist/async/waitFor.js +29 -36
  161. package/dist/async/waitFor.js.map +1 -1
  162. package/dist/date/expires.cjs +2 -2
  163. package/dist/date/expires.cjs.map +1 -1
  164. package/dist/date/expires.d.ts +15 -0
  165. package/dist/date/expires.d.ts.map +1 -0
  166. package/dist/date/expires.js +11 -10
  167. package/dist/date/expires.js.map +1 -1
  168. package/dist/date/index.d.ts +4 -0
  169. package/dist/date/index.d.ts.map +1 -0
  170. package/dist/date/interval.cjs +2 -2
  171. package/dist/date/interval.cjs.map +1 -1
  172. package/dist/date/interval.d.ts +25 -0
  173. package/dist/date/interval.d.ts.map +1 -0
  174. package/dist/date/interval.js +31 -37
  175. package/dist/date/interval.js.map +1 -1
  176. package/dist/date/timeDiff.cjs +2 -2
  177. package/dist/date/timeDiff.cjs.map +1 -1
  178. package/dist/date/timeDiff.d.ts +24 -0
  179. package/dist/date/timeDiff.d.ts.map +1 -0
  180. package/dist/date/timeDiff.js +58 -25
  181. package/dist/date/timeDiff.js.map +1 -1
  182. package/dist/function/assert.cjs +2 -3
  183. package/dist/function/assert.cjs.map +1 -1
  184. package/dist/function/assert.d.ts +38 -0
  185. package/dist/function/assert.d.ts.map +1 -0
  186. package/dist/function/assert.js +13 -11
  187. package/dist/function/assert.js.map +1 -1
  188. package/dist/function/assertParams.cjs +2 -2
  189. package/dist/function/assertParams.cjs.map +1 -1
  190. package/dist/function/assertParams.d.ts +24 -0
  191. package/dist/function/assertParams.d.ts.map +1 -0
  192. package/dist/function/assertParams.js +13 -12
  193. package/dist/function/assertParams.js.map +1 -1
  194. package/dist/function/compare.cjs +2 -2
  195. package/dist/function/compare.cjs.map +1 -1
  196. package/dist/function/compare.d.ts +23 -0
  197. package/dist/function/compare.d.ts.map +1 -0
  198. package/dist/function/compare.js +22 -21
  199. package/dist/function/compare.js.map +1 -1
  200. package/dist/function/compareBy.cjs +2 -2
  201. package/dist/function/compareBy.cjs.map +1 -1
  202. package/dist/function/compareBy.d.ts +24 -0
  203. package/dist/function/compareBy.d.ts.map +1 -0
  204. package/dist/function/compareBy.js +15 -14
  205. package/dist/function/compareBy.js.map +1 -1
  206. package/dist/function/compose.cjs +2 -2
  207. package/dist/function/compose.cjs.map +1 -1
  208. package/dist/function/compose.d.ts +22 -0
  209. package/dist/function/compose.d.ts.map +1 -0
  210. package/dist/function/compose.js +10 -13
  211. package/dist/function/compose.js.map +1 -1
  212. package/dist/function/curry.cjs +2 -2
  213. package/dist/function/curry.cjs.map +1 -1
  214. package/dist/function/curry.d.ts +21 -0
  215. package/dist/function/curry.d.ts.map +1 -0
  216. package/dist/function/curry.js +8 -7
  217. package/dist/function/curry.js.map +1 -1
  218. package/dist/function/debounce.cjs +2 -2
  219. package/dist/function/debounce.cjs.map +1 -1
  220. package/dist/function/debounce.d.ts +12 -0
  221. package/dist/function/debounce.d.ts.map +1 -0
  222. package/dist/function/debounce.js +34 -26
  223. package/dist/function/debounce.js.map +1 -1
  224. package/dist/function/fp.cjs +2 -2
  225. package/dist/function/fp.cjs.map +1 -1
  226. package/dist/function/fp.d.ts +24 -0
  227. package/dist/function/fp.d.ts.map +1 -0
  228. package/dist/function/fp.js +6 -10
  229. package/dist/function/fp.js.map +1 -1
  230. package/dist/function/index.d.ts +13 -0
  231. package/dist/function/index.d.ts.map +1 -0
  232. package/dist/function/memo.cjs +2 -2
  233. package/dist/function/memo.cjs.map +1 -1
  234. package/dist/function/memo.d.ts +30 -0
  235. package/dist/function/memo.d.ts.map +1 -0
  236. package/dist/function/memo.js +16 -24
  237. package/dist/function/memo.js.map +1 -1
  238. package/dist/function/once.cjs +2 -2
  239. package/dist/function/once.cjs.map +1 -1
  240. package/dist/function/once.d.ts +24 -0
  241. package/dist/function/once.d.ts.map +1 -0
  242. package/dist/function/once.js +10 -10
  243. package/dist/function/once.js.map +1 -1
  244. package/dist/function/pipe.cjs +2 -2
  245. package/dist/function/pipe.cjs.map +1 -1
  246. package/dist/function/pipe.d.ts +23 -0
  247. package/dist/function/pipe.d.ts.map +1 -0
  248. package/dist/function/pipe.js +10 -10
  249. package/dist/function/pipe.js.map +1 -1
  250. package/dist/function/throttle.cjs +2 -2
  251. package/dist/function/throttle.cjs.map +1 -1
  252. package/dist/function/throttle.d.ts +21 -0
  253. package/dist/function/throttle.d.ts.map +1 -0
  254. package/dist/function/throttle.js +45 -37
  255. package/dist/function/throttle.js.map +1 -1
  256. package/dist/index.cjs +1 -2
  257. package/dist/index.d.ts +77 -2813
  258. package/dist/index.d.ts.map +1 -0
  259. package/dist/index.js +75 -253
  260. package/dist/math/abs.cjs +2 -2
  261. package/dist/math/abs.cjs.map +1 -1
  262. package/dist/math/abs.d.ts +17 -0
  263. package/dist/math/abs.d.ts.map +1 -0
  264. package/dist/math/abs.js +7 -6
  265. package/dist/math/abs.js.map +1 -1
  266. package/dist/math/allocate.cjs +2 -2
  267. package/dist/math/allocate.cjs.map +1 -1
  268. package/dist/math/allocate.d.ts +24 -0
  269. package/dist/math/allocate.d.ts.map +1 -0
  270. package/dist/math/allocate.js +20 -28
  271. package/dist/math/allocate.js.map +1 -1
  272. package/dist/math/average.cjs +2 -2
  273. package/dist/math/average.cjs.map +1 -1
  274. package/dist/math/average.d.ts +16 -0
  275. package/dist/math/average.d.ts.map +1 -0
  276. package/dist/math/average.js +13 -24
  277. package/dist/math/average.js.map +1 -1
  278. package/dist/math/clamp.cjs +2 -2
  279. package/dist/math/clamp.cjs.map +1 -1
  280. package/dist/math/clamp.d.ts +18 -0
  281. package/dist/math/clamp.d.ts.map +1 -0
  282. package/dist/math/clamp.js +7 -6
  283. package/dist/math/clamp.js.map +1 -1
  284. package/dist/math/distribute.cjs +2 -2
  285. package/dist/math/distribute.cjs.map +1 -1
  286. package/dist/math/distribute.d.ts +24 -0
  287. package/dist/math/distribute.d.ts.map +1 -0
  288. package/dist/math/distribute.js +14 -17
  289. package/dist/math/distribute.js.map +1 -1
  290. package/dist/math/index.d.ts +14 -0
  291. package/dist/math/index.d.ts.map +1 -0
  292. package/dist/math/linspace.cjs +2 -0
  293. package/dist/math/linspace.cjs.map +1 -0
  294. package/dist/math/linspace.d.ts +19 -0
  295. package/dist/math/linspace.d.ts.map +1 -0
  296. package/dist/math/linspace.js +11 -0
  297. package/dist/math/linspace.js.map +1 -0
  298. package/dist/math/max.cjs +2 -2
  299. package/dist/math/max.cjs.map +1 -1
  300. package/dist/math/max.d.ts +23 -0
  301. package/dist/math/max.d.ts.map +1 -0
  302. package/dist/math/max.js +10 -11
  303. package/dist/math/max.js.map +1 -1
  304. package/dist/math/median.cjs +2 -2
  305. package/dist/math/median.cjs.map +1 -1
  306. package/dist/math/median.d.ts +17 -0
  307. package/dist/math/median.d.ts.map +1 -0
  308. package/dist/math/median.js +11 -10
  309. package/dist/math/median.js.map +1 -1
  310. package/dist/math/min.cjs +2 -2
  311. package/dist/math/min.cjs.map +1 -1
  312. package/dist/math/min.d.ts +23 -0
  313. package/dist/math/min.d.ts.map +1 -0
  314. package/dist/math/min.js +10 -11
  315. package/dist/math/min.js.map +1 -1
  316. package/dist/math/percent.cjs +2 -0
  317. package/dist/math/percent.cjs.map +1 -0
  318. package/dist/math/percent.d.ts +19 -0
  319. package/dist/math/percent.d.ts.map +1 -0
  320. package/dist/math/percent.js +8 -0
  321. package/dist/math/percent.js.map +1 -0
  322. package/dist/math/range.cjs +2 -2
  323. package/dist/math/range.cjs.map +1 -1
  324. package/dist/math/range.d.ts +23 -0
  325. package/dist/math/range.d.ts.map +1 -0
  326. package/dist/math/range.js +28 -17
  327. package/dist/math/range.js.map +1 -1
  328. package/dist/math/round.cjs +2 -2
  329. package/dist/math/round.cjs.map +1 -1
  330. package/dist/math/round.d.ts +21 -0
  331. package/dist/math/round.d.ts.map +1 -0
  332. package/dist/math/round.js +9 -8
  333. package/dist/math/round.js.map +1 -1
  334. package/dist/math/sum.cjs +2 -2
  335. package/dist/math/sum.cjs.map +1 -1
  336. package/dist/math/sum.d.ts +17 -0
  337. package/dist/math/sum.d.ts.map +1 -0
  338. package/dist/math/sum.js +11 -14
  339. package/dist/math/sum.js.map +1 -1
  340. package/dist/money/currency.cjs +2 -2
  341. package/dist/money/currency.cjs.map +1 -1
  342. package/dist/money/currency.d.ts +30 -0
  343. package/dist/money/currency.d.ts.map +1 -0
  344. package/dist/money/currency.js +19 -47
  345. package/dist/money/currency.js.map +1 -1
  346. package/dist/money/exchange.cjs +2 -2
  347. package/dist/money/exchange.cjs.map +1 -1
  348. package/dist/money/exchange.d.ts +29 -0
  349. package/dist/money/exchange.d.ts.map +1 -0
  350. package/dist/money/exchange.js +12 -12
  351. package/dist/money/exchange.js.map +1 -1
  352. package/dist/money/index.d.ts +4 -0
  353. package/dist/money/index.d.ts.map +1 -0
  354. package/dist/money/types.d.ts +9 -0
  355. package/dist/money/types.d.ts.map +1 -0
  356. package/dist/object/diff.cjs +2 -2
  357. package/dist/object/diff.cjs.map +1 -1
  358. package/dist/object/diff.d.ts +26 -0
  359. package/dist/object/diff.d.ts.map +1 -0
  360. package/dist/object/diff.js +19 -17
  361. package/dist/object/diff.js.map +1 -1
  362. package/dist/object/index.d.ts +9 -0
  363. package/dist/object/index.d.ts.map +1 -0
  364. package/dist/object/merge.cjs +2 -2
  365. package/dist/object/merge.cjs.map +1 -1
  366. package/dist/object/merge.d.ts +44 -0
  367. package/dist/object/merge.d.ts.map +1 -0
  368. package/dist/object/merge.js +27 -21
  369. package/dist/object/merge.js.map +1 -1
  370. package/dist/object/parseJSON.cjs +2 -2
  371. package/dist/object/parseJSON.cjs.map +1 -1
  372. package/dist/object/parseJSON.d.ts +32 -0
  373. package/dist/object/parseJSON.d.ts.map +1 -0
  374. package/dist/object/parseJSON.js +17 -18
  375. package/dist/object/parseJSON.js.map +1 -1
  376. package/dist/object/path.cjs +2 -2
  377. package/dist/object/path.cjs.map +1 -1
  378. package/dist/object/path.d.ts +32 -0
  379. package/dist/object/path.d.ts.map +1 -0
  380. package/dist/object/path.js +25 -23
  381. package/dist/object/path.js.map +1 -1
  382. package/dist/object/proxy.cjs +2 -0
  383. package/dist/object/proxy.cjs.map +1 -0
  384. package/dist/object/proxy.d.ts +30 -0
  385. package/dist/object/proxy.d.ts.map +1 -0
  386. package/dist/object/proxy.js +21 -0
  387. package/dist/object/proxy.js.map +1 -0
  388. package/dist/object/prune.cjs +2 -0
  389. package/dist/object/prune.cjs.map +1 -0
  390. package/dist/object/prune.d.ts +21 -0
  391. package/dist/object/prune.d.ts.map +1 -0
  392. package/dist/object/prune.js +31 -0
  393. package/dist/object/prune.js.map +1 -0
  394. package/dist/object/seek.cjs +2 -2
  395. package/dist/object/seek.cjs.map +1 -1
  396. package/dist/object/seek.d.ts +2 -0
  397. package/dist/object/seek.d.ts.map +1 -0
  398. package/dist/object/seek.js +25 -12
  399. package/dist/object/seek.js.map +1 -1
  400. package/dist/object/stash.cjs +2 -0
  401. package/dist/object/stash.cjs.map +1 -0
  402. package/dist/object/stash.d.ts +45 -0
  403. package/dist/object/stash.d.ts.map +1 -0
  404. package/dist/object/stash.js +99 -0
  405. package/dist/object/stash.js.map +1 -0
  406. package/dist/random/draw.cjs +2 -2
  407. package/dist/random/draw.cjs.map +1 -1
  408. package/dist/random/draw.d.ts +16 -0
  409. package/dist/random/draw.d.ts.map +1 -0
  410. package/dist/random/draw.js +13 -10
  411. package/dist/random/draw.js.map +1 -1
  412. package/dist/random/index.d.ts +5 -0
  413. package/dist/random/index.d.ts.map +1 -0
  414. package/dist/random/random.cjs +2 -2
  415. package/dist/random/random.cjs.map +1 -1
  416. package/dist/random/random.d.ts +14 -0
  417. package/dist/random/random.d.ts.map +1 -0
  418. package/dist/random/random.js +16 -9
  419. package/dist/random/random.js.map +1 -1
  420. package/dist/random/shuffle.cjs +2 -2
  421. package/dist/random/shuffle.cjs.map +1 -1
  422. package/dist/random/shuffle.d.ts +17 -0
  423. package/dist/random/shuffle.d.ts.map +1 -0
  424. package/dist/random/shuffle.js +18 -14
  425. package/dist/random/shuffle.js.map +1 -1
  426. package/dist/random/uuid.cjs +2 -2
  427. package/dist/random/uuid.cjs.map +1 -1
  428. package/dist/random/uuid.d.ts +12 -0
  429. package/dist/random/uuid.d.ts.map +1 -0
  430. package/dist/random/uuid.js +7 -9
  431. package/dist/random/uuid.js.map +1 -1
  432. package/dist/string/_caseUtils.cjs +2 -2
  433. package/dist/string/_caseUtils.cjs.map +1 -1
  434. package/dist/string/_caseUtils.d.ts +13 -0
  435. package/dist/string/_caseUtils.d.ts.map +1 -0
  436. package/dist/string/_caseUtils.js +8 -8
  437. package/dist/string/_caseUtils.js.map +1 -1
  438. package/dist/string/camelCase.cjs +2 -2
  439. package/dist/string/camelCase.cjs.map +1 -1
  440. package/dist/string/camelCase.d.ts +14 -0
  441. package/dist/string/camelCase.d.ts.map +1 -0
  442. package/dist/string/camelCase.js +8 -7
  443. package/dist/string/camelCase.js.map +1 -1
  444. package/dist/string/index.d.ts +7 -0
  445. package/dist/string/index.d.ts.map +1 -0
  446. package/dist/string/kebabCase.cjs +2 -2
  447. package/dist/string/kebabCase.cjs.map +1 -1
  448. package/dist/string/kebabCase.d.ts +15 -0
  449. package/dist/string/kebabCase.d.ts.map +1 -0
  450. package/dist/string/kebabCase.js +8 -7
  451. package/dist/string/kebabCase.js.map +1 -1
  452. package/dist/string/pascalCase.cjs +2 -2
  453. package/dist/string/pascalCase.cjs.map +1 -1
  454. package/dist/string/pascalCase.d.ts +15 -0
  455. package/dist/string/pascalCase.d.ts.map +1 -0
  456. package/dist/string/pascalCase.js +8 -7
  457. package/dist/string/pascalCase.js.map +1 -1
  458. package/dist/string/similarity.cjs +2 -2
  459. package/dist/string/similarity.cjs.map +1 -1
  460. package/dist/string/similarity.d.ts +20 -0
  461. package/dist/string/similarity.d.ts.map +1 -0
  462. package/dist/string/similarity.js +20 -36
  463. package/dist/string/similarity.js.map +1 -1
  464. package/dist/string/snakeCase.cjs +2 -2
  465. package/dist/string/snakeCase.cjs.map +1 -1
  466. package/dist/string/snakeCase.d.ts +15 -0
  467. package/dist/string/snakeCase.d.ts.map +1 -0
  468. package/dist/string/snakeCase.js +8 -7
  469. package/dist/string/snakeCase.js.map +1 -1
  470. package/dist/string/truncate.cjs +2 -2
  471. package/dist/string/truncate.cjs.map +1 -1
  472. package/dist/string/truncate.d.ts +28 -0
  473. package/dist/string/truncate.d.ts.map +1 -0
  474. package/dist/string/truncate.js +20 -17
  475. package/dist/string/truncate.js.map +1 -1
  476. package/dist/toolkit.cjs +2 -0
  477. package/dist/toolkit.cjs.map +1 -0
  478. package/dist/toolkit.js +1523 -0
  479. package/dist/toolkit.js.map +1 -0
  480. package/dist/typed/index.d.ts +24 -0
  481. package/dist/typed/index.d.ts.map +1 -0
  482. package/dist/typed/is.cjs +2 -2
  483. package/dist/typed/is.cjs.map +1 -1
  484. package/dist/typed/is.d.ts +95 -0
  485. package/dist/typed/is.d.ts.map +1 -0
  486. package/dist/typed/is.js +54 -42
  487. package/dist/typed/is.js.map +1 -1
  488. package/dist/typed/isArray.cjs +2 -2
  489. package/dist/typed/isArray.cjs.map +1 -1
  490. package/dist/typed/isArray.d.ts +16 -0
  491. package/dist/typed/isArray.d.ts.map +1 -0
  492. package/dist/typed/isArray.js +8 -8
  493. package/dist/typed/isArray.js.map +1 -1
  494. package/dist/typed/isBoolean.cjs +2 -2
  495. package/dist/typed/isBoolean.cjs.map +1 -1
  496. package/dist/typed/isBoolean.d.ts +23 -0
  497. package/dist/typed/isBoolean.d.ts.map +1 -0
  498. package/dist/typed/isBoolean.js +7 -6
  499. package/dist/typed/isBoolean.js.map +1 -1
  500. package/dist/typed/isDate.cjs +2 -2
  501. package/dist/typed/isDate.cjs.map +1 -1
  502. package/dist/typed/isDate.d.ts +16 -0
  503. package/dist/typed/isDate.d.ts.map +1 -0
  504. package/dist/typed/isDate.js +7 -8
  505. package/dist/typed/isDate.js.map +1 -1
  506. package/dist/typed/isDefined.cjs +2 -2
  507. package/dist/typed/isDefined.cjs.map +1 -1
  508. package/dist/typed/isDefined.d.ts +19 -0
  509. package/dist/typed/isDefined.d.ts.map +1 -0
  510. package/dist/typed/isDefined.js +7 -6
  511. package/dist/typed/isDefined.js.map +1 -1
  512. package/dist/typed/isEmpty.cjs +2 -2
  513. package/dist/typed/isEmpty.cjs.map +1 -1
  514. package/dist/typed/isEmpty.d.ts +24 -0
  515. package/dist/typed/isEmpty.d.ts.map +1 -0
  516. package/dist/typed/isEmpty.js +8 -9
  517. package/dist/typed/isEmpty.js.map +1 -1
  518. package/dist/typed/isEqual.cjs +2 -2
  519. package/dist/typed/isEqual.cjs.map +1 -1
  520. package/dist/typed/isEqual.d.ts +24 -0
  521. package/dist/typed/isEqual.d.ts.map +1 -0
  522. package/dist/typed/isEqual.js +27 -28
  523. package/dist/typed/isEqual.js.map +1 -1
  524. package/dist/typed/isEven.cjs +2 -2
  525. package/dist/typed/isEven.cjs.map +1 -1
  526. package/dist/typed/isEven.d.ts +9 -0
  527. package/dist/typed/isEven.d.ts.map +1 -0
  528. package/dist/typed/isEven.js +7 -6
  529. package/dist/typed/isEven.js.map +1 -1
  530. package/dist/typed/isFunction.cjs +2 -2
  531. package/dist/typed/isFunction.cjs.map +1 -1
  532. package/dist/typed/isFunction.d.ts +16 -0
  533. package/dist/typed/isFunction.d.ts.map +1 -0
  534. package/dist/typed/isFunction.js +7 -8
  535. package/dist/typed/isFunction.js.map +1 -1
  536. package/dist/typed/isMatch.cjs +2 -2
  537. package/dist/typed/isMatch.cjs.map +1 -1
  538. package/dist/typed/isMatch.d.ts +23 -0
  539. package/dist/typed/isMatch.d.ts.map +1 -0
  540. package/dist/typed/isMatch.js +16 -18
  541. package/dist/typed/isMatch.js.map +1 -1
  542. package/dist/typed/isNegative.cjs +2 -2
  543. package/dist/typed/isNegative.cjs.map +1 -1
  544. package/dist/typed/isNegative.d.ts +26 -0
  545. package/dist/typed/isNegative.d.ts.map +1 -0
  546. package/dist/typed/isNegative.js +7 -6
  547. package/dist/typed/isNegative.js.map +1 -1
  548. package/dist/typed/isNil.cjs +2 -2
  549. package/dist/typed/isNil.cjs.map +1 -1
  550. package/dist/typed/isNil.d.ts +17 -0
  551. package/dist/typed/isNil.d.ts.map +1 -0
  552. package/dist/typed/isNil.js +7 -8
  553. package/dist/typed/isNil.js.map +1 -1
  554. package/dist/typed/isNumber.cjs +2 -2
  555. package/dist/typed/isNumber.cjs.map +1 -1
  556. package/dist/typed/isNumber.d.ts +16 -0
  557. package/dist/typed/isNumber.d.ts.map +1 -0
  558. package/dist/typed/isNumber.js +8 -8
  559. package/dist/typed/isNumber.js.map +1 -1
  560. package/dist/typed/isObject.cjs +2 -2
  561. package/dist/typed/isObject.cjs.map +1 -1
  562. package/dist/typed/isObject.d.ts +19 -0
  563. package/dist/typed/isObject.d.ts.map +1 -0
  564. package/dist/typed/isObject.js +8 -8
  565. package/dist/typed/isObject.js.map +1 -1
  566. package/dist/typed/isOdd.cjs +2 -2
  567. package/dist/typed/isOdd.cjs.map +1 -1
  568. package/dist/typed/isOdd.d.ts +9 -0
  569. package/dist/typed/isOdd.d.ts.map +1 -0
  570. package/dist/typed/isOdd.js +7 -6
  571. package/dist/typed/isOdd.js.map +1 -1
  572. package/dist/typed/isPositive.cjs +2 -2
  573. package/dist/typed/isPositive.cjs.map +1 -1
  574. package/dist/typed/isPositive.d.ts +26 -0
  575. package/dist/typed/isPositive.d.ts.map +1 -0
  576. package/dist/typed/isPositive.js +7 -6
  577. package/dist/typed/isPositive.js.map +1 -1
  578. package/dist/typed/isPrimitive.cjs +2 -2
  579. package/dist/typed/isPrimitive.cjs.map +1 -1
  580. package/dist/typed/isPrimitive.d.ts +18 -0
  581. package/dist/typed/isPrimitive.d.ts.map +1 -0
  582. package/dist/typed/isPrimitive.js +8 -9
  583. package/dist/typed/isPrimitive.js.map +1 -1
  584. package/dist/typed/isPromise.cjs +2 -2
  585. package/dist/typed/isPromise.cjs.map +1 -1
  586. package/dist/typed/isPromise.d.ts +17 -0
  587. package/dist/typed/isPromise.d.ts.map +1 -0
  588. package/dist/typed/isPromise.js +7 -9
  589. package/dist/typed/isPromise.js.map +1 -1
  590. package/dist/typed/isRegex.cjs +2 -2
  591. package/dist/typed/isRegex.cjs.map +1 -1
  592. package/dist/typed/isRegex.d.ts +21 -0
  593. package/dist/typed/isRegex.d.ts.map +1 -0
  594. package/dist/typed/isRegex.js +7 -6
  595. package/dist/typed/isRegex.js.map +1 -1
  596. package/dist/typed/isString.cjs +2 -2
  597. package/dist/typed/isString.cjs.map +1 -1
  598. package/dist/typed/isString.d.ts +16 -0
  599. package/dist/typed/isString.d.ts.map +1 -0
  600. package/dist/typed/isString.js +8 -8
  601. package/dist/typed/isString.js.map +1 -1
  602. package/dist/typed/isWithin.cjs +2 -2
  603. package/dist/typed/isWithin.cjs.map +1 -1
  604. package/dist/typed/isWithin.d.ts +20 -0
  605. package/dist/typed/isWithin.d.ts.map +1 -0
  606. package/dist/typed/isWithin.js +9 -9
  607. package/dist/typed/isWithin.js.map +1 -1
  608. package/dist/typed/isZero.cjs +2 -2
  609. package/dist/typed/isZero.cjs.map +1 -1
  610. package/dist/typed/isZero.d.ts +25 -0
  611. package/dist/typed/isZero.d.ts.map +1 -0
  612. package/dist/typed/isZero.js +7 -6
  613. package/dist/typed/isZero.js.map +1 -1
  614. package/dist/typed/typeOf.cjs +2 -2
  615. package/dist/typed/typeOf.cjs.map +1 -1
  616. package/dist/typed/typeOf.d.ts +30 -0
  617. package/dist/typed/typeOf.d.ts.map +1 -0
  618. package/dist/typed/typeOf.js +11 -13
  619. package/dist/typed/typeOf.js.map +1 -1
  620. package/dist/types.d.ts +9 -0
  621. package/dist/types.d.ts.map +1 -0
  622. package/package.json +77 -12
  623. package/dist/array/aggregate.cjs +0 -2
  624. package/dist/array/aggregate.cjs.map +0 -1
  625. package/dist/array/aggregate.js +0 -16
  626. package/dist/array/aggregate.js.map +0 -1
  627. package/dist/array/alternate.cjs +0 -2
  628. package/dist/array/alternate.cjs.map +0 -1
  629. package/dist/array/alternate.js +0 -9
  630. package/dist/array/alternate.js.map +0 -1
  631. package/dist/array/arrange.cjs +0 -2
  632. package/dist/array/arrange.cjs.map +0 -1
  633. package/dist/array/arrange.js +0 -6
  634. package/dist/array/arrange.js.map +0 -1
  635. package/dist/array/compact.cjs +0 -2
  636. package/dist/array/compact.cjs.map +0 -1
  637. package/dist/array/compact.js +0 -9
  638. package/dist/array/compact.js.map +0 -1
  639. package/dist/array/every.cjs +0 -2
  640. package/dist/array/every.cjs.map +0 -1
  641. package/dist/array/every.js +0 -14
  642. package/dist/array/every.js.map +0 -1
  643. package/dist/array/filter.cjs +0 -2
  644. package/dist/array/filter.cjs.map +0 -1
  645. package/dist/array/filter.js +0 -14
  646. package/dist/array/filter.js.map +0 -1
  647. package/dist/array/find.cjs +0 -2
  648. package/dist/array/find.cjs.map +0 -1
  649. package/dist/array/find.js +0 -14
  650. package/dist/array/find.js.map +0 -1
  651. package/dist/array/findIndex.cjs +0 -2
  652. package/dist/array/findIndex.cjs.map +0 -1
  653. package/dist/array/findIndex.js +0 -14
  654. package/dist/array/findIndex.js.map +0 -1
  655. package/dist/array/findLast.cjs +0 -2
  656. package/dist/array/findLast.cjs.map +0 -1
  657. package/dist/array/findLast.js +0 -14
  658. package/dist/array/findLast.js.map +0 -1
  659. package/dist/array/flatten.cjs +0 -2
  660. package/dist/array/flatten.cjs.map +0 -1
  661. package/dist/array/flatten.js +0 -7
  662. package/dist/array/flatten.js.map +0 -1
  663. package/dist/array/map.cjs +0 -2
  664. package/dist/array/map.cjs.map +0 -1
  665. package/dist/array/map.js +0 -18
  666. package/dist/array/map.js.map +0 -1
  667. package/dist/array/reduce.cjs +0 -2
  668. package/dist/array/reduce.cjs.map +0 -1
  669. package/dist/array/reduce.js +0 -16
  670. package/dist/array/reduce.js.map +0 -1
  671. package/dist/array/shift.cjs +0 -2
  672. package/dist/array/shift.cjs.map +0 -1
  673. package/dist/array/shift.js +0 -13
  674. package/dist/array/shift.js.map +0 -1
  675. package/dist/array/some.cjs +0 -2
  676. package/dist/array/some.cjs.map +0 -1
  677. package/dist/array/some.js +0 -14
  678. package/dist/array/some.js.map +0 -1
  679. package/dist/array/substitute.cjs +0 -2
  680. package/dist/array/substitute.cjs.map +0 -1
  681. package/dist/array/substitute.js +0 -13
  682. package/dist/array/substitute.js.map +0 -1
  683. package/dist/async/delay.cjs +0 -2
  684. package/dist/async/delay.cjs.map +0 -1
  685. package/dist/async/delay.js +0 -8
  686. package/dist/async/delay.js.map +0 -1
  687. package/dist/function/proxy.cjs +0 -2
  688. package/dist/function/proxy.cjs.map +0 -1
  689. package/dist/function/proxy.js +0 -22
  690. package/dist/function/proxy.js.map +0 -1
  691. package/dist/function/prune.cjs +0 -2
  692. package/dist/function/prune.cjs.map +0 -1
  693. package/dist/function/prune.js +0 -30
  694. package/dist/function/prune.js.map +0 -1
  695. package/dist/function/worker.cjs +0 -14
  696. package/dist/function/worker.cjs.map +0 -1
  697. package/dist/function/worker.js +0 -29
  698. package/dist/function/worker.js.map +0 -1
  699. package/dist/index.cjs.map +0 -1
  700. package/dist/index.js.map +0 -1
  701. package/dist/logit/dist/logit.cjs +0 -2
  702. package/dist/logit/dist/logit.cjs.map +0 -1
  703. package/dist/logit/dist/logit.js +0 -263
  704. package/dist/logit/dist/logit.js.map +0 -1
  705. package/dist/math/add.cjs +0 -2
  706. package/dist/math/add.cjs.map +0 -1
  707. package/dist/math/add.js +0 -9
  708. package/dist/math/add.js.map +0 -1
  709. package/dist/math/boil.cjs +0 -2
  710. package/dist/math/boil.cjs.map +0 -1
  711. package/dist/math/boil.js +0 -17
  712. package/dist/math/boil.js.map +0 -1
  713. package/dist/math/divide.cjs +0 -2
  714. package/dist/math/divide.cjs.map +0 -1
  715. package/dist/math/divide.js +0 -11
  716. package/dist/math/divide.js.map +0 -1
  717. package/dist/math/multiply.cjs +0 -2
  718. package/dist/math/multiply.cjs.map +0 -1
  719. package/dist/math/multiply.js +0 -9
  720. package/dist/math/multiply.js.map +0 -1
  721. package/dist/math/rate.cjs +0 -2
  722. package/dist/math/rate.cjs.map +0 -1
  723. package/dist/math/rate.js +0 -9
  724. package/dist/math/rate.js.map +0 -1
  725. package/dist/math/subtract.cjs +0 -2
  726. package/dist/math/subtract.cjs.map +0 -1
  727. package/dist/math/subtract.js +0 -9
  728. package/dist/math/subtract.js.map +0 -1
  729. package/dist/object/cache.cjs +0 -2
  730. package/dist/object/cache.cjs.map +0 -1
  731. package/dist/object/cache.js +0 -63
  732. package/dist/object/cache.js.map +0 -1
  733. package/dist/object/clone.cjs +0 -2
  734. package/dist/object/clone.cjs.map +0 -1
  735. package/dist/object/clone.js +0 -17
  736. package/dist/object/clone.js.map +0 -1
  737. package/dist/object/entries.cjs +0 -2
  738. package/dist/object/entries.cjs.map +0 -1
  739. package/dist/object/entries.js +0 -9
  740. package/dist/object/entries.js.map +0 -1
  741. package/dist/object/keys.cjs +0 -2
  742. package/dist/object/keys.cjs.map +0 -1
  743. package/dist/object/keys.js +0 -9
  744. package/dist/object/keys.js.map +0 -1
  745. package/dist/object/values.cjs +0 -2
  746. package/dist/object/values.cjs.map +0 -1
  747. package/dist/object/values.js +0 -9
  748. package/dist/object/values.js.map +0 -1
  749. package/dist/typed/ge.cjs +0 -2
  750. package/dist/typed/ge.cjs.map +0 -1
  751. package/dist/typed/ge.js +0 -7
  752. package/dist/typed/ge.js.map +0 -1
  753. package/dist/typed/gt.cjs +0 -2
  754. package/dist/typed/gt.cjs.map +0 -1
  755. package/dist/typed/gt.js +0 -7
  756. package/dist/typed/gt.js.map +0 -1
  757. package/dist/typed/le.cjs +0 -2
  758. package/dist/typed/le.cjs.map +0 -1
  759. package/dist/typed/le.js +0 -7
  760. package/dist/typed/le.js.map +0 -1
  761. package/dist/typed/lt.cjs +0 -2
  762. package/dist/typed/lt.cjs.map +0 -1
  763. package/dist/typed/lt.js +0 -7
  764. package/dist/typed/lt.js.map +0 -1
@@ -1,18 +1,20 @@
1
- import { isEqual as b } from "../typed/isEqual.js";
2
- import { isObject as r } from "../typed/isObject.js";
3
- function j(f, s, n = b) {
4
- if (!f && !s) return {};
5
- const o = {};
6
- for (const t of /* @__PURE__ */ new Set([...Object.keys(f ?? {}), ...Object.keys(s ?? {})])) {
7
- const e = f?.[t], i = s?.[t];
8
- if (r(e) && r(i)) {
9
- const c = j(e, i, n);
10
- Object.keys(c).length > 0 && (o[t] = c);
11
- } else n(e, i) || (o[t] = e);
12
- }
13
- return o;
1
+ import { isEqual as e } from "../typed/isEqual.js";
2
+ import { isObject as t } from "../typed/isObject.js";
3
+ //#region src/object/diff.ts
4
+ var n = Symbol("deleted");
5
+ function r(i, a, o = e) {
6
+ if (!i && !a) return {};
7
+ let s = {};
8
+ for (let e of new Set([...Object.keys(i ?? {}), ...Object.keys(a ?? {})])) {
9
+ let c = i?.[e], l = a?.[e];
10
+ if (t(c) && t(l)) {
11
+ let t = r(c, l, o);
12
+ Object.keys(t).length > 0 && (s[e] = t);
13
+ } else o(c, l) || (s[e] = a != null && e in a && (i == null || !(e in i)) ? n : c);
14
+ }
15
+ return s;
14
16
  }
15
- export {
16
- j as diff
17
- };
18
- //# sourceMappingURL=diff.js.map
17
+ //#endregion
18
+ export { n as DELETED, r as diff };
19
+
20
+ //# sourceMappingURL=diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sources":["../../src/object/diff.ts"],"sourcesContent":["import { isEqual } from '../typed/isEqual';\nimport { isObject } from '../typed/isObject';\nimport type { Obj } from '../types';\n\n/**\n * Computes the difference between two objects.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: 2, c: 3 };\n * const obj2 = { b: 2, c: 3, d: 4 };\n *\n * diff(obj1, obj2); // { d: 4 }\n * ```\n *\n * @param curr - The current object.\n * @param prev - The previous object.\n * @param [compareFn] - A custom function to compare values.\n * @returns An object containing new/modified properties.\n */\nexport function diff<T extends Obj>(\n curr?: T,\n prev?: T,\n compareFn: (a: unknown, b: unknown) => boolean = isEqual,\n): Partial<T> {\n if (!curr && !prev) return {} as Partial<T>;\n\n const result: Record<string, unknown> = {};\n\n for (const key of new Set([...Object.keys(curr ?? {}), ...Object.keys(prev ?? {})])) {\n const _curr = curr?.[key];\n const _prev = prev?.[key];\n\n if (isObject(_curr) && isObject(_prev)) {\n const nestedDiff = diff(_curr, _prev, compareFn) as Partial<T[keyof T]>;\n if (Object.keys(nestedDiff).length > 0) {\n result[key] = nestedDiff;\n }\n } else if (!compareFn(_curr, _prev)) {\n result[key] = _curr;\n }\n }\n\n return result as Partial<T>;\n}\n"],"names":["diff","curr","prev","compareFn","isEqual","result","key","_curr","_prev","isObject","nestedDiff"],"mappings":";;AAoBO,SAASA,EACdC,GACAC,GACAC,IAAiDC,GACrC;AACZ,MAAI,CAACH,KAAQ,CAACC,UAAa,CAAA;AAE3B,QAAMG,IAAkC,CAAA;AAExC,aAAWC,KAAO,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAKL,KAAQ,CAAA,CAAE,GAAG,GAAG,OAAO,KAAKC,KAAQ,CAAA,CAAE,CAAC,CAAC,GAAG;AACnF,UAAMK,IAAQN,IAAOK,CAAG,GAClBE,IAAQN,IAAOI,CAAG;AAExB,QAAIG,EAASF,CAAK,KAAKE,EAASD,CAAK,GAAG;AACtC,YAAME,IAAaV,EAAKO,GAAOC,GAAOL,CAAS;AAC/C,MAAI,OAAO,KAAKO,CAAU,EAAE,SAAS,MACnCL,EAAOC,CAAG,IAAII;AAAA,IAElB,MAAA,CAAYP,EAAUI,GAAOC,CAAK,MAChCH,EAAOC,CAAG,IAAIC;AAAA,EAElB;AAEA,SAAOF;AACT;"}
1
+ {"version":3,"file":"diff.js","names":[],"sources":["../../src/object/diff.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isEqual } from '../typed/isEqual';\nimport { isObject } from '../typed/isObject';\n\n/** Sentinel value returned by `diff` when a key exists in `prev` but not in `curr`. */\nexport const DELETED: unique symbol = Symbol('deleted');\n\nexport type DiffResult<T extends Obj> = { [K in keyof T]?: T[K] | typeof DELETED };\n\n/**\n * Computes the difference between two objects.\n *\n * Keys present in `prev` but absent in `curr` are marked with the `DELETED` sentinel.\n *\n * @example\n * ```ts\n * import { diff, DELETED } from '@vielzeug/toolkit';\n *\n * diff({ a: 1, b: 2 }, { a: 1, b: 2, c: 3 }); // { c: DELETED }\n * diff({ a: 1, b: 99 }, { a: 1, b: 2 }); // { b: 99 }\n * ```\n *\n * @param curr - The current object.\n * @param prev - The previous object.\n * @param [compareFn] - A custom function to compare values.\n * @returns An object containing new/modified/deleted properties.\n */\nexport function diff<T extends Obj>(\n curr?: T,\n prev?: T,\n compareFn: (a: unknown, b: unknown) => boolean = isEqual,\n): DiffResult<T> {\n if (!curr && !prev) return {};\n\n const result: Record<string, unknown> = {};\n\n for (const key of new Set([...Object.keys(curr ?? {}), ...Object.keys(prev ?? {})])) {\n const _curr = curr?.[key];\n const _prev = prev?.[key];\n\n if (isObject(_curr) && isObject(_prev)) {\n const nestedDiff = diff(_curr as Obj, _prev as Obj, compareFn);\n\n if (Object.keys(nestedDiff).length > 0) {\n result[key] = nestedDiff;\n }\n } else if (!compareFn(_curr, _prev)) {\n const wasDeleted = prev != null && key in prev && (curr == null || !(key in curr));\n\n result[key] = wasDeleted ? DELETED : _curr;\n }\n }\n\n return result as DiffResult<T>;\n}\n"],"mappings":";;;AAMA,IAAa,IAAyB,OAAO,UAAU;AAsBvD,SAAgB,EACd,GACA,GACA,IAAiD,GAClC;AACf,KAAI,CAAC,KAAQ,CAAC,EAAM,QAAO,EAAE;CAE7B,IAAM,IAAkC,EAAE;AAE1C,MAAK,IAAM,KAAO,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,KAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,KAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;EACnF,IAAM,IAAQ,IAAO,IACf,IAAQ,IAAO;AAErB,MAAI,EAAS,EAAM,IAAI,EAAS,EAAM,EAAE;GACtC,IAAM,IAAa,EAAK,GAAc,GAAc,EAAU;AAE9D,GAAI,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAO,KAAO;SAEN,EAAU,GAAO,EAAM,KAGjC,EAAO,KAFY,KAAQ,QAAQ,KAAO,MAAS,KAAQ,QAAQ,EAAE,KAAO,MAEjD,IAAU;;AAIzC,QAAO"}
@@ -0,0 +1,9 @@
1
+ export * from './stash';
2
+ export * from './diff';
3
+ export * from './merge';
4
+ export * from './parseJSON';
5
+ export * from './path';
6
+ export * from './proxy';
7
+ export * from './prune';
8
+ export * from './seek';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../typed/isArray.cjs"),f=require("../typed/isObject.cjs");function a(i="deep",...n){return n.length===0?{}:i==="shallow"?Object.assign({},...n):n.reduce((e,r)=>l(e,r,i),{})}function l(i,n,e){if(!f.isObject(n))return n;const r={...i};for(const c in n){if(!Object.hasOwn(n,c))continue;const t=n[c],u=r[c];r[c]=o.isArray(t)&&o.isArray(u)?b(u,t,e):f.isObject(t)&&f.isObject(u)?l(u,t,e):O(u,t,e)}return r}function b(i,n,e){return i?e==="arrayConcat"?i.concat(n):e==="arrayReplace"?n:Array.from(new Set([...i,...n])):n}function O(i,n,e){return typeof e=="function"?e(i,n):e==="lastWins"||n!==void 0?n:i}exports.merge=a;
2
- //# sourceMappingURL=merge.cjs.map
1
+ const e=require(`../typed/isArray.cjs`),t=require(`../typed/isObject.cjs`);function n(e=`deep`,...t){return t.length===0?{}:e===`shallow`?Object.assign({},...t):t.reduce((t,n)=>a(t,n,e),{})}function r(...e){return n(`deep`,...e)}function i(...e){return n(`shallow`,...e)}function a(n,r,i){if(!t.isObject(r))return r;let c={...n};for(let n of Object.keys(r)){let l=r[n],u=c[n];c[n]=e.isArray(l)&&e.isArray(u)?o(u,l,i):t.isObject(l)&&t.isObject(u)?a(u,l,i):s(u,l,i)}return c}function o(e,t,n){return e?n===`arrayConcat`?e.concat(t):n===`arrayReplace`?t:[...e,...t]:t}function s(e,t,n){return typeof n==`function`?n(e,t):n===`lastWins`||t!==void 0?t:e}exports.deepMerge=r,exports.merge=n,exports.shallowMerge=i;
2
+ //# sourceMappingURL=merge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.cjs","sources":["../../src/object/merge.ts"],"sourcesContent":["import { isArray } from '../typed/isArray';\nimport { isObject } from '../typed/isObject';\nimport type { Obj } from '../types';\n\n// #region MergeStrategy\ntype MergeStrategy =\n | 'deep'\n | 'shallow'\n | 'lastWins'\n | 'arrayConcat'\n | 'arrayReplace'\n // biome-ignore lint/suspicious/noExplicitAny: -\n | ((target: any, source: any) => any);\n// #endregion MergeStrategy\n\ntype DeepMerge<T, U> = T extends Obj\n ? U extends Obj\n ? {\n [K in keyof T | keyof U]: K extends keyof T\n ? K extends keyof U\n ? DeepMerge<T[K], U[K]>\n : T[K]\n : K extends keyof U\n ? U[K]\n : never;\n }\n : U\n : U;\n\ntype Merge<T extends Obj[]> = T extends [infer First, ...infer Rest]\n ? First extends Obj\n ? Rest extends Obj[]\n ? DeepMerge<First, Merge<Rest>>\n : First\n : Obj\n : Obj;\n\n/**\n * Merges multiple objects based on a specified merge strategy.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: { x: 10, y: \"hello\" }, c: [1] };\n * const obj2 = { b: { y: 20, z: true }, c: [2] };\n * const obj3 = { d: false, c: [3] };\n *\n * merge(\"deep\", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }\n * merge(\"shallow\", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }\n * ```\n *\n * @param [strategy='deep'] - The merging strategy to use.\n * @param items - The objects to merge.\n * @returns A new merged object.\n */\nexport function merge<T extends Obj[]>(strategy: MergeStrategy = 'deep', ...items: [...T]): Merge<T> {\n if (items.length === 0) return {} as Merge<T>;\n\n if (strategy === 'shallow') {\n return Object.assign({}, ...items) as Merge<T>;\n }\n\n return items.reduce((acc, obj) => deepMerge(acc, obj, strategy) as unknown as Merge<T>, {} as Merge<T>);\n}\n\n/**\n * Deeply merges two objects based on the provided strategy.\n *\n * - Uses **direct property access** for performance.\n * - **Avoids redundant deep merging** where unnecessary.\n * - Optimized **array merging strategies**.\n *\n * @param target - The target object.\n * @param source - The source object.\n * @param strategy - The merge strategy.\n * @returns A new merged object.\n */\nfunction deepMerge<T extends Obj, U extends Obj>(target: T, source: U, strategy: MergeStrategy): DeepMerge<T, U> {\n if (!isObject(source)) return source as DeepMerge<T, U>;\n\n const result = { ...target } as DeepMerge<T, U>;\n\n for (const key in source) {\n if (!Object.hasOwn(source, key)) continue; // Prevent prototype pollution\n\n const sourceValue = source[key];\n const targetValue = result[key];\n\n // biome-ignore lint/suspicious/noExplicitAny: -\n (result as any)[key] =\n isArray(sourceValue) && isArray(targetValue)\n ? handleArrayMerge(targetValue, sourceValue, strategy)\n : isObject(sourceValue) && isObject(targetValue)\n ? deepMerge(targetValue, sourceValue, strategy)\n : applyMergeStrategy(targetValue, sourceValue, strategy);\n }\n\n return result;\n}\n\n/**\n * Optimized array merge based on strategy.\n *\n * - `\"arrayConcat\"` → Concatenates arrays.\n * - `\"arrayReplace\"` → Replaces the existing array.\n * - Default: **Unique merge** (Set-based optimization).\n */\nfunction handleArrayMerge<T, U>(targetArray: T[] | undefined, sourceArray: U[], strategy: MergeStrategy): (T | U)[] {\n if (!targetArray) return sourceArray;\n // biome-ignore lint/suspicious/noExplicitAny: -\n if (strategy === 'arrayConcat') return targetArray.concat(sourceArray as any);\n if (strategy === 'arrayReplace') return sourceArray;\n return Array.from(new Set([...targetArray, ...sourceArray])); // Unique merge\n}\n\n/**\n * Determines the appropriate value to assign based on the merge strategy.\n *\n * - `\"lastWins\"` → Overwrites with the latest value.\n * - Custom functions → Allows user-defined behavior.\n */\nfunction applyMergeStrategy<T, U>(target: T, source: U, strategy: MergeStrategy): T | U {\n if (typeof strategy === 'function') return strategy(target, source);\n return strategy === 'lastWins' || source !== undefined ? source : target;\n}\n"],"names":["merge","strategy","items","acc","obj","deepMerge","target","source","isObject","result","key","sourceValue","targetValue","isArray","handleArrayMerge","applyMergeStrategy","targetArray","sourceArray"],"mappings":"2JAsDO,SAASA,EAAuBC,EAA0B,UAAWC,EAAyB,CACnG,OAAIA,EAAM,SAAW,EAAU,CAAA,EAE3BD,IAAa,UACR,OAAO,OAAO,CAAA,EAAI,GAAGC,CAAK,EAG5BA,EAAM,OAAO,CAACC,EAAKC,IAAQC,EAAUF,EAAKC,EAAKH,CAAQ,EAA0B,EAAc,CACxG,CAcA,SAASI,EAAwCC,EAAWC,EAAWN,EAA0C,CAC/G,GAAI,CAACO,EAAAA,SAASD,CAAM,EAAG,OAAOA,EAE9B,MAAME,EAAS,CAAE,GAAGH,CAAA,EAEpB,UAAWI,KAAOH,EAAQ,CACxB,GAAI,CAAC,OAAO,OAAOA,EAAQG,CAAG,EAAG,SAEjC,MAAMC,EAAcJ,EAAOG,CAAG,EACxBE,EAAcH,EAAOC,CAAG,EAG7BD,EAAeC,CAAG,EACjBG,EAAAA,QAAQF,CAAW,GAAKE,EAAAA,QAAQD,CAAW,EACvCE,EAAiBF,EAAaD,EAAaV,CAAQ,EACnDO,EAAAA,SAASG,CAAW,GAAKH,EAAAA,SAASI,CAAW,EAC3CP,EAAUO,EAAaD,EAAaV,CAAQ,EAC5Cc,EAAmBH,EAAaD,EAAaV,CAAQ,CAC/D,CAEA,OAAOQ,CACT,CASA,SAASK,EAAuBE,EAA8BC,EAAkBhB,EAAoC,CAClH,OAAKe,EAEDf,IAAa,cAAsBe,EAAY,OAAOC,CAAkB,EACxEhB,IAAa,eAAuBgB,EACjC,MAAM,KAAK,IAAI,IAAI,CAAC,GAAGD,EAAa,GAAGC,CAAW,CAAC,CAAC,EAJlCA,CAK3B,CAQA,SAASF,EAAyBT,EAAWC,EAAWN,EAAgC,CACtF,OAAI,OAAOA,GAAa,WAAmBA,EAASK,EAAQC,CAAM,EAC3DN,IAAa,YAAcM,IAAW,OAAYA,EAASD,CACpE"}
1
+ {"version":3,"file":"merge.cjs","names":[],"sources":["../../src/object/merge.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isArray } from '../typed/isArray';\nimport { isObject } from '../typed/isObject';\n\n// #region MergeStrategy\ntype MergeStrategy =\n | 'deep'\n | 'shallow'\n | 'lastWins'\n | 'arrayConcat'\n | 'arrayReplace'\n | ((target: any, source: any) => any);\n// #endregion MergeStrategy\n\ntype DeepMerge<T, U> = T extends Obj\n ? U extends Obj\n ? {\n [K in keyof T | keyof U]: K extends keyof T\n ? K extends keyof U\n ? DeepMerge<T[K], U[K]>\n : T[K]\n : K extends keyof U\n ? U[K]\n : never;\n }\n : U\n : U;\n\ntype Merge<T extends Obj[]> = T extends [infer First, ...infer Rest]\n ? First extends Obj\n ? Rest extends Obj[]\n ? DeepMerge<First, Merge<Rest>>\n : First\n : Obj\n : Obj;\n\n/**\n * Merges multiple objects based on a specified merge strategy.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: { x: 10, y: \"hello\" }, c: [1] };\n * const obj2 = { b: { y: 20, z: true }, c: [2] };\n * const obj3 = { d: false, c: [3] };\n *\n * merge(\"deep\", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }\n * merge(\"shallow\", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }\n * ```\n *\n * @param [strategy='deep'] - The merging strategy to use.\n * @param items - The objects to merge.\n * @returns A new merged object.\n */\nexport function merge<T extends Obj[]>(strategy: MergeStrategy = 'deep', ...items: [...T]): Merge<T> {\n if (items.length === 0) return {} as Merge<T>;\n\n if (strategy === 'shallow') {\n return Object.assign({}, ...items) as Merge<T>;\n }\n\n return items.reduce((acc, obj) => mergeObjects(acc, obj, strategy) as unknown as Merge<T>, {} as Merge<T>);\n}\n\n/**\n * Merges objects deeply. Shorthand for `merge('deep', ...items)`.\n *\n * @example\n * ```ts\n * deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }\n * ```\n */\nexport function deepMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('deep', ...items) as Merge<T>;\n}\n\n/**\n * Merges objects shallowly. Shorthand for `merge('shallow', ...items)`.\n *\n * @example\n * ```ts\n * shallowMerge({ a: 1, b: { x: 1 } }, { b: { y: 2 } }); // { a: 1, b: { y: 2 } }\n * ```\n */\nexport function shallowMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('shallow', ...items) as Merge<T>;\n}\n\n/**\n * Deeply merges two objects based on the provided strategy.\n *\n * - Uses **direct property access** for performance.\n * - **Avoids redundant deep merging** where unnecessary.\n * - Optimized **array merging strategies**.\n *\n * @param target - The target object.\n * @param source - The source object.\n * @param strategy - The merge strategy.\n * @returns A new merged object.\n */\nfunction mergeObjects<T extends Obj, U extends Obj>(target: T, source: U, strategy: MergeStrategy): DeepMerge<T, U> {\n if (!isObject(source)) return source as DeepMerge<T, U>;\n\n const result = { ...target } as DeepMerge<T, U>;\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n (result as any)[key] =\n isArray(sourceValue) && isArray(targetValue)\n ? handleArrayMerge(targetValue, sourceValue, strategy)\n : isObject(sourceValue) && isObject(targetValue)\n ? mergeObjects(targetValue as Obj, sourceValue as Obj, strategy)\n : applyMergeStrategy(targetValue, sourceValue, strategy);\n }\n\n return result;\n}\n\n/**\n * Optimized array merge based on strategy.\n *\n * - `\"arrayConcat\"` → Concatenates arrays.\n * - `\"arrayReplace\"` → Replaces the existing array.\n * - Default: Concatenates arrays (same as `\"arrayConcat\"`).\n */\nfunction handleArrayMerge<T, U>(targetArray: T[] | undefined, sourceArray: U[], strategy: MergeStrategy): (T | U)[] {\n if (!targetArray) return sourceArray;\n\n if (strategy === 'arrayConcat') return targetArray.concat(sourceArray as any);\n\n if (strategy === 'arrayReplace') return sourceArray;\n\n return [...targetArray, ...sourceArray];\n}\n\n/**\n * Determines the appropriate value to assign based on the merge strategy.\n *\n * - `\"lastWins\"` → Overwrites with the latest value.\n * - Custom functions → Allows user-defined behavior.\n */\nfunction applyMergeStrategy<T, U>(target: T, source: U, strategy: MergeStrategy): T | U {\n if (typeof strategy === 'function') return strategy(target, source);\n\n return strategy === 'lastWins' || source !== undefined ? source : target;\n}\n"],"mappings":"2EAsDA,SAAgB,EAAuB,EAA0B,OAAQ,GAAG,EAAyB,CAOnG,OANI,EAAM,SAAW,EAAU,EAAE,CAE7B,IAAa,UACR,OAAO,OAAO,EAAE,CAAE,GAAG,EAAM,CAG7B,EAAM,QAAQ,EAAK,IAAQ,EAAa,EAAK,EAAK,EAAS,CAAyB,EAAE,CAAa,CAW5G,SAAgB,EAA2B,GAAG,EAAyB,CACrE,OAAO,EAAM,OAAQ,GAAG,EAAM,CAWhC,SAAgB,EAA8B,GAAG,EAAyB,CACxE,OAAO,EAAM,UAAW,GAAG,EAAM,CAenC,SAAS,EAA2C,EAAW,EAAW,EAA0C,CAClH,GAAI,CAAC,EAAA,SAAS,EAAO,CAAE,OAAO,EAE9B,IAAM,EAAS,CAAE,GAAG,EAAQ,CAE5B,IAAK,IAAM,KAAO,OAAO,KAAK,EAAO,CAAE,CACrC,IAAM,EAAc,EAAO,GACrB,EAAc,EAAO,GAE1B,EAAe,GACd,EAAA,QAAQ,EAAY,EAAI,EAAA,QAAQ,EAAY,CACxC,EAAiB,EAAa,EAAa,EAAS,CACpD,EAAA,SAAS,EAAY,EAAI,EAAA,SAAS,EAAY,CAC5C,EAAa,EAAoB,EAAoB,EAAS,CAC9D,EAAmB,EAAa,EAAa,EAAS,CAGhE,OAAO,EAUT,SAAS,EAAuB,EAA8B,EAAkB,EAAoC,CAOlH,OANK,EAED,IAAa,cAAsB,EAAY,OAAO,EAAmB,CAEzE,IAAa,eAAuB,EAEjC,CAAC,GAAG,EAAa,GAAG,EAAY,CANd,EAe3B,SAAS,EAAyB,EAAW,EAAW,EAAgC,CAGtF,OAFI,OAAO,GAAa,WAAmB,EAAS,EAAQ,EAAO,CAE5D,IAAa,YAAc,IAAW,IAAA,GAAY,EAAS"}
@@ -0,0 +1,44 @@
1
+ import type { Obj } from '../types';
2
+ type MergeStrategy = 'deep' | 'shallow' | 'lastWins' | 'arrayConcat' | 'arrayReplace' | ((target: any, source: any) => any);
3
+ type DeepMerge<T, U> = T extends Obj ? U extends Obj ? {
4
+ [K in keyof T | keyof U]: K extends keyof T ? K extends keyof U ? DeepMerge<T[K], U[K]> : T[K] : K extends keyof U ? U[K] : never;
5
+ } : U : U;
6
+ type Merge<T extends Obj[]> = T extends [infer First, ...infer Rest] ? First extends Obj ? Rest extends Obj[] ? DeepMerge<First, Merge<Rest>> : First : Obj : Obj;
7
+ /**
8
+ * Merges multiple objects based on a specified merge strategy.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const obj1 = { a: 1, b: { x: 10, y: "hello" }, c: [1] };
13
+ * const obj2 = { b: { y: 20, z: true }, c: [2] };
14
+ * const obj3 = { d: false, c: [3] };
15
+ *
16
+ * merge("deep", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }
17
+ * merge("shallow", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }
18
+ * ```
19
+ *
20
+ * @param [strategy='deep'] - The merging strategy to use.
21
+ * @param items - The objects to merge.
22
+ * @returns A new merged object.
23
+ */
24
+ export declare function merge<T extends Obj[]>(strategy?: MergeStrategy, ...items: [...T]): Merge<T>;
25
+ /**
26
+ * Merges objects deeply. Shorthand for `merge('deep', ...items)`.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }
31
+ * ```
32
+ */
33
+ export declare function deepMerge<T extends Obj[]>(...items: [...T]): Merge<T>;
34
+ /**
35
+ * Merges objects shallowly. Shorthand for `merge('shallow', ...items)`.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * shallowMerge({ a: 1, b: { x: 1 } }, { b: { y: 2 } }); // { a: 1, b: { y: 2 } }
40
+ * ```
41
+ */
42
+ export declare function shallowMerge<T extends Obj[]>(...items: [...T]): Merge<T>;
43
+ export {};
44
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/object/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAMpC,KAAK,aAAa,GACd,MAAM,GACN,SAAS,GACT,UAAU,GACV,aAAa,GACb,cAAc,GACd,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAGxC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,GAChC,CAAC,SAAS,GAAG,GACX;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GACvC,CAAC,SAAS,MAAM,CAAC,GACf,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GACrB,CAAC,CAAC,CAAC,CAAC,GACN,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACZ,GACD,CAAC,GACH,CAAC,CAAC;AAEN,KAAK,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,GAChE,KAAK,SAAS,GAAG,GACf,IAAI,SAAS,GAAG,EAAE,GAChB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAC7B,KAAK,GACP,GAAG,GACL,GAAG,CAAC;AAER;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,QAAQ,GAAE,aAAsB,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAQnG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAExE"}
@@ -1,25 +1,31 @@
1
- import { isArray as c } from "../typed/isArray.js";
2
- import { isObject as u } from "../typed/isObject.js";
3
- function m(i = "deep", ...n) {
4
- return n.length === 0 ? {} : i === "shallow" ? Object.assign({}, ...n) : n.reduce((e, r) => l(e, r, i), {});
1
+ import { isArray as e } from "../typed/isArray.js";
2
+ import { isObject as t } from "../typed/isObject.js";
3
+ //#region src/object/merge.ts
4
+ function n(e = "deep", ...t) {
5
+ return t.length === 0 ? {} : e === "shallow" ? Object.assign({}, ...t) : t.reduce((t, n) => a(t, n, e), {});
5
6
  }
6
- function l(i, n, e) {
7
- if (!u(n)) return n;
8
- const r = { ...i };
9
- for (const o in n) {
10
- if (!Object.hasOwn(n, o)) continue;
11
- const f = n[o], t = r[o];
12
- r[o] = c(f) && c(t) ? p(t, f, e) : u(f) && u(t) ? l(t, f, e) : a(t, f, e);
13
- }
14
- return r;
7
+ function r(...e) {
8
+ return n("deep", ...e);
15
9
  }
16
- function p(i, n, e) {
17
- return i ? e === "arrayConcat" ? i.concat(n) : e === "arrayReplace" ? n : Array.from(/* @__PURE__ */ new Set([...i, ...n])) : n;
10
+ function i(...e) {
11
+ return n("shallow", ...e);
18
12
  }
19
- function a(i, n, e) {
20
- return typeof e == "function" ? e(i, n) : e === "lastWins" || n !== void 0 ? n : i;
13
+ function a(n, r, i) {
14
+ if (!t(r)) return r;
15
+ let c = { ...n };
16
+ for (let n of Object.keys(r)) {
17
+ let l = r[n], u = c[n];
18
+ c[n] = e(l) && e(u) ? o(u, l, i) : t(l) && t(u) ? a(u, l, i) : s(u, l, i);
19
+ }
20
+ return c;
21
21
  }
22
- export {
23
- m as merge
24
- };
25
- //# sourceMappingURL=merge.js.map
22
+ function o(e, t, n) {
23
+ return e ? n === "arrayConcat" ? e.concat(t) : n === "arrayReplace" ? t : [...e, ...t] : t;
24
+ }
25
+ function s(e, t, n) {
26
+ return typeof n == "function" ? n(e, t) : n === "lastWins" || t !== void 0 ? t : e;
27
+ }
28
+ //#endregion
29
+ export { r as deepMerge, n as merge, i as shallowMerge };
30
+
31
+ //# sourceMappingURL=merge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sources":["../../src/object/merge.ts"],"sourcesContent":["import { isArray } from '../typed/isArray';\nimport { isObject } from '../typed/isObject';\nimport type { Obj } from '../types';\n\n// #region MergeStrategy\ntype MergeStrategy =\n | 'deep'\n | 'shallow'\n | 'lastWins'\n | 'arrayConcat'\n | 'arrayReplace'\n // biome-ignore lint/suspicious/noExplicitAny: -\n | ((target: any, source: any) => any);\n// #endregion MergeStrategy\n\ntype DeepMerge<T, U> = T extends Obj\n ? U extends Obj\n ? {\n [K in keyof T | keyof U]: K extends keyof T\n ? K extends keyof U\n ? DeepMerge<T[K], U[K]>\n : T[K]\n : K extends keyof U\n ? U[K]\n : never;\n }\n : U\n : U;\n\ntype Merge<T extends Obj[]> = T extends [infer First, ...infer Rest]\n ? First extends Obj\n ? Rest extends Obj[]\n ? DeepMerge<First, Merge<Rest>>\n : First\n : Obj\n : Obj;\n\n/**\n * Merges multiple objects based on a specified merge strategy.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: { x: 10, y: \"hello\" }, c: [1] };\n * const obj2 = { b: { y: 20, z: true }, c: [2] };\n * const obj3 = { d: false, c: [3] };\n *\n * merge(\"deep\", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }\n * merge(\"shallow\", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }\n * ```\n *\n * @param [strategy='deep'] - The merging strategy to use.\n * @param items - The objects to merge.\n * @returns A new merged object.\n */\nexport function merge<T extends Obj[]>(strategy: MergeStrategy = 'deep', ...items: [...T]): Merge<T> {\n if (items.length === 0) return {} as Merge<T>;\n\n if (strategy === 'shallow') {\n return Object.assign({}, ...items) as Merge<T>;\n }\n\n return items.reduce((acc, obj) => deepMerge(acc, obj, strategy) as unknown as Merge<T>, {} as Merge<T>);\n}\n\n/**\n * Deeply merges two objects based on the provided strategy.\n *\n * - Uses **direct property access** for performance.\n * - **Avoids redundant deep merging** where unnecessary.\n * - Optimized **array merging strategies**.\n *\n * @param target - The target object.\n * @param source - The source object.\n * @param strategy - The merge strategy.\n * @returns A new merged object.\n */\nfunction deepMerge<T extends Obj, U extends Obj>(target: T, source: U, strategy: MergeStrategy): DeepMerge<T, U> {\n if (!isObject(source)) return source as DeepMerge<T, U>;\n\n const result = { ...target } as DeepMerge<T, U>;\n\n for (const key in source) {\n if (!Object.hasOwn(source, key)) continue; // Prevent prototype pollution\n\n const sourceValue = source[key];\n const targetValue = result[key];\n\n // biome-ignore lint/suspicious/noExplicitAny: -\n (result as any)[key] =\n isArray(sourceValue) && isArray(targetValue)\n ? handleArrayMerge(targetValue, sourceValue, strategy)\n : isObject(sourceValue) && isObject(targetValue)\n ? deepMerge(targetValue, sourceValue, strategy)\n : applyMergeStrategy(targetValue, sourceValue, strategy);\n }\n\n return result;\n}\n\n/**\n * Optimized array merge based on strategy.\n *\n * - `\"arrayConcat\"` → Concatenates arrays.\n * - `\"arrayReplace\"` → Replaces the existing array.\n * - Default: **Unique merge** (Set-based optimization).\n */\nfunction handleArrayMerge<T, U>(targetArray: T[] | undefined, sourceArray: U[], strategy: MergeStrategy): (T | U)[] {\n if (!targetArray) return sourceArray;\n // biome-ignore lint/suspicious/noExplicitAny: -\n if (strategy === 'arrayConcat') return targetArray.concat(sourceArray as any);\n if (strategy === 'arrayReplace') return sourceArray;\n return Array.from(new Set([...targetArray, ...sourceArray])); // Unique merge\n}\n\n/**\n * Determines the appropriate value to assign based on the merge strategy.\n *\n * - `\"lastWins\"` → Overwrites with the latest value.\n * - Custom functions → Allows user-defined behavior.\n */\nfunction applyMergeStrategy<T, U>(target: T, source: U, strategy: MergeStrategy): T | U {\n if (typeof strategy === 'function') return strategy(target, source);\n return strategy === 'lastWins' || source !== undefined ? source : target;\n}\n"],"names":["merge","strategy","items","acc","obj","deepMerge","target","source","isObject","result","key","sourceValue","targetValue","isArray","handleArrayMerge","applyMergeStrategy","targetArray","sourceArray"],"mappings":";;AAsDO,SAASA,EAAuBC,IAA0B,WAAWC,GAAyB;AACnG,SAAIA,EAAM,WAAW,IAAU,CAAA,IAE3BD,MAAa,YACR,OAAO,OAAO,CAAA,GAAI,GAAGC,CAAK,IAG5BA,EAAM,OAAO,CAACC,GAAKC,MAAQC,EAAUF,GAAKC,GAAKH,CAAQ,GAA0B,EAAc;AACxG;AAcA,SAASI,EAAwCC,GAAWC,GAAWN,GAA0C;AAC/G,MAAI,CAACO,EAASD,CAAM,EAAG,QAAOA;AAE9B,QAAME,IAAS,EAAE,GAAGH,EAAA;AAEpB,aAAWI,KAAOH,GAAQ;AACxB,QAAI,CAAC,OAAO,OAAOA,GAAQG,CAAG,EAAG;AAEjC,UAAMC,IAAcJ,EAAOG,CAAG,GACxBE,IAAcH,EAAOC,CAAG;AAG7B,IAAAD,EAAeC,CAAG,IACjBG,EAAQF,CAAW,KAAKE,EAAQD,CAAW,IACvCE,EAAiBF,GAAaD,GAAaV,CAAQ,IACnDO,EAASG,CAAW,KAAKH,EAASI,CAAW,IAC3CP,EAAUO,GAAaD,GAAaV,CAAQ,IAC5Cc,EAAmBH,GAAaD,GAAaV,CAAQ;AAAA,EAC/D;AAEA,SAAOQ;AACT;AASA,SAASK,EAAuBE,GAA8BC,GAAkBhB,GAAoC;AAClH,SAAKe,IAEDf,MAAa,gBAAsBe,EAAY,OAAOC,CAAkB,IACxEhB,MAAa,iBAAuBgB,IACjC,MAAM,KAAK,oBAAI,IAAI,CAAC,GAAGD,GAAa,GAAGC,CAAW,CAAC,CAAC,IAJlCA;AAK3B;AAQA,SAASF,EAAyBT,GAAWC,GAAWN,GAAgC;AACtF,SAAI,OAAOA,KAAa,aAAmBA,EAASK,GAAQC,CAAM,IAC3DN,MAAa,cAAcM,MAAW,SAAYA,IAASD;AACpE;"}
1
+ {"version":3,"file":"merge.js","names":[],"sources":["../../src/object/merge.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isArray } from '../typed/isArray';\nimport { isObject } from '../typed/isObject';\n\n// #region MergeStrategy\ntype MergeStrategy =\n | 'deep'\n | 'shallow'\n | 'lastWins'\n | 'arrayConcat'\n | 'arrayReplace'\n | ((target: any, source: any) => any);\n// #endregion MergeStrategy\n\ntype DeepMerge<T, U> = T extends Obj\n ? U extends Obj\n ? {\n [K in keyof T | keyof U]: K extends keyof T\n ? K extends keyof U\n ? DeepMerge<T[K], U[K]>\n : T[K]\n : K extends keyof U\n ? U[K]\n : never;\n }\n : U\n : U;\n\ntype Merge<T extends Obj[]> = T extends [infer First, ...infer Rest]\n ? First extends Obj\n ? Rest extends Obj[]\n ? DeepMerge<First, Merge<Rest>>\n : First\n : Obj\n : Obj;\n\n/**\n * Merges multiple objects based on a specified merge strategy.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: { x: 10, y: \"hello\" }, c: [1] };\n * const obj2 = { b: { y: 20, z: true }, c: [2] };\n * const obj3 = { d: false, c: [3] };\n *\n * merge(\"deep\", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }\n * merge(\"shallow\", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }\n * ```\n *\n * @param [strategy='deep'] - The merging strategy to use.\n * @param items - The objects to merge.\n * @returns A new merged object.\n */\nexport function merge<T extends Obj[]>(strategy: MergeStrategy = 'deep', ...items: [...T]): Merge<T> {\n if (items.length === 0) return {} as Merge<T>;\n\n if (strategy === 'shallow') {\n return Object.assign({}, ...items) as Merge<T>;\n }\n\n return items.reduce((acc, obj) => mergeObjects(acc, obj, strategy) as unknown as Merge<T>, {} as Merge<T>);\n}\n\n/**\n * Merges objects deeply. Shorthand for `merge('deep', ...items)`.\n *\n * @example\n * ```ts\n * deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }\n * ```\n */\nexport function deepMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('deep', ...items) as Merge<T>;\n}\n\n/**\n * Merges objects shallowly. Shorthand for `merge('shallow', ...items)`.\n *\n * @example\n * ```ts\n * shallowMerge({ a: 1, b: { x: 1 } }, { b: { y: 2 } }); // { a: 1, b: { y: 2 } }\n * ```\n */\nexport function shallowMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('shallow', ...items) as Merge<T>;\n}\n\n/**\n * Deeply merges two objects based on the provided strategy.\n *\n * - Uses **direct property access** for performance.\n * - **Avoids redundant deep merging** where unnecessary.\n * - Optimized **array merging strategies**.\n *\n * @param target - The target object.\n * @param source - The source object.\n * @param strategy - The merge strategy.\n * @returns A new merged object.\n */\nfunction mergeObjects<T extends Obj, U extends Obj>(target: T, source: U, strategy: MergeStrategy): DeepMerge<T, U> {\n if (!isObject(source)) return source as DeepMerge<T, U>;\n\n const result = { ...target } as DeepMerge<T, U>;\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n (result as any)[key] =\n isArray(sourceValue) && isArray(targetValue)\n ? handleArrayMerge(targetValue, sourceValue, strategy)\n : isObject(sourceValue) && isObject(targetValue)\n ? mergeObjects(targetValue as Obj, sourceValue as Obj, strategy)\n : applyMergeStrategy(targetValue, sourceValue, strategy);\n }\n\n return result;\n}\n\n/**\n * Optimized array merge based on strategy.\n *\n * - `\"arrayConcat\"` → Concatenates arrays.\n * - `\"arrayReplace\"` → Replaces the existing array.\n * - Default: Concatenates arrays (same as `\"arrayConcat\"`).\n */\nfunction handleArrayMerge<T, U>(targetArray: T[] | undefined, sourceArray: U[], strategy: MergeStrategy): (T | U)[] {\n if (!targetArray) return sourceArray;\n\n if (strategy === 'arrayConcat') return targetArray.concat(sourceArray as any);\n\n if (strategy === 'arrayReplace') return sourceArray;\n\n return [...targetArray, ...sourceArray];\n}\n\n/**\n * Determines the appropriate value to assign based on the merge strategy.\n *\n * - `\"lastWins\"` → Overwrites with the latest value.\n * - Custom functions → Allows user-defined behavior.\n */\nfunction applyMergeStrategy<T, U>(target: T, source: U, strategy: MergeStrategy): T | U {\n if (typeof strategy === 'function') return strategy(target, source);\n\n return strategy === 'lastWins' || source !== undefined ? source : target;\n}\n"],"mappings":";;;AAsDA,SAAgB,EAAuB,IAA0B,QAAQ,GAAG,GAAyB;AAOnG,QANI,EAAM,WAAW,IAAU,EAAE,GAE7B,MAAa,YACR,OAAO,OAAO,EAAE,EAAE,GAAG,EAAM,GAG7B,EAAM,QAAQ,GAAK,MAAQ,EAAa,GAAK,GAAK,EAAS,EAAyB,EAAE,CAAa;;AAW5G,SAAgB,EAA2B,GAAG,GAAyB;AACrE,QAAO,EAAM,QAAQ,GAAG,EAAM;;AAWhC,SAAgB,EAA8B,GAAG,GAAyB;AACxE,QAAO,EAAM,WAAW,GAAG,EAAM;;AAenC,SAAS,EAA2C,GAAW,GAAW,GAA0C;AAClH,KAAI,CAAC,EAAS,EAAO,CAAE,QAAO;CAE9B,IAAM,IAAS,EAAE,GAAG,GAAQ;AAE5B,MAAK,IAAM,KAAO,OAAO,KAAK,EAAO,EAAE;EACrC,IAAM,IAAc,EAAO,IACrB,IAAc,EAAO;AAE1B,IAAe,KACd,EAAQ,EAAY,IAAI,EAAQ,EAAY,GACxC,EAAiB,GAAa,GAAa,EAAS,GACpD,EAAS,EAAY,IAAI,EAAS,EAAY,GAC5C,EAAa,GAAoB,GAAoB,EAAS,GAC9D,EAAmB,GAAa,GAAa,EAAS;;AAGhE,QAAO;;AAUT,SAAS,EAAuB,GAA8B,GAAkB,GAAoC;AAOlH,QANK,IAED,MAAa,gBAAsB,EAAY,OAAO,EAAmB,GAEzE,MAAa,iBAAuB,IAEjC,CAAC,GAAG,GAAa,GAAG,EAAY,GANd;;AAe3B,SAAS,EAAyB,GAAW,GAAW,GAAgC;AAGtF,QAFI,OAAO,KAAa,aAAmB,EAAS,GAAQ,EAAO,GAE5D,MAAa,cAAc,MAAW,KAAA,IAAY,IAAS"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../logit/dist/logit.cjs"),n=require("../typed/isNil.cjs"),u=require("../typed/isString.cjs");function l(e,s={}){const{defaultValue:t,reviver:a,validator:i,silent:o=!1}=s;if(!u.isString(e))return n.isNil(e)?t:e;try{const r=JSON.parse(e,a);if(i&&!i(r))throw new TypeError("Parsed JSON does not match the expected structure");return r??t}catch(r){return o||c.Logit.error("parseJSON() -> failed to parse object",r),t}}exports.parseJSON=l;
2
- //# sourceMappingURL=parseJSON.cjs.map
1
+ const e=require(`../typed/isString.cjs`),t=require(`../typed/isNil.cjs`);function n(n,r={}){let{defaultValue:i,onError:a,reviver:o,validator:s}=r;if(!e.isString(n))return t.isNil(n)?i:n;try{let e=JSON.parse(n,o);if(s&&!s(e))throw TypeError(`Parsed JSON does not match the expected structure`);return e??i}catch(e){return a?.(e),i}}exports.parseJSON=n;
2
+ //# sourceMappingURL=parseJSON.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseJSON.cjs","sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import { Logit } from '@vielzeug/logit';\nimport { isNil } from '../typed/isNil';\nimport { isString } from '../typed/isString';\n\ntype JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// #region ParseJSONOptions\ntype ParseJSONOptions<T> = {\n defaultValue?: T;\n // biome-ignore lint/suspicious/noExplicitAny: -\n reviver?: (key: string, value: any) => any;\n // biome-ignore lint/suspicious/noExplicitAny: -\n validator?: (value: any) => boolean;\n silent?: boolean;\n};\n// #endregion ParseJSONOptions\n\n/**\n * Parses a JSON string and returns the resulting object.\n *\n * @example\n * ```ts\n * const json = '{\"a\":1,\"b\":2,\"c\":3}';\n * const result = parseJSON<Record<string, number>>(json, {\n * defaultValue: { a: 0, b: 0, c: 0 },\n * validator: (value) => Object.values(value).every(v => typeof v === 'number'),\n * errorHandler: (err) => console.warn('Parsing failed:', err.message),\n * silent: true\n * });\n * console.log(result); // { a: 1, b: 2, c: 3 }\n * ```\n *\n * @template T - The expected type of the parsed JSON.\n * @param json - The JSON string to parse. If not a string, it is returned as is.\n * @param options - Configuration options for parsing.\n *\n * @returns The parsed object if successful, otherwise the default value.\n */\nexport function parseJSON<T extends JSONValue>(json: unknown, options: ParseJSONOptions<T> = {}): T | undefined {\n const { defaultValue, reviver, validator, silent = false } = options;\n\n if (!isString(json)) return isNil(json) ? defaultValue : (json as T);\n\n try {\n const parsed = JSON.parse(json as string, reviver);\n\n if (validator && !validator(parsed)) {\n throw new TypeError('Parsed JSON does not match the expected structure');\n }\n\n return parsed ?? defaultValue;\n } catch (err) {\n if (!silent) {\n Logit.error('parseJSON() -> failed to parse object', err);\n }\n\n return defaultValue;\n }\n}\n"],"names":["parseJSON","json","options","defaultValue","reviver","validator","silent","isString","isNil","parsed","err","Logit"],"mappings":"8LAsCO,SAASA,EAA+BC,EAAeC,EAA+B,GAAmB,CAC9G,KAAM,CAAE,aAAAC,EAAc,QAAAC,EAAS,UAAAC,EAAW,OAAAC,EAAS,IAAUJ,EAE7D,GAAI,CAACK,EAAAA,SAASN,CAAI,SAAUO,EAAAA,MAAMP,CAAI,EAAIE,EAAgBF,EAE1D,GAAI,CACF,MAAMQ,EAAS,KAAK,MAAMR,EAAgBG,CAAO,EAEjD,GAAIC,GAAa,CAACA,EAAUI,CAAM,EAChC,MAAM,IAAI,UAAU,mDAAmD,EAGzE,OAAOA,GAAUN,CACnB,OAASO,EAAK,CACZ,OAAKJ,GACHK,QAAM,MAAM,wCAAyCD,CAAG,EAGnDP,CACT,CACF"}
1
+ {"version":3,"file":"parseJSON.cjs","names":[],"sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import { isNil } from '../typed/isNil';\nimport { isString } from '../typed/isString';\n\ntype JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// #region ParseJSONOptions\ntype ParseJSONOptions<T> = {\n defaultValue?: T;\n onError?: (err: unknown) => void;\n reviver?: (key: string, value: any) => any;\n validator?: (value: any) => boolean;\n};\n// #endregion ParseJSONOptions\n\n/**\n * Parses a JSON string and returns the resulting object.\n *\n * @example\n * ```ts\n * const json = '{\"a\":1,\"b\":2,\"c\":3}';\n * const result = parseJSON<Record<string, number>>(json, {\n * defaultValue: { a: 0, b: 0, c: 0 },\n * validator: (value) => Object.values(value).every(v => typeof v === 'number'),\n * onError: (err) => console.warn('Parsing failed:', err),\n * });\n * console.log(result); // { a: 1, b: 2, c: 3 }\n * ```\n *\n * @template T - The expected type of the parsed JSON.\n * @param json - The JSON string to parse. If not a string, it is returned as is.\n * @param options - Configuration options for parsing.\n *\n * @returns The parsed object if successful, otherwise the default value.\n */\nexport function parseJSON<T extends JSONValue>(json: unknown, options: ParseJSONOptions<T> = {}): T | undefined {\n const { defaultValue, onError, reviver, validator } = options;\n\n if (!isString(json)) return isNil(json) ? defaultValue : (json as T);\n\n try {\n const parsed = JSON.parse(json as string, reviver);\n\n if (validator && !validator(parsed)) {\n throw new TypeError('Parsed JSON does not match the expected structure');\n }\n\n return parsed ?? defaultValue;\n } catch (err) {\n onError?.(err);\n\n return defaultValue;\n }\n}\n"],"mappings":"yEAkCA,SAAgB,EAA+B,EAAe,EAA+B,EAAE,CAAiB,CAC9G,GAAM,CAAE,eAAc,UAAS,UAAS,aAAc,EAEtD,GAAI,CAAC,EAAA,SAAS,EAAK,CAAE,OAAO,EAAA,MAAM,EAAK,CAAG,EAAgB,EAE1D,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,EAAgB,EAAQ,CAElD,GAAI,GAAa,CAAC,EAAU,EAAO,CACjC,MAAU,UAAU,oDAAoD,CAG1E,OAAO,GAAU,QACV,EAAK,CAGZ,OAFA,IAAU,EAAI,CAEP"}
@@ -0,0 +1,32 @@
1
+ type JSONValue = string | number | boolean | null | JSONValue[] | {
2
+ [key: string]: JSONValue;
3
+ };
4
+ type ParseJSONOptions<T> = {
5
+ defaultValue?: T;
6
+ onError?: (err: unknown) => void;
7
+ reviver?: (key: string, value: any) => any;
8
+ validator?: (value: any) => boolean;
9
+ };
10
+ /**
11
+ * Parses a JSON string and returns the resulting object.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const json = '{"a":1,"b":2,"c":3}';
16
+ * const result = parseJSON<Record<string, number>>(json, {
17
+ * defaultValue: { a: 0, b: 0, c: 0 },
18
+ * validator: (value) => Object.values(value).every(v => typeof v === 'number'),
19
+ * onError: (err) => console.warn('Parsing failed:', err),
20
+ * });
21
+ * console.log(result); // { a: 1, b: 2, c: 3 }
22
+ * ```
23
+ *
24
+ * @template T - The expected type of the parsed JSON.
25
+ * @param json - The JSON string to parse. If not a string, it is returned as is.
26
+ * @param options - Configuration options for parsing.
27
+ *
28
+ * @returns The parsed object if successful, otherwise the default value.
29
+ */
30
+ export declare function parseJSON<T extends JSONValue>(json: unknown, options?: ParseJSONOptions<T>): T | undefined;
31
+ export {};
32
+ //# sourceMappingURL=parseJSON.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseJSON.d.ts","sourceRoot":"","sources":["../../src/object/parseJSON.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAG/F,KAAK,gBAAgB,CAAC,CAAC,IAAI;IACzB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAC3C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;CACrC,CAAC;AAGF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAAG,CAAC,GAAG,SAAS,CAkB9G"}
@@ -1,19 +1,18 @@
1
- import { Logit as p } from "../logit/dist/logit.js";
2
- import { isNil as f } from "../typed/isNil.js";
3
- import { isString as c } from "../typed/isString.js";
4
- function l(r, o = {}) {
5
- const { defaultValue: t, reviver: a, validator: i, silent: s = !1 } = o;
6
- if (!c(r)) return f(r) ? t : r;
7
- try {
8
- const e = JSON.parse(r, a);
9
- if (i && !i(e))
10
- throw new TypeError("Parsed JSON does not match the expected structure");
11
- return e ?? t;
12
- } catch (e) {
13
- return s || p.error("parseJSON() -> failed to parse object", e), t;
14
- }
1
+ import { isString as e } from "../typed/isString.js";
2
+ import { isNil as t } from "../typed/isNil.js";
3
+ //#region src/object/parseJSON.ts
4
+ function n(n, r = {}) {
5
+ let { defaultValue: i, onError: a, reviver: o, validator: s } = r;
6
+ if (!e(n)) return t(n) ? i : n;
7
+ try {
8
+ let e = JSON.parse(n, o);
9
+ if (s && !s(e)) throw TypeError("Parsed JSON does not match the expected structure");
10
+ return e ?? i;
11
+ } catch (e) {
12
+ return a?.(e), i;
13
+ }
15
14
  }
16
- export {
17
- l as parseJSON
18
- };
19
- //# sourceMappingURL=parseJSON.js.map
15
+ //#endregion
16
+ export { n as parseJSON };
17
+
18
+ //# sourceMappingURL=parseJSON.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseJSON.js","sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import { Logit } from '@vielzeug/logit';\nimport { isNil } from '../typed/isNil';\nimport { isString } from '../typed/isString';\n\ntype JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// #region ParseJSONOptions\ntype ParseJSONOptions<T> = {\n defaultValue?: T;\n // biome-ignore lint/suspicious/noExplicitAny: -\n reviver?: (key: string, value: any) => any;\n // biome-ignore lint/suspicious/noExplicitAny: -\n validator?: (value: any) => boolean;\n silent?: boolean;\n};\n// #endregion ParseJSONOptions\n\n/**\n * Parses a JSON string and returns the resulting object.\n *\n * @example\n * ```ts\n * const json = '{\"a\":1,\"b\":2,\"c\":3}';\n * const result = parseJSON<Record<string, number>>(json, {\n * defaultValue: { a: 0, b: 0, c: 0 },\n * validator: (value) => Object.values(value).every(v => typeof v === 'number'),\n * errorHandler: (err) => console.warn('Parsing failed:', err.message),\n * silent: true\n * });\n * console.log(result); // { a: 1, b: 2, c: 3 }\n * ```\n *\n * @template T - The expected type of the parsed JSON.\n * @param json - The JSON string to parse. If not a string, it is returned as is.\n * @param options - Configuration options for parsing.\n *\n * @returns The parsed object if successful, otherwise the default value.\n */\nexport function parseJSON<T extends JSONValue>(json: unknown, options: ParseJSONOptions<T> = {}): T | undefined {\n const { defaultValue, reviver, validator, silent = false } = options;\n\n if (!isString(json)) return isNil(json) ? defaultValue : (json as T);\n\n try {\n const parsed = JSON.parse(json as string, reviver);\n\n if (validator && !validator(parsed)) {\n throw new TypeError('Parsed JSON does not match the expected structure');\n }\n\n return parsed ?? defaultValue;\n } catch (err) {\n if (!silent) {\n Logit.error('parseJSON() -> failed to parse object', err);\n }\n\n return defaultValue;\n }\n}\n"],"names":["parseJSON","json","options","defaultValue","reviver","validator","silent","isString","isNil","parsed","err","Logit"],"mappings":";;;AAsCO,SAASA,EAA+BC,GAAeC,IAA+B,IAAmB;AAC9G,QAAM,EAAE,cAAAC,GAAc,SAAAC,GAAS,WAAAC,GAAW,QAAAC,IAAS,OAAUJ;AAE7D,MAAI,CAACK,EAASN,CAAI,UAAUO,EAAMP,CAAI,IAAIE,IAAgBF;AAE1D,MAAI;AACF,UAAMQ,IAAS,KAAK,MAAMR,GAAgBG,CAAO;AAEjD,QAAIC,KAAa,CAACA,EAAUI,CAAM;AAChC,YAAM,IAAI,UAAU,mDAAmD;AAGzE,WAAOA,KAAUN;AAAA,EACnB,SAASO,GAAK;AACZ,WAAKJ,KACHK,EAAM,MAAM,yCAAyCD,CAAG,GAGnDP;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"parseJSON.js","names":[],"sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import { isNil } from '../typed/isNil';\nimport { isString } from '../typed/isString';\n\ntype JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// #region ParseJSONOptions\ntype ParseJSONOptions<T> = {\n defaultValue?: T;\n onError?: (err: unknown) => void;\n reviver?: (key: string, value: any) => any;\n validator?: (value: any) => boolean;\n};\n// #endregion ParseJSONOptions\n\n/**\n * Parses a JSON string and returns the resulting object.\n *\n * @example\n * ```ts\n * const json = '{\"a\":1,\"b\":2,\"c\":3}';\n * const result = parseJSON<Record<string, number>>(json, {\n * defaultValue: { a: 0, b: 0, c: 0 },\n * validator: (value) => Object.values(value).every(v => typeof v === 'number'),\n * onError: (err) => console.warn('Parsing failed:', err),\n * });\n * console.log(result); // { a: 1, b: 2, c: 3 }\n * ```\n *\n * @template T - The expected type of the parsed JSON.\n * @param json - The JSON string to parse. If not a string, it is returned as is.\n * @param options - Configuration options for parsing.\n *\n * @returns The parsed object if successful, otherwise the default value.\n */\nexport function parseJSON<T extends JSONValue>(json: unknown, options: ParseJSONOptions<T> = {}): T | undefined {\n const { defaultValue, onError, reviver, validator } = options;\n\n if (!isString(json)) return isNil(json) ? defaultValue : (json as T);\n\n try {\n const parsed = JSON.parse(json as string, reviver);\n\n if (validator && !validator(parsed)) {\n throw new TypeError('Parsed JSON does not match the expected structure');\n }\n\n return parsed ?? defaultValue;\n } catch (err) {\n onError?.(err);\n\n return defaultValue;\n }\n}\n"],"mappings":";;;AAkCA,SAAgB,EAA+B,GAAe,IAA+B,EAAE,EAAiB;CAC9G,IAAM,EAAE,iBAAc,YAAS,YAAS,iBAAc;AAEtD,KAAI,CAAC,EAAS,EAAK,CAAE,QAAO,EAAM,EAAK,GAAG,IAAgB;AAE1D,KAAI;EACF,IAAM,IAAS,KAAK,MAAM,GAAgB,EAAQ;AAElD,MAAI,KAAa,CAAC,EAAU,EAAO,CACjC,OAAU,UAAU,oDAAoD;AAG1E,SAAO,KAAU;UACV,GAAK;AAGZ,SAFA,IAAU,EAAI,EAEP"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("../function/assert.cjs"),p=require("../typed/isArray.cjs"),y=require("../typed/isNil.cjs"),i=require("../typed/isObject.cjs");function d(e,n,o,c={}){l.assert(i.isObject(e),i.IS_OBJECT_ERROR_MSG,{args:{item:e},type:TypeError});const{throwOnMissing:s=!1,allowArrayIndex:f=!1}=c,u=n.split(/[.[\]]+/).filter(Boolean);let r=e;for(const t of u){if(y.isNil(r)||typeof r!="object")return a(`Cannot read property '${t}' of ${r}`,s,o);if(r=f&&p.isArray(r)&&/^\d+$/.test(t)?r[Number(t)]:r[t],r===void 0)return a(`Property '${t}' does not exist`,s,o)}return r}function a(e,n,o){if(n)throw new Error(e);return o}exports.path=d;
2
- //# sourceMappingURL=path.cjs.map
1
+ const e=require(`../function/assert.cjs`),t=require(`../typed/isNil.cjs`),n=require(`../typed/isObject.cjs`);function r(r,i,a,o={}){e.assert(n.isObject(r),n.IS_OBJECT_ERROR_MSG,{args:{item:r},type:TypeError});let{throwOnMissing:s=!1}=o,c=i.split(/[.[\]]+/).filter(Boolean),l=r;for(let e of c){if(t.isNil(l)||typeof l!=`object`){if(s)throw Error(`Cannot read property '${e}' of ${l}`);return a}if(l=l[e],l===void 0){if(s)throw Error(`Property '${e}' does not exist`);return a}}return l}exports.get=r;
2
+ //# sourceMappingURL=path.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"path.cjs","sources":["../../src/object/path.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { isArray } from '../typed/isArray';\nimport { isNil } from '../typed/isNil';\nimport { IS_OBJECT_ERROR_MSG, isObject } from '../typed/isObject';\nimport type { Obj } from '../types';\n\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : undefined\n : P extends keyof T\n ? T[P]\n : undefined;\n\n// #region PathOptions\ntype PathOptions = {\n throwOnMissing?: boolean;\n allowArrayIndex?: boolean;\n};\n// #endregion PathOptions\n\n/**\n * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.\n *\n * @example\n * ```ts\n * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };\n *\n * getValue(obj, 'a.b.c'); // 3\n * getValue(obj, 'a.b.d', 'default'); // 'default'\n * getValue(obj, 'd[1]', undefined, { allowArrayIndex: true }); // 2\n * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error\n * ```\n *\n * @template T - The type of the object to query.\n * @template P - The type of the path string.\n * @param item - The object to query.\n * @param path - The path of the property to get.\n * @param [defaultValue] - The value returned for undefined resolved values.\n * @param [options] - Additional options for value retrieval.\n *\n * @returns The resolved value.\n *\n * @throws If throwOnMissing is true and the path doesn't exist.\n */\nexport function path<T extends Obj, P extends string>(\n item: T,\n path: P,\n defaultValue?: unknown,\n options: PathOptions = {},\n): PathValue<T, P> | undefined {\n assert(isObject(item), IS_OBJECT_ERROR_MSG, { args: { item }, type: TypeError });\n\n const { throwOnMissing = false, allowArrayIndex = false } = options;\n\n const fragments = path.split(/[.[\\]]+/).filter(Boolean);\n // biome-ignore lint/suspicious/noExplicitAny: -\n let current: any = item;\n\n for (const fragment of fragments) {\n if (isNil(current) || typeof current !== 'object') {\n return handleError(`Cannot read property '${fragment}' of ${current}`, throwOnMissing, defaultValue);\n }\n\n current =\n allowArrayIndex && isArray(current) && /^\\d+$/.test(fragment) ? current[Number(fragment)] : current[fragment];\n\n if (current === undefined) {\n return handleError(`Property '${fragment}' does not exist`, throwOnMissing, defaultValue);\n }\n }\n\n return current as PathValue<T, P>;\n}\n\nfunction handleError<T extends Obj, P extends string>(\n message: string,\n throwOnMissing: boolean,\n defaultValue?: unknown,\n): PathValue<T, P> | undefined {\n if (throwOnMissing) throw new Error(message);\n return defaultValue as PathValue<T, P>;\n}\n"],"names":["path","item","defaultValue","options","assert","isObject","IS_OBJECT_ERROR_MSG","throwOnMissing","allowArrayIndex","fragments","current","fragment","isNil","handleError","isArray","message"],"mappings":"+NA6CO,SAASA,EACdC,EACAD,EACAE,EACAC,EAAuB,CAAA,EACM,CAC7BC,EAAAA,OAAOC,EAAAA,SAASJ,CAAI,EAAGK,sBAAqB,CAAE,KAAM,CAAE,KAAAL,CAAA,EAAQ,KAAM,UAAW,EAE/E,KAAM,CAAE,eAAAM,EAAiB,GAAO,gBAAAC,EAAkB,IAAUL,EAEtDM,EAAYT,EAAK,MAAM,SAAS,EAAE,OAAO,OAAO,EAEtD,IAAIU,EAAeT,EAEnB,UAAWU,KAAYF,EAAW,CAChC,GAAIG,EAAAA,MAAMF,CAAO,GAAK,OAAOA,GAAY,SACvC,OAAOG,EAAY,yBAAyBF,CAAQ,QAAQD,CAAO,GAAIH,EAAgBL,CAAY,EAMrG,GAHAQ,EACEF,GAAmBM,EAAAA,QAAQJ,CAAO,GAAK,QAAQ,KAAKC,CAAQ,EAAID,EAAQ,OAAOC,CAAQ,CAAC,EAAID,EAAQC,CAAQ,EAE1GD,IAAY,OACd,OAAOG,EAAY,aAAaF,CAAQ,mBAAoBJ,EAAgBL,CAAY,CAE5F,CAEA,OAAOQ,CACT,CAEA,SAASG,EACPE,EACAR,EACAL,EAC6B,CAC7B,GAAIK,EAAgB,MAAM,IAAI,MAAMQ,CAAO,EAC3C,OAAOb,CACT"}
1
+ {"version":3,"file":"path.cjs","names":[],"sources":["../../src/object/path.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { assert } from '../function/assert';\nimport { isNil } from '../typed/isNil';\nimport { IS_OBJECT_ERROR_MSG, isObject } from '../typed/isObject';\n\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : undefined\n : P extends keyof T\n ? T[P]\n : undefined;\n\n// #region PathOptions\ntype PathOptions = {\n throwOnMissing?: boolean;\n};\n// #endregion PathOptions\n\n/**\n * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.\n *\n * @example\n * ```ts\n * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };\n *\n * getValue(obj, 'a.b.c'); // 3\n * getValue(obj, 'a.b.d', 'default'); // 'default'\n * getValue(obj, 'd[1]'); // 2\n * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error\n * ```\n *\n * @template T - The type of the object to query.\n * @template P - The type of the path string.\n * @param item - The object to query.\n * @param path - The dot-separated path of the property to get.\n * @param [defaultValue] - The value returned for undefined resolved values.\n * @param [options] - Additional options for value retrieval.\n *\n * @returns The resolved value.\n *\n * @throws If throwOnMissing is true and the path doesn't exist.\n */\nexport function get<T extends Obj, P extends string>(\n item: T,\n path: P,\n defaultValue?: unknown,\n options: PathOptions = {},\n): PathValue<T, P> | undefined {\n assert(isObject(item), IS_OBJECT_ERROR_MSG, { args: { item }, type: TypeError });\n\n const { throwOnMissing = false } = options;\n\n const fragments = path.split(/[.[\\]]+/).filter(Boolean);\n let current: any = item;\n\n for (const fragment of fragments) {\n if (isNil(current) || typeof current !== 'object') {\n if (throwOnMissing) throw new Error(`Cannot read property '${fragment}' of ${current}`);\n\n return defaultValue as PathValue<T, P>;\n }\n\n current = current[fragment];\n\n if (current === undefined) {\n if (throwOnMissing) throw new Error(`Property '${fragment}' does not exist`);\n\n return defaultValue as PathValue<T, P>;\n }\n }\n\n return current as PathValue<T, P>;\n}\n"],"mappings":"6GA4CA,SAAgB,EACd,EACA,EACA,EACA,EAAuB,EAAE,CACI,CAC7B,EAAA,OAAO,EAAA,SAAS,EAAK,CAAE,EAAA,oBAAqB,CAAE,KAAM,CAAE,OAAM,CAAE,KAAM,UAAW,CAAC,CAEhF,GAAM,CAAE,iBAAiB,IAAU,EAE7B,EAAY,EAAK,MAAM,UAAU,CAAC,OAAO,QAAQ,CACnD,EAAe,EAEnB,IAAK,IAAM,KAAY,EAAW,CAChC,GAAI,EAAA,MAAM,EAAQ,EAAI,OAAO,GAAY,SAAU,CACjD,GAAI,EAAgB,MAAU,MAAM,yBAAyB,EAAS,OAAO,IAAU,CAEvF,OAAO,EAKT,GAFA,EAAU,EAAQ,GAEd,IAAY,IAAA,GAAW,CACzB,GAAI,EAAgB,MAAU,MAAM,aAAa,EAAS,kBAAkB,CAE5E,OAAO,GAIX,OAAO"}
@@ -0,0 +1,32 @@
1
+ import type { Obj } from '../types';
2
+ type PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? PathValue<T[Key], Rest> : undefined : P extends keyof T ? T[P] : undefined;
3
+ type PathOptions = {
4
+ throwOnMissing?: boolean;
5
+ };
6
+ /**
7
+ * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };
12
+ *
13
+ * getValue(obj, 'a.b.c'); // 3
14
+ * getValue(obj, 'a.b.d', 'default'); // 'default'
15
+ * getValue(obj, 'd[1]'); // 2
16
+ * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error
17
+ * ```
18
+ *
19
+ * @template T - The type of the object to query.
20
+ * @template P - The type of the path string.
21
+ * @param item - The object to query.
22
+ * @param path - The dot-separated path of the property to get.
23
+ * @param [defaultValue] - The value returned for undefined resolved values.
24
+ * @param [options] - Additional options for value retrieval.
25
+ *
26
+ * @returns The resolved value.
27
+ *
28
+ * @throws If throwOnMissing is true and the path doesn't exist.
29
+ */
30
+ export declare function get<T extends Obj, P extends string>(item: T, path: P, defaultValue?: unknown, options?: PathOptions): PathValue<T, P> | undefined;
31
+ export {};
32
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/object/path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAMpC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,GACxE,GAAG,SAAS,MAAM,CAAC,GACjB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GACvB,SAAS,GACX,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,SAAS,CAAC;AAGhB,KAAK,WAAW,GAAG;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,MAAM,EACjD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,EACP,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,GAAE,WAAgB,GACxB,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAyB7B"}
@@ -1,24 +1,26 @@
1
- import { assert as m } from "../function/assert.js";
2
- import { isArray as c } from "../typed/isArray.js";
3
- import { isNil as l } from "../typed/isNil.js";
4
- import { IS_OBJECT_ERROR_MSG as y, isObject as u } from "../typed/isObject.js";
5
- function w(o, n, e, i = {}) {
6
- m(u(o), y, { args: { item: o }, type: TypeError });
7
- const { throwOnMissing: s = !1, allowArrayIndex: p = !1 } = i, a = n.split(/[.[\]]+/).filter(Boolean);
8
- let r = o;
9
- for (const t of a) {
10
- if (l(r) || typeof r != "object")
11
- return f(`Cannot read property '${t}' of ${r}`, s, e);
12
- if (r = p && c(r) && /^\d+$/.test(t) ? r[Number(t)] : r[t], r === void 0)
13
- return f(`Property '${t}' does not exist`, s, e);
14
- }
15
- return r;
1
+ import { assert as e } from "../function/assert.js";
2
+ import { isNil as t } from "../typed/isNil.js";
3
+ import { IS_OBJECT_ERROR_MSG as n, isObject as r } from "../typed/isObject.js";
4
+ //#region src/object/path.ts
5
+ function i(i, a, o, s = {}) {
6
+ e(r(i), n, {
7
+ args: { item: i },
8
+ type: TypeError
9
+ });
10
+ let { throwOnMissing: c = !1 } = s, l = a.split(/[.[\]]+/).filter(Boolean), u = i;
11
+ for (let e of l) {
12
+ if (t(u) || typeof u != "object") {
13
+ if (c) throw Error(`Cannot read property '${e}' of ${u}`);
14
+ return o;
15
+ }
16
+ if (u = u[e], u === void 0) {
17
+ if (c) throw Error(`Property '${e}' does not exist`);
18
+ return o;
19
+ }
20
+ }
21
+ return u;
16
22
  }
17
- function f(o, n, e) {
18
- if (n) throw new Error(o);
19
- return e;
20
- }
21
- export {
22
- w as path
23
- };
24
- //# sourceMappingURL=path.js.map
23
+ //#endregion
24
+ export { i as get };
25
+
26
+ //# sourceMappingURL=path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","sources":["../../src/object/path.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { isArray } from '../typed/isArray';\nimport { isNil } from '../typed/isNil';\nimport { IS_OBJECT_ERROR_MSG, isObject } from '../typed/isObject';\nimport type { Obj } from '../types';\n\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : undefined\n : P extends keyof T\n ? T[P]\n : undefined;\n\n// #region PathOptions\ntype PathOptions = {\n throwOnMissing?: boolean;\n allowArrayIndex?: boolean;\n};\n// #endregion PathOptions\n\n/**\n * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.\n *\n * @example\n * ```ts\n * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };\n *\n * getValue(obj, 'a.b.c'); // 3\n * getValue(obj, 'a.b.d', 'default'); // 'default'\n * getValue(obj, 'd[1]', undefined, { allowArrayIndex: true }); // 2\n * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error\n * ```\n *\n * @template T - The type of the object to query.\n * @template P - The type of the path string.\n * @param item - The object to query.\n * @param path - The path of the property to get.\n * @param [defaultValue] - The value returned for undefined resolved values.\n * @param [options] - Additional options for value retrieval.\n *\n * @returns The resolved value.\n *\n * @throws If throwOnMissing is true and the path doesn't exist.\n */\nexport function path<T extends Obj, P extends string>(\n item: T,\n path: P,\n defaultValue?: unknown,\n options: PathOptions = {},\n): PathValue<T, P> | undefined {\n assert(isObject(item), IS_OBJECT_ERROR_MSG, { args: { item }, type: TypeError });\n\n const { throwOnMissing = false, allowArrayIndex = false } = options;\n\n const fragments = path.split(/[.[\\]]+/).filter(Boolean);\n // biome-ignore lint/suspicious/noExplicitAny: -\n let current: any = item;\n\n for (const fragment of fragments) {\n if (isNil(current) || typeof current !== 'object') {\n return handleError(`Cannot read property '${fragment}' of ${current}`, throwOnMissing, defaultValue);\n }\n\n current =\n allowArrayIndex && isArray(current) && /^\\d+$/.test(fragment) ? current[Number(fragment)] : current[fragment];\n\n if (current === undefined) {\n return handleError(`Property '${fragment}' does not exist`, throwOnMissing, defaultValue);\n }\n }\n\n return current as PathValue<T, P>;\n}\n\nfunction handleError<T extends Obj, P extends string>(\n message: string,\n throwOnMissing: boolean,\n defaultValue?: unknown,\n): PathValue<T, P> | undefined {\n if (throwOnMissing) throw new Error(message);\n return defaultValue as PathValue<T, P>;\n}\n"],"names":["path","item","defaultValue","options","assert","isObject","IS_OBJECT_ERROR_MSG","throwOnMissing","allowArrayIndex","fragments","current","fragment","isNil","handleError","isArray","message"],"mappings":";;;;AA6CO,SAASA,EACdC,GACAD,GACAE,GACAC,IAAuB,CAAA,GACM;AAC7B,EAAAC,EAAOC,EAASJ,CAAI,GAAGK,GAAqB,EAAE,MAAM,EAAE,MAAAL,EAAA,GAAQ,MAAM,WAAW;AAE/E,QAAM,EAAE,gBAAAM,IAAiB,IAAO,iBAAAC,IAAkB,OAAUL,GAEtDM,IAAYT,EAAK,MAAM,SAAS,EAAE,OAAO,OAAO;AAEtD,MAAIU,IAAeT;AAEnB,aAAWU,KAAYF,GAAW;AAChC,QAAIG,EAAMF,CAAO,KAAK,OAAOA,KAAY;AACvC,aAAOG,EAAY,yBAAyBF,CAAQ,QAAQD,CAAO,IAAIH,GAAgBL,CAAY;AAMrG,QAHAQ,IACEF,KAAmBM,EAAQJ,CAAO,KAAK,QAAQ,KAAKC,CAAQ,IAAID,EAAQ,OAAOC,CAAQ,CAAC,IAAID,EAAQC,CAAQ,GAE1GD,MAAY;AACd,aAAOG,EAAY,aAAaF,CAAQ,oBAAoBJ,GAAgBL,CAAY;AAAA,EAE5F;AAEA,SAAOQ;AACT;AAEA,SAASG,EACPE,GACAR,GACAL,GAC6B;AAC7B,MAAIK,EAAgB,OAAM,IAAI,MAAMQ,CAAO;AAC3C,SAAOb;AACT;"}
1
+ {"version":3,"file":"path.js","names":[],"sources":["../../src/object/path.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { assert } from '../function/assert';\nimport { isNil } from '../typed/isNil';\nimport { IS_OBJECT_ERROR_MSG, isObject } from '../typed/isObject';\n\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : undefined\n : P extends keyof T\n ? T[P]\n : undefined;\n\n// #region PathOptions\ntype PathOptions = {\n throwOnMissing?: boolean;\n};\n// #endregion PathOptions\n\n/**\n * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.\n *\n * @example\n * ```ts\n * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };\n *\n * getValue(obj, 'a.b.c'); // 3\n * getValue(obj, 'a.b.d', 'default'); // 'default'\n * getValue(obj, 'd[1]'); // 2\n * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error\n * ```\n *\n * @template T - The type of the object to query.\n * @template P - The type of the path string.\n * @param item - The object to query.\n * @param path - The dot-separated path of the property to get.\n * @param [defaultValue] - The value returned for undefined resolved values.\n * @param [options] - Additional options for value retrieval.\n *\n * @returns The resolved value.\n *\n * @throws If throwOnMissing is true and the path doesn't exist.\n */\nexport function get<T extends Obj, P extends string>(\n item: T,\n path: P,\n defaultValue?: unknown,\n options: PathOptions = {},\n): PathValue<T, P> | undefined {\n assert(isObject(item), IS_OBJECT_ERROR_MSG, { args: { item }, type: TypeError });\n\n const { throwOnMissing = false } = options;\n\n const fragments = path.split(/[.[\\]]+/).filter(Boolean);\n let current: any = item;\n\n for (const fragment of fragments) {\n if (isNil(current) || typeof current !== 'object') {\n if (throwOnMissing) throw new Error(`Cannot read property '${fragment}' of ${current}`);\n\n return defaultValue as PathValue<T, P>;\n }\n\n current = current[fragment];\n\n if (current === undefined) {\n if (throwOnMissing) throw new Error(`Property '${fragment}' does not exist`);\n\n return defaultValue as PathValue<T, P>;\n }\n }\n\n return current as PathValue<T, P>;\n}\n"],"mappings":";;;;AA4CA,SAAgB,EACd,GACA,GACA,GACA,IAAuB,EAAE,EACI;AAC7B,GAAO,EAAS,EAAK,EAAE,GAAqB;EAAE,MAAM,EAAE,SAAM;EAAE,MAAM;EAAW,CAAC;CAEhF,IAAM,EAAE,oBAAiB,OAAU,GAE7B,IAAY,EAAK,MAAM,UAAU,CAAC,OAAO,QAAQ,EACnD,IAAe;AAEnB,MAAK,IAAM,KAAY,GAAW;AAChC,MAAI,EAAM,EAAQ,IAAI,OAAO,KAAY,UAAU;AACjD,OAAI,EAAgB,OAAU,MAAM,yBAAyB,EAAS,OAAO,IAAU;AAEvF,UAAO;;AAKT,MAFA,IAAU,EAAQ,IAEd,MAAY,KAAA,GAAW;AACzB,OAAI,EAAgB,OAAU,MAAM,aAAa,EAAS,kBAAkB;AAE5E,UAAO;;;AAIX,QAAO"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../typed/isObject.cjs`);function t(n,r){let{deep:i=!1,get:a,set:o,watch:s}=r,c=s?new Set(s):null;return new Proxy(n,{get(n,o,s){if(c&&!c.has(o))return Reflect.get(n,o,s);let l=Reflect.get(n,o,s);return a&&(l=a(o,l,n)),i&&e.isObject(l)?t(l,r):l},set(n,a,s,l){if(c&&!c.has(a))return Reflect.set(n,a,s,l);let u=n[a],d=o?o(a,s,u,n):s;return i&&e.isObject(d)?Reflect.set(n,a,t(d,r),l):Reflect.set(n,a,d,l)}})}exports.proxy=t;
2
+ //# sourceMappingURL=proxy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.cjs","names":[],"sources":["../../src/object/proxy.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isObject } from '../typed/isObject';\n\n// #region ProxyOptions\ntype ProxyOptions<T> = {\n deep?: boolean;\n get?: <K extends PropertyKey>(prop: K, val: unknown, target: T) => unknown;\n set?: <K extends PropertyKey>(prop: K, curr: unknown, prev: unknown, target: T) => unknown;\n watch?: (keyof T)[];\n};\n// #endregion ProxyOptions\n\n/**\n * Creates a new Proxy for the given object that invokes functions when properties are accessed or modified.\n *\n * @example\n * ```ts\n * const obj = { a: 1, b: 2 };\n * const log = (prop, curr, prev, target) => console.log(`Property '${prop}' changed from ${prev} to ${curr}`);\n * const proxyObj = proxy(obj, { set: log });\n * proxyObj.a = 3; // logs 'Property 'a' changed from 1 to 3'\n * ```\n *\n * @param item - The object to observe.\n * @param options - Configuration options for the proxy.\n * @param [options.set] - A function to call when a property is set.\n * @param [options.get] - A function to call when a property is accessed.\n * @param [options.deep] - If true, the proxy will also apply to nested objects.\n * @param [options.watch] - An array of property names to watch.\n *\n * @returns A new Proxy for the given object.\n */\nexport function proxy<T extends Obj>(item: T, options: ProxyOptions<T>): T {\n const { deep = false, get, set, watch } = options;\n const watchSet = watch ? new Set<PropertyKey>(watch as PropertyKey[]) : null;\n\n const handler: ProxyHandler<T> = {\n get(target, prop, receiver) {\n if (watchSet && !watchSet.has(prop)) {\n return Reflect.get(target, prop, receiver);\n }\n\n let value = Reflect.get(target, prop, receiver);\n\n if (get) {\n value = get(prop, value, target) as any;\n }\n\n if (deep && isObject(value)) {\n return proxy(value as unknown as T, options);\n }\n\n return value;\n },\n set(target, prop, val, receiver) {\n if (watchSet && !watchSet.has(prop)) {\n return Reflect.set(target, prop, val, receiver);\n }\n\n const prev = target[prop as keyof T];\n const value = set ? set(prop, val, prev, target) : val;\n\n if (deep && isObject(value)) {\n return Reflect.set(target, prop, proxy(value as unknown as T, options), receiver);\n }\n\n return Reflect.set(target, prop, value, receiver);\n },\n };\n\n return new Proxy(item, handler);\n}\n"],"mappings":"yCAiCA,SAAgB,EAAqB,EAAS,EAA6B,CACzE,GAAM,CAAE,OAAO,GAAO,MAAK,MAAK,SAAU,EACpC,EAAW,EAAQ,IAAI,IAAiB,EAAuB,CAAG,KAoCxE,OAAO,IAAI,MAAM,EAlCgB,CAC/B,IAAI,EAAQ,EAAM,EAAU,CAC1B,GAAI,GAAY,CAAC,EAAS,IAAI,EAAK,CACjC,OAAO,QAAQ,IAAI,EAAQ,EAAM,EAAS,CAG5C,IAAI,EAAQ,QAAQ,IAAI,EAAQ,EAAM,EAAS,CAU/C,OARI,IACF,EAAQ,EAAI,EAAM,EAAO,EAAO,EAG9B,GAAQ,EAAA,SAAS,EAAM,CAClB,EAAM,EAAuB,EAAQ,CAGvC,GAET,IAAI,EAAQ,EAAM,EAAK,EAAU,CAC/B,GAAI,GAAY,CAAC,EAAS,IAAI,EAAK,CACjC,OAAO,QAAQ,IAAI,EAAQ,EAAM,EAAK,EAAS,CAGjD,IAAM,EAAO,EAAO,GACd,EAAQ,EAAM,EAAI,EAAM,EAAK,EAAM,EAAO,CAAG,EAMnD,OAJI,GAAQ,EAAA,SAAS,EAAM,CAClB,QAAQ,IAAI,EAAQ,EAAM,EAAM,EAAuB,EAAQ,CAAE,EAAS,CAG5E,QAAQ,IAAI,EAAQ,EAAM,EAAO,EAAS,EAEpD,CAE8B"}
@@ -0,0 +1,30 @@
1
+ import type { Obj } from '../types';
2
+ type ProxyOptions<T> = {
3
+ deep?: boolean;
4
+ get?: <K extends PropertyKey>(prop: K, val: unknown, target: T) => unknown;
5
+ set?: <K extends PropertyKey>(prop: K, curr: unknown, prev: unknown, target: T) => unknown;
6
+ watch?: (keyof T)[];
7
+ };
8
+ /**
9
+ * Creates a new Proxy for the given object that invokes functions when properties are accessed or modified.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const obj = { a: 1, b: 2 };
14
+ * const log = (prop, curr, prev, target) => console.log(`Property '${prop}' changed from ${prev} to ${curr}`);
15
+ * const proxyObj = proxy(obj, { set: log });
16
+ * proxyObj.a = 3; // logs 'Property 'a' changed from 1 to 3'
17
+ * ```
18
+ *
19
+ * @param item - The object to observe.
20
+ * @param options - Configuration options for the proxy.
21
+ * @param [options.set] - A function to call when a property is set.
22
+ * @param [options.get] - A function to call when a property is accessed.
23
+ * @param [options.deep] - If true, the proxy will also apply to nested objects.
24
+ * @param [options.watch] - An array of property names to watch.
25
+ *
26
+ * @returns A new Proxy for the given object.
27
+ */
28
+ export declare function proxy<T extends Obj>(item: T, options: ProxyOptions<T>): T;
29
+ export {};
30
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/object/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAKpC,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3E,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3F,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC;AAGF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAuCzE"}