@ztimson/utils 0.26.23 → 0.26.25

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.
package/dist/index.mjs CHANGED
@@ -117,6 +117,42 @@ ${opts.message || this.desc}`;
117
117
  `;
118
118
  }
119
119
  }
120
+ function applyDeltas(target, deltas) {
121
+ for (const delta of deltas) {
122
+ for (const [key, value] of Object.entries(delta)) {
123
+ if (value === null) {
124
+ delete target[key];
125
+ } else if (typeof value === "object" && !Array.isArray(value)) {
126
+ if (typeof target[key] !== "object" || Array.isArray(target[key])) {
127
+ target[key] = {};
128
+ }
129
+ applyDeltas(target[key], [value]);
130
+ } else {
131
+ target[key] = value;
132
+ }
133
+ }
134
+ }
135
+ return target;
136
+ }
137
+ function calcDelta(old, target) {
138
+ const delta = {};
139
+ const keys = /* @__PURE__ */ new Set([...Object.keys(old || {}), ...Object.keys(target || {})]);
140
+ for (const key of keys) {
141
+ const val1 = old == null ? void 0 : old[key];
142
+ const val2 = target == null ? void 0 : target[key];
143
+ if (!(key in target)) {
144
+ delta[key] = val1;
145
+ } else if (!(key in old)) {
146
+ delta[key] = null;
147
+ } else if (typeof val1 === "object" && typeof val2 === "object" && val1 && val2 && !Array.isArray(val1)) {
148
+ const nested = calcDelta(val1, val2);
149
+ if (Object.keys(nested).length) delta[key] = nested;
150
+ } else if (val1 !== val2) {
151
+ delta[key] = val1;
152
+ }
153
+ }
154
+ return delta;
155
+ }
120
156
  function clean(obj, undefinedOnly = false) {
121
157
  if (obj == null) throw new Error("Cannot clean a NULL value");
122
158
  if (Array.isArray(obj)) {
@@ -2331,7 +2367,9 @@ export {
2331
2367
  UnauthorizedError,
2332
2368
  addUnique,
2333
2369
  adjustedInterval,
2370
+ applyDeltas,
2334
2371
  arrayDiff,
2372
+ calcDelta,
2335
2373
  camelCase,
2336
2374
  caseInsensitiveSort,
2337
2375
  clean,