@adobe/data 0.9.79 → 0.9.80

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.
@@ -0,0 +1,25 @@
1
+ import { Observe } from "./index.js";
2
+ /**
3
+ * Reactive keyed collection. Given an observable list of keys and a function
4
+ * that maps each key to an observe function for that key's value, yields an
5
+ * observe function of the per-key values in key order.
6
+ *
7
+ * Per-key value subscriptions are keyed by `===` identity and REUSED across
8
+ * list changes: when the key list changes, only added keys subscribe a value
9
+ * and only removed keys unsubscribe one — keys that remain are untouched. So a
10
+ * change in one key's value re-emits only that key's slot (every other key
11
+ * keeps its current value), without re-running or re-subscribing the rest.
12
+ *
13
+ * A result is only produced once every current key has yielded a value; if every
14
+ * value observe function yields synchronously on subscribe, the first result is
15
+ * produced synchronously. Re-emits whenever the key list changes or any live
16
+ * value yields.
17
+ *
18
+ * This is the dynamic, keyed counterpart to {@link fromArray} / {@link
19
+ * fromProperties} (which combine a fixed set of observe functions): here the set
20
+ * of value observe functions is itself driven by an observe function of keys.
21
+ *
22
+ * @param keys an observe function of the current key list (duplicate keys collapse)
23
+ * @param observeValue maps a key to the observe function for that key's value
24
+ */
25
+ export declare function fromKeys<K, V>(keys: Observe<readonly K[]>, observeValue: (key: K) => Observe<V>): Observe<readonly V[]>;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Reactive keyed collection. Given an observable list of keys and a function
3
+ * that maps each key to an observe function for that key's value, yields an
4
+ * observe function of the per-key values in key order.
5
+ *
6
+ * Per-key value subscriptions are keyed by `===` identity and REUSED across
7
+ * list changes: when the key list changes, only added keys subscribe a value
8
+ * and only removed keys unsubscribe one — keys that remain are untouched. So a
9
+ * change in one key's value re-emits only that key's slot (every other key
10
+ * keeps its current value), without re-running or re-subscribing the rest.
11
+ *
12
+ * A result is only produced once every current key has yielded a value; if every
13
+ * value observe function yields synchronously on subscribe, the first result is
14
+ * produced synchronously. Re-emits whenever the key list changes or any live
15
+ * value yields.
16
+ *
17
+ * This is the dynamic, keyed counterpart to {@link fromArray} / {@link
18
+ * fromProperties} (which combine a fixed set of observe functions): here the set
19
+ * of value observe functions is itself driven by an observe function of keys.
20
+ *
21
+ * @param keys an observe function of the current key list (duplicate keys collapse)
22
+ * @param observeValue maps a key to the observe function for that key's value
23
+ */
24
+ export function fromKeys(keys, observeValue) {
25
+ return (notify) => {
26
+ const entries = new Map();
27
+ let currentKeys = [];
28
+ let keysReady = false;
29
+ const emitIfReady = () => {
30
+ if (!keysReady) {
31
+ return;
32
+ }
33
+ const values = [];
34
+ for (const key of currentKeys) {
35
+ const entry = entries.get(key);
36
+ // A newly-added key has not yielded its first value yet — wait for it.
37
+ if (entry === undefined || !entry.ready) {
38
+ return;
39
+ }
40
+ values.push(entry.value);
41
+ }
42
+ notify(values);
43
+ };
44
+ const ensureEntry = (key) => {
45
+ if (entries.has(key)) {
46
+ return;
47
+ }
48
+ const entry = { unsubscribe: () => { }, value: undefined, ready: false };
49
+ entries.set(key, entry);
50
+ entry.unsubscribe = observeValue(key)((value) => {
51
+ entry.value = value;
52
+ entry.ready = true;
53
+ emitIfReady();
54
+ });
55
+ };
56
+ const unsubscribeKeys = keys((nextKeys) => {
57
+ currentKeys = nextKeys;
58
+ const keep = new Set(nextKeys);
59
+ for (const [key, entry] of entries) {
60
+ if (!keep.has(key)) {
61
+ entry.unsubscribe();
62
+ entries.delete(key);
63
+ }
64
+ }
65
+ for (const key of nextKeys) {
66
+ ensureEntry(key);
67
+ }
68
+ keysReady = true;
69
+ emitIfReady();
70
+ });
71
+ return () => {
72
+ unsubscribeKeys();
73
+ for (const entry of entries.values()) {
74
+ entry.unsubscribe();
75
+ }
76
+ entries.clear();
77
+ };
78
+ };
79
+ }
80
+ //# sourceMappingURL=from-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-keys.js","sourceRoot":"","sources":["../../src/observe/from-keys.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,QAAQ,CACtB,IAA2B,EAC3B,YAAoC;IAEpC,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4D,CAAC;QACpF,IAAI,WAAW,GAAiB,EAAE,CAAC;QACnC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAQ,EAAE,CAAC;YACvB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/B,uEAAuE;gBACvE,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxC,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,GAAM,EAAE,EAAE;YAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,SAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnB,WAAW,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxC,WAAW,GAAG,QAAQ,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,KAAK,CAAC,WAAW,EAAE,CAAC;oBACpB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,WAAW,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,eAAe,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrC,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,140 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { describe, test, expect, vi } from "vitest";
3
+ import { fromKeys } from "./from-keys.js";
4
+ /**
5
+ * A manually-driven observe function: emits its current value synchronously on
6
+ * subscribe once seeded, re-emits on `emit`, and tracks live subscriber count so
7
+ * tests can assert per-key value subscription reuse / disposal.
8
+ */
9
+ function manual(initial) {
10
+ const observers = new Set();
11
+ let seeded = initial !== undefined;
12
+ let current = initial?.value;
13
+ const observe = (notify) => {
14
+ observers.add(notify);
15
+ if (seeded) {
16
+ notify(current);
17
+ }
18
+ return () => {
19
+ observers.delete(notify);
20
+ };
21
+ };
22
+ return {
23
+ observe,
24
+ emit(value) {
25
+ seeded = true;
26
+ current = value;
27
+ for (const notify of [...observers]) {
28
+ notify(value);
29
+ }
30
+ },
31
+ subscriberCount: () => observers.size,
32
+ };
33
+ }
34
+ describe("fromKeys", () => {
35
+ test("emits per-key values in key order, synchronously when the values are synchronous", () => {
36
+ const keys = manual({ value: ["a", "b", "c"] });
37
+ const values = {
38
+ a: manual({ value: 1 }),
39
+ b: manual({ value: 2 }),
40
+ c: manual({ value: 3 }),
41
+ };
42
+ const results = [];
43
+ const unsubscribe = fromKeys(keys.observe, (k) => values[k].observe)((v) => results.push(v));
44
+ expect(results).toEqual([[1, 2, 3]]);
45
+ unsubscribe();
46
+ });
47
+ test("re-emits only the changed key's slot; the other keys keep their value and are not re-subscribed", () => {
48
+ const keys = manual({ value: ["a", "b"] });
49
+ const a = manual({ value: 1 });
50
+ const b = manual({ value: 2 });
51
+ const observeValue = vi.fn((k) => (k === "a" ? a.observe : b.observe));
52
+ const results = [];
53
+ const unsubscribe = fromKeys(keys.observe, observeValue)((v) => results.push(v));
54
+ expect(results).toEqual([[1, 2]]);
55
+ // one value subscription per key, created once
56
+ expect(observeValue).toHaveBeenCalledTimes(2);
57
+ expect(a.subscriberCount()).toBe(1);
58
+ expect(b.subscriberCount()).toBe(1);
59
+ a.emit(10);
60
+ expect(results).toEqual([[1, 2], [10, 2]]);
61
+ // b was untouched: no extra observeValue call, still one subscription
62
+ expect(observeValue).toHaveBeenCalledTimes(2);
63
+ expect(b.subscriberCount()).toBe(1);
64
+ unsubscribe();
65
+ });
66
+ test("adding a key subscribes a new value and re-emits with it appended", () => {
67
+ const keys = manual({ value: ["a"] });
68
+ const a = manual({ value: 1 });
69
+ const b = manual({ value: 2 });
70
+ const map = { a: a.observe, b: b.observe };
71
+ const results = [];
72
+ fromKeys(keys.observe, (k) => map[k])((v) => results.push(v));
73
+ expect(results).toEqual([[1]]);
74
+ keys.emit(["a", "b"]);
75
+ expect(results[results.length - 1]).toEqual([1, 2]);
76
+ expect(b.subscriberCount()).toBe(1);
77
+ });
78
+ test("removing a key unsubscribes its value and re-emits without it", () => {
79
+ const keys = manual({ value: ["a", "b"] });
80
+ const a = manual({ value: 1 });
81
+ const b = manual({ value: 2 });
82
+ const map = { a: a.observe, b: b.observe };
83
+ const results = [];
84
+ fromKeys(keys.observe, (k) => map[k])((v) => results.push(v));
85
+ expect(b.subscriberCount()).toBe(1);
86
+ keys.emit(["a"]);
87
+ expect(results[results.length - 1]).toEqual([1]);
88
+ // b's value subscription was disposed
89
+ expect(b.subscriberCount()).toBe(0);
90
+ // a survived — still one subscription
91
+ expect(a.subscriberCount()).toBe(1);
92
+ });
93
+ test("reordering the keys re-emits the values in the new order without re-subscribing", () => {
94
+ const keys = manual({ value: ["a", "b"] });
95
+ const a = manual({ value: 1 });
96
+ const b = manual({ value: 2 });
97
+ const map = { a: a.observe, b: b.observe };
98
+ const observeValue = vi.fn((k) => map[k]);
99
+ const results = [];
100
+ fromKeys(keys.observe, observeValue)((v) => results.push(v));
101
+ expect(results[results.length - 1]).toEqual([1, 2]);
102
+ keys.emit(["b", "a"]);
103
+ expect(results[results.length - 1]).toEqual([2, 1]);
104
+ // no new subscriptions for a reorder
105
+ expect(observeValue).toHaveBeenCalledTimes(2);
106
+ });
107
+ test("waits for every key to yield a value before the first emission", () => {
108
+ const keys = manual({ value: ["a", "b"] });
109
+ const a = manual({ value: 1 });
110
+ const b = manual(); // not seeded — never yields synchronously
111
+ const map = { a: a.observe, b: b.observe };
112
+ const results = [];
113
+ fromKeys(keys.observe, (k) => map[k])((v) => results.push(v));
114
+ // b has not produced a value, so nothing is emitted yet
115
+ expect(results).toEqual([]);
116
+ b.emit(2);
117
+ expect(results).toEqual([[1, 2]]);
118
+ });
119
+ test("emits an empty array for an empty key list", () => {
120
+ const keys = manual({ value: [] });
121
+ const results = [];
122
+ fromKeys(keys.observe, () => manual({ value: 0 }).observe)((v) => results.push(v));
123
+ expect(results).toEqual([[]]);
124
+ });
125
+ test("disposing unsubscribes the key list and every value", () => {
126
+ const keys = manual({ value: ["a", "b"] });
127
+ const a = manual({ value: 1 });
128
+ const b = manual({ value: 2 });
129
+ const map = { a: a.observe, b: b.observe };
130
+ const unsubscribe = fromKeys(keys.observe, (k) => map[k])(() => { });
131
+ expect(keys.subscriberCount()).toBe(1);
132
+ expect(a.subscriberCount()).toBe(1);
133
+ expect(b.subscriberCount()).toBe(1);
134
+ unsubscribe();
135
+ expect(keys.subscriberCount()).toBe(0);
136
+ expect(a.subscriberCount()).toBe(0);
137
+ expect(b.subscriberCount()).toBe(0);
138
+ });
139
+ });
140
+ //# sourceMappingURL=from-keys.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-keys.test.js","sourceRoot":"","sources":["../../src/observe/from-keys.test.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export * from "./from-element-id.js";
7
7
  export * from "./from-element-properties-and-events.js";
8
8
  export * from "./from-element-property.js";
9
9
  export * from "./from-array.js";
10
+ export * from "./from-keys.js";
10
11
  export * from "./from-properties.js";
11
12
  export * from "./from-promise-with-error.js";
12
13
  export * from "./from-promise.js";
@@ -8,6 +8,7 @@ export * from "./from-element-id.js";
8
8
  export * from "./from-element-properties-and-events.js";
9
9
  export * from "./from-element-property.js";
10
10
  export * from "./from-array.js";
11
+ export * from "./from-keys.js";
11
12
  export * from "./from-properties.js";
12
13
  export * from "./from-promise-with-error.js";
13
14
  export * from "./from-promise.js";
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/observe/public.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/observe/public.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}