@memberjunction/global 2.66.0 → 2.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DeepDiff.d.ts +22 -0
- package/dist/DeepDiff.d.ts.map +1 -1
- package/dist/DeepDiff.js +31 -3
- package/dist/DeepDiff.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +31 -3
package/dist/DeepDiff.d.ts
CHANGED
|
@@ -34,6 +34,20 @@
|
|
|
34
34
|
* // Added: hobbies[1]
|
|
35
35
|
* // Added "gaming"
|
|
36
36
|
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* // With treatNullAsUndefined option
|
|
41
|
+
* const differ = new DeepDiffer({ treatNullAsUndefined: true });
|
|
42
|
+
* const diff = differ.diff(
|
|
43
|
+
* { name: null, status: 'active', oldProp: 'value' },
|
|
44
|
+
* { name: 'John', status: null, newProp: 'value' }
|
|
45
|
+
* );
|
|
46
|
+
* // name: shows as Added (not Modified)
|
|
47
|
+
* // status: shows as Removed (not Modified)
|
|
48
|
+
* // oldProp: shows as Removed
|
|
49
|
+
* // newProp: shows as Added
|
|
50
|
+
* ```
|
|
37
51
|
*/
|
|
38
52
|
/**
|
|
39
53
|
* Types of changes that can occur in a deep diff operation
|
|
@@ -113,6 +127,14 @@ export interface DeepDiffConfig {
|
|
|
113
127
|
* @default true
|
|
114
128
|
*/
|
|
115
129
|
includeArrayIndices: boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Whether to treat null values as equivalent to undefined.
|
|
132
|
+
* When true, transitions between null and undefined are not considered changes,
|
|
133
|
+
* and null values in the old object are treated as "not present" for new values.
|
|
134
|
+
* Useful for APIs where null and undefined are used interchangeably.
|
|
135
|
+
* @default false
|
|
136
|
+
*/
|
|
137
|
+
treatNullAsUndefined: boolean;
|
|
116
138
|
/**
|
|
117
139
|
* Custom value formatter for the formatted output.
|
|
118
140
|
* Allows customization of how values are displayed.
|
package/dist/DeepDiff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepDiff.d.ts","sourceRoot":"","sources":["../src/DeepDiff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"DeepDiff.d.ts","sourceRoot":"","sources":["../src/DeepDiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAIH;;GAEG;AACH,oBAAY,cAAc;IACtB,wCAAwC;IACxC,KAAK,UAAU;IACf,gDAAgD;IAChD,OAAO,YAAY;IACnB,yDAAyD;IACzD,QAAQ,aAAa;IACrB,uEAAuE;IACvE,SAAS,cAAc;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,oCAAoC;IACpC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,wCAAwC;IACxC,OAAO,EAAE;QACL,kDAAkD;QAClD,KAAK,EAAE,MAAM,CAAC;QACd,oDAAoD;QACpD,OAAO,EAAE,MAAM,CAAC;QAChB,qDAAqD;QACrD,QAAQ,EAAE,MAAM,CAAC;QACjB,uEAAuE;QACvE,SAAS,EAAE,MAAM,CAAC;QAClB,qCAAqC;QACrC,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAE7B;;;;;;OAMG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAE9B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACzD;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAiB;IAE/B;;;OAGG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAW5C;;;;;;;;;;;;;;;OAeG;IACI,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,cAAc;IAkC9D;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAI1D;;;OAGG;IACH,OAAO,CAAC,YAAY;IAqEpB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAkDlB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA0BnB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;;OAGG;IACH,OAAO,CAAC,UAAU;CAsCrB"}
|
package/dist/DeepDiff.js
CHANGED
|
@@ -35,6 +35,20 @@
|
|
|
35
35
|
* // Added: hobbies[1]
|
|
36
36
|
* // Added "gaming"
|
|
37
37
|
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* // With treatNullAsUndefined option
|
|
42
|
+
* const differ = new DeepDiffer({ treatNullAsUndefined: true });
|
|
43
|
+
* const diff = differ.diff(
|
|
44
|
+
* { name: null, status: 'active', oldProp: 'value' },
|
|
45
|
+
* { name: 'John', status: null, newProp: 'value' }
|
|
46
|
+
* );
|
|
47
|
+
* // name: shows as Added (not Modified)
|
|
48
|
+
* // status: shows as Removed (not Modified)
|
|
49
|
+
* // oldProp: shows as Removed
|
|
50
|
+
* // newProp: shows as Added
|
|
51
|
+
* ```
|
|
38
52
|
*/
|
|
39
53
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
40
54
|
if (k2 === undefined) k2 = k;
|
|
@@ -93,6 +107,7 @@ class DeepDiffer {
|
|
|
93
107
|
maxDepth: 10,
|
|
94
108
|
maxStringLength: 100,
|
|
95
109
|
includeArrayIndices: true,
|
|
110
|
+
treatNullAsUndefined: false,
|
|
96
111
|
...config
|
|
97
112
|
};
|
|
98
113
|
}
|
|
@@ -151,8 +166,21 @@ class DeepDiffer {
|
|
|
151
166
|
return;
|
|
152
167
|
}
|
|
153
168
|
const pathStr = path.join('.');
|
|
169
|
+
// Helper to check if a value is effectively undefined (includes null if treatNullAsUndefined is true)
|
|
170
|
+
const isEffectivelyUndefined = (value) => {
|
|
171
|
+
return value === undefined || (this.config.treatNullAsUndefined && value === null);
|
|
172
|
+
};
|
|
173
|
+
// Helper to check if values are effectively equal
|
|
174
|
+
const areEffectivelyEqual = (val1, val2) => {
|
|
175
|
+
if (val1 === val2)
|
|
176
|
+
return true;
|
|
177
|
+
if (this.config.treatNullAsUndefined && isEffectivelyUndefined(val1) && isEffectivelyUndefined(val2)) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
};
|
|
154
182
|
// Handle different cases
|
|
155
|
-
if (oldValue
|
|
183
|
+
if (areEffectivelyEqual(oldValue, newValue)) {
|
|
156
184
|
if (this.config.includeUnchanged) {
|
|
157
185
|
changes.push({
|
|
158
186
|
path: pathStr || 'root',
|
|
@@ -163,7 +191,7 @@ class DeepDiffer {
|
|
|
163
191
|
});
|
|
164
192
|
}
|
|
165
193
|
}
|
|
166
|
-
else if (oldValue
|
|
194
|
+
else if (isEffectivelyUndefined(oldValue) && !isEffectivelyUndefined(newValue)) {
|
|
167
195
|
changes.push({
|
|
168
196
|
path: pathStr || 'root',
|
|
169
197
|
type: DiffChangeType.Added,
|
|
@@ -171,7 +199,7 @@ class DeepDiffer {
|
|
|
171
199
|
description: this.describeValue(newValue, 'Added')
|
|
172
200
|
});
|
|
173
201
|
}
|
|
174
|
-
else if (oldValue
|
|
202
|
+
else if (!isEffectivelyUndefined(oldValue) && isEffectivelyUndefined(newValue)) {
|
|
175
203
|
changes.push({
|
|
176
204
|
path: pathStr || 'root',
|
|
177
205
|
type: DiffChangeType.Removed,
|
package/dist/DeepDiff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepDiff.js","sourceRoot":"","sources":["../src/DeepDiff.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"DeepDiff.js","sourceRoot":"","sources":["../src/DeepDiff.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -211,9 +211,10 @@ import { DeepDiffer, DiffChangeType } from '@memberjunction/global';
|
|
|
211
211
|
|
|
212
212
|
// Create a differ instance
|
|
213
213
|
const differ = new DeepDiffer({
|
|
214
|
-
includeUnchanged: false,
|
|
215
|
-
maxDepth: 10,
|
|
216
|
-
maxStringLength: 100
|
|
214
|
+
includeUnchanged: false, // Don't track unchanged values
|
|
215
|
+
maxDepth: 10, // Maximum recursion depth
|
|
216
|
+
maxStringLength: 100, // Truncate long strings
|
|
217
|
+
treatNullAsUndefined: false // Treat null and undefined as distinct (default: false)
|
|
217
218
|
});
|
|
218
219
|
|
|
219
220
|
// Compare two objects
|
|
@@ -255,6 +256,33 @@ const modifications = result.changes.filter(c => c.type === DiffChangeType.Modif
|
|
|
255
256
|
differ.updateConfig({ includeUnchanged: true });
|
|
256
257
|
```
|
|
257
258
|
|
|
259
|
+
#### Treating null as undefined
|
|
260
|
+
|
|
261
|
+
When working with APIs or databases where `null` and `undefined` are used interchangeably, you can enable the `treatNullAsUndefined` option:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
const differ = new DeepDiffer({ treatNullAsUndefined: true });
|
|
265
|
+
|
|
266
|
+
const oldData = {
|
|
267
|
+
name: null,
|
|
268
|
+
status: 'active',
|
|
269
|
+
oldProp: 'value'
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
const newData = {
|
|
273
|
+
name: 'John', // Will show as "Added" instead of "Modified"
|
|
274
|
+
status: null, // Will show as "Removed" instead of "Modified"
|
|
275
|
+
newProp: 'value'
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
const result = differ.diff(oldData, newData);
|
|
279
|
+
// With treatNullAsUndefined: true
|
|
280
|
+
// - name: Added (not Modified, since null is treated as non-existent)
|
|
281
|
+
// - status: Removed (not Modified, since null is treated as non-existent)
|
|
282
|
+
// - oldProp: Removed
|
|
283
|
+
// - newProp: Added
|
|
284
|
+
```
|
|
285
|
+
|
|
258
286
|
## Event Types
|
|
259
287
|
|
|
260
288
|
The library provides predefined event types for common scenarios:
|