@fgv/ts-json 5.0.0-2 → 5.0.0-21

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 (94) hide show
  1. package/.vscode/launch.json +16 -0
  2. package/.vscode/settings.json +32 -0
  3. package/config/api-extractor.json +343 -0
  4. package/config/rig.json +16 -0
  5. package/dist/ts-json.d.ts +719 -28
  6. package/dist/tsdoc-metadata.json +1 -1
  7. package/lib/index.d.ts +2 -0
  8. package/lib/index.js +25 -0
  9. package/lib/packlets/diff/detailedDiff.d.ts +375 -0
  10. package/lib/packlets/diff/detailedDiff.js +342 -0
  11. package/lib/packlets/diff/index.d.ts +3 -0
  12. package/lib/packlets/diff/index.js +40 -0
  13. package/lib/packlets/diff/threeWayDiff.d.ts +263 -0
  14. package/lib/packlets/diff/threeWayDiff.js +261 -0
  15. package/lib/packlets/diff/utils.d.ts +6 -0
  16. package/lib/packlets/diff/utils.js +62 -0
  17. package/lib/packlets/editor/common.d.ts +6 -0
  18. package/lib/packlets/editor/jsonEditor.d.ts +57 -28
  19. package/lib/packlets/editor/jsonEditor.js +101 -32
  20. package/lib/test/legacy/jsonConverter.conditional.test.d.ts +2 -0
  21. package/lib/test/legacy/jsonEditor/rules/conditional.test.d.ts +2 -0
  22. package/lib/test/legacy/jsonEditor/rules/multivalue.test.d.ts +2 -0
  23. package/lib/test/legacy/jsonEditor/rules/references.test.d.ts +2 -0
  24. package/lib/test/legacy/jsonEditor/rules/templates.test.d.ts +2 -0
  25. package/lib/test/unit/contextHelpers.test.d.ts +2 -0
  26. package/lib/test/unit/converters.test.d.ts +2 -0
  27. package/lib/test/unit/diff/jsonDiff.test.d.ts +2 -0
  28. package/lib/test/unit/jsonConverter.test.d.ts +2 -0
  29. package/lib/test/unit/jsonEditor/jsonEditor.test.d.ts +2 -0
  30. package/lib/test/unit/jsonEditor/templateContext.test.d.ts +2 -0
  31. package/lib/test/unit/jsonReferenceMap.test.d.ts +2 -0
  32. package/package.json +11 -11
  33. package/src/index.ts +29 -0
  34. package/src/packlets/context/compositeJsonMap.ts +120 -0
  35. package/src/packlets/context/contextHelpers.ts +221 -0
  36. package/src/packlets/context/index.ts +33 -0
  37. package/src/packlets/context/jsonContext.ts +133 -0
  38. package/src/packlets/converters/converters.ts +117 -0
  39. package/src/packlets/converters/index.ts +26 -0
  40. package/src/packlets/converters/jsonConverter.ts +476 -0
  41. package/src/packlets/diff/detailedDiff.ts +585 -0
  42. package/src/packlets/diff/index.ts +24 -0
  43. package/src/packlets/diff/threeWayDiff.ts +420 -0
  44. package/src/packlets/diff/utils.ts +66 -0
  45. package/src/packlets/editor/common.ts +125 -0
  46. package/src/packlets/editor/index.ts +36 -0
  47. package/src/packlets/editor/jsonEditor.ts +523 -0
  48. package/src/packlets/editor/jsonEditorRule.ts +117 -0
  49. package/src/packlets/editor/jsonEditorState.ts +225 -0
  50. package/src/packlets/editor/jsonReferenceMap.ts +516 -0
  51. package/src/packlets/editor/rules/conditional.ts +222 -0
  52. package/src/packlets/editor/rules/index.ts +25 -0
  53. package/src/packlets/editor/rules/multivalue.ts +206 -0
  54. package/src/packlets/editor/rules/references.ts +177 -0
  55. package/src/packlets/editor/rules/templates.ts +159 -0
  56. package/CHANGELOG.md +0 -115
  57. package/lib/index.d.ts.map +0 -1
  58. package/lib/index.js.map +0 -1
  59. package/lib/packlets/context/compositeJsonMap.d.ts.map +0 -1
  60. package/lib/packlets/context/compositeJsonMap.js.map +0 -1
  61. package/lib/packlets/context/contextHelpers.d.ts.map +0 -1
  62. package/lib/packlets/context/contextHelpers.js.map +0 -1
  63. package/lib/packlets/context/index.d.ts.map +0 -1
  64. package/lib/packlets/context/index.js.map +0 -1
  65. package/lib/packlets/context/jsonContext.d.ts.map +0 -1
  66. package/lib/packlets/context/jsonContext.js.map +0 -1
  67. package/lib/packlets/converters/converters.d.ts.map +0 -1
  68. package/lib/packlets/converters/converters.js.map +0 -1
  69. package/lib/packlets/converters/index.d.ts.map +0 -1
  70. package/lib/packlets/converters/index.js.map +0 -1
  71. package/lib/packlets/converters/jsonConverter.d.ts.map +0 -1
  72. package/lib/packlets/converters/jsonConverter.js.map +0 -1
  73. package/lib/packlets/editor/common.d.ts.map +0 -1
  74. package/lib/packlets/editor/common.js.map +0 -1
  75. package/lib/packlets/editor/index.d.ts.map +0 -1
  76. package/lib/packlets/editor/index.js.map +0 -1
  77. package/lib/packlets/editor/jsonEditor.d.ts.map +0 -1
  78. package/lib/packlets/editor/jsonEditor.js.map +0 -1
  79. package/lib/packlets/editor/jsonEditorRule.d.ts.map +0 -1
  80. package/lib/packlets/editor/jsonEditorRule.js.map +0 -1
  81. package/lib/packlets/editor/jsonEditorState.d.ts.map +0 -1
  82. package/lib/packlets/editor/jsonEditorState.js.map +0 -1
  83. package/lib/packlets/editor/jsonReferenceMap.d.ts.map +0 -1
  84. package/lib/packlets/editor/jsonReferenceMap.js.map +0 -1
  85. package/lib/packlets/editor/rules/conditional.d.ts.map +0 -1
  86. package/lib/packlets/editor/rules/conditional.js.map +0 -1
  87. package/lib/packlets/editor/rules/index.d.ts.map +0 -1
  88. package/lib/packlets/editor/rules/index.js.map +0 -1
  89. package/lib/packlets/editor/rules/multivalue.d.ts.map +0 -1
  90. package/lib/packlets/editor/rules/multivalue.js.map +0 -1
  91. package/lib/packlets/editor/rules/references.d.ts.map +0 -1
  92. package/lib/packlets/editor/rules/references.js.map +0 -1
  93. package/lib/packlets/editor/rules/templates.d.ts.map +0 -1
  94. package/lib/packlets/editor/rules/templates.js.map +0 -1
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.52.8"
8
+ "packageVersion": "7.52.10"
9
9
  }
10
10
  ]
11
11
  }
package/lib/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './packlets/context';
2
2
  export * from './packlets/converters';
3
3
  export * from './packlets/editor';
4
+ import * as Diff from './packlets/diff';
5
+ export { Diff };
4
6
  //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -31,11 +31,36 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
31
31
  if (k2 === undefined) k2 = k;
32
32
  o[k2] = m[k];
33
33
  }));
34
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
36
+ }) : function(o, v) {
37
+ o["default"] = v;
38
+ });
34
39
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
35
40
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
36
41
  };
42
+ var __importStar = (this && this.__importStar) || (function () {
43
+ var ownKeys = function(o) {
44
+ ownKeys = Object.getOwnPropertyNames || function (o) {
45
+ var ar = [];
46
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
47
+ return ar;
48
+ };
49
+ return ownKeys(o);
50
+ };
51
+ return function (mod) {
52
+ if (mod && mod.__esModule) return mod;
53
+ var result = {};
54
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
55
+ __setModuleDefault(result, mod);
56
+ return result;
57
+ };
58
+ })();
37
59
  Object.defineProperty(exports, "__esModule", { value: true });
60
+ exports.Diff = void 0;
38
61
  __exportStar(require("./packlets/context"), exports);
39
62
  __exportStar(require("./packlets/converters"), exports);
40
63
  __exportStar(require("./packlets/editor"), exports);
64
+ const Diff = __importStar(require("./packlets/diff"));
65
+ exports.Diff = Diff;
41
66
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,375 @@
1
+ import { JsonValue } from '@fgv/ts-json-base';
2
+ import { Result } from '@fgv/ts-utils';
3
+ /**
4
+ * JSON Diff Utilities for TypeScript
5
+ *
6
+ * This module provides comprehensive tools for comparing JSON values and identifying
7
+ * differences between them. It offers two complementary approaches:
8
+ *
9
+ * ## **Detailed Diff API** (`jsonDiff`)
10
+ * Best for analysis, debugging, and understanding specific changes:
11
+ * - Returns a list of individual changes with exact paths and values
12
+ * - Ideal for logging, change tracking, and detailed analysis
13
+ * - Configurable options for array handling and path notation
14
+ *
15
+ * ## **Three-Way Diff API** (`jsonThreeWayDiff`)
16
+ * Best for applying changes and programmatic manipulation:
17
+ * - Returns three objects representing removed, unchanged, and added data
18
+ * - Perfect for merging, UI displays, and actionable results
19
+ * - Treats arrays as atomic units for simpler handling
20
+ *
21
+ * ## **Simple Equality** (`jsonEquals`)
22
+ * Fast boolean check for JSON equality without change details.
23
+ *
24
+ * **Key Features:**
25
+ * - Deep recursive comparison of nested structures
26
+ * - Support for all JSON types: objects, arrays, primitives, null
27
+ * - TypeScript-first with comprehensive type safety
28
+ * - Result pattern for consistent error handling
29
+ * - Extensive TSDoc documentation with practical examples
30
+ *
31
+ * @example Quick comparison of the two main APIs
32
+ * ```typescript
33
+ * const before = { name: "John", age: 30, city: "NYC" };
34
+ * const after = { name: "Jane", age: 30, country: "USA" };
35
+ *
36
+ * // Detailed analysis
37
+ * const detailed = jsonDiff(before, after);
38
+ * // Returns: [
39
+ * // { path: "name", type: "modified", oldValue: "John", newValue: "Jane" },
40
+ * // { path: "city", type: "removed", oldValue: "NYC" },
41
+ * // { path: "country", type: "added", newValue: "USA" }
42
+ * // ]
43
+ *
44
+ * // Actionable objects
45
+ * const actionable = jsonThreeWayDiff(before, after);
46
+ * // Returns: {
47
+ * // onlyInA: { name: "John", city: "NYC" },
48
+ * // unchanged: { age: 30 },
49
+ * // onlyInB: { name: "Jane", country: "USA" }
50
+ * // }
51
+ *
52
+ * // Apply changes: { ...unchanged, ...onlyInB }
53
+ * // Revert changes: { ...unchanged, ...onlyInA }
54
+ * ```
55
+ */
56
+ /**
57
+ * Type of change detected in a JSON diff operation.
58
+ *
59
+ * - `'added'` - Property exists only in the second object
60
+ * - `'removed'` - Property exists only in the first object
61
+ * - `'modified'` - Property exists in both objects but with different values
62
+ * - `'unchanged'` - Property exists in both objects with identical values (only included when `includeUnchanged` is true)
63
+ *
64
+ * @public
65
+ */
66
+ export type DiffChangeType = 'added' | 'removed' | 'modified' | 'unchanged';
67
+ /**
68
+ * Represents a single change in a JSON diff operation.
69
+ *
70
+ * Each change describes a specific difference between two JSON values, including
71
+ * the location of the change and the old/new values involved.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * // Example changes from diffing { name: "John", age: 30 } vs { name: "Jane", city: "NYC" }
76
+ * const changes: IDiffChange[] = [
77
+ * { path: "name", type: "modified", oldValue: "John", newValue: "Jane" },
78
+ * { path: "age", type: "removed", oldValue: 30 },
79
+ * { path: "city", type: "added", newValue: "NYC" }
80
+ * ];
81
+ * ```
82
+ *
83
+ * @public
84
+ */
85
+ export interface IDiffChange {
86
+ /**
87
+ * The path to the changed value using dot notation.
88
+ *
89
+ * For nested objects, uses dots to separate levels (e.g., "user.profile.name").
90
+ * For arrays, uses numeric indices (e.g., "items.0.id", "tags.2").
91
+ * Empty string indicates the root value itself changed.
92
+ *
93
+ * @example "user.name", "items.0.id", "settings.theme", ""
94
+ */
95
+ path: string;
96
+ /**
97
+ * The type of change that occurred.
98
+ *
99
+ * @see {@link DiffChangeType} for detailed descriptions of each change type.
100
+ */
101
+ type: DiffChangeType;
102
+ /**
103
+ * The value in the first object.
104
+ *
105
+ * - Present for `'removed'` and `'modified'` changes
106
+ * - Present for `'unchanged'` changes when `includeUnchanged` is true
107
+ * - Undefined for `'added'` changes
108
+ */
109
+ oldValue?: JsonValue;
110
+ /**
111
+ * The value in the second object.
112
+ *
113
+ * - Present for `'added'` and `'modified'` changes
114
+ * - Present for `'unchanged'` changes when `includeUnchanged` is true
115
+ * - Undefined for `'removed'` changes
116
+ */
117
+ newValue?: JsonValue;
118
+ }
119
+ /**
120
+ * Result of a JSON diff operation containing all detected changes.
121
+ *
122
+ * This interface provides detailed information about every difference found
123
+ * between two JSON values, making it ideal for analysis, debugging, and
124
+ * understanding exactly what changed.
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const result: IDiffResult = {
129
+ * changes: [
130
+ * { path: "name", type: "modified", oldValue: "John", newValue: "Jane" },
131
+ * { path: "hobbies.1", type: "added", newValue: "gaming" }
132
+ * ],
133
+ * identical: false
134
+ * };
135
+ * ```
136
+ *
137
+ * @see {@link IDiffChange} for details about individual change objects
138
+ * @see {@link Diff.jsonDiff} for the function that produces this result
139
+ * @public
140
+ */
141
+ export interface IDiffResult {
142
+ /**
143
+ * Array of all changes detected between the two JSON objects.
144
+ *
145
+ * Changes are ordered by the path where they occur. For nested structures,
146
+ * parent changes appear before child changes.
147
+ */
148
+ changes: IDiffChange[];
149
+ /**
150
+ * True if the objects are identical, false otherwise.
151
+ *
152
+ * When true, the `changes` array will be empty (unless `includeUnchanged`
153
+ * option was used, in which case it may contain 'unchanged' entries).
154
+ */
155
+ identical: boolean;
156
+ }
157
+ /**
158
+ * Options for customizing JSON diff behavior.
159
+ *
160
+ * These options allow you to control how the diff algorithm processes
161
+ * different types of JSON structures and what information is included
162
+ * in the results.
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * // Include unchanged values and use custom path separator
167
+ * const options: IJsonDiffOptions = {
168
+ * includeUnchanged: true,
169
+ * pathSeparator: '/',
170
+ * arrayOrderMatters: false
171
+ * };
172
+ *
173
+ * const result = jsonDiff(obj1, obj2, options);
174
+ * ```
175
+ *
176
+ * @public
177
+ */
178
+ export interface IJsonDiffOptions {
179
+ /**
180
+ * If true, includes unchanged values in the result.
181
+ *
182
+ * When enabled, the diff result will include entries with `type: 'unchanged'`
183
+ * for properties that exist in both objects with identical values. This can
184
+ * be useful for displaying complete side-by-side comparisons.
185
+ *
186
+ * @defaultValue false
187
+ */
188
+ includeUnchanged?: boolean;
189
+ /**
190
+ * Custom path separator for nested property paths.
191
+ *
192
+ * Controls the character used to separate levels in nested object paths.
193
+ * For example, with separator `'/'`, a nested property would be reported
194
+ * as `"user/profile/name"` instead of `"user.profile.name"`.
195
+ *
196
+ * @defaultValue "."
197
+ * @example "/", "-\>", "::"
198
+ */
199
+ pathSeparator?: string;
200
+ /**
201
+ * If true, treats arrays as ordered lists where position matters.
202
+ * If false, treats arrays as unordered sets.
203
+ *
204
+ * When `true` (default), array changes are reported by index position:
205
+ * `[1,2,3]` vs `[1,3,2]` shows modifications at indices 1 and 2.
206
+ *
207
+ * When `false`, arrays are compared as sets: `[1,2,3]` vs `[1,3,2]`
208
+ * may be considered equivalent (simplified unordered comparison).
209
+ *
210
+ * @defaultValue true
211
+ */
212
+ arrayOrderMatters?: boolean;
213
+ }
214
+ /**
215
+ * Performs a deep diff comparison between two JSON values.
216
+ *
217
+ * This function provides detailed change tracking by analyzing every difference
218
+ * between two JSON structures. It returns a list of specific changes with paths,
219
+ * making it ideal for debugging, logging, change analysis, and understanding
220
+ * exactly what has changed between two data states.
221
+ *
222
+ * **Key Features:**
223
+ * - Deep recursive comparison of nested objects and arrays
224
+ * - Precise path tracking using dot notation (e.g., "user.profile.name")
225
+ * - Support for all JSON value types: objects, arrays, primitives, null
226
+ * - Configurable array comparison (ordered vs unordered)
227
+ * - Optional inclusion of unchanged values for complete comparisons
228
+ *
229
+ * **Use Cases:**
230
+ * - Debugging data changes in applications
231
+ * - Generating change logs or audit trails
232
+ * - Validating API responses against expected data
233
+ * - Creating detailed diff reports for data synchronization
234
+ *
235
+ * @param obj1 - The first JSON value to compare (often the "before" state)
236
+ * @param obj2 - The second JSON value to compare (often the "after" state)
237
+ * @param options - Optional configuration for customizing diff behavior
238
+ * @returns A Result containing the diff result with all detected changes
239
+ *
240
+ * @example Basic usage with objects
241
+ * ```typescript
242
+ * const before = { name: "John", age: 30, city: "NYC" };
243
+ * const after = { name: "Jane", age: 30, country: "USA" };
244
+ *
245
+ * const result = jsonDiff(before, after);
246
+ * if (result.success) {
247
+ * result.value.changes.forEach(change => {
248
+ * console.log(`${change.path}: ${change.type}`);
249
+ * // Output:
250
+ * // name: modified
251
+ * // city: removed
252
+ * // country: added
253
+ * });
254
+ * }
255
+ * ```
256
+ *
257
+ * @example With arrays and nested structures
258
+ * ```typescript
259
+ * const user1 = {
260
+ * profile: { name: "John", hobbies: ["reading"] },
261
+ * settings: { theme: "dark" }
262
+ * };
263
+ * const user2 = {
264
+ * profile: { name: "John", hobbies: ["reading", "gaming"] },
265
+ * settings: { theme: "light", notifications: true }
266
+ * };
267
+ *
268
+ * const result = jsonDiff(user1, user2);
269
+ * if (result.success) {
270
+ * console.log(result.value.changes);
271
+ * // [
272
+ * // { path: "profile.hobbies.1", type: "added", newValue: "gaming" },
273
+ * // { path: "settings.theme", type: "modified", oldValue: "dark", newValue: "light" },
274
+ * // { path: "settings.notifications", type: "added", newValue: true }
275
+ * // ]
276
+ * }
277
+ * ```
278
+ *
279
+ * @example Using options for custom behavior
280
+ * ```typescript
281
+ * const options: IJsonDiffOptions = {
282
+ * includeUnchanged: true, // Include unchanged properties
283
+ * pathSeparator: '/', // Use '/' instead of '.' in paths
284
+ * arrayOrderMatters: false // Treat arrays as unordered sets
285
+ * };
286
+ *
287
+ * const result = jsonDiff(obj1, obj2, options);
288
+ * ```
289
+ *
290
+ * @see {@link IDiffResult} for the structure of returned results
291
+ * @see {@link IDiffChange} for details about individual changes
292
+ * @see {@link IJsonDiffOptions} for available configuration options
293
+ * @see {@link jsonThreeWayDiff} for an alternative API focused on actionable results
294
+ * @see {@link jsonEquals} for simple equality checking without change details
295
+ *
296
+ * @public
297
+ */
298
+ export declare function jsonDiff(obj1: JsonValue, obj2: JsonValue, options?: IJsonDiffOptions): Result<IDiffResult>;
299
+ /**
300
+ * A simpler helper function that returns true if two JSON values are deeply equal.
301
+ *
302
+ * This function provides a fast boolean check for JSON equality without the overhead
303
+ * of tracking individual changes. It performs the same deep comparison logic as
304
+ * {@link Diff.jsonDiff} but returns only a true/false result, making it ideal for
305
+ * conditional logic and validation scenarios.
306
+ *
307
+ * **Key Features:**
308
+ * - Deep recursive comparison of all nested structures
309
+ * - Handles all JSON types: objects, arrays, primitives, null
310
+ * - Object property order independence
311
+ * - Array order significance (index positions matter)
312
+ * - Performance optimized for equality checking
313
+ *
314
+ * **Use Cases:**
315
+ * - Conditional logic based on data equality
316
+ * - Input validation and testing assertions
317
+ * - Caching and memoization keys
318
+ * - Quick checks before expensive diff operations
319
+ *
320
+ * @param obj1 - The first JSON value to compare
321
+ * @param obj2 - The second JSON value to compare
322
+ * @returns True if the values are deeply equal, false otherwise
323
+ *
324
+ * @example Basic equality checking
325
+ * ```typescript
326
+ * // Objects with same structure and values
327
+ * const user1 = { name: "John", hobbies: ["reading", "gaming"] };
328
+ * const user2 = { name: "John", hobbies: ["reading", "gaming"] };
329
+ * console.log(jsonEquals(user1, user2)); // true
330
+ *
331
+ * // Different property order (still equal)
332
+ * const obj1 = { a: 1, b: 2 };
333
+ * const obj2 = { b: 2, a: 1 };
334
+ * console.log(jsonEquals(obj1, obj2)); // true
335
+ *
336
+ * // Different values
337
+ * const before = { status: "pending" };
338
+ * const after = { status: "completed" };
339
+ * console.log(jsonEquals(before, after)); // false
340
+ * ```
341
+ *
342
+ * @example With nested structures
343
+ * ```typescript
344
+ * const config1 = {
345
+ * database: { host: "localhost", port: 5432 },
346
+ * features: ["auth", "cache"]
347
+ * };
348
+ * const config2 = {
349
+ * database: { host: "localhost", port: 5432 },
350
+ * features: ["auth", "cache"]
351
+ * };
352
+ *
353
+ * if (jsonEquals(config1, config2)) {
354
+ * console.log("Configurations are identical");
355
+ * }
356
+ * ```
357
+ *
358
+ * @example Array order sensitivity
359
+ * ```typescript
360
+ * const list1 = [1, 2, 3];
361
+ * const list2 = [3, 2, 1];
362
+ * console.log(jsonEquals(list1, list2)); // false - order matters
363
+ *
364
+ * const list3 = [1, 2, 3];
365
+ * const list4 = [1, 2, 3];
366
+ * console.log(jsonEquals(list3, list4)); // true - same order
367
+ * ```
368
+ *
369
+ * @see {@link Diff.jsonDiff} for detailed change analysis when equality fails
370
+ * @see {@link jsonThreeWayDiff} for actionable difference results
371
+ *
372
+ * @public
373
+ */
374
+ export declare function jsonEquals(obj1: JsonValue, obj2: JsonValue): boolean;
375
+ //# sourceMappingURL=detailedDiff.d.ts.map