@fluixi/utils 1.0.0-alpha.83 → 1.0.0-alpha.84

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 (129) hide show
  1. package/dist/index.cjs +2858 -1
  2. package/dist/index.mjs +2838 -1
  3. package/dist/lib/array/advanced.cjs +2227 -1
  4. package/dist/lib/array/advanced.mjs +2204 -1
  5. package/dist/lib/array/array.cjs +57 -1
  6. package/dist/lib/array/array.mjs +36 -1
  7. package/dist/lib/array/index.cjs +2344 -1
  8. package/dist/lib/array/index.mjs +2322 -1
  9. package/dist/lib/array/utils.cjs +103 -1
  10. package/dist/lib/array/utils.mjs +82 -1
  11. package/dist/lib/color/color.cjs +2190 -1
  12. package/dist/lib/color/color.mjs +2167 -1
  13. package/dist/lib/color/constants.cjs +380 -1
  14. package/dist/lib/color/constants.mjs +359 -1
  15. package/dist/lib/color/conversions.cjs +629 -1
  16. package/dist/lib/color/conversions.mjs +608 -1
  17. package/dist/lib/color/helpers.cjs +2534 -1
  18. package/dist/lib/color/helpers.mjs +2511 -1
  19. package/dist/lib/color/index.cjs +2641 -1
  20. package/dist/lib/color/index.mjs +2619 -1
  21. package/dist/lib/color/types.cjs +18 -1
  22. package/dist/lib/color/utils.cjs +962 -1
  23. package/dist/lib/color/utils.mjs +939 -1
  24. package/dist/lib/compare/comparators.cjs +171 -1
  25. package/dist/lib/compare/comparators.mjs +150 -1
  26. package/dist/lib/compare/index.cjs +172 -1
  27. package/dist/lib/compare/index.mjs +152 -1
  28. package/dist/lib/crypto/hash.cjs +83 -1
  29. package/dist/lib/crypto/hash.mjs +62 -1
  30. package/dist/lib/crypto/index.cjs +85 -1
  31. package/dist/lib/crypto/index.mjs +62 -1
  32. package/dist/lib/dom/events.cjs +40 -1
  33. package/dist/lib/dom/events.mjs +19 -1
  34. package/dist/lib/dom/index.cjs +78 -1
  35. package/dist/lib/dom/index.mjs +56 -1
  36. package/dist/lib/dom/utils.cjs +57 -1
  37. package/dist/lib/dom/utils.mjs +36 -1
  38. package/dist/lib/functions/functions.cjs +366 -1
  39. package/dist/lib/functions/functions.mjs +345 -1
  40. package/dist/lib/functions/index.cjs +369 -1
  41. package/dist/lib/functions/index.mjs +347 -1
  42. package/dist/lib/functions/types.cjs +18 -1
  43. package/dist/lib/helpers.cjs +78 -1
  44. package/dist/lib/helpers.mjs +59 -1
  45. package/dist/lib/index.cjs +2857 -1
  46. package/dist/lib/index.mjs +2836 -1
  47. package/dist/lib/maths/constants.cjs +70 -1
  48. package/dist/lib/maths/constants.mjs +50 -1
  49. package/dist/lib/maths/fn/advanced.cjs +231 -1
  50. package/dist/lib/maths/fn/advanced.mjs +208 -1
  51. package/dist/lib/maths/fn/basic.cjs +212 -1
  52. package/dist/lib/maths/fn/basic.mjs +191 -1
  53. package/dist/lib/maths/fn/complex.cjs +268 -1
  54. package/dist/lib/maths/fn/complex.mjs +247 -1
  55. package/dist/lib/maths/fn/index.cjs +877 -1
  56. package/dist/lib/maths/fn/index.mjs +855 -1
  57. package/dist/lib/maths/fn/trigo.cjs +179 -1
  58. package/dist/lib/maths/fn/trigo.mjs +156 -1
  59. package/dist/lib/maths/fn/vector.cjs +728 -1
  60. package/dist/lib/maths/fn/vector.mjs +707 -1
  61. package/dist/lib/maths/formatter.cjs +61 -1
  62. package/dist/lib/maths/formatter.mjs +40 -1
  63. package/dist/lib/maths/guards.cjs +164 -1
  64. package/dist/lib/maths/guards.mjs +144 -1
  65. package/dist/lib/maths/index.cjs +1152 -1
  66. package/dist/lib/maths/index.mjs +1130 -1
  67. package/dist/lib/maths/parser.cjs +75 -1
  68. package/dist/lib/maths/parser.mjs +54 -1
  69. package/dist/lib/maths/random.cjs +49 -1
  70. package/dist/lib/maths/random.mjs +28 -1
  71. package/dist/lib/maths/types/advanced.cjs +18 -1
  72. package/dist/lib/maths/types/basic.cjs +18 -1
  73. package/dist/lib/maths/types/index.cjs +19 -1
  74. package/dist/lib/maths/types/index.mjs +1 -0
  75. package/dist/lib/maths/types/negative.cjs +18 -1
  76. package/dist/lib/maths/types/operations.cjs +18 -1
  77. package/dist/lib/object/clone.cjs +88 -1
  78. package/dist/lib/object/clone.mjs +65 -1
  79. package/dist/lib/object/diff.cjs +573 -1
  80. package/dist/lib/object/diff.mjs +550 -1
  81. package/dist/lib/object/getter-setter.cjs +2351 -1
  82. package/dist/lib/object/getter-setter.mjs +2330 -1
  83. package/dist/lib/object/index.cjs +3956 -6
  84. package/dist/lib/object/index.mjs +3936 -6
  85. package/dist/lib/object/merge.cjs +1029 -1
  86. package/dist/lib/object/merge.mjs +1006 -1
  87. package/dist/lib/object/object.cjs +280 -1
  88. package/dist/lib/object/object.mjs +257 -1
  89. package/dist/lib/object/omit.cjs +2022 -1
  90. package/dist/lib/object/omit.mjs +1999 -1
  91. package/dist/lib/object/reconcile.cjs +126 -1
  92. package/dist/lib/object/reconcile.mjs +105 -1
  93. package/dist/lib/object/selector.cjs +303 -1
  94. package/dist/lib/object/selector.mjs +282 -1
  95. package/dist/lib/object/sort.cjs +209 -1
  96. package/dist/lib/object/sort.mjs +186 -1
  97. package/dist/lib/object/transform.cjs +2211 -1
  98. package/dist/lib/object/transform.mjs +2190 -1
  99. package/dist/lib/object/types.cjs +18 -1
  100. package/dist/lib/object/utils.cjs +326 -6
  101. package/dist/lib/object/utils.mjs +305 -6
  102. package/dist/lib/primitive/boolean/boolean.cjs +407 -1
  103. package/dist/lib/primitive/boolean/boolean.mjs +386 -1
  104. package/dist/lib/primitive/boolean/index.cjs +382 -1
  105. package/dist/lib/primitive/boolean/index.mjs +359 -1
  106. package/dist/lib/primitive/boolean/types.cjs +18 -1
  107. package/dist/lib/primitive/date/date.cjs +1126 -1
  108. package/dist/lib/primitive/date/date.mjs +1105 -1
  109. package/dist/lib/primitive/date/index.cjs +1128 -1
  110. package/dist/lib/primitive/date/index.mjs +1105 -1
  111. package/dist/lib/primitive/date/types.cjs +18 -1
  112. package/dist/lib/primitive/index.cjs +2338 -5
  113. package/dist/lib/primitive/index.mjs +2316 -5
  114. package/dist/lib/primitive/string/index.cjs +875 -5
  115. package/dist/lib/primitive/string/index.mjs +852 -5
  116. package/dist/lib/primitive/string/parser-2.cjs +543 -8
  117. package/dist/lib/primitive/string/parser-2.mjs +522 -8
  118. package/dist/lib/primitive/string/parser.cjs +236 -3
  119. package/dist/lib/primitive/string/parser.mjs +215 -3
  120. package/dist/lib/primitive/string/string.cjs +926 -5
  121. package/dist/lib/primitive/string/string.mjs +903 -5
  122. package/dist/lib/primitive/string/types.cjs +18 -1
  123. package/dist/lib/primitive/types.cjs +18 -1
  124. package/dist/lib/url/index.cjs +327 -1
  125. package/dist/lib/url/index.mjs +304 -1
  126. package/dist/lib/url/parser.cjs +325 -1
  127. package/dist/lib/url/parser.mjs +304 -1
  128. package/dist/lib/url/types.cjs +18 -1
  129. package/package.json +5 -5
@@ -1 +1,573 @@
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};
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/lib/object/diff.ts
21
+ var diff_exports = {};
22
+ __export(diff_exports, {
23
+ applyDiff: () => applyDiff,
24
+ diffObject: () => diffObject,
25
+ diffObjectDetailed: () => diffObjectDetailed,
26
+ getChangedPaths: () => getChangedPaths,
27
+ hasObjectChanges: () => hasObjectChanges
28
+ });
29
+ module.exports = __toCommonJS(diff_exports);
30
+
31
+ // src/lib/object/utils.ts
32
+ var isObject = (value) => {
33
+ if (value == null) return false;
34
+ if (Array.isArray(value)) return false;
35
+ if (typeof value === "function") return false;
36
+ if (value instanceof Date) return false;
37
+ if (value instanceof RegExp) return false;
38
+ if (value instanceof Map) return false;
39
+ if (value instanceof Set) return false;
40
+ if (value instanceof Error) return false;
41
+ return typeof value === "object";
42
+ };
43
+
44
+ // src/lib/object/diff.ts
45
+ var defaultEqualityFn = (a, b) => a === b;
46
+ var deepArrayEqual = (arr1, arr2) => {
47
+ if (arr1.length !== arr2.length) return false;
48
+ for (let i = 0; i < arr1.length; i++) {
49
+ if (Array.isArray(arr1[i]) && Array.isArray(arr2[i])) {
50
+ if (!deepArrayEqual(arr1[i], arr2[i])) return false;
51
+ } else if (isObject(arr1[i]) && isObject(arr2[i])) {
52
+ if (!deepObjectEqual(arr1[i], arr2[i])) return false;
53
+ } else if (arr1[i] !== arr2[i]) {
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ };
59
+ var deepObjectEqual = (obj1, obj2) => {
60
+ const keys1 = Object.keys(obj1);
61
+ const keys2 = Object.keys(obj2);
62
+ if (keys1.length !== keys2.length) return false;
63
+ for (const key of keys1) {
64
+ if (!(key in obj2)) return false;
65
+ const val1 = obj1[key];
66
+ const val2 = obj2[key];
67
+ if (Array.isArray(val1) && Array.isArray(val2)) {
68
+ if (!deepArrayEqual(val1, val2)) return false;
69
+ } else if (isObject(val1) && isObject(val2)) {
70
+ if (!deepObjectEqual(val1, val2)) return false;
71
+ } else if (val1 !== val2) {
72
+ return false;
73
+ }
74
+ }
75
+ return true;
76
+ };
77
+ var diffObject = (oldObj, newObj, options = {}) => {
78
+ const {
79
+ includeDeleted = false,
80
+ includeAdded = true,
81
+ deepArrayComparison = true,
82
+ equalityFn = defaultEqualityFn,
83
+ preserveStructure = false
84
+ } = options;
85
+ if (oldObj == null && newObj == null) {
86
+ return {};
87
+ }
88
+ if (oldObj == null) {
89
+ return includeAdded ? { ...newObj } : {};
90
+ }
91
+ if (newObj == null) {
92
+ if (includeDeleted) {
93
+ const result2 = {};
94
+ for (const key in oldObj) {
95
+ result2[key] = void 0;
96
+ }
97
+ return result2;
98
+ }
99
+ return {};
100
+ }
101
+ if (!isObject(oldObj) || !isObject(newObj)) {
102
+ return equalityFn(oldObj, newObj) ? {} : newObj;
103
+ }
104
+ const result = {};
105
+ const processedKeys = /* @__PURE__ */ new Set();
106
+ for (const key in newObj) {
107
+ processedKeys.add(key);
108
+ const oldValue = oldObj[key];
109
+ const newValue = newObj[key];
110
+ if (!(key in oldObj)) {
111
+ if (includeAdded) {
112
+ result[key] = newValue;
113
+ }
114
+ continue;
115
+ }
116
+ if (Array.isArray(oldValue) && Array.isArray(newValue)) {
117
+ if (deepArrayComparison) {
118
+ if (!deepArrayEqual(oldValue, newValue)) {
119
+ result[key] = newValue;
120
+ } else if (preserveStructure) {
121
+ result[key] = void 0;
122
+ }
123
+ } else {
124
+ if (oldValue !== newValue) {
125
+ result[key] = newValue;
126
+ } else if (preserveStructure) {
127
+ result[key] = void 0;
128
+ }
129
+ }
130
+ continue;
131
+ }
132
+ if (isObject(oldValue) && isObject(newValue)) {
133
+ const nestedDiff = diffObject(oldValue, newValue, options);
134
+ if (Object.keys(nestedDiff).length > 0) {
135
+ result[key] = nestedDiff;
136
+ } else if (preserveStructure) {
137
+ result[key] = void 0;
138
+ }
139
+ continue;
140
+ }
141
+ if (!equalityFn(oldValue, newValue)) {
142
+ result[key] = newValue;
143
+ } else if (preserveStructure) {
144
+ result[key] = void 0;
145
+ }
146
+ }
147
+ if (includeDeleted) {
148
+ for (const key in oldObj) {
149
+ if (!processedKeys.has(key)) {
150
+ result[key] = void 0;
151
+ }
152
+ }
153
+ }
154
+ return result;
155
+ };
156
+ var diffObjectDetailed = (oldObj, newObj, options = {}) => {
157
+ const added = [];
158
+ const deleted = [];
159
+ const modified = [];
160
+ const changes = {};
161
+ const {
162
+ includeDeleted = false,
163
+ includeAdded = true,
164
+ deepArrayComparison = true,
165
+ equalityFn = defaultEqualityFn
166
+ } = options;
167
+ if (Array.isArray(oldObj) && Array.isArray(newObj)) {
168
+ const maxLength = Math.max(oldObj.length, newObj.length);
169
+ const arrayChanges = [];
170
+ let hasArrayChanges = false;
171
+ for (let i = 0; i < maxLength; i++) {
172
+ const indexPath = `[${i}]`;
173
+ if (i >= oldObj.length) {
174
+ added.push(indexPath);
175
+ arrayChanges[i] = newObj[i];
176
+ hasArrayChanges = true;
177
+ } else if (i >= newObj.length) {
178
+ deleted.push(indexPath);
179
+ hasArrayChanges = true;
180
+ } else {
181
+ const oldElement = oldObj[i];
182
+ const newElement = newObj[i];
183
+ if (isObject(oldElement) && isObject(newElement)) {
184
+ const nestedDiff = diffObjectDetailed(
185
+ oldElement,
186
+ newElement,
187
+ options
188
+ );
189
+ if (nestedDiff.hasChanges) {
190
+ modified.push(indexPath);
191
+ arrayChanges[i] = newElement;
192
+ hasArrayChanges = true;
193
+ } else {
194
+ arrayChanges[i] = oldElement;
195
+ }
196
+ } else if (Array.isArray(oldElement) && Array.isArray(newElement)) {
197
+ const nestedDiff = diffObjectDetailed(
198
+ oldElement,
199
+ newElement,
200
+ options
201
+ );
202
+ if (nestedDiff.hasChanges) {
203
+ modified.push(indexPath);
204
+ arrayChanges[i] = newElement;
205
+ hasArrayChanges = true;
206
+ } else {
207
+ arrayChanges[i] = oldElement;
208
+ }
209
+ } else if (!equalityFn(oldElement, newElement)) {
210
+ modified.push(indexPath);
211
+ arrayChanges[i] = newElement;
212
+ hasArrayChanges = true;
213
+ } else {
214
+ arrayChanges[i] = oldElement;
215
+ }
216
+ }
217
+ }
218
+ return {
219
+ changes: hasArrayChanges ? arrayChanges : {},
220
+ added,
221
+ deleted,
222
+ modified,
223
+ hasChanges: hasArrayChanges || deleted.length > 0
224
+ };
225
+ }
226
+ const collectDetailedPaths = (old, newVal, currentPath = "") => {
227
+ const result = {
228
+ added: [],
229
+ deleted: [],
230
+ modified: []
231
+ };
232
+ if (Array.isArray(old) && Array.isArray(newVal)) {
233
+ const maxLength = Math.max(old.length, newVal.length);
234
+ for (let i = 0; i < maxLength; i++) {
235
+ const indexPath = currentPath ? `${currentPath}[${i}]` : `[${i}]`;
236
+ if (i >= old.length) {
237
+ result.added.push(indexPath);
238
+ } else if (i >= newVal.length) {
239
+ result.deleted.push(indexPath);
240
+ } else {
241
+ const oldElement = old[i];
242
+ const newElement = newVal[i];
243
+ if (isObject(oldElement) && isObject(newElement)) {
244
+ const nested = collectDetailedPaths(
245
+ oldElement,
246
+ newElement,
247
+ indexPath
248
+ );
249
+ result.added.push(...nested.added);
250
+ result.deleted.push(...nested.deleted);
251
+ result.modified.push(...nested.modified);
252
+ } else if (Array.isArray(oldElement) && Array.isArray(newElement)) {
253
+ const nested = collectDetailedPaths(
254
+ oldElement,
255
+ newElement,
256
+ indexPath
257
+ );
258
+ result.added.push(...nested.added);
259
+ result.deleted.push(...nested.deleted);
260
+ result.modified.push(...nested.modified);
261
+ } else if (oldElement !== newElement) {
262
+ result.modified.push(indexPath);
263
+ }
264
+ }
265
+ }
266
+ return result;
267
+ }
268
+ if (isObject(old) && isObject(newVal)) {
269
+ const allKeys = /* @__PURE__ */ new Set([
270
+ ...Object.keys(old || {}),
271
+ ...Object.keys(newVal || {})
272
+ ]);
273
+ for (const key of allKeys) {
274
+ const oldValue = old?.[key];
275
+ const newValue = newVal?.[key];
276
+ const path = currentPath ? `${currentPath}.${key}` : key;
277
+ if (!(key in (old || {}))) {
278
+ result.added.push(path);
279
+ } else if (!(key in (newVal || {}))) {
280
+ result.deleted.push(path);
281
+ } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {
282
+ if (!deepArrayEqual(oldValue, newValue)) {
283
+ const nested = collectDetailedPaths(oldValue, newValue, path);
284
+ result.added.push(...nested.added);
285
+ result.deleted.push(...nested.deleted);
286
+ result.modified.push(...nested.modified);
287
+ }
288
+ } else if (isObject(oldValue) && isObject(newValue)) {
289
+ const nested = collectDetailedPaths(oldValue, newValue, path);
290
+ result.added.push(...nested.added);
291
+ result.deleted.push(...nested.deleted);
292
+ result.modified.push(...nested.modified);
293
+ } else if (oldValue !== newValue) {
294
+ result.modified.push(path);
295
+ }
296
+ }
297
+ }
298
+ return result;
299
+ };
300
+ if (oldObj == null && newObj == null) {
301
+ return { changes: {}, added, deleted, modified, hasChanges: false };
302
+ }
303
+ if (oldObj == null) {
304
+ if (includeAdded && newObj) {
305
+ for (const key in newObj) {
306
+ added.push(key);
307
+ changes[key] = newObj[key];
308
+ }
309
+ }
310
+ return {
311
+ changes,
312
+ added,
313
+ deleted,
314
+ modified,
315
+ hasChanges: added.length > 0
316
+ };
317
+ }
318
+ if (newObj == null) {
319
+ if (includeDeleted) {
320
+ for (const key in oldObj) {
321
+ deleted.push(key);
322
+ changes[key] = void 0;
323
+ }
324
+ }
325
+ return {
326
+ changes,
327
+ added,
328
+ deleted,
329
+ modified,
330
+ hasChanges: deleted.length > 0
331
+ };
332
+ }
333
+ const processedKeys = /* @__PURE__ */ new Set();
334
+ for (const key in newObj) {
335
+ processedKeys.add(key);
336
+ const oldValue = oldObj[key];
337
+ const newValue = newObj[key];
338
+ if (!(key in oldObj)) {
339
+ if (includeAdded) {
340
+ added.push(key);
341
+ changes[key] = newValue;
342
+ }
343
+ continue;
344
+ }
345
+ let isDifferent = false;
346
+ if (Array.isArray(oldValue) && Array.isArray(newValue)) {
347
+ isDifferent = deepArrayComparison ? !deepArrayEqual(oldValue, newValue) : oldValue !== newValue;
348
+ if (isDifferent) {
349
+ const paths = collectDetailedPaths(oldValue, newValue, key);
350
+ added.push(...paths.added);
351
+ deleted.push(...paths.deleted);
352
+ modified.push(...paths.modified);
353
+ changes[key] = newValue;
354
+ }
355
+ } else if (isObject(oldValue) && isObject(newValue)) {
356
+ const nestedDiff = diffObject(oldValue, newValue, options);
357
+ isDifferent = Object.keys(nestedDiff).length > 0;
358
+ if (isDifferent) {
359
+ const paths = collectDetailedPaths(oldValue, newValue, key);
360
+ added.push(...paths.added);
361
+ deleted.push(...paths.deleted);
362
+ modified.push(...paths.modified);
363
+ changes[key] = nestedDiff;
364
+ }
365
+ } else {
366
+ isDifferent = !equalityFn(oldValue, newValue);
367
+ if (isDifferent) {
368
+ modified.push(key);
369
+ changes[key] = newValue;
370
+ }
371
+ }
372
+ }
373
+ for (const key in oldObj) {
374
+ if (!processedKeys.has(key)) {
375
+ deleted.push(key);
376
+ changes[key] = void 0;
377
+ }
378
+ }
379
+ return {
380
+ changes,
381
+ added,
382
+ deleted,
383
+ modified,
384
+ hasChanges: added.length > 0 || deleted.length > 0 || modified.length > 0
385
+ };
386
+ };
387
+ var hasObjectChanges = (oldObj, newObj, options = {}) => {
388
+ const diff = diffObject(oldObj, newObj, options);
389
+ return Object.keys(diff).length > 0;
390
+ };
391
+ function isApplyDiff(value) {
392
+ if (value && (value.diff || value.changes) && (value.modified || value.deleted || value.hasChanges)) {
393
+ return true;
394
+ }
395
+ return false;
396
+ }
397
+ var applyDiff = (baseObj, option, keepRefParam) => {
398
+ if (!isApplyDiff(option)) {
399
+ const diff2 = option;
400
+ const shouldKeepRef2 = keepRefParam || false;
401
+ if (Array.isArray(baseObj) && Array.isArray(diff2)) {
402
+ const result3 = shouldKeepRef2 ? baseObj : [...baseObj];
403
+ if (diff2.length < result3.length) {
404
+ result3.length = diff2.length;
405
+ }
406
+ for (let i = 0; i < diff2.length; i++) {
407
+ const diffValue = diff2[i];
408
+ if (diffValue === void 0) {
409
+ continue;
410
+ }
411
+ if (isObject(result3[i]) && isObject(diffValue)) {
412
+ result3[i] = applyDiff(result3[i], diffValue, shouldKeepRef2);
413
+ } else if (Array.isArray(result3[i]) && Array.isArray(diffValue)) {
414
+ result3[i] = applyDiff(
415
+ result3[i],
416
+ diffValue,
417
+ shouldKeepRef2
418
+ );
419
+ } else {
420
+ result3[i] = diffValue;
421
+ }
422
+ }
423
+ return result3;
424
+ }
425
+ if (!isObject(baseObj)) return diff2;
426
+ if (!isObject(diff2)) return baseObj;
427
+ const result2 = shouldKeepRef2 ? baseObj : { ...baseObj };
428
+ for (const key in diff2) {
429
+ const diffValue = diff2[key];
430
+ if (diffValue === void 0) {
431
+ delete result2[key];
432
+ } else if (Array.isArray(result2[key]) && Array.isArray(diffValue)) {
433
+ result2[key] = applyDiff(result2[key], diffValue, shouldKeepRef2);
434
+ } else if (isObject(result2[key]) && isObject(diffValue)) {
435
+ result2[key] = applyDiff(result2[key], diffValue, shouldKeepRef2);
436
+ } else {
437
+ result2[key] = diffValue;
438
+ }
439
+ }
440
+ return result2;
441
+ }
442
+ const {
443
+ diff,
444
+ added = [],
445
+ deleted = [],
446
+ modified = [],
447
+ changes,
448
+ keepRef: keepRefOption
449
+ } = option;
450
+ const shouldKeepRef = keepRefParam !== void 0 ? keepRefParam : keepRefOption;
451
+ const diffToApply = changes || diff;
452
+ if (!diffToApply) return baseObj;
453
+ const addedSet = new Set(added);
454
+ const deletedSet = new Set(deleted);
455
+ const modifiedSet = new Set(modified);
456
+ const shouldApplyPath = (path) => {
457
+ if (added.length === 0 && deleted.length === 0 && modified.length === 0) {
458
+ return true;
459
+ }
460
+ const pathParts = path.split(/[.\[\]]+/).filter(Boolean);
461
+ for (let i = 0; i <= pathParts.length; i++) {
462
+ const partialPath = pathParts.slice(0, i).join(".");
463
+ const bracketPath = pathParts.slice(0, i).map((p, idx) => /^\d+$/.test(p) ? `[${p}]` : idx > 0 ? `.${p}` : p).join("");
464
+ if (addedSet.has(partialPath) || addedSet.has(bracketPath) || deletedSet.has(partialPath) || deletedSet.has(bracketPath) || modifiedSet.has(partialPath) || modifiedSet.has(bracketPath)) {
465
+ return true;
466
+ }
467
+ }
468
+ return false;
469
+ };
470
+ if (Array.isArray(baseObj) && Array.isArray(diffToApply)) {
471
+ const result2 = shouldKeepRef ? baseObj : [...baseObj];
472
+ result2.length = diffToApply.length;
473
+ for (let i = 0; i < diffToApply.length; i++) {
474
+ const indexPath = `[${i}]`;
475
+ const diffValue = diffToApply[i];
476
+ if (diffValue === void 0) {
477
+ continue;
478
+ }
479
+ if (!shouldApplyPath(indexPath)) {
480
+ continue;
481
+ }
482
+ if (isObject(result2[i]) && isObject(diffValue)) {
483
+ result2[i] = applyDiff(result2[i], diffValue, shouldKeepRef);
484
+ } else if (Array.isArray(result2[i]) && Array.isArray(diffValue)) {
485
+ result2[i] = applyDiff(
486
+ result2[i],
487
+ diffValue,
488
+ shouldKeepRef
489
+ );
490
+ } else {
491
+ result2[i] = diffValue;
492
+ }
493
+ }
494
+ return result2;
495
+ }
496
+ if (!isObject(baseObj)) return diffToApply;
497
+ if (!isObject(diffToApply)) return baseObj;
498
+ const result = shouldKeepRef ? baseObj : { ...baseObj };
499
+ for (const path of deleted) {
500
+ if (path.includes(".") || path.includes("[")) continue;
501
+ if (shouldApplyPath(path)) {
502
+ delete result[path];
503
+ }
504
+ }
505
+ for (const key in diffToApply) {
506
+ const diffValue = diffToApply[key];
507
+ if (!shouldApplyPath(key)) {
508
+ continue;
509
+ }
510
+ if (diffValue === void 0) {
511
+ delete result[key];
512
+ } else if (Array.isArray(result[key]) && Array.isArray(diffValue)) {
513
+ result[key] = applyDiff(result[key], diffValue, shouldKeepRef);
514
+ } else if (isObject(result[key]) && isObject(diffValue)) {
515
+ result[key] = applyDiff(result[key], diffValue, shouldKeepRef);
516
+ } else {
517
+ result[key] = diffValue;
518
+ }
519
+ }
520
+ return result;
521
+ };
522
+ var getChangedPaths = (oldObj, newObj, options = {}) => {
523
+ const paths = [];
524
+ const collectPaths = (old, newVal, currentPath = "") => {
525
+ if (old === newVal) return;
526
+ if (Array.isArray(old) && Array.isArray(newVal)) {
527
+ const maxLength = Math.max(old.length, newVal.length);
528
+ for (let i = 0; i < maxLength; i++) {
529
+ const indexPath = currentPath ? `${currentPath}[${i}]` : `[${i}]`;
530
+ if (i >= old.length) {
531
+ paths.push(indexPath);
532
+ } else if (i >= newVal.length) {
533
+ paths.push(indexPath);
534
+ } else {
535
+ const oldElement = old[i];
536
+ const newElement = newVal[i];
537
+ if (isObject(oldElement) && isObject(newElement)) {
538
+ collectPaths(oldElement, newElement, indexPath);
539
+ } else if (Array.isArray(oldElement) && Array.isArray(newElement)) {
540
+ collectPaths(oldElement, newElement, indexPath);
541
+ } else if (oldElement !== newElement) {
542
+ paths.push(indexPath);
543
+ }
544
+ }
545
+ }
546
+ return;
547
+ }
548
+ if (!isObject(old) || !isObject(newVal)) {
549
+ if (currentPath) paths.push(currentPath);
550
+ return;
551
+ }
552
+ const allKeys = /* @__PURE__ */ new Set([
553
+ ...Object.keys(old || {}),
554
+ ...Object.keys(newVal || {})
555
+ ]);
556
+ for (const key of allKeys) {
557
+ const oldValue = old?.[key];
558
+ const newValue = newVal?.[key];
559
+ const path = currentPath ? `${currentPath}.${key}` : key;
560
+ if (!(key in (old || {})) || !(key in (newVal || {}))) {
561
+ paths.push(path);
562
+ } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {
563
+ collectPaths(oldValue, newValue, path);
564
+ } else if (isObject(oldValue) && isObject(newValue)) {
565
+ collectPaths(oldValue, newValue, path);
566
+ } else if (oldValue !== newValue) {
567
+ paths.push(path);
568
+ }
569
+ }
570
+ };
571
+ collectPaths(oldObj, newObj);
572
+ return paths;
573
+ };