@verdant-web/common 2.7.3 → 2.9.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.
Files changed (52) hide show
  1. package/dist/esm/authz.js.map +1 -1
  2. package/dist/esm/baseline.d.ts +2 -1
  3. package/dist/esm/diffing.d.ts +40 -0
  4. package/dist/esm/diffing.js +317 -0
  5. package/dist/esm/diffing.js.map +1 -0
  6. package/dist/esm/diffing.test.d.ts +1 -0
  7. package/dist/esm/diffing.test.js +1680 -0
  8. package/dist/esm/diffing.test.js.map +1 -0
  9. package/dist/esm/index.d.ts +20 -19
  10. package/dist/esm/index.js +17 -16
  11. package/dist/esm/index.js.map +1 -1
  12. package/dist/esm/oids.d.ts +5 -0
  13. package/dist/esm/oids.js +23 -1
  14. package/dist/esm/oids.js.map +1 -1
  15. package/dist/esm/operation.d.ts +11 -24
  16. package/dist/esm/operation.js +32 -270
  17. package/dist/esm/operation.js.map +1 -1
  18. package/dist/esm/operation.test.js +122 -592
  19. package/dist/esm/operation.test.js.map +1 -1
  20. package/dist/esm/patch.d.ts +19 -15
  21. package/dist/esm/patch.js +79 -18
  22. package/dist/esm/patch.js.map +1 -1
  23. package/dist/esm/schema/validation.d.ts +8 -1
  24. package/dist/esm/schema/validation.js +133 -63
  25. package/dist/esm/schema/validation.js.map +1 -1
  26. package/dist/esm/schema/validation.test.d.ts +1 -0
  27. package/dist/esm/schema/validation.test.js +60 -0
  28. package/dist/esm/schema/validation.test.js.map +1 -0
  29. package/dist/esm/timestamp.d.ts +1 -0
  30. package/dist/esm/timestamp.js +3 -0
  31. package/dist/esm/timestamp.js.map +1 -1
  32. package/dist/esm/undo.d.ts +2 -1
  33. package/dist/esm/undo.js +53 -146
  34. package/dist/esm/undo.js.map +1 -1
  35. package/dist/esm/undo.test.d.ts +1 -0
  36. package/dist/esm/undo.test.js +81 -0
  37. package/dist/esm/undo.test.js.map +1 -0
  38. package/package.json +1 -1
  39. package/src/authz.ts +2 -0
  40. package/src/baseline.ts +3 -1
  41. package/src/diffing.test.ts +1803 -0
  42. package/src/diffing.ts +402 -0
  43. package/src/index.ts +21 -20
  44. package/src/oids.ts +23 -1
  45. package/src/operation.test.ts +148 -623
  46. package/src/operation.ts +45 -378
  47. package/src/patch.ts +146 -14
  48. package/src/schema/validation.test.ts +66 -0
  49. package/src/schema/validation.ts +156 -73
  50. package/src/timestamp.ts +4 -1
  51. package/src/undo.test.ts +100 -0
  52. package/src/undo.ts +83 -144
@@ -1 +1 @@
1
- {"version":3,"file":"authz.js","sourceRoot":"","sources":["../../src/authz.ts"],"names":[],"mappings":"AAGA,SAAS,MAAM,CAAC,GAAW;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,GAAuB,CAAC;IAChC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,GAAuB,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AAMD,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,QAAQ,EAAE,CAAC,MAAc,EAAoB,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC;IACvE,MAAM,EAAE,GAAqB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAClE,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO;YACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;SAChB,CAAC;IACH,CAAC;CACD,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACrC,IAAkE,EAClE,UAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;oBAC5C,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACf,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;oBAC5C,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"authz.js","sourceRoot":"","sources":["../../src/authz.ts"],"names":[],"mappings":"AAGA,SAAS,MAAM,CAAC,GAAW;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,GAAuB,CAAC;IAChC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,GAAuB,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AAQD,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,QAAQ,EAAE,CAAC,MAAc,EAAoB,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC;IACvE,MAAM,EAAE,GAAqB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAClE,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO;YACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;SAChB,CAAC;IACH,CAAC;CACD,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACrC,IAAkE,EAClE,UAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;oBAC5C,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACf,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;oBAC5C,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -1,6 +1,7 @@
1
+ import { AuthorizationKey } from './authz.js';
1
2
  export type DocumentBaseline<T extends any = any> = {
2
3
  oid: string;
3
4
  snapshot: T;
4
5
  timestamp: string;
5
- authz?: string;
6
+ authz?: AuthorizationKey;
6
7
  };
@@ -0,0 +1,40 @@
1
+ import { AuthorizationKey } from './authz.js';
2
+ import { Operation } from './operation.js';
3
+ import { PatchCreator } from './patch.js';
4
+ export type DiffContext = {
5
+ patches: Operation[];
6
+ /**
7
+ * If an object is merged with another and the new one does not
8
+ * have an OID assigned, assume it is the same identity as previous
9
+ */
10
+ mergeUnknownObjects?: boolean;
11
+ /**
12
+ * If an incoming value is not assigned on the new object, use the previous value.
13
+ * If false, undefined properties will erase the previous value.
14
+ */
15
+ merge?: boolean;
16
+ /**
17
+ * Authorization to apply to all created operations
18
+ */
19
+ authz?: AuthorizationKey;
20
+ patchCreator: PatchCreator;
21
+ };
22
+ export declare function diffToPatches(from: any, to: any, getNow: () => string, createSubId?: () => string, _?: any, // legacy, TODO: remove
23
+ options?: {
24
+ mergeUnknownObjects?: boolean;
25
+ merge?: boolean;
26
+ /** @deprecated - use 'merge' */
27
+ defaultUndefined?: boolean;
28
+ authz?: AuthorizationKey;
29
+ }): Operation[];
30
+ export declare function diff(from: any, to: any, ctx: DiffContext): void;
31
+ /**
32
+ * Deep diff lists of any kind of item. Adds patches for the changes
33
+ * to the context patch list.
34
+ * @param from - the original list snapshot. must be the full snapshot, no references.
35
+ * @param to - the new list snapshot. must be the full snapshot, no references.
36
+ * @param ctx - the diff context to add patches to.
37
+ */
38
+ export declare function diffLists(from: any[], to: any[], ctx: DiffContext): void;
39
+ export declare function diffObjects(from: any, to: any, ctx: DiffContext): void;
40
+ export declare function deleteWithSubObjects(root: any, ctx: DiffContext): void;
@@ -0,0 +1,317 @@
1
+ import { VerdantError } from './error.js';
2
+ import { areOidsRelated, assignOid, createRef, getOid, maybeGetOid, } from './oids.js';
3
+ import { isOidKey } from './oidsLegacy.js';
4
+ import { PatchCreator } from './patch.js';
5
+ import { compareRefs, isRef } from './refs.js';
6
+ import { cloneDeep, isObject } from './utils.js';
7
+ /**
8
+ * Compares two anythings and determines if they
9
+ * represent the same thing. Works for primitives,
10
+ * refs, and objects with OIDs.
11
+ */
12
+ function areTheSameIdentity(a, b) {
13
+ if (a === b)
14
+ return true;
15
+ if (isRef(a) && isRef(b))
16
+ return compareRefs(a, b);
17
+ const aOid = maybeGetOid(a);
18
+ const bOid = maybeGetOid(b);
19
+ if (aOid && bOid && aOid === bOid)
20
+ return true;
21
+ return false;
22
+ }
23
+ /**
24
+ * Enforces OID rules on subobjects being added to an entity.
25
+ * - Every sub-object must have an OID
26
+ * - The sub-object's OID must relate to the parent OID
27
+ */
28
+ function enforceAssignedOid(parentOid, newObject, existingObjectOid, ctx) {
29
+ if (!isDiffableObject(newObject)) {
30
+ // nothing to do, the new value cannot have an oid as it is not
31
+ // a sub-object.
32
+ return newObject;
33
+ }
34
+ const oid = maybeGetOid(newObject);
35
+ if (!oid) {
36
+ // if merge unknown objects is enabled, we can assume the new object is the same
37
+ // as the existing object (if present) and use its oid. otherwise we assign a new one.
38
+ if (ctx.mergeUnknownObjects && existingObjectOid) {
39
+ assignOid(newObject, existingObjectOid);
40
+ }
41
+ // NOTE: new OID assignments are done in patchCreator.
42
+ }
43
+ else if (!areOidsRelated(parentOid, oid)) {
44
+ // when there's any doubt, clone the whole object. false -> do not copy OIDs
45
+ const clone = cloneDeep(newObject, false);
46
+ // NOTE: new OID assignments are done in patchCreator.
47
+ return clone;
48
+ }
49
+ return newObject;
50
+ }
51
+ function isDiffableObject(val) {
52
+ return isObject(val) && !isRef(val);
53
+ }
54
+ export function diffToPatches(from, to, getNow, createSubId, _, // legacy, TODO: remove
55
+ options) {
56
+ var _a;
57
+ const ctx = {
58
+ patches: [],
59
+ mergeUnknownObjects: options === null || options === void 0 ? void 0 : options.mergeUnknownObjects,
60
+ merge: (_a = options === null || options === void 0 ? void 0 : options.merge) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.defaultUndefined,
61
+ authz: options === null || options === void 0 ? void 0 : options.authz,
62
+ patchCreator: new PatchCreator(getNow, createSubId),
63
+ };
64
+ diff(from, to, ctx);
65
+ return ctx.patches;
66
+ }
67
+ export function diff(from, to, ctx) {
68
+ if (Array.isArray(from) && Array.isArray(to)) {
69
+ diffLists(from, to, ctx);
70
+ }
71
+ else if (Array.isArray(from) || Array.isArray(to)) {
72
+ throw new VerdantError(VerdantError.Code.Unexpected, undefined, 'Cannot diff between array and non-array');
73
+ }
74
+ else if (isDiffableObject(from) && isDiffableObject(to)) {
75
+ diffObjects(from, to, ctx);
76
+ }
77
+ }
78
+ /**
79
+ * Deep diff lists of any kind of item. Adds patches for the changes
80
+ * to the context patch list.
81
+ * @param from - the original list snapshot. must be the full snapshot, no references.
82
+ * @param to - the new list snapshot. must be the full snapshot, no references.
83
+ * @param ctx - the diff context to add patches to.
84
+ */
85
+ export function diffLists(from, to, ctx) {
86
+ // from object must be registered with an OID.
87
+ const oid = getOid(from);
88
+ // this copy will be mutated to align with inserts, making things easier to compare.
89
+ const fromCopy = [];
90
+ // while iterating from, also collect some metadata.
91
+ const oidsInFrom = new Set();
92
+ for (let i = 0; i < from.length; i++) {
93
+ const value = from[i];
94
+ fromCopy[i] = value;
95
+ const oid = maybeGetOid(value);
96
+ if (oid) {
97
+ oidsInFrom.add(oid);
98
+ }
99
+ }
100
+ // first, normalize incoming data according to OID rules. this is done early
101
+ // so future equality checks are according to configuration like mergeUnknownObjects.
102
+ // for example, if a bare (no oid) object is supplied for an item and mergeUnknownObjects
103
+ // is set, this will assign it the same OID as the existing item at that index, so it will
104
+ // pass equality checks for insertion range, etc.
105
+ for (let i = 0; i < to.length; i++) {
106
+ const value = to[i];
107
+ const oldValue = from[i];
108
+ to[i] = enforceAssignedOid(oid, value, maybeGetOid(oldValue), ctx);
109
+ }
110
+ // track whether the new list has gaps in it. a gap
111
+ // means we can no longer use list-push for new items.
112
+ let noGaps = true;
113
+ // track any items we move by reference, so we remember to
114
+ // not delete them later.
115
+ const movedItems = new Set();
116
+ const overwrittenItems = new Set();
117
+ for (let i = 0; i < to.length; i++) {
118
+ const value = to[i];
119
+ const oldValue = fromCopy[i];
120
+ if (value === undefined) {
121
+ noGaps = false;
122
+ }
123
+ const itemOid = maybeGetOid(value);
124
+ // we decide if this item is being added to the end of the list if:
125
+ // - there were no empty spaces before it in the new list
126
+ // - the index is beyond the scope of the original list.
127
+ // the second condition is carefully selected since it accounts for
128
+ // the prior list having gaps, too. length should represent the final
129
+ // defined item even if gaps were there previously. we don't want to
130
+ // accidentally 'push' into a gap, which would put the item in the wrong place.
131
+ const isEndOfList = noGaps && i >= fromCopy.length;
132
+ // this branch exclusively deals with object references.
133
+ if (itemOid && oidsInFrom.has(itemOid)) {
134
+ // this item was in the old list, so no matter what we want to
135
+ // preserve its identity. the rest of the branches here all
136
+ // assume the item is new and initialize it.
137
+ if (areTheSameIdentity(value, oldValue)) {
138
+ // the item hasn't moved. we just diff it in place.
139
+ diff(oldValue, value, ctx);
140
+ }
141
+ else {
142
+ // the item has moved. we are currently visiting its new index,
143
+ // so we can move it by reference now
144
+ ctx.patches.push(...ctx.patchCreator.createListMoveByRef(oid, createRef(itemOid), i, ctx.authz));
145
+ // the problem is, a move by ref is not the same as what
146
+ // we really observed here, since it's more like an insertion
147
+ // and not an overwrite. to complicate this, the replaced item
148
+ // at this index might actually have moved, not been replaced.
149
+ // we mark the item that was at this index previously, and if
150
+ // we don't see it later, we'll delete it.
151
+ const fromOid = maybeGetOid(oldValue);
152
+ if (fromOid) {
153
+ overwrittenItems.add(fromOid);
154
+ }
155
+ // remember this item so we don't delete it later.
156
+ movedItems.add(itemOid);
157
+ }
158
+ }
159
+ else if (isEndOfList) {
160
+ // this will initialize all sub-objects in the item, too
161
+ ctx.patches.push(...ctx.patchCreator.createListPush(oid, value, ctx.authz));
162
+ }
163
+ else if (areTheSameIdentity(value, oldValue)) {
164
+ // note : since the branch above covers object references which
165
+ // were present in the original list, logically this branch only
166
+ // covers primitives. either way, call diff, it's just more
167
+ // proper to do so.
168
+ diff(oldValue, value, ctx);
169
+ }
170
+ else {
171
+ // the identity of this item has changed. we can now evaluate
172
+ // whether we should replace the original item or insert a new
173
+ // item.
174
+ // we can insert an item if the items which used to be at this
175
+ // index and the one before it are still in the list next to the
176
+ // new item.
177
+ // i.e. [0,1,2,3] -> [0,1,4,2,3] can insert 4 at index 2.
178
+ // theoretically we could support inserting a group of items,
179
+ // like [0,1,2,3] -> [0,1,4,5,6,2,3], but in practice this is much
180
+ // harder to detect.
181
+ const isPreviousItemStillThere = i === 0 || areTheSameIdentity(to[i - 1], fromCopy[i - 1]);
182
+ const isNextItemStillThere = i === to.length - 1 ||
183
+ areTheSameIdentity(to[i + 1],
184
+ // only "i" here because in the prior list, this was the item
185
+ // at the insertion point.
186
+ fromCopy[i]);
187
+ if (isPreviousItemStillThere && isNextItemStillThere) {
188
+ ctx.patches.push(...ctx.patchCreator.createListInsert(oid, i, value, ctx.authz));
189
+ // mutate from copy to mirror this insert so further comparisons
190
+ // are correct. we just insert an undefined.
191
+ fromCopy.splice(i, 0, undefined);
192
+ }
193
+ else {
194
+ // if we can't insert, we have to replace the item.
195
+ ctx.patches.push(...ctx.patchCreator.createListSet(oid, i, value, ctx.authz));
196
+ }
197
+ }
198
+ }
199
+ // remove any remaining items at the end of the array.
200
+ const deletedItemsAtEnd = fromCopy.length - to.length;
201
+ if (deletedItemsAtEnd > 0) {
202
+ for (let i = fromCopy.length - 1; i >= to.length; i--) {
203
+ const value = fromCopy[i];
204
+ const itemOid = maybeGetOid(value);
205
+ if (itemOid) {
206
+ // avoid deleting moved objects that were at the end of the list before.
207
+ // their reference was moved elsewhere, but their contents must be retained.
208
+ if (!movedItems.has(itemOid)) {
209
+ // if sub-items were objects, we need to delete them all
210
+ // this should recursively delete children of these items
211
+ // also!
212
+ deleteWithSubObjects(value, ctx);
213
+ ctx.patches.push(...ctx.patchCreator.createListRemove(oid, createRef(itemOid), 'last', ctx.authz));
214
+ }
215
+ }
216
+ else {
217
+ ctx.patches.push(...ctx.patchCreator.createListRemove(oid, value, 'last', ctx.authz));
218
+ }
219
+ }
220
+ }
221
+ for (const overwrittenOid of overwrittenItems) {
222
+ if (movedItems.has(overwrittenOid)) {
223
+ // this item was moved, not overwritten. we don't want to delete it.
224
+ continue;
225
+ }
226
+ // this item was overwritten, not moved. we need to delete it.
227
+ // if sub-items were objects, we need to delete them all
228
+ // this should recursively delete children of these items
229
+ // also!
230
+ const item = from.find((x) => maybeGetOid(x) === overwrittenOid);
231
+ if (item) {
232
+ deleteWithSubObjects(item, ctx);
233
+ }
234
+ ctx.patches.push(...ctx.patchCreator.createListRemove(oid, createRef(overwrittenOid), 'last', ctx.authz));
235
+ }
236
+ }
237
+ export function diffObjects(from, to, ctx) {
238
+ const oldKeys = new Set(Object.keys(from));
239
+ const oid = getOid(from);
240
+ for (const key in to) {
241
+ const value = to[key];
242
+ if (value === undefined && ctx.merge)
243
+ continue;
244
+ oldKeys.delete(key);
245
+ if (isOidKey(key))
246
+ continue; // legacy
247
+ const oldValue = from[key];
248
+ if (!isDiffableObject(value)) {
249
+ if (!areTheSameIdentity(value, oldValue)) {
250
+ // the value has changed for this key
251
+ // if the value is undefined (merge is off), delete instead of
252
+ // set.
253
+ if (value === undefined) {
254
+ ctx.patches.push(...ctx.patchCreator.createRemove(oid, key, ctx.authz));
255
+ }
256
+ else {
257
+ ctx.patches.push(...ctx.patchCreator.createSet(oid, key, value, ctx.authz));
258
+ }
259
+ // if there was an old value at this key, delete it.
260
+ deleteWithSubObjects(oldValue, ctx);
261
+ }
262
+ else {
263
+ // two primitive, non-diffable values of the
264
+ // same identity are considered equal.
265
+ // we have nothing to do here.
266
+ }
267
+ }
268
+ else {
269
+ // make sure incoming object has a valid OID assigned,
270
+ // and/or copy the existing value's OID if mergeUnknownObjects is
271
+ // true.
272
+ enforceAssignedOid(oid, value, maybeGetOid(oldValue), ctx);
273
+ if (!oldValue) {
274
+ // set the new value on this key
275
+ ctx.patches.push(...ctx.patchCreator.createSet(oid, key, value, ctx.authz));
276
+ }
277
+ else if (!areTheSameIdentity(value, oldValue)) {
278
+ // overwrite the key with the changed value
279
+ ctx.patches.push(...ctx.patchCreator.createSet(oid, key, value, ctx.authz));
280
+ // and we must also fully delete the
281
+ // old object and its children
282
+ deleteWithSubObjects(oldValue, ctx);
283
+ }
284
+ else {
285
+ // finally, this is the case when the identity of
286
+ // the new and old values are the same -- we still
287
+ // have to diff the contents.
288
+ diff(oldValue, value, ctx);
289
+ }
290
+ }
291
+ }
292
+ // this set now only contains keys which were not in the new object
293
+ if (!ctx.merge) {
294
+ for (const key of oldKeys) {
295
+ if (isOidKey(key))
296
+ continue;
297
+ // remove the key entirely
298
+ ctx.patches.push(...ctx.patchCreator.createRemove(oid, key, ctx.authz));
299
+ // push the deletes for the contents of the item
300
+ deleteWithSubObjects(from[key], ctx);
301
+ }
302
+ }
303
+ }
304
+ export function deleteWithSubObjects(root, ctx) {
305
+ if (!isDiffableObject(root)) {
306
+ return;
307
+ }
308
+ const oid = maybeGetOid(root);
309
+ if (oid) {
310
+ ctx.patches.push(...ctx.patchCreator.createDelete(oid, ctx.authz));
311
+ for (const key in root) {
312
+ const value = root[key];
313
+ deleteWithSubObjects(value, ctx);
314
+ }
315
+ }
316
+ }
317
+ //# sourceMappingURL=diffing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffing.js","sourceRoot":"","sources":["../../src/diffing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};