@agoric/vow 0.1.1-dev-eef7b69.0.eef7b69 → 0.1.1-dev-f96725d.0.f96725d

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/vow",
3
- "version": "0.1.1-dev-eef7b69.0.eef7b69",
3
+ "version": "0.1.1-dev-f96725d.0.f96725d",
4
4
  "description": "Remote (shortening and disconnection-tolerant) Promise-likes",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -20,8 +20,8 @@
20
20
  "lint:types": "yarn run -T tsc"
21
21
  },
22
22
  "dependencies": {
23
- "@agoric/base-zone": "0.1.1-dev-eef7b69.0.eef7b69",
24
- "@agoric/internal": "0.3.3-dev-eef7b69.0.eef7b69",
23
+ "@agoric/base-zone": "0.1.1-dev-f96725d.0.f96725d",
24
+ "@agoric/internal": "0.3.3-dev-f96725d.0.f96725d",
25
25
  "@endo/env-options": "^1.1.11",
26
26
  "@endo/errors": "^1.2.13",
27
27
  "@endo/eventual-send": "^1.3.4",
@@ -31,8 +31,8 @@
31
31
  },
32
32
  "devDependencies": {
33
33
  "@agoric/internal": "workspace:*",
34
- "@agoric/swingset-vat": "0.32.3-dev-eef7b69.0.eef7b69",
35
- "@agoric/zone": "0.2.3-dev-eef7b69.0.eef7b69",
34
+ "@agoric/swingset-vat": "0.32.3-dev-f96725d.0.f96725d",
35
+ "@agoric/zone": "0.2.3-dev-f96725d.0.f96725d",
36
36
  "@endo/far": "^1.1.14",
37
37
  "@endo/init": "^1.1.12",
38
38
  "ava": "^5.3.0",
@@ -58,5 +58,5 @@
58
58
  "typeCoverage": {
59
59
  "atLeast": 91.98
60
60
  },
61
- "gitHead": "eef7b69aab783beedcb95e10c7ef55bf65ba72c8"
61
+ "gitHead": "f96725dc568bd872664f68eb5f60b0853737e166"
62
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["tools.js"],"names":[],"mappings":"AAwBO,2CALI,IAAI,WAEZ;IAAmC,iBAAiB;CACpD,GAAU,QAAQ,CAkEpB;0BA9EsB,mBAAmB;uCAE4B,YAAY;8BAAZ,YAAY"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["tools.js"],"names":[],"mappings":"AAwBO,2CALI,IAAI,WAEZ;IAAmC,iBAAiB;CACpD,GAAU,QAAQ,CAwEpB;0BApFsB,mBAAmB;uCAEuC,YAAY;8BAAZ,YAAY"}
package/src/tools.js CHANGED
@@ -10,7 +10,7 @@ import { makeWhen } from './when.js';
10
10
  /**
11
11
  * @import {Zone} from '@agoric/base-zone';
12
12
  * @import {Passable} from '@endo/pass-style';
13
- * @import {IsRetryableReason, AsPromiseFunction, Vow, VowTools} from './types.js';
13
+ * @import {IsRetryableReason, AsPromiseFunction, Fulfilled, Vow, VowTools} from './types.js';
14
14
  */
15
15
 
16
16
  /**
@@ -50,13 +50,17 @@ export const prepareBasicVowTools = (zone, powers = {}) => {
50
50
  * fulfilled and rejects when any of the input's promises or vows are
51
51
  * rejected with the first rejection reason.
52
52
  *
53
- * @param {unknown[]} maybeVows
53
+ * @template {readonly unknown[]} TS
54
+ * @param {TS} maybeVows
55
+ * @returns {Vow<{ [P in keyof TS]: Fulfilled<TS[P]> }>}
54
56
  */
55
57
  const all = maybeVows => watchUtils.all(maybeVows);
56
58
 
57
59
  /**
58
- * @param {unknown[]} maybeVows
59
60
  * @deprecated use `vowTools.all`
61
+ * @template {readonly unknown[]} TS
62
+ * @param {TS} maybeVows
63
+ * @returns {Vow<{ [P in keyof TS]: Fulfilled<TS[P]>}>}
60
64
  */
61
65
  const allVows = all;
62
66
 
@@ -66,7 +70,9 @@ export const prepareBasicVowTools = (zone, powers = {}) => {
66
70
  * resolves when all of the input's promises or vows are settled with an
67
71
  * array of settled outcome objects.
68
72
  *
69
- * @param {unknown[]} maybeVows
73
+ * @template {readonly unknown[]} TS
74
+ * @param {TS} maybeVows
75
+ * @returns {Vow<{ [P in keyof TS]: PromiseSettledResult<Fulfilled<TS[P]>> }>}
70
76
  */
71
77
  const allSettled = maybeVows => watchUtils.allSettled(maybeVows);
72
78
 
package/src/types.d.ts CHANGED
@@ -5,6 +5,14 @@ import type { CopyTagged, RemotableObject } from '@endo/pass-style';
5
5
  * Return truthy if a rejection reason should result in a retry.
6
6
  */
7
7
  export type IsRetryableReason = (reason: any, priorRetryValue: any) => any;
8
+ /**
9
+ * Types that are conceptually similar to Promise<F> in that they wrap a fulfilled type.
10
+ */
11
+ export type VowLike<F> = Promise<F> | PromiseLike<F> | Vow<F>;
12
+ /**
13
+ * Extract the final fulfilment type from a chain of VowLikes.
14
+ */
15
+ export type Fulfilled<T> = T extends VowLike<infer F> ? Fulfilled<F> : T;
8
16
  /**
9
17
  * Return type of a function that may
10
18
  * return a promise or a vow.
@@ -80,7 +88,9 @@ export type VowTools = {
80
88
  * fulfilled and rejects when any of the input's promises or vows are rejected
81
89
  * with the first rejection reason.
82
90
  */
83
- all: (maybeVows: unknown[]) => Vow<any[]>;
91
+ all: <TS extends readonly unknown[]>(maybeVows: TS) => Vow<{
92
+ [K in keyof TS]: Fulfilled<TS[K]>;
93
+ }>;
84
94
  /**
85
95
  * Vow-tolerant
86
96
  * implementation of Promise.allSettled that takes an iterable of vows and other
@@ -88,14 +98,12 @@ export type VowTools = {
88
98
  * the input's promises or vows are settled with an array of settled outcome
89
99
  * objects.
90
100
  */
91
- allSettled: (maybeVows: unknown[]) => Vow<({
92
- status: 'fulfilled';
93
- value: any;
94
- } | {
95
- status: 'rejected';
96
- reason: any;
97
- })[]>;
98
- allVows: (maybeVows: unknown[]) => Vow<any[]>;
101
+ allSettled: <TS extends readonly unknown[]>(maybeVows: TS) => Vow<{
102
+ [K in keyof TS]: PromiseSettledResult<Fulfilled<TS[K]>>;
103
+ }>;
104
+ allVows: <TS extends readonly unknown[]>(maybeVows: TS) => Vow<{
105
+ [K in keyof TS]: Fulfilled<TS[K]>;
106
+ }>;
99
107
  /**
100
108
  * Convert a vow or promise to a promise, ensuring proper handling of ephemeral promises.
101
109
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"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"}
package/src/types.ts CHANGED
@@ -7,6 +7,16 @@ import type { CopyTagged, RemotableObject } from '@endo/pass-style';
7
7
  */
8
8
  export type IsRetryableReason = (reason: any, priorRetryValue: any) => any;
9
9
 
10
+ /**
11
+ * Types that are conceptually similar to Promise<F> in that they wrap a fulfilled type.
12
+ */
13
+ export type VowLike<F> = Promise<F> | PromiseLike<F> | Vow<F>; // s| PromiseStep<F> …etc.
14
+
15
+ /**
16
+ * Extract the final fulfilment type from a chain of VowLikes.
17
+ */
18
+ export type Fulfilled<T> = T extends VowLike<infer F> ? Fulfilled<F> : T;
19
+
10
20
  /**
11
21
  * Return type of a function that may
12
22
  * return a promise or a vow.
@@ -128,7 +138,11 @@ export type VowTools = {
128
138
  * fulfilled and rejects when any of the input's promises or vows are rejected
129
139
  * with the first rejection reason.
130
140
  */
131
- all: (maybeVows: unknown[]) => Vow<any[]>;
141
+ all: <TS extends readonly unknown[]>(
142
+ maybeVows: TS,
143
+ ) => Vow<{
144
+ [K in keyof TS]: Fulfilled<TS[K]>;
145
+ }>;
132
146
  /**
133
147
  * Vow-tolerant
134
148
  * implementation of Promise.allSettled that takes an iterable of vows and other
@@ -136,19 +150,16 @@ export type VowTools = {
136
150
  * the input's promises or vows are settled with an array of settled outcome
137
151
  * objects.
138
152
  */
139
- allSettled: (maybeVows: unknown[]) => Vow<
140
- (
141
- | {
142
- status: 'fulfilled';
143
- value: any;
144
- }
145
- | {
146
- status: 'rejected';
147
- reason: any;
148
- }
149
- )[]
150
- >;
151
- allVows: (maybeVows: unknown[]) => Vow<any[]>;
153
+ allSettled: <TS extends readonly unknown[]>(
154
+ maybeVows: TS,
155
+ ) => Vow<{
156
+ [K in keyof TS]: PromiseSettledResult<Fulfilled<TS[K]>>;
157
+ }>;
158
+ allVows: <TS extends readonly unknown[]>(
159
+ maybeVows: TS,
160
+ ) => Vow<{
161
+ [K in keyof TS]: Fulfilled<TS[K]>;
162
+ }>;
152
163
  /**
153
164
  * Convert a vow or promise to a promise, ensuring proper handling of ephemeral promises.
154
165
  */
@@ -4,16 +4,18 @@ export function prepareWatchUtils(zone: Zone, { watch, when, makeVowKit, isRetry
4
4
  makeVowKit: () => VowKit<any>;
5
5
  isRetryableReason: IsRetryableReason;
6
6
  }): () => import("@endo/exo").Guarded<{
7
- /** @param {unknown[]} specimens */
8
- all(specimens: unknown[]): Vow<any[]>;
9
- /** @param {unknown[]} specimens */
10
- allSettled(specimens: unknown[]): Vow<({
11
- status: "fulfilled";
12
- value: any;
13
- } | {
14
- status: "rejected";
15
- reason: any;
16
- })[]>;
7
+ /**
8
+ * @template {readonly unknown[]} S
9
+ * @param {S} specimens
10
+ * @returns {Vow<{ [P in keyof S]: Fulfilled<S[P]> }>}
11
+ */
12
+ all<S extends readonly unknown[]>(specimens: S): Vow<{ [P in keyof S]: Fulfilled<S[P]>; }>;
13
+ /**
14
+ * @template {readonly unknown[]} S
15
+ * @param {S} specimens
16
+ * @returns {Vow<{ [P in keyof S]: PromiseSettledResult<Fulfilled<S[P]>> }>}
17
+ */
18
+ allSettled<S extends readonly unknown[]>(specimens: S): Vow<{ [P in keyof S]: PromiseSettledResult<Fulfilled<S[P]>>; }>;
17
19
  asPromise(specimenP: any, watcher?: import("./types.js").Watcher<any, any, never, any[]> | undefined, watcherArgs?: any[] | undefined): Promise<any>;
18
20
  }>;
19
21
  import type { Zone } from '@agoric/base-zone';
@@ -21,5 +23,6 @@ import type { Watch } from './watch.js';
21
23
  import type { When } from './when.js';
22
24
  import type { VowKit } from './types.js';
23
25
  import type { IsRetryableReason } from './types.js';
26
+ import type { Fulfilled } from './types.js';
24
27
  import type { Vow } from './types.js';
25
28
  //# sourceMappingURL=watch-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch-utils.d.ts","sourceRoot":"","sources":["watch-utils.js"],"names":[],"mappings":"AA+BO,wCAPI,IAAI,kDAEZ;IAAsB,KAAK,EAAnB,KAAK;IACQ,IAAI,EAAjB,IAAI;IACsB,UAAU,EAApC,MAAM,OAAO,GAAG,CAAC;IACS,iBAAiB,EAA3C,iBAAiB;CAC3B;IA4CO,mCAAmC;mBAAvB,OAAO,EAAE;IAIrB,mCAAmC;0BAAvB,OAAO,EAAE,GAED,IAAI,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAC,GAAG;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAC,CAAC,EAAE,CAAC;;GA0LzG;0BAhQsB,mBAAmB;2BAClB,YAAY;0BACb,WAAW;4BACkC,YAAY;uCAAZ,YAAY;yBAAZ,YAAY"}
1
+ {"version":3,"file":"watch-utils.d.ts","sourceRoot":"","sources":["watch-utils.js"],"names":[],"mappings":"AA+BO,wCAPI,IAAI,kDAEZ;IAAsB,KAAK,EAAnB,KAAK;IACQ,IAAI,EAAjB,IAAI;IACsB,UAAU,EAApC,MAAM,OAAO,GAAG,CAAC;IACS,iBAAiB,EAA3C,iBAAiB;CAC3B;IA4CO;;;;OAIG;QAH+B,CAAC,SAAtB,SAAU,OAAO,EAAG,aACtB,CAAC,GACC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC;IAOrD;;;;OAIG;eAH+B,CAAC,SAAtB,SAAU,OAAO,EAAG,aACtB,CAAC,GACC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC;;GA6LlF;0BA1QsB,mBAAmB;2BAClB,YAAY;0BACb,WAAW;4BAC6C,YAAY;uCAAZ,YAAY;+BAAZ,YAAY;yBAAZ,YAAY"}
@@ -11,7 +11,7 @@ const { Fail, bare, details: X } = assert;
11
11
  * @import {Zone} from '@agoric/base-zone';
12
12
  * @import {Watch} from './watch.js';
13
13
  * @import {When} from './when.js';
14
- * @import {VowKit, AsPromiseFunction, IsRetryableReason, Vow} from './types.js';
14
+ * @import {VowKit, AsPromiseFunction, Fulfilled, IsRetryableReason, Vow} from './types.js';
15
15
  */
16
16
 
17
17
  const VowShape = M.tagged(
@@ -72,13 +72,23 @@ export const prepareWatchUtils = (
72
72
  },
73
73
  {
74
74
  utils: {
75
- /** @param {unknown[]} specimens */
75
+ /**
76
+ * @template {readonly unknown[]} S
77
+ * @param {S} specimens
78
+ * @returns {Vow<{ [P in keyof S]: Fulfilled<S[P]> }>}
79
+ */
76
80
  all(specimens) {
77
- return this.facets.helper.createVow(specimens, false);
81
+ return /** @type {Vow<{ [P in keyof S]: Fulfilled<S[P]> }>} */ (
82
+ this.facets.helper.createVow(specimens, false)
83
+ );
78
84
  },
79
- /** @param {unknown[]} specimens */
85
+ /**
86
+ * @template {readonly unknown[]} S
87
+ * @param {S} specimens
88
+ * @returns {Vow<{ [P in keyof S]: PromiseSettledResult<Fulfilled<S[P]>> }>}
89
+ */
80
90
  allSettled(specimens) {
81
- return /** @type {Vow<({status: 'fulfilled', value: any} | {status: 'rejected', reason: any})[]>} */ (
91
+ return /** @type {Vow<{ [P in keyof S]: PromiseSettledResult<Fulfilled<S[P]>> }>} */ (
82
92
  this.facets.helper.createVow(specimens, true)
83
93
  );
84
94
  },
@@ -121,7 +131,7 @@ export const prepareWatchUtils = (
121
131
  },
122
132
  helper: {
123
133
  /**
124
- * @param {unknown[]} specimens
134
+ * @param {readonly unknown[]} specimens
125
135
  * @param {boolean} isAllSettled
126
136
  */
127
137
  createVow(specimens, isAllSettled) {