@adobe/data 0.5.9 → 0.5.11

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.
@@ -101,84 +101,79 @@ export function createDatabase(store, transactionDeclarations) {
101
101
  };
102
102
  for (const [name, transactionUntyped] of Object.entries(transactionDeclarations)) {
103
103
  const transaction = transactionUntyped;
104
- Object.defineProperty(transactions, name, {
105
- value: (args) => {
106
- // Check if args is an AsyncArgsProvider function
107
- if (typeof args === 'function') {
108
- const asyncArgsProvider = args;
109
- const asyncResult = asyncArgsProvider();
110
- if (isAsyncGenerator(asyncResult)) {
111
- let count = 0;
112
- return new Promise(async (resolve, reject) => {
113
- try {
114
- let lastArgs = undefined;
115
- let lastTransaction;
116
- const executeNext = (asyncArgs, transient) => {
117
- lastArgs = asyncArgs;
118
- if (lastTransaction) {
119
- // rollback previous transaction.
120
- execute(t => {
121
- if (lastTransaction) {
122
- // Rollback the previous transaction to restore the state before it
123
- applyOperations(t, lastTransaction.undo);
124
- }
125
- }, { transient: true });
126
- }
127
- lastTransaction = execute(t => transaction(t, asyncArgs), { transient });
128
- if (!transient) {
129
- // this is the last value so we will resolve to it
130
- resolve(lastTransaction.value);
131
- }
132
- };
133
- // Manually iterate through the generator to capture both yield and return values
134
- let result = await asyncResult.next();
135
- // Process yield values one by one with rollback
136
- // We can't know if a yield is final until the generator completes,
137
- // so we mark all yields as transient initially
138
- while (!result.done) {
139
- // This is a yield value - always transient initially
140
- executeNext(result.value, true);
141
- result = await asyncResult.next();
104
+ transactions[name] = (args) => {
105
+ // Check if args is an AsyncArgsProvider function
106
+ if (typeof args === 'function') {
107
+ const asyncArgsProvider = args;
108
+ const asyncResult = asyncArgsProvider();
109
+ if (isAsyncGenerator(asyncResult)) {
110
+ let count = 0;
111
+ return new Promise(async (resolve, reject) => {
112
+ try {
113
+ let lastArgs = undefined;
114
+ let lastTransaction;
115
+ const executeNext = (asyncArgs, transient) => {
116
+ lastArgs = asyncArgs;
117
+ if (lastTransaction) {
118
+ // rollback previous transaction.
119
+ execute(t => {
120
+ if (lastTransaction) {
121
+ // Rollback the previous transaction to restore the state before it
122
+ applyOperations(t, lastTransaction.undo);
123
+ }
124
+ }, { transient: true });
142
125
  }
143
- if (result.value !== undefined) {
144
- executeNext(result.value, false);
126
+ lastTransaction = execute(t => transaction(t, asyncArgs), { transient });
127
+ if (!transient) {
128
+ // this is the last value so we will resolve to it
129
+ resolve(lastTransaction.value);
145
130
  }
146
- else if (lastArgs !== undefined) { // Only execute if lastArgs exists
147
- executeNext(lastArgs, false);
148
- }
149
- }
150
- catch (error) {
151
- console.error('AsyncGenerator error:', error);
152
- reject(error);
131
+ };
132
+ // Manually iterate through the generator to capture both yield and return values
133
+ let result = await asyncResult.next();
134
+ // Process yield values one by one with rollback
135
+ // We can't know if a yield is final until the generator completes,
136
+ // so we mark all yields as transient initially
137
+ while (!result.done) {
138
+ // This is a yield value - always transient initially
139
+ executeNext(result.value, true);
140
+ result = await asyncResult.next();
153
141
  }
154
- });
155
- }
156
- else if (isPromise(asyncResult)) {
157
- return new Promise(async (resolve, reject) => {
158
- try {
159
- const input = await asyncResult;
160
- const result = execute(t => transaction(t, input));
161
- resolve(result);
142
+ if (result.value !== undefined) {
143
+ executeNext(result.value, false);
162
144
  }
163
- catch (error) {
164
- reject(error);
145
+ else if (lastArgs !== undefined) { // Only execute if lastArgs exists
146
+ executeNext(lastArgs, false);
165
147
  }
166
- });
167
- }
168
- else {
169
- // Function returned a synchronous value
170
- return execute(t => transaction(t, asyncResult));
171
- }
148
+ }
149
+ catch (error) {
150
+ console.error('AsyncGenerator error:', error);
151
+ reject(error);
152
+ }
153
+ });
154
+ }
155
+ else if (isPromise(asyncResult)) {
156
+ return new Promise(async (resolve, reject) => {
157
+ try {
158
+ const input = await asyncResult;
159
+ const result = execute(t => transaction(t, input));
160
+ resolve(result);
161
+ }
162
+ catch (error) {
163
+ reject(error);
164
+ }
165
+ });
172
166
  }
173
167
  else {
174
- // Synchronous argument
175
- return execute(t => transaction(t, args)).value;
168
+ // Function returned a synchronous value
169
+ return execute(t => transaction(t, asyncResult));
176
170
  }
177
- },
178
- writable: false,
179
- enumerable: true,
180
- configurable: false
181
- });
171
+ }
172
+ else {
173
+ // Synchronous argument
174
+ return execute(t => transaction(t, args)).value;
175
+ }
176
+ };
182
177
  }
183
178
  const notifyAllObserversStoreReloaded = () => {
184
179
  const notifyResult = {
@@ -1 +1 @@
1
- {"version":3,"file":"create-database.js","sourceRoot":"","sources":["../../../src/ecs/database/create-database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-database.js","sourceRoot":"","sources":["../../../src/ecs/database/create-database.ts"],"names":[],"mappings":"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"}
@@ -2,3 +2,4 @@ export * from "./apply-args.js";
2
2
  export * from "./serialization/index.js";
3
3
  export * from "./blit.js";
4
4
  export * from "./copy-view-bytes.js";
5
+ export * from "./merge-patch.js";
@@ -23,4 +23,5 @@ export * from "./apply-args.js";
23
23
  export * from "./serialization/index.js";
24
24
  export * from "./blit.js";
25
25
  export * from "./copy-view-bytes.js";
26
+ export * from "./merge-patch.js";
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAEX,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAEX,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type Patch<T> = (T extends readonly any[] ? T : T extends object ? {
2
+ [K in keyof T]?: Patch<T[K]> | null;
3
+ } : T) | null;
4
+ /**
5
+ * Executes a JSON Merge Patch (RFC 7396) on `target` with `patch`.
6
+ * - Objects: recursively merge; `null` deletes a property.
7
+ * - Arrays: replaced wholesale (no element-wise merge).
8
+ * - Primitives: replaced.
9
+ * Does NOT mutate the input objects or arrays.
10
+ */
11
+ export declare function mergePatch<T>(target: T, patch: Patch<T>): T;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Executes a JSON Merge Patch (RFC 7396) on `target` with `patch`.
3
+ * - Objects: recursively merge; `null` deletes a property.
4
+ * - Arrays: replaced wholesale (no element-wise merge).
5
+ * - Primitives: replaced.
6
+ * Does NOT mutate the input objects or arrays.
7
+ */
8
+ export function mergePatch(target, patch) {
9
+ // null always replaces (including deleting properties when nested)
10
+ if (patch === null)
11
+ return patch;
12
+ // Arrays in the patch replace wholesale
13
+ if (Array.isArray(patch))
14
+ return patch;
15
+ // Non-objects (string/number/boolean) replace
16
+ if (typeof patch !== "object")
17
+ return patch;
18
+ // If target isn't a plain object, any object-like patch replaces it
19
+ if (target === null || typeof target !== "object" || Array.isArray(target)) {
20
+ return patch;
21
+ }
22
+ // target & patch are plain objects → merge recursively
23
+ const result = { ...target };
24
+ for (const key of Object.keys(patch)) {
25
+ const value = patch[key];
26
+ if (value === null) {
27
+ // delete per RFC 7396
28
+ delete result[key];
29
+ }
30
+ else {
31
+ // recurse
32
+ result[key] = mergePatch(target[key], value);
33
+ }
34
+ }
35
+ return result;
36
+ }
37
+ //# sourceMappingURL=merge-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-patch.js","sourceRoot":"","sources":["../../src/functions/merge-patch.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAI,MAAS,EAAE,KAAe;IACpD,mEAAmE;IACnE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAU,CAAC;IAEtC,wCAAwC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAU,CAAC;IAE5C,8CAA8C;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAU,CAAC;IAEjD,oEAAoE;IACpE,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzE,OAAO,KAAU,CAAC;IACtB,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAA8C,EAAE,GAAI,MAAc,EAAE,CAAC;IAEjF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAA2B,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAI,KAAa,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,sBAAsB;YACtB,OAAO,MAAM,CAAC,GAAU,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,UAAU;YACV,MAAM,CAAC,GAAU,CAAC,GAAG,UAAU,CAAE,MAAc,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,OAAO,MAAW,CAAC;AACvB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,96 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { mergePatch } from "./merge-patch.js";
3
+ /**
4
+ * RFC 7396 expectations:
5
+ * - null replaces (or deletes when nested in an object)
6
+ * - arrays replace wholesale (no deep merge)
7
+ * - primitives replace
8
+ * - objects merge recursively
9
+ */
10
+ describe("mergePatch", () => {
11
+ it("replaces top-level with null", () => {
12
+ const target = { a: 1, b: 2 };
13
+ const patch = null;
14
+ const result = mergePatch(target, patch);
15
+ expect(result).toBeNull();
16
+ });
17
+ it("replaces primitives", () => {
18
+ expect(mergePatch(1, 2)).toBe(2);
19
+ expect(mergePatch("a", "b")).toBe("b");
20
+ expect(mergePatch(true, false)).toBe(false);
21
+ });
22
+ it("replaces arrays wholesale", () => {
23
+ const target = { items: [1, 2, 3] };
24
+ const patch = { items: [9] };
25
+ const result = mergePatch(target, patch);
26
+ expect(result).toEqual({ items: [9] });
27
+ });
28
+ it("deletes object members when value is null", () => {
29
+ const target = { a: 1, b: 2 };
30
+ const patch = { b: null };
31
+ const result = mergePatch(target, patch);
32
+ expect(result).toEqual({ a: 1 });
33
+ // ensure non-mutating
34
+ expect(target).toEqual({ a: 1, b: 2 });
35
+ });
36
+ it("recursively merges nested objects", () => {
37
+ const target = { a: { x: 1, y: 2 }, b: 5 };
38
+ const patch = { a: { y: 9 } };
39
+ const result = mergePatch(target, patch);
40
+ expect(result).toEqual({ a: { x: 1, y: 9 }, b: 5 });
41
+ });
42
+ it("replaces non-object targets when patch is object", () => {
43
+ // Using explicit any generic to exercise runtime behavior intentionally outside typing constraints
44
+ expect(mergePatch(1, { a: 1 })).toEqual({ a: 1 });
45
+ expect(mergePatch([1, 2], { a: 1 })).toEqual({ a: 1 });
46
+ expect(mergePatch(null, { a: 1 })).toEqual({ a: 1 });
47
+ });
48
+ it("handles adding new keys", () => {
49
+ const target = { a: 1 };
50
+ const patch = { b: 2 };
51
+ const result = mergePatch(target, patch);
52
+ expect(result).toEqual({ a: 1, b: 2 });
53
+ });
54
+ it("handles nested null to delete deep key", () => {
55
+ const target = { a: { x: 1, y: 2 }, b: 3 };
56
+ const patch = { a: { y: null } };
57
+ const result = mergePatch(target, patch);
58
+ expect(result).toEqual({ a: { x: 1 }, b: 3 });
59
+ });
60
+ it("replaces array value with null to delete property", () => {
61
+ const target = { a: [1, 2, 3], b: 1 };
62
+ const patch = { a: null };
63
+ const result = mergePatch(target, patch);
64
+ expect(result).toEqual({ b: 1 });
65
+ });
66
+ it("replaces scalar with array and vice versa", () => {
67
+ const t1 = { a: 1 };
68
+ const p1 = { a: [1, 2] };
69
+ expect(mergePatch(t1, p1)).toEqual({ a: [1, 2] });
70
+ const t2 = { a: [1, 2] };
71
+ const p2 = { a: 7 };
72
+ expect(mergePatch(t2, p2)).toEqual({ a: 7 });
73
+ });
74
+ it("does not mutate input objects or arrays", () => {
75
+ const target = { a: { x: 1 }, arr: [1, 2] };
76
+ const patch = { a: { y: 2 }, arr: [9] };
77
+ const targetClone = JSON.parse(JSON.stringify(target));
78
+ mergePatch({ ...target, a: { ...target.a }, arr: [...target.arr] }, patch);
79
+ expect(target).toEqual(targetClone);
80
+ });
81
+ it("merging empty object returns structural copy of target (no-op)", () => {
82
+ const target = { a: 1, b: { x: 2 } };
83
+ const patch = {};
84
+ const result = mergePatch(target, patch);
85
+ expect(result).toEqual(target);
86
+ // not the same reference when patching an object
87
+ expect(result).not.toBe(target);
88
+ });
89
+ it("merges when target has undefined keys (treats as normal values)", () => {
90
+ const target = { a: undefined };
91
+ const patch = { a: 1, b: undefined };
92
+ const result = mergePatch(target, patch);
93
+ expect(result).toEqual({ a: 1, b: undefined });
94
+ });
95
+ });
96
+ //# sourceMappingURL=merge-patch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-patch.test.js","sourceRoot":"","sources":["../../src/functions/merge-patch.test.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import * as transactions from './transactions/index.js';
2
2
  export declare const createTodoDatabase: () => import("../../../../ecs/index.js").Database<{
3
- order: number;
4
- name: string;
5
3
  todo: true;
4
+ name: string;
5
+ order: number;
6
6
  complete: boolean;
7
7
  dragPosition: number | null;
8
8
  }, {
9
9
  displayCompleted: boolean;
10
10
  }, {
11
- Todo: ("order" | "name" | "todo" | "complete" | "dragPosition")[];
11
+ Todo: ("todo" | "name" | "order" | "complete" | "dragPosition")[];
12
12
  }, import("../../../../ecs/index.js").ToTransactionFunctions<typeof transactions>>;
13
13
  export type TodoDatabase = ReturnType<typeof createTodoDatabase>;
@@ -1,13 +1,13 @@
1
1
  export declare const todoStoreSchemaVersion = 1;
2
2
  export declare const createTodoStore: () => import("../../../../ecs/index.js").Store<{
3
- order: number;
4
- name: string;
5
3
  todo: true;
4
+ name: string;
5
+ order: number;
6
6
  complete: boolean;
7
7
  dragPosition: number | null;
8
8
  }, {
9
9
  displayCompleted: boolean;
10
10
  }, {
11
- Todo: ("order" | "name" | "todo" | "complete" | "dragPosition")[];
11
+ Todo: ("todo" | "name" | "order" | "complete" | "dragPosition")[];
12
12
  }>;
13
13
  export type TodoStore = ReturnType<typeof createTodoStore>;