@fluixi/utils 1.0.0-alpha.53

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 (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +73 -0
  3. package/dist/index.cjs +1 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +1 -0
  7. package/dist/index.mjs +1 -0
  8. package/dist/lib/array/advanced.cjs +1 -0
  9. package/dist/lib/array/advanced.d.ts +1116 -0
  10. package/dist/lib/array/advanced.d.ts.map +1 -0
  11. package/dist/lib/array/advanced.js +2429 -0
  12. package/dist/lib/array/advanced.mjs +1 -0
  13. package/dist/lib/array/array.cjs +1 -0
  14. package/dist/lib/array/array.d.ts +6 -0
  15. package/dist/lib/array/array.d.ts.map +1 -0
  16. package/dist/lib/array/array.js +31 -0
  17. package/dist/lib/array/array.mjs +1 -0
  18. package/dist/lib/array/index.cjs +1 -0
  19. package/dist/lib/array/index.d.ts +4 -0
  20. package/dist/lib/array/index.d.ts.map +1 -0
  21. package/dist/lib/array/index.js +3 -0
  22. package/dist/lib/array/index.mjs +1 -0
  23. package/dist/lib/array/utils.cjs +1 -0
  24. package/dist/lib/array/utils.d.ts +100 -0
  25. package/dist/lib/array/utils.d.ts.map +1 -0
  26. package/dist/lib/array/utils.js +165 -0
  27. package/dist/lib/array/utils.mjs +1 -0
  28. package/dist/lib/color/color.cjs +1 -0
  29. package/dist/lib/color/color.d.ts +366 -0
  30. package/dist/lib/color/color.d.ts.map +1 -0
  31. package/dist/lib/color/color.js +722 -0
  32. package/dist/lib/color/color.mjs +1 -0
  33. package/dist/lib/color/constants.cjs +1 -0
  34. package/dist/lib/color/constants.d.ts +361 -0
  35. package/dist/lib/color/constants.d.ts.map +1 -0
  36. package/dist/lib/color/constants.js +358 -0
  37. package/dist/lib/color/constants.mjs +1 -0
  38. package/dist/lib/color/conversions.cjs +1 -0
  39. package/dist/lib/color/conversions.d.ts +166 -0
  40. package/dist/lib/color/conversions.d.ts.map +1 -0
  41. package/dist/lib/color/conversions.js +766 -0
  42. package/dist/lib/color/conversions.mjs +1 -0
  43. package/dist/lib/color/helpers.cjs +1 -0
  44. package/dist/lib/color/helpers.d.ts +75 -0
  45. package/dist/lib/color/helpers.d.ts.map +1 -0
  46. package/dist/lib/color/helpers.js +419 -0
  47. package/dist/lib/color/helpers.mjs +1 -0
  48. package/dist/lib/color/index.cjs +1 -0
  49. package/dist/lib/color/index.d.ts +12 -0
  50. package/dist/lib/color/index.d.ts.map +1 -0
  51. package/dist/lib/color/index.js +15 -0
  52. package/dist/lib/color/index.mjs +1 -0
  53. package/dist/lib/color/types.cjs +1 -0
  54. package/dist/lib/color/types.d.ts +179 -0
  55. package/dist/lib/color/types.d.ts.map +1 -0
  56. package/dist/lib/color/types.js +1 -0
  57. package/dist/lib/color/types.mjs +0 -0
  58. package/dist/lib/color/utils.cjs +1 -0
  59. package/dist/lib/color/utils.d.ts +199 -0
  60. package/dist/lib/color/utils.d.ts.map +1 -0
  61. package/dist/lib/color/utils.js +858 -0
  62. package/dist/lib/color/utils.mjs +1 -0
  63. package/dist/lib/compare/comparators.cjs +1 -0
  64. package/dist/lib/compare/comparators.d.ts +65 -0
  65. package/dist/lib/compare/comparators.d.ts.map +1 -0
  66. package/dist/lib/compare/comparators.js +210 -0
  67. package/dist/lib/compare/comparators.mjs +1 -0
  68. package/dist/lib/compare/index.cjs +1 -0
  69. package/dist/lib/compare/index.d.ts +2 -0
  70. package/dist/lib/compare/index.d.ts.map +1 -0
  71. package/dist/lib/compare/index.js +1 -0
  72. package/dist/lib/compare/index.mjs +1 -0
  73. package/dist/lib/crypto/hash.cjs +1 -0
  74. package/dist/lib/crypto/hash.d.ts +6 -0
  75. package/dist/lib/crypto/hash.d.ts.map +1 -0
  76. package/dist/lib/crypto/hash.js +53 -0
  77. package/dist/lib/crypto/hash.mjs +1 -0
  78. package/dist/lib/crypto/index.cjs +1 -0
  79. package/dist/lib/crypto/index.d.ts +2 -0
  80. package/dist/lib/crypto/index.d.ts.map +1 -0
  81. package/dist/lib/crypto/index.js +1 -0
  82. package/dist/lib/crypto/index.mjs +1 -0
  83. package/dist/lib/dom/events.cjs +1 -0
  84. package/dist/lib/dom/events.d.ts +159 -0
  85. package/dist/lib/dom/events.d.ts.map +1 -0
  86. package/dist/lib/dom/events.js +50 -0
  87. package/dist/lib/dom/events.mjs +1 -0
  88. package/dist/lib/dom/index.cjs +1 -0
  89. package/dist/lib/dom/index.d.ts +3 -0
  90. package/dist/lib/dom/index.d.ts.map +1 -0
  91. package/dist/lib/dom/index.js +2 -0
  92. package/dist/lib/dom/index.mjs +1 -0
  93. package/dist/lib/dom/utils.cjs +1 -0
  94. package/dist/lib/dom/utils.d.ts +6 -0
  95. package/dist/lib/dom/utils.d.ts.map +1 -0
  96. package/dist/lib/dom/utils.js +37 -0
  97. package/dist/lib/dom/utils.mjs +1 -0
  98. package/dist/lib/functions/functions.cjs +1 -0
  99. package/dist/lib/functions/functions.d.ts +329 -0
  100. package/dist/lib/functions/functions.d.ts.map +1 -0
  101. package/dist/lib/functions/functions.js +585 -0
  102. package/dist/lib/functions/functions.mjs +1 -0
  103. package/dist/lib/functions/index.cjs +1 -0
  104. package/dist/lib/functions/index.d.ts +3 -0
  105. package/dist/lib/functions/index.d.ts.map +1 -0
  106. package/dist/lib/functions/index.js +1 -0
  107. package/dist/lib/functions/index.mjs +1 -0
  108. package/dist/lib/functions/types.cjs +1 -0
  109. package/dist/lib/functions/types.d.ts +2 -0
  110. package/dist/lib/functions/types.d.ts.map +1 -0
  111. package/dist/lib/functions/types.js +1 -0
  112. package/dist/lib/functions/types.mjs +0 -0
  113. package/dist/lib/helpers.cjs +1 -0
  114. package/dist/lib/helpers.d.ts +13 -0
  115. package/dist/lib/helpers.d.ts.map +1 -0
  116. package/dist/lib/helpers.js +66 -0
  117. package/dist/lib/helpers.mjs +1 -0
  118. package/dist/lib/index.cjs +1 -0
  119. package/dist/lib/index.d.ts +6 -0
  120. package/dist/lib/index.d.ts.map +1 -0
  121. package/dist/lib/index.js +8 -0
  122. package/dist/lib/index.mjs +1 -0
  123. package/dist/lib/maths/constants.cjs +1 -0
  124. package/dist/lib/maths/constants.d.ts +84 -0
  125. package/dist/lib/maths/constants.d.ts.map +1 -0
  126. package/dist/lib/maths/constants.js +79 -0
  127. package/dist/lib/maths/constants.mjs +1 -0
  128. package/dist/lib/maths/fn/advanced.cjs +1 -0
  129. package/dist/lib/maths/fn/advanced.d.ts +149 -0
  130. package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
  131. package/dist/lib/maths/fn/advanced.js +264 -0
  132. package/dist/lib/maths/fn/advanced.mjs +1 -0
  133. package/dist/lib/maths/fn/basic.cjs +1 -0
  134. package/dist/lib/maths/fn/basic.d.ts +182 -0
  135. package/dist/lib/maths/fn/basic.d.ts.map +1 -0
  136. package/dist/lib/maths/fn/basic.js +343 -0
  137. package/dist/lib/maths/fn/basic.mjs +1 -0
  138. package/dist/lib/maths/fn/complex.cjs +1 -0
  139. package/dist/lib/maths/fn/complex.d.ts +153 -0
  140. package/dist/lib/maths/fn/complex.d.ts.map +1 -0
  141. package/dist/lib/maths/fn/complex.js +383 -0
  142. package/dist/lib/maths/fn/complex.mjs +1 -0
  143. package/dist/lib/maths/fn/index.cjs +1 -0
  144. package/dist/lib/maths/fn/index.d.ts +10 -0
  145. package/dist/lib/maths/fn/index.d.ts.map +1 -0
  146. package/dist/lib/maths/fn/index.js +9 -0
  147. package/dist/lib/maths/fn/index.mjs +1 -0
  148. package/dist/lib/maths/fn/trigo.cjs +1 -0
  149. package/dist/lib/maths/fn/trigo.d.ts +147 -0
  150. package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
  151. package/dist/lib/maths/fn/trigo.js +227 -0
  152. package/dist/lib/maths/fn/trigo.mjs +1 -0
  153. package/dist/lib/maths/fn/vector.cjs +1 -0
  154. package/dist/lib/maths/fn/vector.d.ts +512 -0
  155. package/dist/lib/maths/fn/vector.d.ts.map +1 -0
  156. package/dist/lib/maths/fn/vector.js +1136 -0
  157. package/dist/lib/maths/fn/vector.mjs +1 -0
  158. package/dist/lib/maths/formatter.cjs +1 -0
  159. package/dist/lib/maths/formatter.d.ts +35 -0
  160. package/dist/lib/maths/formatter.d.ts.map +1 -0
  161. package/dist/lib/maths/formatter.js +56 -0
  162. package/dist/lib/maths/formatter.mjs +1 -0
  163. package/dist/lib/maths/guards.cjs +1 -0
  164. package/dist/lib/maths/guards.d.ts +166 -0
  165. package/dist/lib/maths/guards.d.ts.map +1 -0
  166. package/dist/lib/maths/guards.js +315 -0
  167. package/dist/lib/maths/guards.mjs +1 -0
  168. package/dist/lib/maths/index.cjs +1 -0
  169. package/dist/lib/maths/index.d.ts +24 -0
  170. package/dist/lib/maths/index.d.ts.map +1 -0
  171. package/dist/lib/maths/index.js +29 -0
  172. package/dist/lib/maths/index.mjs +1 -0
  173. package/dist/lib/maths/parser.cjs +1 -0
  174. package/dist/lib/maths/parser.d.ts +20 -0
  175. package/dist/lib/maths/parser.d.ts.map +1 -0
  176. package/dist/lib/maths/parser.js +78 -0
  177. package/dist/lib/maths/parser.mjs +1 -0
  178. package/dist/lib/maths/random.cjs +1 -0
  179. package/dist/lib/maths/random.d.ts +27 -0
  180. package/dist/lib/maths/random.d.ts.map +1 -0
  181. package/dist/lib/maths/random.js +49 -0
  182. package/dist/lib/maths/random.mjs +1 -0
  183. package/dist/lib/maths/types/advanced.cjs +1 -0
  184. package/dist/lib/maths/types/advanced.d.ts +357 -0
  185. package/dist/lib/maths/types/advanced.d.ts.map +1 -0
  186. package/dist/lib/maths/types/advanced.js +5 -0
  187. package/dist/lib/maths/types/advanced.mjs +0 -0
  188. package/dist/lib/maths/types/basic.cjs +1 -0
  189. package/dist/lib/maths/types/basic.d.ts +95 -0
  190. package/dist/lib/maths/types/basic.d.ts.map +1 -0
  191. package/dist/lib/maths/types/basic.js +5 -0
  192. package/dist/lib/maths/types/basic.mjs +0 -0
  193. package/dist/lib/maths/types/index.cjs +1 -0
  194. package/dist/lib/maths/types/index.d.ts +4 -0
  195. package/dist/lib/maths/types/index.d.ts.map +1 -0
  196. package/dist/lib/maths/types/index.js +3 -0
  197. package/dist/lib/maths/types/index.mjs +0 -0
  198. package/dist/lib/maths/types/negative.cjs +1 -0
  199. package/dist/lib/maths/types/negative.d.ts +51 -0
  200. package/dist/lib/maths/types/negative.d.ts.map +1 -0
  201. package/dist/lib/maths/types/negative.js +5 -0
  202. package/dist/lib/maths/types/negative.mjs +0 -0
  203. package/dist/lib/maths/types/operations.cjs +1 -0
  204. package/dist/lib/maths/types/operations.d.ts +188 -0
  205. package/dist/lib/maths/types/operations.d.ts.map +1 -0
  206. package/dist/lib/maths/types/operations.js +6 -0
  207. package/dist/lib/maths/types/operations.mjs +0 -0
  208. package/dist/lib/object/clone.cjs +1 -0
  209. package/dist/lib/object/clone.d.ts +46 -0
  210. package/dist/lib/object/clone.d.ts.map +1 -0
  211. package/dist/lib/object/clone.js +104 -0
  212. package/dist/lib/object/clone.mjs +1 -0
  213. package/dist/lib/object/diff.cjs +1 -0
  214. package/dist/lib/object/diff.d.ts +203 -0
  215. package/dist/lib/object/diff.d.ts.map +1 -0
  216. package/dist/lib/object/diff.js +805 -0
  217. package/dist/lib/object/diff.mjs +1 -0
  218. package/dist/lib/object/getter-setter.cjs +1 -0
  219. package/dist/lib/object/getter-setter.d.ts +361 -0
  220. package/dist/lib/object/getter-setter.d.ts.map +1 -0
  221. package/dist/lib/object/getter-setter.js +1771 -0
  222. package/dist/lib/object/getter-setter.mjs +1 -0
  223. package/dist/lib/object/index.cjs +6 -0
  224. package/dist/lib/object/index.d.ts +13 -0
  225. package/dist/lib/object/index.d.ts.map +1 -0
  226. package/dist/lib/object/index.js +12 -0
  227. package/dist/lib/object/index.mjs +6 -0
  228. package/dist/lib/object/merge.cjs +1 -0
  229. package/dist/lib/object/merge.d.ts +93 -0
  230. package/dist/lib/object/merge.d.ts.map +1 -0
  231. package/dist/lib/object/merge.js +474 -0
  232. package/dist/lib/object/merge.mjs +1 -0
  233. package/dist/lib/object/object.cjs +1 -0
  234. package/dist/lib/object/object.d.ts +128 -0
  235. package/dist/lib/object/object.d.ts.map +1 -0
  236. package/dist/lib/object/object.js +432 -0
  237. package/dist/lib/object/object.mjs +1 -0
  238. package/dist/lib/object/omit.cjs +1 -0
  239. package/dist/lib/object/omit.d.ts +351 -0
  240. package/dist/lib/object/omit.d.ts.map +1 -0
  241. package/dist/lib/object/omit.js +656 -0
  242. package/dist/lib/object/omit.mjs +1 -0
  243. package/dist/lib/object/reconcile.cjs +1 -0
  244. package/dist/lib/object/reconcile.d.ts +7 -0
  245. package/dist/lib/object/reconcile.d.ts.map +1 -0
  246. package/dist/lib/object/reconcile.js +122 -0
  247. package/dist/lib/object/reconcile.mjs +1 -0
  248. package/dist/lib/object/selector.cjs +1 -0
  249. package/dist/lib/object/selector.d.ts +50 -0
  250. package/dist/lib/object/selector.d.ts.map +1 -0
  251. package/dist/lib/object/selector.js +371 -0
  252. package/dist/lib/object/selector.mjs +1 -0
  253. package/dist/lib/object/sort.cjs +1 -0
  254. package/dist/lib/object/sort.d.ts +149 -0
  255. package/dist/lib/object/sort.d.ts.map +1 -0
  256. package/dist/lib/object/sort.js +298 -0
  257. package/dist/lib/object/sort.mjs +1 -0
  258. package/dist/lib/object/transform.cjs +1 -0
  259. package/dist/lib/object/transform.d.ts +620 -0
  260. package/dist/lib/object/transform.d.ts.map +1 -0
  261. package/dist/lib/object/transform.js +1058 -0
  262. package/dist/lib/object/transform.mjs +1 -0
  263. package/dist/lib/object/types.cjs +1 -0
  264. package/dist/lib/object/types.d.ts +250 -0
  265. package/dist/lib/object/types.d.ts.map +1 -0
  266. package/dist/lib/object/types.js +1 -0
  267. package/dist/lib/object/types.mjs +0 -0
  268. package/dist/lib/object/utils.cjs +6 -0
  269. package/dist/lib/object/utils.d.ts +165 -0
  270. package/dist/lib/object/utils.d.ts.map +1 -0
  271. package/dist/lib/object/utils.js +444 -0
  272. package/dist/lib/object/utils.mjs +6 -0
  273. package/dist/lib/primitive/boolean/boolean.cjs +1 -0
  274. package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
  275. package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
  276. package/dist/lib/primitive/boolean/boolean.js +615 -0
  277. package/dist/lib/primitive/boolean/boolean.mjs +1 -0
  278. package/dist/lib/primitive/boolean/index.cjs +1 -0
  279. package/dist/lib/primitive/boolean/index.d.ts +3 -0
  280. package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
  281. package/dist/lib/primitive/boolean/index.js +2 -0
  282. package/dist/lib/primitive/boolean/index.mjs +1 -0
  283. package/dist/lib/primitive/boolean/types.cjs +1 -0
  284. package/dist/lib/primitive/boolean/types.d.ts +14 -0
  285. package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
  286. package/dist/lib/primitive/boolean/types.js +1 -0
  287. package/dist/lib/primitive/boolean/types.mjs +0 -0
  288. package/dist/lib/primitive/date/date.cjs +1 -0
  289. package/dist/lib/primitive/date/date.d.ts +641 -0
  290. package/dist/lib/primitive/date/date.d.ts.map +1 -0
  291. package/dist/lib/primitive/date/date.js +1998 -0
  292. package/dist/lib/primitive/date/date.mjs +1 -0
  293. package/dist/lib/primitive/date/index.cjs +1 -0
  294. package/dist/lib/primitive/date/index.d.ts +3 -0
  295. package/dist/lib/primitive/date/index.d.ts.map +1 -0
  296. package/dist/lib/primitive/date/index.js +2 -0
  297. package/dist/lib/primitive/date/index.mjs +1 -0
  298. package/dist/lib/primitive/date/types.cjs +1 -0
  299. package/dist/lib/primitive/date/types.d.ts +205 -0
  300. package/dist/lib/primitive/date/types.d.ts.map +1 -0
  301. package/dist/lib/primitive/date/types.js +7 -0
  302. package/dist/lib/primitive/date/types.mjs +0 -0
  303. package/dist/lib/primitive/index.cjs +5 -0
  304. package/dist/lib/primitive/index.d.ts +5 -0
  305. package/dist/lib/primitive/index.d.ts.map +1 -0
  306. package/dist/lib/primitive/index.js +4 -0
  307. package/dist/lib/primitive/index.mjs +5 -0
  308. package/dist/lib/primitive/string/index.cjs +5 -0
  309. package/dist/lib/primitive/string/index.d.ts +3 -0
  310. package/dist/lib/primitive/string/index.d.ts.map +1 -0
  311. package/dist/lib/primitive/string/index.js +2 -0
  312. package/dist/lib/primitive/string/index.mjs +5 -0
  313. package/dist/lib/primitive/string/parser-2.cjs +8 -0
  314. package/dist/lib/primitive/string/parser-2.d.ts +17 -0
  315. package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
  316. package/dist/lib/primitive/string/parser-2.js +656 -0
  317. package/dist/lib/primitive/string/parser-2.mjs +8 -0
  318. package/dist/lib/primitive/string/parser.cjs +3 -0
  319. package/dist/lib/primitive/string/parser.d.ts +9 -0
  320. package/dist/lib/primitive/string/parser.d.ts.map +1 -0
  321. package/dist/lib/primitive/string/parser.js +775 -0
  322. package/dist/lib/primitive/string/parser.mjs +3 -0
  323. package/dist/lib/primitive/string/string.cjs +5 -0
  324. package/dist/lib/primitive/string/string.d.ts +535 -0
  325. package/dist/lib/primitive/string/string.d.ts.map +1 -0
  326. package/dist/lib/primitive/string/string.js +1301 -0
  327. package/dist/lib/primitive/string/string.mjs +5 -0
  328. package/dist/lib/primitive/string/types.cjs +1 -0
  329. package/dist/lib/primitive/string/types.d.ts +318 -0
  330. package/dist/lib/primitive/string/types.d.ts.map +1 -0
  331. package/dist/lib/primitive/string/types.js +5 -0
  332. package/dist/lib/primitive/string/types.mjs +0 -0
  333. package/dist/lib/primitive/types.cjs +1 -0
  334. package/dist/lib/primitive/types.d.ts +27 -0
  335. package/dist/lib/primitive/types.d.ts.map +1 -0
  336. package/dist/lib/primitive/types.js +1 -0
  337. package/dist/lib/primitive/types.mjs +0 -0
  338. package/dist/lib/url/index.cjs +1 -0
  339. package/dist/lib/url/index.d.ts +3 -0
  340. package/dist/lib/url/index.d.ts.map +1 -0
  341. package/dist/lib/url/index.js +2 -0
  342. package/dist/lib/url/index.mjs +1 -0
  343. package/dist/lib/url/parser.cjs +1 -0
  344. package/dist/lib/url/parser.d.ts +216 -0
  345. package/dist/lib/url/parser.d.ts.map +1 -0
  346. package/dist/lib/url/parser.js +488 -0
  347. package/dist/lib/url/parser.mjs +1 -0
  348. package/dist/lib/url/types.cjs +1 -0
  349. package/dist/lib/url/types.d.ts +18 -0
  350. package/dist/lib/url/types.d.ts.map +1 -0
  351. package/dist/lib/url/types.js +1 -0
  352. package/dist/lib/url/types.mjs +0 -0
  353. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  354. package/package.json +150 -0
@@ -0,0 +1,474 @@
1
+ import { isPlainObject } from './utils.js';
2
+ import { deepClone } from './clone.js';
3
+ import { diffObjectDetailed, applyDiff, } from './diff.js';
4
+ import { parseSelector } from './selector.js';
5
+ export function merge(...sources) {
6
+ if (sources.length === 0)
7
+ return {};
8
+ // Check if we're merging arrays or objects
9
+ const firstItem = sources[0];
10
+ const isArrayMerge = Array.isArray(firstItem);
11
+ // Ensure consistent types (all objects or all arrays)
12
+ for (const source of sources) {
13
+ if (source && Array.isArray(source) !== isArrayMerge) {
14
+ throw new Error('Cannot mix arrays and objects in deepMerge');
15
+ }
16
+ }
17
+ // Create appropriate empty result
18
+ let result = isArrayMerge ? [] : {};
19
+ // Merge the sources into the result
20
+ for (const source of sources) {
21
+ // Skip null/undefined sources
22
+ if (source == null)
23
+ continue;
24
+ if (isArrayMerge) {
25
+ // Array merging - concatenate arrays after deep cloning items
26
+ const resultArray = result;
27
+ const sourceArray = source;
28
+ for (const item of sourceArray) {
29
+ resultArray.push(deepClone(item));
30
+ }
31
+ }
32
+ else {
33
+ // Object merging
34
+ if (!isPlainObject(source))
35
+ continue;
36
+ const resultObj = result;
37
+ const sourceObj = source;
38
+ // Handle regular properties
39
+ for (const key in sourceObj) {
40
+ if (Object.prototype.hasOwnProperty.call(sourceObj, key)) {
41
+ const value = sourceObj[key];
42
+ const existing = resultObj[key];
43
+ if (existing === undefined) {
44
+ // No existing value, deep clone the new value
45
+ resultObj[key] = deepClone(value);
46
+ }
47
+ else if (Array.isArray(value) && Array.isArray(existing)) {
48
+ // Both are arrays, concatenate them after deep cloning
49
+ resultObj[key] = [
50
+ ...existing,
51
+ ...value.map((item) => deepClone(item)),
52
+ ];
53
+ }
54
+ else if (isPlainObject(value) && isPlainObject(existing)) {
55
+ // Both are plain objects, recursively merge
56
+ resultObj[key] = merge(existing, value);
57
+ }
58
+ else {
59
+ // Primitive or type mismatch, replace with cloned value
60
+ resultObj[key] = deepClone(value);
61
+ }
62
+ }
63
+ }
64
+ // Handle symbols
65
+ const symbols = Object.getOwnPropertySymbols(sourceObj);
66
+ for (const symbol of symbols) {
67
+ const value = sourceObj[symbol];
68
+ const existing = resultObj[symbol];
69
+ if (existing === undefined) {
70
+ // No existing value, deep clone the new value
71
+ resultObj[symbol] = deepClone(value);
72
+ }
73
+ else if (Array.isArray(value) && Array.isArray(existing)) {
74
+ // Both are arrays, concatenate them after deep cloning
75
+ resultObj[symbol] = [
76
+ ...existing,
77
+ ...value.map((item) => deepClone(item)),
78
+ ];
79
+ }
80
+ else if (isPlainObject(value) && isPlainObject(existing)) {
81
+ // Both are plain objects, recursively merge
82
+ resultObj[symbol] = merge(existing, value);
83
+ }
84
+ else {
85
+ // Primitive or type mismatch, replace with cloned value
86
+ resultObj[symbol] = deepClone(value);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return result;
92
+ }
93
+ function getKey(value, keys) {
94
+ let key;
95
+ if (typeof value === 'undefined' || value === null)
96
+ return;
97
+ const data_keys = keys ? keys : ["id"];
98
+ if (typeof value === 'object') {
99
+ if (!Array.isArray(value)) {
100
+ let i = 0;
101
+ while (!key) {
102
+ key = data_keys[i];
103
+ i += 1;
104
+ }
105
+ }
106
+ }
107
+ return key;
108
+ }
109
+ export function mergeArrays(arr1, arr2, options) {
110
+ const { key, override = true } = options || {};
111
+ // 👉 Case 1: primitives
112
+ if (!key) {
113
+ return Array.from(new Set([...arr1, ...arr2]));
114
+ }
115
+ // 👉 Case 2: objects with key
116
+ const map = new Map();
117
+ for (const item of arr1) {
118
+ map.set(item[key], item);
119
+ }
120
+ for (const item of arr2) {
121
+ const existing = map.get(item[key]);
122
+ if (!existing) {
123
+ map.set(item[key], item);
124
+ }
125
+ else {
126
+ map.set(item[key], override
127
+ ? { ...existing, ...item } // merge + override
128
+ : { ...item, ...existing } // keep original
129
+ );
130
+ }
131
+ }
132
+ return Array.from(map.values());
133
+ }
134
+ function mergeInPlace(target, source) {
135
+ for (const key in source) {
136
+ const tVal = target[key];
137
+ const sVal = source[key];
138
+ const diff = diffObjectDetailed(tVal, sVal);
139
+ if (Array.isArray(tVal) && Array.isArray(sVal)) {
140
+ // keep same array reference
141
+ tVal.length = 0;
142
+ tVal.push(...sVal);
143
+ }
144
+ else if (typeof tVal === 'object' &&
145
+ typeof sVal === 'object' &&
146
+ tVal &&
147
+ sVal &&
148
+ diff.hasChanges) {
149
+ applyDiff(tVal, sVal);
150
+ // mergeInPlace(tVal, sVal);
151
+ }
152
+ else {
153
+ target[key] = sVal;
154
+ }
155
+ }
156
+ }
157
+ /**
158
+ * Merges objects or arrays with options for reference preservation and strict merging
159
+ *
160
+ * @param target - The target object/array to merge into (can be modified if preserveTarget is true)
161
+ * @param sources - The source objects/arrays to merge from
162
+ * @param options - Configuration options
163
+ * @returns The merged result
164
+ *
165
+ * @example
166
+ * // With reference preservation
167
+ * const obj1 = { a: 1, b: { c: 2 } };
168
+ * const result = deepMergeWithOptions(obj1, { b: { d: 3 }, e: 4 }, { preserveTarget: true });
169
+ * // result === obj1 (same reference)
170
+ * // result: { a: 1, b: { c: 2, d: 3 }, e: 4 }
171
+ *
172
+ * @example
173
+ * // With strict merging (only merge properties that exist in target)
174
+ * const obj1 = { a: 1, b: { c: 2 } };
175
+ * const result = deepMergeWithOptions(obj1, { b: { d: 3 }, e: 4 }, { strict: true });
176
+ * // result: { a: 1, b: { c: 2 } } - e is not added as it doesn't exist in obj1
177
+ */
178
+ export function deepMergeWithOptions(target, ...args) {
179
+ if (args.length === 0)
180
+ return deepClone(target);
181
+ // Check if last argument is options
182
+ let options = { preserveTarget: false, strict: false };
183
+ let sources = args;
184
+ const lastArg = args[args.length - 1];
185
+ if (lastArg &&
186
+ typeof lastArg === 'object' &&
187
+ ('preserveTarget' in lastArg || 'strict' in lastArg)) {
188
+ options = { ...options, ...lastArg };
189
+ sources = args.slice(0, -1);
190
+ }
191
+ // Create or use target as result base
192
+ const result = options.preserveTarget ? target : deepClone(target);
193
+ // Ensure consistent types (all objects or all arrays)
194
+ const isArrayMerge = Array.isArray(result);
195
+ for (const source of sources) {
196
+ if (source && Array.isArray(source) !== isArrayMerge) {
197
+ throw new Error('Cannot mix arrays and objects in deepMergeWithOptions');
198
+ }
199
+ }
200
+ // Process each source
201
+ for (const source of sources) {
202
+ if (source == null)
203
+ continue;
204
+ if (isArrayMerge) {
205
+ // Array merging
206
+ const resultArray = result;
207
+ const sourceArray = source;
208
+ if (options.strict) {
209
+ // In strict mode, only modify existing array elements
210
+ for (let i = 0; i < resultArray.length && i < sourceArray.length; i++) {
211
+ if (isPlainObject(resultArray[i]) && isPlainObject(sourceArray[i])) {
212
+ resultArray[i] = deepMergeWithOptions(resultArray[i], sourceArray[i], options);
213
+ }
214
+ else {
215
+ // For non-objects in strict mode, only replace if same type
216
+ if (typeof resultArray[i] === typeof sourceArray[i]) {
217
+ resultArray[i] = deepClone(sourceArray[i]);
218
+ }
219
+ }
220
+ }
221
+ }
222
+ else {
223
+ // In non-strict mode, concatenate arrays
224
+ // console.log('pushing', [...resultArray], [...sourceArray])
225
+ mergeInPlace(resultArray, sourceArray);
226
+ // if(sourceArray.length===resultArray.length){
227
+ // for (let i=0; i<sourceArray.length; i++) {
228
+ // const item = sourceArray[i];
229
+ // // const result = resultArray[i];
230
+ // // let index = -1;
231
+ // // if(typeof item === 'object'){
232
+ // // const key = getKey(item);
233
+ // // if(key){
234
+ // // index = resultArray.find(s=>)
235
+ // // }else{
236
+ // // }
237
+ // // }else{
238
+ // // }
239
+ // resultArray.push(deepClone(item));
240
+ // }
241
+ // }else{
242
+ // for (let i=0; i<sourceArray.length; i++) {
243
+ // const item = sourceArray[i]
244
+ // resultArray.push(deepClone(item));
245
+ // }
246
+ // }
247
+ }
248
+ }
249
+ else {
250
+ // Object merging
251
+ if (!isPlainObject(source))
252
+ continue;
253
+ const resultObj = result;
254
+ const sourceObj = source;
255
+ // Handle regular properties
256
+ for (const key in sourceObj) {
257
+ if (!Object.prototype.hasOwnProperty.call(sourceObj, key))
258
+ continue;
259
+ const value = sourceObj[key];
260
+ if (options.strict && !(key in resultObj)) {
261
+ // In strict mode, skip properties that don't exist in the target
262
+ continue;
263
+ }
264
+ const existing = resultObj[key];
265
+ if (existing === undefined) {
266
+ // Property doesn't exist in result yet, clone and add it
267
+ resultObj[key] = deepClone(value);
268
+ }
269
+ else if (Array.isArray(value) && Array.isArray(existing)) {
270
+ // Both are arrays, handle according to options
271
+ if (options.strict) {
272
+ // In strict mode, recursively merge array elements
273
+ resultObj[key] = deepMergeWithOptions(existing, value, options);
274
+ }
275
+ else {
276
+ // In non-strict mode, concatenate arrays
277
+ resultObj[key] = [
278
+ ...existing,
279
+ ...value.map((item) => deepClone(item)),
280
+ ];
281
+ }
282
+ }
283
+ else if (isPlainObject(value) && isPlainObject(existing)) {
284
+ // Both are plain objects, recursively merge
285
+ resultObj[key] = deepMergeWithOptions(existing, value, options);
286
+ }
287
+ else {
288
+ // Primitive or type mismatch, replace with cloned value
289
+ resultObj[key] = deepClone(value);
290
+ }
291
+ }
292
+ // Handle symbols
293
+ const symbols = Object.getOwnPropertySymbols(sourceObj);
294
+ for (const symbol of symbols) {
295
+ if (options.strict && !(symbol in resultObj)) {
296
+ // In strict mode, skip symbols that don't exist in the target
297
+ continue;
298
+ }
299
+ const value = sourceObj[symbol];
300
+ const existing = resultObj[symbol];
301
+ if (existing === undefined) {
302
+ // Symbol doesn't exist in result yet, clone and add it
303
+ resultObj[symbol] = deepClone(value);
304
+ }
305
+ else if (Array.isArray(value) && Array.isArray(existing)) {
306
+ // Both are arrays, handle according to options
307
+ if (options.strict) {
308
+ // In strict mode, recursively merge array elements
309
+ resultObj[symbol] = deepMergeWithOptions(existing, value, options);
310
+ }
311
+ else {
312
+ // In non-strict mode, concatenate arrays
313
+ resultObj[symbol] = [
314
+ ...existing,
315
+ ...value.map((item) => deepClone(item)),
316
+ ];
317
+ }
318
+ }
319
+ else if (isPlainObject(value) && isPlainObject(existing)) {
320
+ // Both are plain objects, recursively merge
321
+ resultObj[symbol] = deepMergeWithOptions(existing, value, options);
322
+ }
323
+ else {
324
+ // Primitive or type mismatch, replace with cloned value
325
+ resultObj[symbol] = deepClone(value);
326
+ }
327
+ }
328
+ }
329
+ }
330
+ return result;
331
+ }
332
+ /**
333
+ * Deep merges objects/arrays while preserving the reference to the first object/array
334
+ * Modifies the first object directly rather than creating a new one
335
+ *
336
+ * @param target - The target object that will be modified
337
+ * @param sources - The source objects to merge from
338
+ * @returns The modified target object (same reference)
339
+ *
340
+ * @example
341
+ * const obj1 = { a: 1, b: { c: 2 } };
342
+ * const result = deepMergeKeepReference(obj1, { b: { d: 3 }, e: 4 });
343
+ * // result === obj1 (same reference)
344
+ * // obj1 is now: { a: 1, b: { c: 2, d: 3 }, e: 4 }
345
+ */
346
+ export function deepMergeKeepReference(target, ...sources) {
347
+ return deepMergeWithOptions(target, ...sources, {
348
+ preserveTarget: true,
349
+ });
350
+ }
351
+ /**
352
+ * Strict deep merge - only merges properties that already exist in the target
353
+ * Does not add new properties that don't exist in the target
354
+ *
355
+ * @param target - The target object
356
+ * @param sources - The source objects to merge from
357
+ * @param preserveReference - Whether to preserve the reference to target (default: false)
358
+ * @returns The merged object
359
+ *
360
+ * @example
361
+ * const obj1 = { a: 1, b: { c: 2 } };
362
+ * const result = deepMergeStrict(obj1, { b: { d: 3 }, e: 4 });
363
+ * // result: { a: 1, b: { c: 2 } } - e is not added as it doesn't exist in obj1
364
+ * // d is not added as it doesn't exist in obj1.b
365
+ */
366
+ export function deepMergeStrict(target, ...args) {
367
+ // Check if last argument is a boolean flag for preserving reference
368
+ let preserveReference = false;
369
+ let sources = args;
370
+ if (args.length > 0 && typeof args[args.length - 1] === 'boolean') {
371
+ preserveReference = args[args.length - 1];
372
+ sources = args.slice(0, -1);
373
+ }
374
+ return deepMergeWithOptions(target, ...sources, {
375
+ preserveTarget: preserveReference,
376
+ strict: true,
377
+ });
378
+ }
379
+ /**
380
+ * Helper to merge a value into a structure based on selector
381
+ * @param target - Target object to merge into
382
+ * @param selector - Selector string
383
+ * @param value - Value to merge
384
+ * @example
385
+ * mergeIntoStructure({ a: { b: { c: 1 } } }, 'a.b.c', 2);
386
+ * // { a: { b: { c: 2 } } }
387
+ */
388
+ export const mergeIntoStructure = (target, selector, value) => {
389
+ const segments = parseSelector(selector);
390
+ let current = target;
391
+ for (let i = 0; i < segments.length; i++) {
392
+ const segment = segments[i];
393
+ const isLast = i === segments.length - 1;
394
+ switch (segment.type) {
395
+ case 'property':
396
+ if (isLast) {
397
+ current[String(segment.value)] = value;
398
+ }
399
+ else {
400
+ if (!current[String(segment.value)]) {
401
+ const nextSegment = segments[i + 1];
402
+ current[String(segment.value)] =
403
+ nextSegment.type === 'index' ||
404
+ nextSegment.type === 'slice' ||
405
+ nextSegment.type === 'union' ||
406
+ nextSegment.type === 'wildcard'
407
+ ? []
408
+ : {};
409
+ }
410
+ current = current[String(segment.value)];
411
+ }
412
+ break;
413
+ case 'index':
414
+ if (!Array.isArray(current)) {
415
+ current = [];
416
+ }
417
+ const index = segment.value;
418
+ if (isLast) {
419
+ if (index >= current.length) {
420
+ for (let j = current.length; j <= index; j++) {
421
+ current.push(undefined);
422
+ }
423
+ }
424
+ current[index] = value;
425
+ }
426
+ else {
427
+ if (!current[index]) {
428
+ const nextSegment = segments[i + 1];
429
+ current[index] =
430
+ nextSegment.type === 'index' ||
431
+ nextSegment.type === 'slice' ||
432
+ nextSegment.type === 'union' ||
433
+ nextSegment.type === 'wildcard'
434
+ ? []
435
+ : {};
436
+ }
437
+ current = current[index];
438
+ }
439
+ break;
440
+ case 'wildcard':
441
+ // For wildcards in get, we need to handle all elements
442
+ if (Array.isArray(current)) {
443
+ if (isLast) {
444
+ // Fill all positions with value
445
+ for (let j = 0; j < current.length; j++) {
446
+ current[j] = value;
447
+ }
448
+ }
449
+ else {
450
+ // Ensure all elements have the structure
451
+ const nextSegment = segments[i + 1];
452
+ for (let j = 0; j < current.length; j++) {
453
+ if (!current[j]) {
454
+ current[j] =
455
+ nextSegment.type === 'index' ||
456
+ nextSegment.type === 'slice' ||
457
+ nextSegment.type === 'union' ||
458
+ nextSegment.type === 'wildcard'
459
+ ? []
460
+ : {};
461
+ }
462
+ }
463
+ // Continue with first element (structure should be same for all)
464
+ if (current.length > 0) {
465
+ current = current[0];
466
+ }
467
+ }
468
+ }
469
+ break;
470
+ }
471
+ }
472
+ };
473
+ // Export aliases for convenience
474
+ export { deepMergeKeepReference as deepMerge, deepMergeStrict as mergeStrict, deepMergeWithOptions as mergeWithOptions, };
@@ -0,0 +1 @@
1
+ var b=e=>e==null||Array.isArray(e)||typeof e=="function"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error?!1:typeof e=="object";function $(e){if(typeof e!="object"||e===null)return!1;let s=Object.getPrototypeOf(e);return s===Object.prototype||s===null}var w=(e,s)=>{if(e==null||typeof e!="object")return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(e instanceof Map){let a=new Map;return e.forEach((c,t)=>{(!s||!s.some(r=>r.toString()===t.toString()))&&a.set(t,w(c))}),a}if(e instanceof Set){let a=new Set;return e.forEach(c=>{a.add(w(c))}),a}if(Array.isArray(e))return Array.from(e).map(a=>w(a));if(b(e)){let a={};for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(!s||!s.some(r=>r.toString()===t.toString()))&&(a[t]=w(e[t]));let c=Object.getOwnPropertySymbols(e);for(let t of c)(!s||!s.some(r=>r.toString()===t.toString()))&&(a[t]=w(e[t]));return a}return e};var E=(e,s)=>e===s,O=(e,s)=>{if(e.length!==s.length)return!1;for(let a=0;a<e.length;a++)if(Array.isArray(e[a])&&Array.isArray(s[a])){if(!O(e[a],s[a]))return!1}else if(b(e[a])&&b(s[a])){if(!D(e[a],s[a]))return!1}else if(e[a]!==s[a])return!1;return!0},D=(e,s)=>{let a=Object.keys(e),c=Object.keys(s);if(a.length!==c.length)return!1;for(let t of a){if(!(t in s))return!1;let r=e[t],d=s[t];if(Array.isArray(r)&&Array.isArray(d)){if(!O(r,d))return!1}else if(b(r)&&b(d)){if(!D(r,d))return!1}else if(r!==d)return!1}return!0},P=(e,s,a={})=>{let{includeDeleted:c=!1,includeAdded:t=!0,deepArrayComparison:r=!0,equalityFn:d=E,preserveStructure:m=!1}=a;if(e==null&&s==null)return{};if(e==null)return t?{...s}:{};if(s==null){if(c){let u={};for(let A in e)u[A]=void 0;return u}return{}}if(!b(e)||!b(s))return d(e,s)?{}:s;let l={},f=new Set;for(let u in s){f.add(u);let A=e[u],S=s[u];if(!(u in e)){t&&(l[u]=S);continue}if(Array.isArray(A)&&Array.isArray(S)){r?O(A,S)?m&&(l[u]=void 0):l[u]=S:A!==S?l[u]=S:m&&(l[u]=void 0);continue}if(b(A)&&b(S)){let h=P(A,S,a);Object.keys(h).length>0?l[u]=h:m&&(l[u]=void 0);continue}d(A,S)?m&&(l[u]=void 0):l[u]=S}if(c)for(let u in e)f.has(u)||(l[u]=void 0);return l},C=(e,s,a={})=>{let c=[],t=[],r=[],d={},{includeDeleted:m=!1,includeAdded:l=!0,deepArrayComparison:f=!0,equalityFn:u=E}=a;if(Array.isArray(e)&&Array.isArray(s)){let h=Math.max(e.length,s.length),o=[],i=!1;for(let n=0;n<h;n++){let y=`[${n}]`;if(n>=e.length)c.push(y),o[n]=s[n],i=!0;else if(n>=s.length)t.push(y),i=!0;else{let p=e[n],g=s[n];b(p)&&b(g)||Array.isArray(p)&&Array.isArray(g)?C(p,g,a).hasChanges?(r.push(y),o[n]=g,i=!0):o[n]=p:u(p,g)?o[n]=p:(r.push(y),o[n]=g,i=!0)}}return{changes:i?o:{},added:c,deleted:t,modified:r,hasChanges:i||t.length>0}}let A=(h,o,i="")=>{let n={added:[],deleted:[],modified:[]};if(Array.isArray(h)&&Array.isArray(o)){let y=Math.max(h.length,o.length);for(let p=0;p<y;p++){let g=i?`${i}[${p}]`:`[${p}]`;if(p>=h.length)n.added.push(g);else if(p>=o.length)n.deleted.push(g);else{let T=h[p],x=o[p];if(b(T)&&b(x)){let k=A(T,x,g);n.added.push(...k.added),n.deleted.push(...k.deleted),n.modified.push(...k.modified)}else if(Array.isArray(T)&&Array.isArray(x)){let k=A(T,x,g);n.added.push(...k.added),n.deleted.push(...k.deleted),n.modified.push(...k.modified)}else T!==x&&n.modified.push(g)}}return n}if(b(h)&&b(o)){let y=new Set([...Object.keys(h||{}),...Object.keys(o||{})]);for(let p of y){let g=h?.[p],T=o?.[p],x=i?`${i}.${p}`:p;if(!(p in(h||{})))n.added.push(x);else if(!(p in(o||{})))n.deleted.push(x);else if(Array.isArray(g)&&Array.isArray(T)){if(!O(g,T)){let k=A(g,T,x);n.added.push(...k.added),n.deleted.push(...k.deleted),n.modified.push(...k.modified)}}else if(b(g)&&b(T)){let k=A(g,T,x);n.added.push(...k.added),n.deleted.push(...k.deleted),n.modified.push(...k.modified)}else g!==T&&n.modified.push(x)}}return n};if(e==null&&s==null)return{changes:{},added:c,deleted:t,modified:r,hasChanges:!1};if(e==null){if(l&&s)for(let h in s)c.push(h),d[h]=s[h];return{changes:d,added:c,deleted:t,modified:r,hasChanges:c.length>0}}if(s==null){if(m)for(let h in e)t.push(h),d[h]=void 0;return{changes:d,added:c,deleted:t,modified:r,hasChanges:t.length>0}}let S=new Set;for(let h in s){S.add(h);let o=e[h],i=s[h];if(!(h in e)){l&&(c.push(h),d[h]=i);continue}let n=!1;if(Array.isArray(o)&&Array.isArray(i)){if(n=f?!O(o,i):o!==i,n){let y=A(o,i,h);c.push(...y.added),t.push(...y.deleted),r.push(...y.modified),d[h]=i}}else if(b(o)&&b(i)){let y=P(o,i,a);if(n=Object.keys(y).length>0,n){let p=A(o,i,h);c.push(...p.added),t.push(...p.deleted),r.push(...p.modified),d[h]=y}}else n=!u(o,i),n&&(r.push(h),d[h]=i)}for(let h in e)S.has(h)||(t.push(h),d[h]=void 0);return{changes:d,added:c,deleted:t,modified:r,hasChanges:c.length>0||t.length>0||r.length>0}};function I(e){return!!(e&&(e.diff||e.changes)&&(e.modified||e.deleted||e.hasChanges))}var v=(e,s,a)=>{if(!I(s)){let n=s,y=a||!1;if(Array.isArray(e)&&Array.isArray(n)){let g=y?e:[...e];n.length<g.length&&(g.length=n.length);for(let T=0;T<n.length;T++){let x=n[T];x!==void 0&&(b(g[T])&&b(x)||Array.isArray(g[T])&&Array.isArray(x)?g[T]=v(g[T],x,y):g[T]=x)}return g}if(!b(e))return n;if(!b(n))return e;let p=y?e:{...e};for(let g in n){let T=n[g];T===void 0?delete p[g]:Array.isArray(p[g])&&Array.isArray(T)||b(p[g])&&b(T)?p[g]=v(p[g],T,y):p[g]=T}return p}let{diff:c,added:t=[],deleted:r=[],modified:d=[],changes:m,keepRef:l}=s,f=a!==void 0?a:l,u=m||c;if(!u)return e;let A=new Set(t),S=new Set(r),h=new Set(d),o=n=>{if(t.length===0&&r.length===0&&d.length===0)return!0;let y=n.split(/[.\[\]]+/).filter(Boolean);for(let p=0;p<=y.length;p++){let g=y.slice(0,p).join("."),T=y.slice(0,p).map((x,k)=>/^\d+$/.test(x)?`[${x}]`:k>0?`.${x}`:x).join("");if(A.has(g)||A.has(T)||S.has(g)||S.has(T)||h.has(g)||h.has(T))return!0}return!1};if(Array.isArray(e)&&Array.isArray(u)){let n=f?e:[...e];n.length=u.length;for(let y=0;y<u.length;y++){let p=`[${y}]`,g=u[y];g!==void 0&&o(p)&&(b(n[y])&&b(g)||Array.isArray(n[y])&&Array.isArray(g)?n[y]=v(n[y],g,f):n[y]=g)}return n}if(!b(e))return u;if(!b(u))return e;let i=f?e:{...e};for(let n of r)n.includes(".")||n.includes("[")||o(n)&&delete i[n];for(let n in u){let y=u[n];o(n)&&(y===void 0?delete i[n]:Array.isArray(i[n])&&Array.isArray(y)||b(i[n])&&b(y)?i[n]=v(i[n],y,f):i[n]=y)}return i};var j=(e,s={})=>{let{type:a="auto",throwOnError:c=!1}=s;if(!e||typeof e!="string")return[];let t=[],r="",d=!1,m=!1,l="",f="",u=0,S=a==="auto"?(o=>o.includes("..")?"descendant":o.includes("[?(")?"filter":o.includes("[:")||o.includes("[0:")?"slice":o.includes("[,")||o.includes("[0,1]")?"union":o.includes("[*]")||o.includes(".*.")?"wildcard":o.includes("[]")?"array-wildcard":o.includes("[")&&o.includes("]")?"bracket":"dot")(e):a,h=o=>{let i=o.trim();if(i==="*"||i==="")return{type:"wildcard",value:i===""?"[]":"*",raw:i===""?"[]":o};if(i==="[]")return{type:"wildcard",value:"[]",raw:o};if(/^-?\d+$/.test(i))return{type:"index",value:parseInt(i,10),raw:o};if(i.includes(":")){let n=i.split(":").map(g=>g.trim()),y=n[0]===""?0:parseInt(n[0],10),p=n[1]===""?1/0:parseInt(n[1],10);if(isNaN(y)||isNaN(p)){if(c)throw new Error(`Invalid slice notation: ${o}`);return{type:"wildcard",value:"*",raw:o}}return{type:"slice",value:[y,p],raw:o}}if(i.includes(",")){let n=i.split(",").map(y=>{let p=parseInt(y.trim(),10);return isNaN(p)?-1:p}).filter(y=>y>=0);if(n.length===0){if(c)throw new Error(`Invalid union notation: ${o}`);return{type:"wildcard",value:"*",raw:o}}return{type:"union",value:n,raw:o}}if(i.startsWith("?(")&&i.endsWith(")")){let n=i.slice(2,-1);try{return{type:"filter",value:F(n),raw:o}}catch(y){if(c)throw y;return{type:"wildcard",value:"*",raw:o}}}return i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'")?{type:"property",value:i.slice(1,-1),raw:o}:{type:"property",value:i,raw:o}};for(let o=0;o<e.length;o++){let i=e[o],n=e[o+1];if((i==='"'||i==="'")&&!m){m=!0,l=i;continue}else if(i===l&&m){m=!1,l="",i==='"'||i==="'"||(d?f+=i:r+=i);continue}if(m){d?f+=i:r+=i;continue}if(i==="["&&!d){r&&(t.push({type:"property",value:r,raw:r}),r=""),d=!0,f="";continue}if(i==="]"&&d&&!m){d=!1;let p=h(f);t.push(p);continue}let y=t.length>0?t[t.length-1]:null;if(i==="."&&!d&&!m){if(n==="."){let p=e.split("..")[0];t.push({type:"property",value:p,raw:p}),t.push({type:"descendant",value:"..",raw:".."}),o++}else r&&(r==="*"?t.push({type:"wildcard",value:r,raw:r}):t.push({type:"property",value:r,raw:r}),r="");continue}if(d)f+=i;else if(y&&y.type!=="descendant")r+=i;else{let p=e.split(y?.raw)[1];p!==void 0?r=p:r+=i}}return r&&t.push({type:"property",value:r,raw:r}),t.map(o=>{if(o.type==="property"&&typeof o.value=="string"&&/^-?\d+$/.test(o.value)){let i=parseInt(o.value,10);if(!isNaN(i))return{...o,type:"index",value:i}}return o})},F=e=>{let s=e.replace(/@\.([a-zA-Z_$][\w$]*)/g,(a,c)=>`item.${c}`).replace(/@/g,"item");try{return new Function("item",`return ${s}`)}catch{throw new Error(`Invalid filter expression: ${e}`)}};function M(...e){if(e.length===0)return{};let s=e[0],a=Array.isArray(s);for(let t of e)if(t&&Array.isArray(t)!==a)throw new Error("Cannot mix arrays and objects in deepMerge");let c=a?[]:{};for(let t of e)if(t!=null)if(a){let r=c,d=t;for(let m of d)r.push(w(m))}else{if(!$(t))continue;let r=c,d=t;for(let l in d)if(Object.prototype.hasOwnProperty.call(d,l)){let f=d[l],u=r[l];u===void 0?r[l]=w(f):Array.isArray(f)&&Array.isArray(u)?r[l]=[...u,...f.map(A=>w(A))]:$(f)&&$(u)?r[l]=M(u,f):r[l]=w(f)}let m=Object.getOwnPropertySymbols(d);for(let l of m){let f=d[l],u=r[l];u===void 0?r[l]=w(f):Array.isArray(f)&&Array.isArray(u)?r[l]=[...u,...f.map(A=>w(A))]:$(f)&&$(u)?r[l]=M(u,f):r[l]=w(f)}}return c}function G(e,s,a){let{key:c,override:t=!0}=a||{};if(!c)return Array.from(new Set([...e,...s]));let r=new Map;for(let d of e)r.set(d[c],d);for(let d of s){let m=r.get(d[c]);m?r.set(d[c],t?{...m,...d}:{...d,...m}):r.set(d[c],d)}return Array.from(r.values())}function N(e,s){for(let a in s){let c=e[a],t=s[a],r=C(c,t);Array.isArray(c)&&Array.isArray(t)?(c.length=0,c.push(...t)):typeof c=="object"&&typeof t=="object"&&c&&t&&r.hasChanges?v(c,t):e[a]=t}}function R(e,...s){if(s.length===0)return w(e);let a={preserveTarget:!1,strict:!1},c=s,t=s[s.length-1];t&&typeof t=="object"&&("preserveTarget"in t||"strict"in t)&&(a={...a,...t},c=s.slice(0,-1));let r=a.preserveTarget?e:w(e),d=Array.isArray(r);for(let m of c)if(m&&Array.isArray(m)!==d)throw new Error("Cannot mix arrays and objects in deepMergeWithOptions");for(let m of c)if(m!=null)if(d){let l=r,f=m;if(a.strict)for(let u=0;u<l.length&&u<f.length;u++)$(l[u])&&$(f[u])?l[u]=R(l[u],f[u],a):typeof l[u]==typeof f[u]&&(l[u]=w(f[u]));else N(l,f)}else{if(!$(m))continue;let l=r,f=m;for(let A in f){if(!Object.prototype.hasOwnProperty.call(f,A))continue;let S=f[A];if(a.strict&&!(A in l))continue;let h=l[A];h===void 0?l[A]=w(S):Array.isArray(S)&&Array.isArray(h)?a.strict?l[A]=R(h,S,a):l[A]=[...h,...S.map(o=>w(o))]:$(S)&&$(h)?l[A]=R(h,S,a):l[A]=w(S)}let u=Object.getOwnPropertySymbols(f);for(let A of u){if(a.strict&&!(A in l))continue;let S=f[A],h=l[A];h===void 0?l[A]=w(S):Array.isArray(S)&&Array.isArray(h)?a.strict?l[A]=R(h,S,a):l[A]=[...h,...S.map(o=>w(o))]:$(S)&&$(h)?l[A]=R(h,S,a):l[A]=w(S)}}return r}function H(e,...s){return R(e,...s,{preserveTarget:!0})}function X(e,...s){let a=!1,c=s;return s.length>0&&typeof s[s.length-1]=="boolean"&&(a=s[s.length-1],c=s.slice(0,-1)),R(e,...c,{preserveTarget:a,strict:!0})}var Y=(e,s,a)=>{let c=j(s),t=e;for(let r=0;r<c.length;r++){let d=c[r],m=r===c.length-1;switch(d.type){case"property":if(m)t[String(d.value)]=a;else{if(!t[String(d.value)]){let f=c[r+1];t[String(d.value)]=f.type==="index"||f.type==="slice"||f.type==="union"||f.type==="wildcard"?[]:{}}t=t[String(d.value)]}break;case"index":Array.isArray(t)||(t=[]);let l=d.value;if(m){if(l>=t.length)for(let f=t.length;f<=l;f++)t.push(void 0);t[l]=a}else{if(!t[l]){let f=c[r+1];t[l]=f.type==="index"||f.type==="slice"||f.type==="union"||f.type==="wildcard"?[]:{}}t=t[l]}break;case"wildcard":if(Array.isArray(t))if(m)for(let f=0;f<t.length;f++)t[f]=a;else{let f=c[r+1];for(let u=0;u<t.length;u++)t[u]||(t[u]=f.type==="index"||f.type==="slice"||f.type==="union"||f.type==="wildcard"?[]:{});t.length>0&&(t=t[0])}break}}};export{H as deepMerge,H as deepMergeKeepReference,X as deepMergeStrict,R as deepMergeWithOptions,M as merge,G as mergeArrays,Y as mergeIntoStructure,X as mergeStrict,R as mergeWithOptions};
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var g=(e,r)=>{for(var n in r)l(e,n,{get:r[n],enumerable:!0})},T=(e,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of p(r))!A.call(e,s)&&s!==n&&l(e,s,{get:()=>r[s],enumerable:!(t=d(r,s))||t.enumerable});return e};var O=e=>T(l({},"__esModule",{value:!0}),e);var h={};g(h,{clean:()=>y,deepFreeze:()=>u,defaults:()=>b,filter:()=>m,fromQueryString:()=>x,groupBy:()=>S,invert:()=>a,isNonNullObject:()=>$,size:()=>R,toQueryString:()=>w,transform:()=>k});module.exports=O(h);var i=e=>e==null||Array.isArray(e)||typeof e=="function"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error?!1:typeof e=="object";var f=(e,r)=>{if(e==null||typeof e!="object")return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(e instanceof Map){let n=new Map;return e.forEach((t,s)=>{(!r||!r.some(o=>o.toString()===s.toString()))&&n.set(s,f(t))}),n}if(e instanceof Set){let n=new Set;return e.forEach(t=>{n.add(f(t))}),n}if(Array.isArray(e))return Array.from(e).map(n=>f(n));if(i(e)){let n={};for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&(!r||!r.some(o=>o.toString()===s.toString()))&&(n[s]=f(e[s]));let t=Object.getOwnPropertySymbols(e);for(let s of t)(!r||!r.some(o=>o.toString()===s.toString()))&&(n[s]=f(e[s]));return n}return e};var a=(e,r=!1)=>{if(Array.isArray(e))return e.map(t=>a(t,r));if(!i(e))return{};let n={};for(let t in e){let s=e[t];typeof s=="string"||typeof s=="number"||typeof s=="symbol"?n[s]=t:i(s)?r&&(n[t]=a(s,r)):Array.isArray(s)&&r&&(n[t]=s.map(o=>a(o,r)))}return n},m=(e,r)=>{if(Array.isArray(e))return e.filter(r);if(!i(e))return{};let n={};for(let t in e)r(e[t],t)&&(n[t]=e[t]);return n},y=(e,r=!1)=>{if(!i(e))return{};let n={};for(let t in e){let s=e[t];if(s!=null)if(r&&i(s)){let o=y(s,!0);Object.keys(o).length>0&&(n[t]=o)}else n[t]=s}return n},b=(e,r)=>{if(Array.isArray(e))return Array.isArray(r)?[...e,...r]:[...e,r];let n=f(e);for(let t in r)n[t]===void 0&&(n[t]=r[t]);return n},R=e=>i(e)?Object.keys(e).length:0,k=(e,r)=>{if(Array.isArray(e))return e.map(r);if(!i(e))return{};let n={};for(let t in e){let[s,o]=r(t,e[t]);n[s]=o}return n},S=(e,r)=>Array.isArray(e)?e.reduce((n,t)=>{let s=t[r];if(s==null)return n;let o=String(s);return n[o]||(n[o]=[]),n[o].push(t),n},{}):{},w=e=>{if(!i(e))return"";let r=[],n=(t,s)=>{s!=null&&(Array.isArray(s)?s.forEach(o=>{r.push(`${encodeURIComponent(t)}=${encodeURIComponent(o)}`)}):r.push(`${encodeURIComponent(t)}=${encodeURIComponent(s)}`))};for(let t in e)n(t,e[t]);return r.join("&")},x=e=>{if(!e||typeof e!="string")return{};let r=e.startsWith("?")?e.slice(1):e;if(!r)return{};let n={},t=r.split("&");for(let s of t){let[o,c]=s.split("=").map(decodeURIComponent);o&&(o in n?Array.isArray(n[o])?n[o].push(c||""):n[o]=[n[o],c||""]:n[o]=c||"")}return n},u=e=>{if(e==null||typeof e!="object")return e;Object.freeze(e);for(let n in e){let t=e[n];t!=null&&typeof t=="object"&&u(t)}let r=Object.getOwnPropertySymbols(e);for(let n of r){let t=e[n];t!=null&&typeof t=="object"&&u(t)}return e},$=e=>e!=null&&typeof e=="object"&&!Array.isArray(e);
@@ -0,0 +1,128 @@
1
+ import type { AnyObject, DeepReadonly, RecordObject } from './types.js';
2
+ /**
3
+ * Inverts an object (swaps keys and values)
4
+ * @param obj - Source object
5
+ * @returns Inverted object
6
+ * @example
7
+ * invert({a: 1, b: 2}) // {1: 'a', 2: 'b'}
8
+ */
9
+ export declare const invert: (obj: AnyObject, deep?: boolean) => AnyObject;
10
+ /**
11
+ * Maps object values using a callback function
12
+ * @param obj - Source object
13
+ * @param callback - Mapping function
14
+ * @returns New object with mapped values
15
+ * @example
16
+ * mapValues({a: 1, b: 2}, (value) => value * 2) // {a: 2, b: 4}
17
+ */
18
+ /**
19
+ * Maps object keys using a callback function
20
+ * @param obj - Source object
21
+ * @param callback - Mapping function
22
+ * @returns New object with mapped keys
23
+ * @example
24
+ * mapKeys({a: 1, b: 2}, (key) => key.toUpperCase()) // {A: 1, B: 2}
25
+ */
26
+ /**
27
+ * Filters object properties using a predicate
28
+ * @param obj - Source object
29
+ * @param predicate - Filter function
30
+ * @returns New object with filtered properties
31
+ * @example
32
+ * filter({a: 1, b: 2, c: 3}, (value) => value > 1) // {b: 2, c: 3}
33
+ */
34
+ export declare const filter: <T extends AnyObject>(obj: T, predicate: (value: T[keyof T], key: keyof T) => boolean) => T extends RecordObject ? Partial<T> : Partial<T>[];
35
+ /**
36
+ * Flattens a nested object
37
+ * @param obj - Source object
38
+ * @param separator - Separator for nested keys (default: '.')
39
+ * @returns Flattened object
40
+ * @example
41
+ * flatten({a: {b: {c: 1}}, d: 2}) // {'a.b.c': 1, d: 2}
42
+ */
43
+ /**
44
+ * Unflattens an object (reverse of flatten)
45
+ * @param obj - Source object
46
+ * @param separator - Separator used for nested keys (default: '.')
47
+ * @returns Unflattened object
48
+ * @example
49
+ * unflatten({'a.b.c': 1, d: 2}) // {a: {b: {c: 1}}, d: 2}
50
+ */
51
+ /**
52
+ * Removes undefined or null properties from an object
53
+ * @param obj - Source object
54
+ * @param deep - Whether to clean recursively (default: false)
55
+ * @returns Cleaned object
56
+ * @example
57
+ * clean({a: 1, b: null, c: undefined, d: {e: null}}) // {a: 1, d: {}}
58
+ * clean({a: 1, b: null, d: {e: null}}, true) // {a: 1}
59
+ */
60
+ export declare const clean: <T extends AnyObject>(obj: T, deep?: boolean) => Partial<T>;
61
+ /**
62
+ * Creates a new object with default values
63
+ * @param defaults - Default values
64
+ * @param overrides - Override values
65
+ * @returns Merged object with defaults
66
+ * @example
67
+ * defaults({a: 1, b: 2}, {b: 3, c: 4}) // {a: 1, b: 3, c: 4}
68
+ */
69
+ export declare const defaults: <T extends AnyObject, U extends AnyObject>(current: T, overrides: U) => T & U;
70
+ /**
71
+ * Gets the size of an object (number of own enumerable properties)
72
+ * @param obj - Source object
73
+ * @returns Number of properties
74
+ * @example
75
+ * size({a: 1, b: 2, c: 3}) // 3
76
+ */
77
+ export declare const size: (obj: AnyObject) => number;
78
+ /**
79
+ * Creates a new object with the same keys but transformed values
80
+ * @param obj - Source object
81
+ * @param transformer - Transformation function
82
+ * @returns Transformed object
83
+ * @example
84
+ * transform({a: 1, b: 2}, (key, value) => ({[key]: value * 2})) // {a: 2, b: 4}
85
+ */
86
+ export declare const transform: <T extends AnyObject>(obj: T, transformer: (key: keyof T, value: T[keyof T]) => [string, any]) => AnyObject;
87
+ /**
88
+ * Groups an array of objects by a key
89
+ * @param array - Array of objects
90
+ * @param key - Key to group by
91
+ * @returns Grouped object
92
+ * @example
93
+ * groupBy([{type: 'a', value: 1}, {type: 'b', value: 2}, {type: 'a', value: 3}], 'type')
94
+ * // {a: [{type: 'a', value: 1}, {type: 'a', value: 3}], b: [{type: 'b', value: 2}]}
95
+ */
96
+ export declare const groupBy: <T extends AnyObject>(array: T[], key: keyof T) => Record<string | number, T[]>;
97
+ /**
98
+ * Converts an object to a query string
99
+ * @param obj - Source object
100
+ * @returns Query string
101
+ * @example
102
+ * toQueryString({a: 1, b: 'test', c: [1, 2, 3]}) // 'a=1&b=test&c=1&c=2&c=3'
103
+ */
104
+ export declare const toQueryString: (obj: AnyObject) => string;
105
+ /**
106
+ * Parses a query string to an object
107
+ * @param queryString - Query string
108
+ * @returns Parsed object
109
+ * @example
110
+ * fromQueryString('a=1&b=test&c=1&c=2&c=3') // {a: '1', b: 'test', c: ['1', '2', '3']}
111
+ */
112
+ export declare const fromQueryString: (queryString: string) => AnyObject;
113
+ /**
114
+ * Creates a frozen deep clone of an object
115
+ * @param obj - Source object
116
+ * @returns Deep frozen object
117
+ * @example
118
+ * const frozen = deepFreeze({a: {b: 1}})
119
+ * frozen.a.b = 2 // Error in strict mode
120
+ */
121
+ export declare const deepFreeze: <T>(obj: T) => DeepReadonly<T>;
122
+ /**
123
+ * Type guard for non-null object
124
+ * @param value - Value to check
125
+ * @returns True if value is a non-null object
126
+ */
127
+ export declare const isNonNullObject: (value: unknown) => value is AnyObject;
128
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/lib/object/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIxE;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,EAAE,OAAM,OAAe,KAAG,SAgC9D,CAAC;AAEF;;;;;;;GAOG;AAqBH;;;;;;;GAOG;AAsBH;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,SAAS,EACxC,KAAK,CAAC,EACN,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,OAAO,KACtD,CAAC,SAAS,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAiBlD,CAAC;AAEF;;;;;;;GAOG;AA+CH;;;;;;;GAOG;AA4DH;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,EACvC,KAAK,CAAC,EACN,OAAM,OAAe,KACpB,OAAO,CAAC,CAAC,CAuBX,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAC/D,SAAS,CAAC,EACV,WAAW,CAAC,KACX,CAAC,GAAG,CAgBN,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,SAAS,KAAG,MAMrC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,SAAS,EAC3C,KAAK,CAAC,EACN,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAC9D,SAgBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,EACzC,OAAO,CAAC,EAAE,EACV,KAAK,MAAM,CAAC,KACX,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAqB7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS,KAAG,MAwB9C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,KAAG,SAkCrD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,KAAK,CAAC,KAAG,YAAY,CAAC,CAAC,CA4BpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,SAEzD,CAAC"}