@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 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-data/vow.js`, which
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-data/vow.js';
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-data/vow.js';
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 package supports Zones, which are used to integrate Agoric's vat
60
- upgrade mechanism and `watchPromise`. To create vow tools that deal with
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-data/vow.js';
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-24f7f32.0+24f7f32",
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-24f7f32.0+24f7f32",
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": "24f7f32495a6eda13fd75d18620ab9f7989b5d2e"
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>;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["tools.js"],"names":[],"mappings":"AAYO,sCALI,OAAO,mBAAmB,EAAE,IAAI;kCAEvB,GAAG,KAAK,OAAO;wBACpB,WAAW,CAAC,GAAG,CAAC,WAAW,OAAO,oBAAoB,EAAE,cAAc,WAAW,OAAO,EAAE,KAAK,IAAI;;sFAAjE,CAAC,yBAAgD,OAAS,YAAW,EAAE,MAAM,CAAC,CAAC,CAAC;uFAewiG,OAAO,YAAY,EAAE,IAAI,CAAC,GAAC,GAAE,OAAQ,YAAY,EAAE,GAAG,CAAC,GAAC,CAAC,CAAC;;;EAFluG"}
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, watchPromise } = powers;
15
- const makeVowKit = prepareVowKit(zone, watchPromise);
13
+ const { isRetryableReason = () => false } = powers;
14
+ const makeVowKit = prepareVowKit(zone);
16
15
  const when = makeWhen(isRetryableReason);
17
- const watch = prepareWatch(zone, makeVowKit, watchPromise, isRetryableReason);
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>;
@@ -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":"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"}
package/src/vow.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export function prepareVowKit(zone: import("@agoric/base-zone").Zone, watchPromise?: ((p: Promise<any>, watcher: PromiseWatcher, ...watcherArgs: unknown[]) => void) | undefined): <T>() => import("./types.js").VowKit<T>;
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":"AAkBO,oCAHI,OAAO,mBAAmB,EAAE,IAAI,sBAyBU,YAElD,WAAe,cAAc,qDAoFW,CAAC,OAA7B,OAAO,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAS5C;0BA7HY,OAAO,CAAC,OAAO,mBAAmB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAChE,IAAQ,CAAC,OAAO,mBAAmB,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC"}
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, watchPromiseShim } from './watch-promise.js';
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 = (zone, watchPromise = watchPromiseShim) => {
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>, watchPromise?: ((p: Promise<any>, watcher: PromiseWatcher, ...watcherArgs: unknown[]) => void) | undefined, 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>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["watch.js"],"names":[],"mappings":"AAqHO,mCALI,OAAO,mBAAmB,EAAE,IAAI,cAChC,MAAM,OAAO,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,sBA5EP,YAAY,WACpD,cACK,iFA4Ea,GAAG,KAAK,OAAO,iBAoBiC,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"}
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 {typeof watchPromiseShim} watchPromise
8
+ * @param {import('@agoric/base-zone').Zone} zone
9
9
  */
10
10
  const makeWatchNextStep =
11
- watchPromise =>
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('./watch-promise.js').PromiseWatcher} promiseWatcher
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('./watch-promise.js').PromiseWatcher>['onFulfilled']} */
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('./watch-promise.js').PromiseWatcher>['onRejected']} */
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(watchPromise);
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
  };
@@ -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"}
@@ -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);