@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,188 @@
1
+ /**
2
+ * Type-level mathematical operations that actually work.
3
+ * These use clever TypeScript tricks to perform type-level arithmetic.
4
+ * @module OperationTypes
5
+ */
6
+ import { Integer, IsNegative } from "./basic.js";
7
+ import { MakeNegative } from "./negative.js";
8
+ /**
9
+ * Creates a tuple of length N.
10
+ * This is the foundation for all type-level arithmetic.
11
+ */
12
+ type Tuple<N extends number, T = unknown, Acc extends T[] = []> = Acc['length'] extends N ? Acc : Tuple<N, T, [...Acc, T]>;
13
+ /**
14
+ * Converts a number to a tuple length.
15
+ */
16
+ type NumberToTuple<N extends number> = Tuple<N>;
17
+ /**
18
+ * Converts a tuple to a number.
19
+ */
20
+ type TupleToNumber<T extends unknown[]> = T['length'];
21
+ /**
22
+ * Helper type to get the numeric value of a digit string.
23
+ */
24
+ type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
25
+ /**
26
+ * Adds two numbers at the type level (works up to ~50).
27
+ */
28
+ type _Add<A extends number, B extends number> = IsNegative<A> extends true ? IsNegative<B> extends true ? Add<Absolute<A>, Absolute<B>> : Compare<Absolute<A>, Absolute<B>> extends -1 ? Subtract<B, Absolute<A>> : Subtract<Absolute<A>, B> : TupleToNumber<[...Tuple<A>, ...Tuple<B>]> & number;
29
+ /**
30
+ * Subtracts B from A at the type level (A - B).
31
+ */
32
+ export type Subtract<A extends number, B extends number> = Tuple<A> extends [...Tuple<B>, ...infer R] ? TupleToNumber<R> : never;
33
+ /**
34
+ * Multiplies two numbers at the type level.
35
+ */
36
+ type _Multiply<A extends number, B extends number> = B extends 0 ? 0 : B extends 1 ? A : MultiplyRec<A, B, 0>;
37
+ type MultiplyRec<A extends number, B extends number, Acc extends number> = B extends 0 ? Acc : MultiplyRec<A, Subtract<B, 1>, Add<Acc, A>>;
38
+ /**
39
+ * Divides A by B at the type level (integer division).
40
+ */
41
+ type _Divide<A extends number, B extends number> = B extends 0 ? never : DivideRec<A, B, 0>;
42
+ type DivideRec<A extends number, B extends number, Q extends number> = A extends 0 ? Q : Subtract<A, B> extends never ? Q : DivideRec<Subtract<A, B>, B, Add<Q, 1>>;
43
+ /**
44
+ * Modulo operation at the type level (A % B).
45
+ */
46
+ export type Mod<A extends number, B extends number> = B extends 0 ? never : Subtract<A, Multiply<Divide<A, B>, B>>;
47
+ export type Add<A extends number, B extends number> = IsNegative<A> extends true ? IsNegative<B> extends true ? MakeNegative<Add<Absolute<A>, Absolute<B>>> : Compare<Absolute<A>, Absolute<B>> extends 1 ? MakeNegative<Subtract<Absolute<A>, Absolute<B>>> : Subtract<Absolute<B>, Absolute<A>> : IsNegative<B> extends true ? Compare<A, Absolute<B>> extends 1 | 0 ? Subtract<A, Absolute<B>> : MakeNegative<Subtract<Absolute<B>, A>> : _Add<A, B>;
48
+ /**
49
+ * Multiplies two numbers, handling signs correctly.
50
+ */
51
+ export type Multiply<A extends number, B extends number> = (IsNegative<A> extends true ? -1 : 1) extends infer SignA ? (IsNegative<B> extends true ? -1 : 1) extends infer SignB ? SignA extends -1 ? SignB extends -1 ? _Multiply<Absolute<A>, Absolute<B>> : MakeNegative<_Multiply<Absolute<A>, Absolute<B>>> : SignB extends -1 ? MakeNegative<_Multiply<Absolute<A>, Absolute<B>>> : _Multiply<Absolute<A>, Absolute<B>> : never : never;
52
+ /**
53
+ * Divides two numbers, handling signs correctly.
54
+ */
55
+ export type Divide<A extends number, B extends number> = B extends 0 ? never : (IsNegative<A> extends true ? -1 : 1) extends infer SignA ? (IsNegative<B> extends true ? -1 : 1) extends infer SignB ? SignA extends -1 ? SignB extends -1 ? _Divide<Absolute<A>, Absolute<B>> : MakeNegative<_Divide<Absolute<A>, Absolute<B>>> : SignB extends -1 ? MakeNegative<_Divide<Absolute<A>, Absolute<B>>> : _Divide<Absolute<A>, Absolute<B>> : never : never;
56
+ /**
57
+ * Compares two numbers at the type level.
58
+ * Returns -1 if A < B, 0 if A = B, 1 if A > B.
59
+ */
60
+ export type Compare<A extends number, B extends number> = A extends B ? 0 : Absolute<A> extends A ? Absolute<B> extends B ? Tuple<A> extends [...Tuple<B>, ...any] ? 1 : -1 : 1 : Absolute<B> extends B ? -1 : never;
61
+ /**
62
+ * Checks if A equals B at the type level.
63
+ */
64
+ export type Equals<A extends number, B extends number> = A extends B ? (B extends A ? true : false) : false;
65
+ /**
66
+ * Checks if A is less than B at the type level.
67
+ */
68
+ export type LessThan<A extends number, B extends number> = Compare<A, B> extends -1 ? true : false;
69
+ /**
70
+ * Checks if A is greater than B at the type level.
71
+ */
72
+ export type GreaterThan<A extends number, B extends number> = Compare<A, B> extends 1 ? true : false;
73
+ /**
74
+ * Checks if A is less than or equal to B at the type level.
75
+ */
76
+ export type LessThanOrEqual<A extends number, B extends number> = Compare<A, B> extends -1 | 0 ? true : false;
77
+ /**
78
+ * Checks if A is greater than or equal to B at the type level.
79
+ */
80
+ export type GreaterThanOrEqual<A extends number, B extends number> = Compare<A, B> extends 1 | 0 ? true : false;
81
+ /**
82
+ * Returns the minimum of two numbers at the type level.
83
+ */
84
+ export type Min<A extends number, B extends number> = Compare<A, B> extends -1 | 0 ? A : B;
85
+ /**
86
+ * Returns the maximum of two numbers at the type level.
87
+ */
88
+ export type Max<A extends number, B extends number> = Compare<A, B> extends 1 | 0 ? A : B;
89
+ /**
90
+ * Extracts the absolute value type from a number.
91
+ */
92
+ export type Absolute<T extends number> = `${T}` extends `-${infer U extends number}` ? U : T;
93
+ /**
94
+ * Represents a decimal number as a string for type manipulation.
95
+ */
96
+ type DecimalString<N extends number> = `${N}` extends `${infer I}.${infer F}` ? [I, F] : [`${N}`, '0'];
97
+ /**
98
+ * Rounds a number to the nearest integer at the type level.
99
+ * This works for numbers up to 2 decimal places.
100
+ */
101
+ export type Round<T extends number> = DecimalString<T> extends [infer I extends string, infer F extends string] ? F extends Digit ? `${F}` extends `${'5' | '6' | '7' | '8' | '9'}` ? Add<ToNumber<I>, 1> : ToNumber<I> : ToNumber<I> : T;
102
+ /**
103
+ * Helper to convert string to number.
104
+ */
105
+ type ToNumber<S extends string> = S extends `${infer N extends number}` ? N : never;
106
+ /**
107
+ * Rounds a number down to the nearest integer at the type level.
108
+ */
109
+ export type Floor<T extends number> = DecimalString<T> extends [infer I extends string, any] ? ToNumber<I> : T;
110
+ /**
111
+ * Rounds a number up to the nearest integer at the type level.
112
+ */
113
+ export type Ceil<T extends number> = DecimalString<T> extends [infer I extends string, infer F extends string] ? F extends '0' ? ToNumber<I> : Add<ToNumber<I>, 1> : T;
114
+ /**
115
+ * Truncates the decimal part of a number at the type level.
116
+ */
117
+ export type Trunc<T extends number> = Floor<T>;
118
+ /**
119
+ * Power operation at the type level (A^B).
120
+ */
121
+ export type Power<Base extends number, Exponent extends number> = Exponent extends 0 ? 1 : Exponent extends 1 ? Base : PowerRec<Base, Exponent, 1>;
122
+ type PowerRec<B extends number, E extends number, Acc extends number> = E extends 0 ? Acc : PowerRec<B, Subtract<E, 1>, Multiply<Acc, B>>;
123
+ /**
124
+ * Factorial operation at the type level (n!).
125
+ * Works for n up to ~12 due to recursion limits.
126
+ */
127
+ export type Factorial<N extends number> = N extends 0 ? 1 : N extends 1 ? 1 : Multiply<N, Factorial<Subtract<N, 1>>>;
128
+ /**
129
+ * Clamps a value between min and max at the type level.
130
+ */
131
+ export type Clamp<T extends number, MinVal extends number, MaxVal extends number> = Min<Max<T, MinVal>, MaxVal>;
132
+ /**
133
+ * Creates a range of numbers from Start to End (inclusive) at the type level.
134
+ */
135
+ export type Range<Start extends number, End extends number> = BuildRange<Start, End, []>;
136
+ type BuildRange<S extends number, E extends number, Acc extends number[]> = GreaterThan<S, E> extends true ? Acc : BuildRange<Add<S, 1>, E, [...Acc, S]>;
137
+ /**
138
+ * Increments a number by 1 at the type level.
139
+ */
140
+ export type Increment<T extends number> = Add<T, 1>;
141
+ /**
142
+ * Decrements a number by 1 at the type level.
143
+ */
144
+ export type Decrement<T extends number> = Subtract<T, 1>;
145
+ /**
146
+ * Checks if a number is even at the type level.
147
+ */
148
+ export type IsEven<T extends number> = Mod<T, 2> extends 0 ? true : false;
149
+ /**
150
+ * Checks if a number is odd at the type level.
151
+ */
152
+ export type IsOdd<T extends number> = Mod<T, 2> extends 1 ? true : false;
153
+ /**
154
+ * Checks if A is divisible by B at the type level.
155
+ */
156
+ export type IsDivisible<A extends number, B extends number> = B extends 0 ? false : Mod<A, B> extends 0 ? true : false;
157
+ /**
158
+ * Asserts that a type condition is true.
159
+ * Useful for writing type tests.
160
+ */
161
+ export type AssertTrue<T extends true> = T;
162
+ /**
163
+ * Asserts that two types are equal.
164
+ */
165
+ export type AssertEqual<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? true : false;
166
+ export type { Tuple, NumberToTuple, TupleToNumber };
167
+ /**
168
+ * Represents an even integer.
169
+ */
170
+ export type Even<T extends number> = T extends Integer ? `${T}` extends `${infer N extends number}` ? Mod<Absolute<N>, 2> extends 0 ? T : never : never : never;
171
+ /**
172
+ * Represents an odd integer.
173
+ */
174
+ export type Odd<T extends number> = T extends Integer ? `${T}` extends `${infer N extends number}` ? Mod<Absolute<N>, 2> extends 1 ? T : never : never : never;
175
+ /**
176
+ * Extracts the sign of a number as a type.
177
+ * Returns -1, 0, or 1 as a numeric literal type.
178
+ */
179
+ export type SignOf<T extends number> = T extends 0 ? 0 : `${T}` extends `-${string}` ? -1 : 1;
180
+ /**
181
+ * Type-level subtraction that always returns a negative or zero result.
182
+ */
183
+ export type SubtractToNegative<A extends number, B extends number> = Compare<A, B> extends 1 | 0 ? MakeNegative<Subtract<A, B>> : Subtract<A, B>;
184
+ /**
185
+ * Returns the negative absolute value (always returns a negative number or zero).
186
+ */
187
+ export type NegativeAbsolute<T extends number> = T extends 0 ? 0 : `-${Absolute<T>}` extends `${infer N extends number}` ? N : never;
188
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../../src/lib/maths/types/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type-level mathematical operations that actually work.
3
+ * These use clever TypeScript tricks to perform type-level arithmetic.
4
+ * @module OperationTypes
5
+ */
6
+ export {};
File without changes
@@ -0,0 +1 @@
1
+ "use strict";var f=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var r in t)f(e,r,{get:t[r],enumerable:!0})},d=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of l(t))!c.call(e,n)&&n!==r&&f(e,n,{get:()=>t[n],enumerable:!(s=u(t,n))||s.enumerable});return e};var g=e=>d(f({},"__esModule",{value:!0}),e);var b={};y(b,{deepClone:()=>i});module.exports=g(b);var a=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 i=(e,t)=>{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 r=new Map;return e.forEach((s,n)=>{(!t||!t.some(o=>o.toString()===n.toString()))&&r.set(n,i(s))}),r}if(e instanceof Set){let r=new Set;return e.forEach(s=>{r.add(i(s))}),r}if(Array.isArray(e))return Array.from(e).map(r=>i(r));if(a(e)){let r={};for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(!t||!t.some(o=>o.toString()===n.toString()))&&(r[n]=i(e[n]));let s=Object.getOwnPropertySymbols(e);for(let n of s)(!t||!t.some(o=>o.toString()===n.toString()))&&(r[n]=i(e[n]));return r}return e};
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Creates a deep clone of a value (object, array, primitive, or built-in types)
3
+ *
4
+ * This function creates a complete copy of the input value, including all nested
5
+ * properties, without maintaining any references to the original object. It properly
6
+ * handles various JavaScript built-in types including:
7
+ *
8
+ * - Primitive values (strings, numbers, booleans)
9
+ * - Plain objects
10
+ * - Arrays
11
+ * - Dates
12
+ * - RegExp
13
+ * - Maps
14
+ * - Sets
15
+ * - Symbols as object keys
16
+ *
17
+ * @template T - The type of the value being cloned
18
+ * @param obj - The value to clone
19
+ * @returns A deep copy of the input value with the same type
20
+ *
21
+ * @example
22
+ * // Cloning a nested object
23
+ * const obj = { a: 1, b: { c: 2 } };
24
+ * const clone = deepClone(obj);
25
+ * obj.b.c = 3;
26
+ * console.log(clone.b.c); // 2 (remains unchanged)
27
+ *
28
+ * @example
29
+ * // Cloning an array with objects
30
+ * const arr = [1, 2, { a: 3 }];
31
+ * const cloneArr = deepClone(arr);
32
+ * arr[2].a = 4;
33
+ * console.log(cloneArr[2].a); // 3 (remains unchanged)
34
+ *
35
+ * @example
36
+ * // Cloning built-in types
37
+ * const date = new Date();
38
+ * const map = new Map([['key', 'value']]);
39
+ * const set = new Set([1, 2, 3]);
40
+ *
41
+ * const dateClone = deepClone(date); // independent Date instance
42
+ * const mapClone = deepClone(map); // independent Map instance
43
+ * const setClone = deepClone(set); // independent Set instance
44
+ */
45
+ export declare const deepClone: <T>(obj: T, skipKeys?: (string | symbol)[]) => T;
46
+ //# sourceMappingURL=clone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../src/lib/object/clone.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,CAwErE,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { isObject } from './utils.js';
2
+ /**
3
+ * Creates a deep clone of a value (object, array, primitive, or built-in types)
4
+ *
5
+ * This function creates a complete copy of the input value, including all nested
6
+ * properties, without maintaining any references to the original object. It properly
7
+ * handles various JavaScript built-in types including:
8
+ *
9
+ * - Primitive values (strings, numbers, booleans)
10
+ * - Plain objects
11
+ * - Arrays
12
+ * - Dates
13
+ * - RegExp
14
+ * - Maps
15
+ * - Sets
16
+ * - Symbols as object keys
17
+ *
18
+ * @template T - The type of the value being cloned
19
+ * @param obj - The value to clone
20
+ * @returns A deep copy of the input value with the same type
21
+ *
22
+ * @example
23
+ * // Cloning a nested object
24
+ * const obj = { a: 1, b: { c: 2 } };
25
+ * const clone = deepClone(obj);
26
+ * obj.b.c = 3;
27
+ * console.log(clone.b.c); // 2 (remains unchanged)
28
+ *
29
+ * @example
30
+ * // Cloning an array with objects
31
+ * const arr = [1, 2, { a: 3 }];
32
+ * const cloneArr = deepClone(arr);
33
+ * arr[2].a = 4;
34
+ * console.log(cloneArr[2].a); // 3 (remains unchanged)
35
+ *
36
+ * @example
37
+ * // Cloning built-in types
38
+ * const date = new Date();
39
+ * const map = new Map([['key', 'value']]);
40
+ * const set = new Set([1, 2, 3]);
41
+ *
42
+ * const dateClone = deepClone(date); // independent Date instance
43
+ * const mapClone = deepClone(map); // independent Map instance
44
+ * const setClone = deepClone(set); // independent Set instance
45
+ */
46
+ export const deepClone = (obj, skipKeys) => {
47
+ // Handle primitives
48
+ if (obj == null || typeof obj !== 'object') {
49
+ return obj;
50
+ }
51
+ // Handle Date
52
+ if (obj instanceof Date) {
53
+ return new Date(obj.getTime());
54
+ }
55
+ // Handle RegExp
56
+ if (obj instanceof RegExp) {
57
+ return new RegExp(obj.source, obj.flags);
58
+ }
59
+ // Handle Map
60
+ if (obj instanceof Map) {
61
+ const clone = new Map();
62
+ obj.forEach((value, key) => {
63
+ if (!skipKeys || !skipKeys.some((k) => k.toString() === key.toString())) {
64
+ clone.set(key, deepClone(value));
65
+ }
66
+ });
67
+ return clone;
68
+ }
69
+ // Handle Set
70
+ if (obj instanceof Set) {
71
+ const clone = new Set();
72
+ obj.forEach((value) => {
73
+ clone.add(deepClone(value));
74
+ });
75
+ return clone;
76
+ }
77
+ // Handle Array
78
+ if (Array.isArray(obj)) {
79
+ return Array.from(obj).map((item) => deepClone(item));
80
+ }
81
+ // Handle plain object
82
+ if (isObject(obj)) {
83
+ const clone = {};
84
+ for (const key in obj) {
85
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
86
+ if (!skipKeys ||
87
+ !skipKeys.some((k) => k.toString() === key.toString())) {
88
+ clone[key] = deepClone(obj[key]);
89
+ }
90
+ }
91
+ }
92
+ // Handle symbols
93
+ const symbols = Object.getOwnPropertySymbols(obj);
94
+ for (const symbol of symbols) {
95
+ if (!skipKeys ||
96
+ !skipKeys.some((s) => s.toString() === symbol.toString())) {
97
+ clone[symbol] = deepClone(obj[symbol]);
98
+ }
99
+ }
100
+ return clone;
101
+ }
102
+ // Fallback for other object types
103
+ return obj;
104
+ };
@@ -0,0 +1 @@
1
+ var f=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 o=(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((s,t)=>{(!r||!r.some(i=>i.toString()===t.toString()))&&n.set(t,o(s))}),n}if(e instanceof Set){let n=new Set;return e.forEach(s=>{n.add(o(s))}),n}if(Array.isArray(e))return Array.from(e).map(n=>o(n));if(f(e)){let n={};for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(!r||!r.some(i=>i.toString()===t.toString()))&&(n[t]=o(e[t]));let s=Object.getOwnPropertySymbols(e);for(let t of s)(!r||!r.some(i=>i.toString()===t.toString()))&&(n[t]=o(e[t]));return n}return e};export{o as deepClone};
@@ -0,0 +1 @@
1
+ "use strict";var b=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var N=(n,s)=>{for(var u in s)b(n,u,{get:s[u],enumerable:!0})},J=(n,s,u,h)=>{if(s&&typeof s=="object"||typeof s=="function")for(let d of K(s))!M.call(n,d)&&d!==u&&b(n,d,{get:()=>s[d],enumerable:!(h=q(s,d))||h.enumerable});return n};var L=n=>J(b({},"__esModule",{value:!0}),n);var z={};N(z,{applyDiff:()=>x,diffObject:()=>D,diffObjectDetailed:()=>E,getChangedPaths:()=>W,hasObjectChanges:()=>B});module.exports=L(z);var o=n=>n==null||Array.isArray(n)||typeof n=="function"||n instanceof Date||n instanceof RegExp||n instanceof Map||n instanceof Set||n instanceof Error?!1:typeof n=="object";var P=(n,s)=>n===s,C=(n,s)=>{if(n.length!==s.length)return!1;for(let u=0;u<n.length;u++)if(Array.isArray(n[u])&&Array.isArray(s[u])){if(!C(n[u],s[u]))return!1}else if(o(n[u])&&o(s[u])){if(!F(n[u],s[u]))return!1}else if(n[u]!==s[u])return!1;return!0},F=(n,s)=>{let u=Object.keys(n),h=Object.keys(s);if(u.length!==h.length)return!1;for(let d of u){if(!(d in s))return!1;let c=n[d],A=s[d];if(Array.isArray(c)&&Array.isArray(A)){if(!C(c,A))return!1}else if(o(c)&&o(A)){if(!F(c,A))return!1}else if(c!==A)return!1}return!0},D=(n,s,u={})=>{let{includeDeleted:h=!1,includeAdded:d=!0,deepArrayComparison:c=!0,equalityFn:A=P,preserveStructure:R=!1}=u;if(n==null&&s==null)return{};if(n==null)return d?{...s}:{};if(s==null){if(h){let i={};for(let g in n)i[g]=void 0;return i}return{}}if(!o(n)||!o(s))return A(n,s)?{}:s;let S={},T=new Set;for(let i in s){T.add(i);let g=n[i],m=s[i];if(!(i in n)){d&&(S[i]=m);continue}if(Array.isArray(g)&&Array.isArray(m)){c?C(g,m)?R&&(S[i]=void 0):S[i]=m:g!==m?S[i]=m:R&&(S[i]=void 0);continue}if(o(g)&&o(m)){let r=D(g,m,u);Object.keys(r).length>0?S[i]=r:R&&(S[i]=void 0);continue}A(g,m)?R&&(S[i]=void 0):S[i]=m}if(h)for(let i in n)T.has(i)||(S[i]=void 0);return S},E=(n,s,u={})=>{let h=[],d=[],c=[],A={},{includeDeleted:R=!1,includeAdded:S=!0,deepArrayComparison:T=!0,equalityFn:i=P}=u;if(Array.isArray(n)&&Array.isArray(s)){let r=Math.max(n.length,s.length),p=[],y=!1;for(let e=0;e<r;e++){let f=`[${e}]`;if(e>=n.length)h.push(f),p[e]=s[e],y=!0;else if(e>=s.length)d.push(f),y=!0;else{let a=n[e],t=s[e];o(a)&&o(t)||Array.isArray(a)&&Array.isArray(t)?E(a,t,u).hasChanges?(c.push(f),p[e]=t,y=!0):p[e]=a:i(a,t)?p[e]=a:(c.push(f),p[e]=t,y=!0)}}return{changes:y?p:{},added:h,deleted:d,modified:c,hasChanges:y||d.length>0}}let g=(r,p,y="")=>{let e={added:[],deleted:[],modified:[]};if(Array.isArray(r)&&Array.isArray(p)){let f=Math.max(r.length,p.length);for(let a=0;a<f;a++){let t=y?`${y}[${a}]`:`[${a}]`;if(a>=r.length)e.added.push(t);else if(a>=p.length)e.deleted.push(t);else{let l=r[a],k=p[a];if(o(l)&&o(k)){let $=g(l,k,t);e.added.push(...$.added),e.deleted.push(...$.deleted),e.modified.push(...$.modified)}else if(Array.isArray(l)&&Array.isArray(k)){let $=g(l,k,t);e.added.push(...$.added),e.deleted.push(...$.deleted),e.modified.push(...$.modified)}else l!==k&&e.modified.push(t)}}return e}if(o(r)&&o(p)){let f=new Set([...Object.keys(r||{}),...Object.keys(p||{})]);for(let a of f){let t=r?.[a],l=p?.[a],k=y?`${y}.${a}`:a;if(!(a in(r||{})))e.added.push(k);else if(!(a in(p||{})))e.deleted.push(k);else if(Array.isArray(t)&&Array.isArray(l)){if(!C(t,l)){let $=g(t,l,k);e.added.push(...$.added),e.deleted.push(...$.deleted),e.modified.push(...$.modified)}}else if(o(t)&&o(l)){let $=g(t,l,k);e.added.push(...$.added),e.deleted.push(...$.deleted),e.modified.push(...$.modified)}else t!==l&&e.modified.push(k)}}return e};if(n==null&&s==null)return{changes:{},added:h,deleted:d,modified:c,hasChanges:!1};if(n==null){if(S&&s)for(let r in s)h.push(r),A[r]=s[r];return{changes:A,added:h,deleted:d,modified:c,hasChanges:h.length>0}}if(s==null){if(R)for(let r in n)d.push(r),A[r]=void 0;return{changes:A,added:h,deleted:d,modified:c,hasChanges:d.length>0}}let m=new Set;for(let r in s){m.add(r);let p=n[r],y=s[r];if(!(r in n)){S&&(h.push(r),A[r]=y);continue}let e=!1;if(Array.isArray(p)&&Array.isArray(y)){if(e=T?!C(p,y):p!==y,e){let f=g(p,y,r);h.push(...f.added),d.push(...f.deleted),c.push(...f.modified),A[r]=y}}else if(o(p)&&o(y)){let f=D(p,y,u);if(e=Object.keys(f).length>0,e){let a=g(p,y,r);h.push(...a.added),d.push(...a.deleted),c.push(...a.modified),A[r]=f}}else e=!i(p,y),e&&(c.push(r),A[r]=y)}for(let r in n)m.has(r)||(d.push(r),A[r]=void 0);return{changes:A,added:h,deleted:d,modified:c,hasChanges:h.length>0||d.length>0||c.length>0}},B=(n,s,u={})=>{let h=D(n,s,u);return Object.keys(h).length>0};function I(n){return!!(n&&(n.diff||n.changes)&&(n.modified||n.deleted||n.hasChanges))}var x=(n,s,u)=>{if(!I(s)){let e=s,f=u||!1;if(Array.isArray(n)&&Array.isArray(e)){let t=f?n:[...n];e.length<t.length&&(t.length=e.length);for(let l=0;l<e.length;l++){let k=e[l];k!==void 0&&(o(t[l])&&o(k)||Array.isArray(t[l])&&Array.isArray(k)?t[l]=x(t[l],k,f):t[l]=k)}return t}if(!o(n))return e;if(!o(e))return n;let a=f?n:{...n};for(let t in e){let l=e[t];l===void 0?delete a[t]:Array.isArray(a[t])&&Array.isArray(l)||o(a[t])&&o(l)?a[t]=x(a[t],l,f):a[t]=l}return a}let{diff:h,added:d=[],deleted:c=[],modified:A=[],changes:R,keepRef:S}=s,T=u!==void 0?u:S,i=R||h;if(!i)return n;let g=new Set(d),m=new Set(c),r=new Set(A),p=e=>{if(d.length===0&&c.length===0&&A.length===0)return!0;let f=e.split(/[.\[\]]+/).filter(Boolean);for(let a=0;a<=f.length;a++){let t=f.slice(0,a).join("."),l=f.slice(0,a).map((k,$)=>/^\d+$/.test(k)?`[${k}]`:$>0?`.${k}`:k).join("");if(g.has(t)||g.has(l)||m.has(t)||m.has(l)||r.has(t)||r.has(l))return!0}return!1};if(Array.isArray(n)&&Array.isArray(i)){let e=T?n:[...n];e.length=i.length;for(let f=0;f<i.length;f++){let a=`[${f}]`,t=i[f];t!==void 0&&p(a)&&(o(e[f])&&o(t)||Array.isArray(e[f])&&Array.isArray(t)?e[f]=x(e[f],t,T):e[f]=t)}return e}if(!o(n))return i;if(!o(i))return n;let y=T?n:{...n};for(let e of c)e.includes(".")||e.includes("[")||p(e)&&delete y[e];for(let e in i){let f=i[e];p(e)&&(f===void 0?delete y[e]:Array.isArray(y[e])&&Array.isArray(f)||o(y[e])&&o(f)?y[e]=x(y[e],f,T):y[e]=f)}return y},W=(n,s,u={})=>{let h=[],d=(c,A,R="")=>{if(c===A)return;if(Array.isArray(c)&&Array.isArray(A)){let T=Math.max(c.length,A.length);for(let i=0;i<T;i++){let g=R?`${R}[${i}]`:`[${i}]`;if(i>=c.length)h.push(g);else if(i>=A.length)h.push(g);else{let m=c[i],r=A[i];o(m)&&o(r)||Array.isArray(m)&&Array.isArray(r)?d(m,r,g):m!==r&&h.push(g)}}return}if(!o(c)||!o(A)){R&&h.push(R);return}let S=new Set([...Object.keys(c||{}),...Object.keys(A||{})]);for(let T of S){let i=c?.[T],g=A?.[T],m=R?`${R}.${T}`:T;!(T in(c||{}))||!(T in(A||{}))?h.push(m):Array.isArray(i)&&Array.isArray(g)||o(i)&&o(g)?d(i,g,m):i!==g&&h.push(m)}};return d(n,s),h};
@@ -0,0 +1,203 @@
1
+ /**
2
+ * @fileoverview Object diff utilities for comparing and tracking changes
3
+ * @description Provides utilities to diff objects and return structured changes
4
+ */
5
+ import type { AnyObject } from './types.js';
6
+ /**
7
+ * Options for diffObject function
8
+ */
9
+ export interface DiffOptions {
10
+ /**
11
+ * If true, includes properties that exist in oldObj but not in newObj
12
+ * @default false
13
+ */
14
+ includeDeleted?: boolean;
15
+ /**
16
+ * If true, includes properties that exist in newObj but not in oldObj
17
+ * @default true
18
+ */
19
+ includeAdded?: boolean;
20
+ /**
21
+ * If true, compares arrays by deep equality instead of reference
22
+ * @default true
23
+ */
24
+ deepArrayComparison?: boolean;
25
+ /**
26
+ * Custom equality function for comparing values
27
+ * @default strict equality (===)
28
+ */
29
+ equalityFn?: (a: any, b: any) => boolean;
30
+ /**
31
+ * If true, preserves the full object structure with undefined for unchanged values
32
+ * @default false
33
+ */
34
+ preserveStructure?: boolean;
35
+ }
36
+ /**
37
+ * Diff result with metadata about changes
38
+ */
39
+ export interface DiffResult<T = any> {
40
+ /**
41
+ * Object containing only changed values
42
+ */
43
+ changes: Partial<T>;
44
+ /**
45
+ * Paths that were added (exist in new but not in old)
46
+ */
47
+ added: string[];
48
+ /**
49
+ * Paths that were deleted (exist in old but not in new)
50
+ */
51
+ deleted: string[];
52
+ /**
53
+ * Paths that were modified (exist in both but have different values)
54
+ */
55
+ modified: string[];
56
+ /**
57
+ * Whether any changes were detected
58
+ */
59
+ hasChanges: boolean;
60
+ }
61
+ /**
62
+ * Compares two objects and returns only the changed values while preserving the object structure
63
+ *
64
+ * @param oldObj - The original object
65
+ * @param newObj - The new object to compare against
66
+ * @param options - Configuration options for diff behavior
67
+ * @returns Object with the same structure containing only changed values
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * const old = { a: 1, b: { c: 2, d: 3 }, e: 5 };
72
+ * const new = { a: 1, b: { c: 4, d: 3 }, e: 5, f: 6 };
73
+ * const diff = diffObject(old, new);
74
+ * // Returns: { b: { c: 4 }, f: 6 }
75
+ * ```
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * // With arrays
80
+ * const old = { items: [1, 2, 3], meta: { count: 3 } };
81
+ * const new = { items: [1, 2, 4], meta: { count: 4 } };
82
+ * const diff = diffObject(old, new);
83
+ * // Returns: { items: [1, 2, 4], meta: { count: 4 } }
84
+ * ```
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * // Include deleted properties
89
+ * const old = { a: 1, b: 2, c: 3 };
90
+ * const new = { a: 1, c: 4 };
91
+ * const diff = diffObject(old, new, { includeDeleted: true });
92
+ * // Returns: { b: undefined, c: 4 }
93
+ * ```
94
+ */
95
+ export declare const diffObject: <T extends AnyObject>(oldObj: T, newObj: T, options?: DiffOptions) => Partial<T>;
96
+ /**
97
+ * Returns detailed diff with metadata about changes for objects and arrays
98
+ *
99
+ * @param oldObj - The original object or array
100
+ * @param newObj - The new object or array to compare against
101
+ * @param options - Configuration options for diff behavior
102
+ * @returns Detailed diff result with metadata including array indices in paths
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * // Object example
107
+ * const old = { a: 1, b: 2, c: 3 };
108
+ * const new = { a: 1, b: 4, d: 5 };
109
+ * const result = diffObjectDetailed(old, new);
110
+ * // {
111
+ * // changes: { b: 4, d: 5 },
112
+ * // added: ['d'],
113
+ * // deleted: ['c'],
114
+ * // modified: ['b'],
115
+ * // hasChanges: true
116
+ * // }
117
+ * ```
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * // Nested array example
122
+ * const old = { items: [{ id: 1, name: 'a' }, { id: 2, name: 'b' }] };
123
+ * const new = { items: [{ id: 1, name: 'x' }, { id: 2, name: 'b' }] };
124
+ * const result = diffObjectDetailed(old, new);
125
+ * // modified: ['items[0].name']
126
+ * ```
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * // Top-level array example
131
+ * const old = [1, 2, 3, 4];
132
+ * const new = [1, 5, 3];
133
+ * const result = diffObjectDetailed(old, new);
134
+ * // {
135
+ * // changes: [1, 5, 3], // Returns the new array with changes
136
+ * // added: [],
137
+ * // deleted: ['[3]'], // Index 3 was removed
138
+ * // modified: ['[1]'], // Index 1 changed from 2 to 5
139
+ * // hasChanges: true
140
+ * // }
141
+ * ```
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * // Array of objects example
146
+ * const old = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
147
+ * const new = [{ id: 1, name: 'Alicia' }, { id: 2, name: 'Bob' }];
148
+ * const result = diffObjectDetailed(old, new);
149
+ * // {
150
+ * // changes: [{ id: 1, name: 'Alicia' }, { id: 2, name: 'Bob' }],
151
+ * // modified: ['[0]'], // First element modified
152
+ * // hasChanges: true
153
+ * // }
154
+ * ```
155
+ */
156
+ export declare const diffObjectDetailed: <T extends AnyObject>(oldObj: T, newObj: T, options?: DiffOptions) => DiffResult<T>;
157
+ /**
158
+ * Checks if two objects have any differences
159
+ *
160
+ * @param oldObj - The original object
161
+ * @param newObj - The new object to compare against
162
+ * @param options - Configuration options for diff behavior
163
+ * @returns True if objects are different
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * hasObjectChanges({ a: 1 }, { a: 1 }) // false
168
+ * hasObjectChanges({ a: 1 }, { a: 2 }) // true
169
+ * ```
170
+ */
171
+ export declare const hasObjectChanges: <T extends AnyObject>(oldObj: T, newObj: T, options?: DiffOptions) => boolean;
172
+ interface ApplyDiff<T> extends Partial<DiffResult<T>> {
173
+ keepRef?: boolean;
174
+ diff?: T;
175
+ }
176
+ export declare const applyDiff: <T extends AnyObject>(baseObj: T, option: T | ApplyDiff<T>, keepRefParam?: boolean) => T;
177
+ /**
178
+ * Gets paths of all changed values with array index notation support
179
+ *
180
+ * @param oldObj - The original object
181
+ * @param newObj - The new object to compare against
182
+ * @param options - Configuration options for diff behavior
183
+ * @returns Array of paths to changed values (e.g., ['a.b[0].name', 'c[1].value'])
184
+ *
185
+ * @example
186
+ * ```ts
187
+ * const old = { a: 1, b: { c: 2, d: 3 } };
188
+ * const new = { a: 1, b: { c: 4, d: 3 }, e: 5 };
189
+ * const paths = getChangedPaths(old, new);
190
+ * // Returns: ['b.c', 'e']
191
+ * ```
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * const old = { items: [{ id: 1, name: 'a' }, { id: 2, name: 'b' }] };
196
+ * const new = { items: [{ id: 1, name: 'x' }, { id: 2, name: 'b' }] };
197
+ * const paths = getChangedPaths(old, new);
198
+ * // Returns: ['items[0].name']
199
+ * ```
200
+ */
201
+ export declare const getChangedPaths: <T extends AnyObject>(oldObj: T, newObj: T, options?: DiffOptions) => string[];
202
+ export {};
203
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/lib/object/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;IAEzC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,SAAS,EAC5C,QAAQ,CAAC,EACT,QAAQ,CAAC,EACT,UAAS,WAAgB,KACxB,OAAO,CAAC,CAAC,CAsGX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,SAAS,EACpD,QAAQ,CAAC,EACT,QAAQ,CAAC,EACT,UAAS,WAAgB,KACxB,UAAU,CAAC,CAAC,CA4Rd,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,SAAS,EAClD,QAAQ,CAAC,EACT,QAAQ,CAAC,EACT,UAAS,WAAgB,KACxB,OAGF,CAAC;AAmDF,UAAU,SAAS,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AACD,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,SAAS,EAC3C,SAAS,CAAC,EACV,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EACxB,eAAe,OAAO,KACrB,CA2LF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,SAAS,EACjD,QAAQ,CAAC,EACT,QAAQ,CAAC,EACT,UAAS,WAAgB,KACxB,MAAM,EA0ER,CAAC"}