@agoric/vow 0.1.1-dev-24f7f32.0 → 0.1.1-dev-459998d.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.
- package/README.md +6 -7
- package/package.json +4 -4
- package/src/tools.d.ts +0 -1
- package/src/tools.d.ts.map +1 -1
- package/src/tools.js +3 -4
- package/src/types.d.ts +0 -1
- package/src/types.d.ts.map +1 -1
- package/src/vow.d.ts +1 -1
- package/src/vow.d.ts.map +1 -1
- package/src/vow.js +3 -4
- package/src/watch.d.ts +1 -1
- package/src/watch.d.ts.map +1 -1
- package/src/watch.js +9 -11
- package/src/watch-promise.d.ts +0 -10
- package/src/watch-promise.d.ts.map +0 -1
- package/src/watch-promise.js +0 -61
package/README.md
CHANGED
|
@@ -26,12 +26,12 @@ Here they are: {
|
|
|
26
26
|
}
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
On Agoric, you can use `V` exported from `@agoric/vat
|
|
29
|
+
On Agoric, you can use `V` exported from `@agoric/vow/vat.js`, which
|
|
30
30
|
converts a chain of promises and vows to a promise for its final
|
|
31
31
|
fulfilment, by unwrapping any intermediate vows:
|
|
32
32
|
|
|
33
33
|
```js
|
|
34
|
-
import { V as E } from '@agoric/vat
|
|
34
|
+
import { V as E } from '@agoric/vow/vat.js';
|
|
35
35
|
[...]
|
|
36
36
|
const a = await E.when(w1);
|
|
37
37
|
const b = await E(w2).something(...args);
|
|
@@ -45,7 +45,7 @@ On Agoric, use the following to create and resolve a vow:
|
|
|
45
45
|
```js
|
|
46
46
|
// CAVEAT: `V` uses internal ephemeral promises, so while it is convenient,
|
|
47
47
|
// it cannot be used by upgradable vats. See "Durability" below:
|
|
48
|
-
import { V as E, makeVowKit } from '@agoric/vat
|
|
48
|
+
import { V as E, makeVowKit } from '@agoric/vow/vat.js';
|
|
49
49
|
[...]
|
|
50
50
|
const { resolver, vow } = makeVowKit();
|
|
51
51
|
// Send vow to a potentially different vat.
|
|
@@ -56,16 +56,15 @@ resolver.resolve('now you know the answer');
|
|
|
56
56
|
|
|
57
57
|
## Durability
|
|
58
58
|
|
|
59
|
-
The vow
|
|
60
|
-
|
|
61
|
-
durable objects:
|
|
59
|
+
The `@agoric/vow/vat.js` module allows vows to integrate Agoric's vat upgrade
|
|
60
|
+
mechanism. To create vow tools that deal with durable objects:
|
|
62
61
|
|
|
63
62
|
```js
|
|
64
63
|
// NOTE: Cannot use `V` as it has non-durable internal state when unwrapping
|
|
65
64
|
// vows. Instead, use the default vow-exposing `E` with the `watch`
|
|
66
65
|
// operator.
|
|
67
66
|
import { E } from '@endo/far';
|
|
68
|
-
import { prepareVowTools } from '@agoric/vat
|
|
67
|
+
import { prepareVowTools } from '@agoric/vow/vat.js';
|
|
69
68
|
import { makeDurableZone } from '@agoric/zone';
|
|
70
69
|
|
|
71
70
|
// Only do the following once at the start of a new vat incarnation:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/vow",
|
|
3
|
-
"version": "0.1.1-dev-
|
|
3
|
+
"version": "0.1.1-dev-459998d.0+459998d",
|
|
4
4
|
"description": "Remote (shortening and disconnection-tolerant) Promise-likes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"lint:types": "tsc"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@agoric/base-zone": "0.1.1-dev-
|
|
23
|
+
"@agoric/base-zone": "0.1.1-dev-459998d.0+459998d",
|
|
24
|
+
"@agoric/internal": "0.3.3-dev-459998d.0+459998d",
|
|
24
25
|
"@endo/env-options": "^1.1.3",
|
|
25
26
|
"@endo/eventual-send": "^1.2.1",
|
|
26
27
|
"@endo/pass-style": "^1.3.1",
|
|
@@ -28,7 +29,6 @@
|
|
|
28
29
|
"@endo/promise-kit": "^1.1.1"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@agoric/internal": "0.3.3-dev-24f7f32.0+24f7f32",
|
|
32
32
|
"@endo/far": "^1.1.1",
|
|
33
33
|
"@endo/init": "^1.1.1",
|
|
34
34
|
"ava": "^5.3.0"
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"typeCoverage": {
|
|
50
50
|
"atLeast": 89.21
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "459998d3944d5ad9d495de146a6322aedcdd06d0"
|
|
53
53
|
}
|
package/src/tools.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export function prepareVowTools(zone: import("@agoric/base-zone").Zone, powers?: {
|
|
2
2
|
isRetryableReason?: ((reason: any) => boolean) | undefined;
|
|
3
|
-
watchPromise?: ((p: PromiseLike<any>, watcher: import("./watch-promise.js").PromiseWatcher, ...args: unknown[]) => void) | undefined;
|
|
4
3
|
} | undefined): {
|
|
5
4
|
when: <T, TResult1 = import("./types.js").Unwrap<T>, TResult2 = never>(specimenP: T, onFulfilled?: ((value: import("./types.js").Unwrap<T>) => TResult1 | PromiseLike<TResult1>) | undefined, onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined) => Promise<TResult1 | TResult2>;
|
|
6
5
|
watch: <T_1 = unknown, TResult1_1 = T_1, TResult2_1 = T_1, C = unknown>(specimenP: import("./types.js").ERef<T_1 | import("./types.js").Vow<T_1>>, watcher?: import("./types.js").Watcher<T_1, TResult1_1, TResult2_1, any> | undefined, watcherContext?: C | undefined) => import("./types.js").Vow<TResult1_1 | TResult2_1>;
|
package/src/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["tools.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["tools.js"],"names":[],"mappings":"AAWO,sCAJI,OAAO,mBAAmB,EAAE,IAAI;kCAEvB,GAAG,KAAK,OAAO;;sFAEU,CAAC,yBACR,OAAQ,YAC1C,EAAE,MAAM,CAAC,CAAC,CAAC;uFAWwtG,OAAO,YAAY,EAAE,IAAI,CAAC,GAAC,GAAE,OAAQ,YAAY,EAAE,GAAG,CAAC,GAAC,CAAC,CAAC;;;EAFhyG"}
|
package/src/tools.js
CHANGED
|
@@ -8,13 +8,12 @@ import { prepareWatchUtils } from './watch-utils.js';
|
|
|
8
8
|
* @param {import('@agoric/base-zone').Zone} zone
|
|
9
9
|
* @param {object} [powers]
|
|
10
10
|
* @param {(reason: any) => boolean} [powers.isRetryableReason]
|
|
11
|
-
* @param {(p: PromiseLike<any>, watcher: import('./watch-promise.js').PromiseWatcher, ...args: unknown[]) => void} [powers.watchPromise]
|
|
12
11
|
*/
|
|
13
12
|
export const prepareVowTools = (zone, powers = {}) => {
|
|
14
|
-
const { isRetryableReason = () => false
|
|
15
|
-
const makeVowKit = prepareVowKit(zone
|
|
13
|
+
const { isRetryableReason = () => false } = powers;
|
|
14
|
+
const makeVowKit = prepareVowKit(zone);
|
|
16
15
|
const when = makeWhen(isRetryableReason);
|
|
17
|
-
const watch = prepareWatch(zone, makeVowKit,
|
|
16
|
+
const watch = prepareWatch(zone, makeVowKit, isRetryableReason);
|
|
18
17
|
const makeWatchUtils = prepareWatchUtils(zone, watch, makeVowKit);
|
|
19
18
|
const watchUtils = makeWatchUtils();
|
|
20
19
|
|
package/src/types.d.ts
CHANGED
|
@@ -62,7 +62,6 @@ export type Watcher<T = any, TResult1 = T, TResult2 = T, C = any> = {
|
|
|
62
62
|
export type Specimen<T = any> = import("./types.js").ERef<T | import("./types.js").Vow<T>>;
|
|
63
63
|
export type VowTools = ReturnType<(zone: import("@agoric/base-zone").Zone, powers?: {
|
|
64
64
|
isRetryableReason?: ((reason: any) => boolean) | undefined;
|
|
65
|
-
watchPromise?: ((p: PromiseLike<any>, watcher: import("./watch-promise.js").PromiseWatcher, ...args: unknown[]) => void) | undefined;
|
|
66
65
|
} | undefined) => {
|
|
67
66
|
when: <T, TResult1 = Unwrap<T>, TResult2 = never>(specimenP: T, onFulfilled?: ((value: import("./types").Unwrap<T>) => TResult1 | PromiseLike<TResult1>) | undefined, onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined) => Promise<TResult1 | TResult2>;
|
|
68
67
|
watch: <T_1 = unknown, TResult1_1 = T_1, TResult2_1 = T_1, C = unknown>(specimenP: import("./types").ERef<T_1 | import("./types").Vow<T_1>>, watcher?: Watcher<T_1, TResult1_1, TResult2_1, any> | undefined, watcherContext?: C | undefined) => Vow<TResult1_1 | TResult2_1>;
|
package/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.js"],"names":[],"mappings":"uBAGc,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG;;;;;uBAIR,CAAC,IAAjB,OAAO,CAAS,CAAC,AAAR,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBAMH,CAAC,IAAD,CAAC,AAAhB,GAAG,WAAW,CAAC,CAAC,CAAC;;;;wBAY9B,CAAK,IAPO,CAOZ,CAAK,AANA,SAAS,MAAM,GAAG,IAAI,GAM3B,CAAK,AALA,SAAS,OAAO,GAAG,IAAI,GAK5B,CAAK,AAJA,SAAS,IAAI,GAAG,IAAI,GAIzB,CAAK,AAHA,SAAS,MAAM,GAAG,IAAI,GAG3B,CAAK,AAFA,SAAS,MAAM,GAAG,IAAI,GAE3B,CAAK,AADA,SAAS,MAAM,GAAG,IAAI,GAC3B,CAAK,SAAS,SAAS,GAAG,IAAI,GAC9B,KAAS,CACN;;;;qBAQiE,CAAC,IAHzD,CACZ,WAAe,CAEqD,CAAC,AAFpD,CAAC,SAAS,IAAI,GAEqC,CAAC,AAFlC,GAEiC,CAAC,AADhE,SAAS,QAAQ,GAAG,KAAK,GAC9B,GAAO,CAAC,IAAI,MAAwD,CAAC,AAAlD,IAAiD,CAAC,AAA7C,CAA8C,CAAC,AAA7C,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAkB,CAAC,AAAf,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CACxE;;;;;mBAYH,CAAK,IALO,CAKZ,CAAK,AAJA,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAI9C,CAAK,AAHA,SAAS,OAAO,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GACxD,WAAe,CAEf,CAAK,AAFY,CAAC,SAAS,IAAI,GAE/B,CAAK,AAF8B,GAEnC,CAAK,AADA,SAAS,OAAO,qBAAqB,EAAE,cAAc,CAAC,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,KAAK,GAC9F,CAAK,AAD6F,GAClG,CAAK,CACF;;;;;mBASqD,OAAO,EAAd,KAAK,wBAAE,OAAO,AAD5C,GACnB,OAAW,qBAAqB,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;;;;;;;kBAYrC,CAAC;;;;;;;aAAf,MAAM,OAAO,CAAC,CAAC,CAAC;;uBASH,CAAC;WAAd,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;gBAMP,CAAC,UADX,OAAO,kBAAkB,EAAE,UAAU,CACjD,KAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CACrB;mBAOuB,CAAC,UAFf;IACZ,GAAO,EAAE,GAAG,CACc,CAAC,AADb,CAAC,CAAC;IAChB,QAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CAC1B;0BAQkB,CAAC,UAHV;IACZ,GAAO,EAAE,GAAG,CAES,CAAC,AAFR,CAAC,CAAC;IAChB,QAAY,EAAE,WAAW,CACJ,CAAC,AADK,CAAC,CAAC;IAC7B,OAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CACpB;wBAK0C,CAAC,UAAlC;IAAE,OAAO,CAAC,KAAK,CAAC,EAAiB,CAAC,AAAf,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI,CAAA;CAAE;oBAS/D,CAAC,QAAyD,QAAQ,MAClB,QAAQ,MAD3C,CAAC;2BAAd,CAAC,YAAY,CAAC,KAAK,GAAG,CAAoC,QAAQ,AAAnC,CAAC,GAAG,UAAU,CAAa,QAAQ,AAAZ,CAAC,GAAG,QAAQ;2BACjE,GAAG,KAAK,GAAG,CAAoC,QAAQ,AAAnC,CAAC,GAAG,UAAU,CAAa,QAAQ,AAAZ,CAAC,GAAG,QAAQ;;qBAKV,CAAC,UAAxD,OAAO,YAAY,EAAE,IAAI,CAA8B,CAAC,AAA7B,GAAG,OAAO,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;uBAGzD,UAAU,QArHvB,OAEC,mBAEA,EAAE,IAAI;;;iEAQQ,CAAC,yBAEZ,OAAQ,SAAY,EAAE,MACzB,CAAG,CAAD,CAAC;uFAuGorB,OAAO,SAAY,EAAE,IAAI,CAAC,GAAC,GAAE,OAAQ,SAAY,EAAE,GAAG,CAAC,GAAC,CAAC,CAAC;;;EADrrB"}
|
package/src/vow.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export function prepareVowKit(zone: import("@agoric/base-zone").Zone
|
|
1
|
+
export function prepareVowKit(zone: import("@agoric/base-zone").Zone): <T>() => import("./types.js").VowKit<T>;
|
|
2
2
|
export type VowEphemera = Partial<import("@endo/promise-kit").PromiseKit<any>> & Pick<import("@endo/promise-kit").PromiseKit<any>, "promise">;
|
|
3
3
|
//# sourceMappingURL=vow.d.ts.map
|
package/src/vow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vow.d.ts","sourceRoot":"","sources":["vow.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vow.d.ts","sourceRoot":"","sources":["vow.js"],"names":[],"mappings":"AAiBO,oCAFI,OAAO,mBAAmB,EAAE,IAAI,IA8GA,CAAC,OAA7B,OAAO,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAS5C;0BA5HY,OAAO,CAAC,OAAO,mBAAmB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAChE,IAAQ,CAAC,OAAO,mBAAmB,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC"}
|
package/src/vow.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { makePromiseKit } from '@endo/promise-kit';
|
|
3
3
|
import { M } from '@endo/patterns';
|
|
4
4
|
import { makeTagged } from '@endo/pass-style';
|
|
5
|
-
import { PromiseWatcherI
|
|
5
|
+
import { PromiseWatcherI } from '@agoric/base-zone';
|
|
6
6
|
|
|
7
7
|
const sink = () => {};
|
|
8
8
|
harden(sink);
|
|
@@ -14,9 +14,8 @@ harden(sink);
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @param {import('@agoric/base-zone').Zone} zone
|
|
17
|
-
* @param {typeof watchPromiseShim} [watchPromise]
|
|
18
17
|
*/
|
|
19
|
-
export const prepareVowKit =
|
|
18
|
+
export const prepareVowKit = zone => {
|
|
20
19
|
/** @type {WeakMap<import('./types.js').VowResolver, VowEphemera>} */
|
|
21
20
|
const resolverToEphemera = new WeakMap();
|
|
22
21
|
|
|
@@ -94,7 +93,7 @@ export const prepareVowKit = (zone, watchPromise = watchPromiseShim) => {
|
|
|
94
93
|
const { promise, resolve } = getPromiseKitForResolution(resolver);
|
|
95
94
|
if (resolve) {
|
|
96
95
|
resolve(value);
|
|
97
|
-
watchPromise(promise, this.facets.watchNextStep);
|
|
96
|
+
zone.watchPromise(promise, this.facets.watchNextStep);
|
|
98
97
|
}
|
|
99
98
|
},
|
|
100
99
|
/**
|
package/src/watch.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export function prepareWatch(zone: import("@agoric/base-zone").Zone, makeVowKit: () => import("./types.js").VowKit<any>,
|
|
1
|
+
export function prepareWatch(zone: import("@agoric/base-zone").Zone, makeVowKit: () => import("./types.js").VowKit<any>, isRetryableReason?: ((reason: any) => boolean) | undefined): <T = unknown, TResult1 = T, TResult2 = T, C = unknown>(specimenP: import("./types.js").ERef<T | import("./types.js").Vow<T>>, watcher?: import("./types.js").Watcher<T, TResult1, TResult2, any> | undefined, watcherContext?: C | undefined) => import("./types.js").Vow<TResult1 | TResult2>;
|
|
2
2
|
export type Watch = ReturnType<typeof prepareWatch>;
|
|
3
3
|
//# sourceMappingURL=watch.d.ts.map
|
package/src/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["watch.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["watch.js"],"names":[],"mappings":"AAoHO,mCAJI,OAAO,mBAAmB,EAAE,IAAI,cAChC,MAAM,OAAO,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,gCAC7B,GAAG,KAAK,OAAO,iBAmBiC,CAAC,gEAAxD,OAAO,YAAY,EAAE,IAAI,CAA8B,CAAC,AAA7B,GAAG,OAAO,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,mKAwBtE;oBAIa,UAAU,CAAC,OAAO,YAAY,CAAC"}
|
package/src/watch.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
import { PromiseWatcherI } from '@agoric/base-zone';
|
|
2
3
|
import { getVowPayload, basicE } from './vow-utils.js';
|
|
3
|
-
import { PromiseWatcherI, watchPromiseShim } from './watch-promise.js';
|
|
4
4
|
|
|
5
5
|
const { apply } = Reflect;
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* @param {
|
|
8
|
+
* @param {import('@agoric/base-zone').Zone} zone
|
|
9
9
|
*/
|
|
10
10
|
const makeWatchNextStep =
|
|
11
|
-
|
|
11
|
+
zone =>
|
|
12
12
|
/**
|
|
13
13
|
* If the specimen is a vow, obtain a fresh shortened promise from it,
|
|
14
14
|
* otherwise coerce the non-vow specimen to a promise. Then, associate a
|
|
15
15
|
* (usually durable) watcher object with the promise.
|
|
16
16
|
*
|
|
17
17
|
* @param {any} specimen
|
|
18
|
-
* @param {import('
|
|
18
|
+
* @param {import('@agoric/base-zone').PromiseWatcher} promiseWatcher
|
|
19
19
|
*/
|
|
20
20
|
(specimen, promiseWatcher) => {
|
|
21
21
|
let promise;
|
|
@@ -25,7 +25,7 @@ const makeWatchNextStep =
|
|
|
25
25
|
} else {
|
|
26
26
|
promise = basicE.resolve(specimen);
|
|
27
27
|
}
|
|
28
|
-
watchPromise(promise, promiseWatcher);
|
|
28
|
+
zone.watchPromise(promise, promiseWatcher);
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
/**
|
|
@@ -82,7 +82,7 @@ const preparePromiseWatcher = (zone, isRetryableReason, watchNextStep) =>
|
|
|
82
82
|
return /** @type {Partial<typeof state>} */ (state);
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
|
-
/** @type {Required<import('
|
|
85
|
+
/** @type {Required<import('@agoric/base-zone').PromiseWatcher>['onFulfilled']} */
|
|
86
86
|
onFulfilled(value) {
|
|
87
87
|
const { watcher, watcherContext, resolver } = this.state;
|
|
88
88
|
if (getVowPayload(value)) {
|
|
@@ -95,7 +95,7 @@ const preparePromiseWatcher = (zone, isRetryableReason, watchNextStep) =>
|
|
|
95
95
|
this.state.resolver = undefined;
|
|
96
96
|
settle(resolver, watcher, 'onFulfilled', value, watcherContext);
|
|
97
97
|
},
|
|
98
|
-
/** @type {Required<import('
|
|
98
|
+
/** @type {Required<import('@agoric/base-zone').PromiseWatcher>['onRejected']} */
|
|
99
99
|
onRejected(reason) {
|
|
100
100
|
const { vow, watcher, watcherContext, resolver } = this.state;
|
|
101
101
|
if (vow && isRetryableReason(reason)) {
|
|
@@ -112,16 +112,14 @@ const preparePromiseWatcher = (zone, isRetryableReason, watchNextStep) =>
|
|
|
112
112
|
/**
|
|
113
113
|
* @param {import('@agoric/base-zone').Zone} zone
|
|
114
114
|
* @param {() => import('./types.js').VowKit<any>} makeVowKit
|
|
115
|
-
* @param {typeof watchPromiseShim} [watchPromise]
|
|
116
115
|
* @param {(reason: any) => boolean} [isRetryableReason]
|
|
117
116
|
*/
|
|
118
117
|
export const prepareWatch = (
|
|
119
118
|
zone,
|
|
120
119
|
makeVowKit,
|
|
121
|
-
watchPromise = watchPromiseShim,
|
|
122
120
|
isRetryableReason = _reason => false,
|
|
123
121
|
) => {
|
|
124
|
-
const watchNextStep = makeWatchNextStep(
|
|
122
|
+
const watchNextStep = makeWatchNextStep(zone);
|
|
125
123
|
const makePromiseWatcher = preparePromiseWatcher(
|
|
126
124
|
zone,
|
|
127
125
|
isRetryableReason,
|
|
@@ -150,7 +148,7 @@ export const prepareWatch = (
|
|
|
150
148
|
);
|
|
151
149
|
|
|
152
150
|
// Coerce the specimen to a promise, and start the watcher cycle.
|
|
153
|
-
watchPromise(basicE.resolve(specimenP), promiseWatcher);
|
|
151
|
+
zone.watchPromise(basicE.resolve(specimenP), promiseWatcher);
|
|
154
152
|
|
|
155
153
|
return vow;
|
|
156
154
|
};
|
package/src/watch-promise.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export const PromiseWatcherI: import("@endo/patterns").InterfaceGuard<{
|
|
2
|
-
onFulfilled: import("@endo/patterns").MethodGuard;
|
|
3
|
-
onRejected: import("@endo/patterns").MethodGuard;
|
|
4
|
-
}>;
|
|
5
|
-
export function watchPromiseShim(p: Promise<any>, watcher: PromiseWatcher, ...watcherArgs: unknown[]): void;
|
|
6
|
-
export type PromiseWatcher = {
|
|
7
|
-
onFulfilled?: ((fulfilment: unknown, ...args: unknown[]) => void) | undefined;
|
|
8
|
-
onRejected?: ((reason: unknown, ...args: unknown[]) => void) | undefined;
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=watch-promise.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch-promise.d.ts","sourceRoot":"","sources":["watch-promise.js"],"names":[],"mappings":"AASA;;;GAGG;AAuCI,oCALI,OAAO,CAAC,GAAG,CAAC,WACZ,cAAc,kBACX,OAAO,KACR,IAAI,CAUhB;;gCA3C0B,OAAO,WAAW,OAAO,EAAE,KAAK,IAAI;2BACxC,OAAO,WAAW,OAAO,EAAE,KAAK,IAAI"}
|
package/src/watch-promise.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
import { M } from '@endo/patterns';
|
|
3
|
-
|
|
4
|
-
import { basicE } from './vow-utils.js';
|
|
5
|
-
|
|
6
|
-
const { Fail } = assert;
|
|
7
|
-
|
|
8
|
-
const { apply } = Reflect;
|
|
9
|
-
|
|
10
|
-
export const PromiseWatcherI = M.interface('PromiseWatcher', {
|
|
11
|
-
onFulfilled: M.call(M.any()).rest(M.any()).returns(),
|
|
12
|
-
onRejected: M.call(M.any()).rest(M.any()).returns(),
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @typedef {object} PromiseWatcher
|
|
17
|
-
* @property {(fulfilment: unknown, ...args: unknown[]) => void} [onFulfilled]
|
|
18
|
-
* @property {(reason: unknown, ...args: unknown[]) => void} [onRejected]
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Adapt a promise watcher method to E.when.
|
|
23
|
-
* @param {Record<PropertyKey, (...args: unknown[]) => unknown>} that
|
|
24
|
-
* @param {PropertyKey} prop
|
|
25
|
-
* @param {unknown[]} postArgs
|
|
26
|
-
*/
|
|
27
|
-
const callMeMaybe = (that, prop, postArgs) => {
|
|
28
|
-
const fn = that[prop];
|
|
29
|
-
if (!fn) {
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
assert.typeof(fn, 'function');
|
|
33
|
-
/**
|
|
34
|
-
* @param {unknown} arg value or reason
|
|
35
|
-
*/
|
|
36
|
-
const wrapped = arg => {
|
|
37
|
-
// Don't return a value, to prevent E.when from subscribing to a resulting
|
|
38
|
-
// promise.
|
|
39
|
-
apply(fn, that, [arg, ...postArgs]);
|
|
40
|
-
};
|
|
41
|
-
return wrapped;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Shim the promise watcher behaviour when VatData.watchPromise is not available.
|
|
46
|
-
*
|
|
47
|
-
* @param {Promise<any>} p
|
|
48
|
-
* @param {PromiseWatcher} watcher
|
|
49
|
-
* @param {...unknown} watcherArgs
|
|
50
|
-
* @returns {void}
|
|
51
|
-
*/
|
|
52
|
-
export const watchPromiseShim = (p, watcher, ...watcherArgs) => {
|
|
53
|
-
Promise.resolve(p) === p || Fail`watchPromise only watches promises`;
|
|
54
|
-
const onFulfilled = callMeMaybe(watcher, 'onFulfilled', watcherArgs);
|
|
55
|
-
const onRejected = callMeMaybe(watcher, 'onRejected', watcherArgs);
|
|
56
|
-
onFulfilled ||
|
|
57
|
-
onRejected ||
|
|
58
|
-
Fail`promise watcher must implement at least one handler method`;
|
|
59
|
-
void basicE.when(p, onFulfilled, onRejected);
|
|
60
|
-
};
|
|
61
|
-
harden(watchPromiseShim);
|