@adobe/data 0.9.52 → 0.9.53
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/observe/to-promise.js +12 -4
- package/dist/observe/to-promise.js.map +1 -1
- package/dist/observe/to-promise.test.d.ts +1 -0
- package/dist/observe/to-promise.test.js +34 -0
- package/dist/observe/to-promise.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/references/data-lit/package.json +1 -1
- package/references/data-lit-tictactoe/package.json +1 -1
- package/references/data-react/package.json +1 -1
- package/references/data-react-hello/package.json +1 -1
- package/references/data-react-pixie/package.json +1 -1
|
@@ -5,13 +5,21 @@
|
|
|
5
5
|
* @returns the first value yielded by the observe function.
|
|
6
6
|
*/
|
|
7
7
|
export function toPromise(observable) {
|
|
8
|
-
return new Promise((resolve
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
let resolved = false;
|
|
9
10
|
let unobserve = null;
|
|
11
|
+
const tryUnobserve = () => {
|
|
12
|
+
if (unobserve)
|
|
13
|
+
unobserve();
|
|
14
|
+
else
|
|
15
|
+
queueMicrotask(tryUnobserve);
|
|
16
|
+
};
|
|
10
17
|
unobserve = observable((value) => {
|
|
18
|
+
if (resolved)
|
|
19
|
+
return;
|
|
20
|
+
resolved = true;
|
|
11
21
|
resolve(value);
|
|
12
|
-
|
|
13
|
-
unobserve();
|
|
14
|
-
}
|
|
22
|
+
tryUnobserve();
|
|
15
23
|
});
|
|
16
24
|
});
|
|
17
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-promise.js","sourceRoot":"","sources":["../../src/observe/to-promise.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAI,UAAsB;IACjD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"to-promise.js","sourceRoot":"","sources":["../../src/observe/to-promise.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAI,UAAsB;IACjD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;QAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAAqB,IAAI,CAAC;QACvC,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,SAAS;gBAAE,SAAS,EAAE,CAAC;;gBACtB,cAAc,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,SAAS,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,YAAY,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, expect, test } from 'vitest';
|
|
3
|
+
import { Observe } from './index.js';
|
|
4
|
+
import { toPromise } from './to-promise.js';
|
|
5
|
+
describe('toPromise', () => {
|
|
6
|
+
test('leaks subscription on synchronous emission', async () => {
|
|
7
|
+
let activeSubscribers = 0;
|
|
8
|
+
const source = observer => {
|
|
9
|
+
activeSubscribers++;
|
|
10
|
+
observer('value');
|
|
11
|
+
return () => { activeSubscribers--; };
|
|
12
|
+
};
|
|
13
|
+
await toPromise(source);
|
|
14
|
+
expect(activeSubscribers).toBe(0);
|
|
15
|
+
});
|
|
16
|
+
test('second toPromise sees stale cached value after mutation', async () => {
|
|
17
|
+
let state = 'A';
|
|
18
|
+
const subscribers = new Set();
|
|
19
|
+
const source = observer => {
|
|
20
|
+
subscribers.add(observer);
|
|
21
|
+
observer(state);
|
|
22
|
+
return () => { subscribers.delete(observer); };
|
|
23
|
+
};
|
|
24
|
+
const cached = Observe.withCache(source);
|
|
25
|
+
const v1 = await toPromise(cached);
|
|
26
|
+
expect(v1).toBe('A');
|
|
27
|
+
state = 'B';
|
|
28
|
+
queueMicrotask(() => { for (const s of subscribers)
|
|
29
|
+
s('B'); });
|
|
30
|
+
const v2 = await toPromise(cached);
|
|
31
|
+
expect(v2).toBe('B');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=to-promise.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-promise.test.js","sourceRoot":"","sources":["../../src/observe/to-promise.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAoB,QAAQ,CAAC,EAAE;YACvC,iBAAiB,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEnD,MAAM,MAAM,GAAoB,QAAQ,CAAC,EAAE;YACvC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1B,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErB,KAAK,GAAG,GAAG,CAAC;QACZ,cAAc,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,IAAI,WAAW;YAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|