@agoric/vow 0.1.1-dev-776528e.0.776528e → 0.1.1-dev-5ff5e7a.0.5ff5e7a

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-776528e.0.776528e",
3
+ "version": "0.1.1-dev-5ff5e7a.0.5ff5e7a",
4
4
  "description": "Remote (shortening and disconnection-tolerant) Promise-likes",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,21 +24,21 @@
24
24
  "lint:types": "yarn run -T tsgo --tsBuildInfoFile tsconfig.tsgo.tsbuildinfo"
25
25
  },
26
26
  "dependencies": {
27
- "@agoric/base-zone": "0.1.1-dev-776528e.0.776528e",
28
- "@agoric/internal": "0.3.3-dev-776528e.0.776528e",
27
+ "@agoric/base-zone": "0.1.1-dev-5ff5e7a.0.5ff5e7a",
28
+ "@agoric/internal": "0.3.3-dev-5ff5e7a.0.5ff5e7a",
29
29
  "@endo/env-options": "^1.1.11",
30
- "@endo/errors": "^1.2.13",
31
- "@endo/eventual-send": "^1.3.4",
32
- "@endo/pass-style": "^1.6.3",
33
- "@endo/patterns": "^1.7.0",
34
- "@endo/promise-kit": "^1.1.13"
30
+ "@endo/errors": "^1.3.1",
31
+ "@endo/eventual-send": "^1.5.0",
32
+ "@endo/pass-style": "^1.8.1",
33
+ "@endo/patterns": "^1.9.1",
34
+ "@endo/promise-kit": "^1.2.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@agoric/internal": "workspace:*",
38
- "@agoric/swingset-vat": "0.32.3-dev-776528e.0.776528e",
39
- "@agoric/zone": "0.2.3-dev-776528e.0.776528e",
38
+ "@agoric/swingset-vat": "0.32.3-dev-5ff5e7a.0.5ff5e7a",
39
+ "@agoric/zone": "0.2.3-dev-5ff5e7a.0.5ff5e7a",
40
40
  "@endo/far": "^1.1.14",
41
- "@endo/init": "^1.1.12",
41
+ "@endo/init": "^1.1.13",
42
42
  "ava": "^7.0.0",
43
43
  "tsd": "^0.33.0"
44
44
  },
@@ -62,5 +62,5 @@
62
62
  "typeCoverage": {
63
63
  "atLeast": 92.06
64
64
  },
65
- "gitHead": "776528eb7ca6f31911f2ca21a9702e20fdca2595"
65
+ "gitHead": "5ff5e7aa9e8c42795c47aabc7222eb56a2915011"
66
66
  }
package/src/E.d.ts CHANGED
@@ -1,44 +1,32 @@
1
1
  export default makeE;
2
2
  export type Callable = (...args: unknown[]) => any;
3
3
  export type EProxy = ReturnType<typeof makeE>;
4
+ export type DataOnly<T> = import("@endo/eventual-send").DataOnly<T>;
5
+ export type EGetters<T> = import("@endo/eventual-send").EGetters<T>;
6
+ export type ESendOnlyCallable<T extends Callable> = import("@endo/eventual-send").ESendOnlyCallable<T>;
7
+ export type ESendOnlyMethods<T> = import("@endo/eventual-send").ESendOnlyMethods<T>;
8
+ export type ESendOnlyCallableOrMethods<T> = import("@endo/eventual-send").ESendOnlyCallableOrMethods<T>;
9
+ export type FilteredKeys<T, U> = import("@endo/eventual-send").FilteredKeys<T, U>;
10
+ export type EOnly<T> = import("@endo/eventual-send").EOnly<T>;
4
11
  /**
5
- * `DataOnly<T>` means to return a record type `T2` consisting only of
6
- * properties that are *not* functions.
12
+ * Maps a callable to its remotely called type, with Vow auto-unwrapping.
7
13
  */
8
- export type DataOnly<T> = Omit<T, FilteredKeys<T, Callable>>;
9
- export type ECallable<T extends Callable> = ReturnType<T> extends Promise<EUnwrap<ReturnType<T>>> ? T : (...args: Parameters<T>) => Promise<EUnwrap<ReturnType<T>>>;
14
+ export type ECallable<T extends Callable> = (ReturnType<T> extends Promise<EUnwrap<ReturnType<T>>> ? T : (...args: Parameters<T>) => Promise<EUnwrap<ReturnType<T>>>);
10
15
  export type EMethods<T> = { readonly [P in keyof T]: T[P] extends Callable ? ECallable<T[P]> : never; };
11
- export type EGetters<T> = { readonly [P in keyof T]: T[P] extends PromiseLike<any> ? T[P] : Promise<Awaited<T[P]>>; };
12
- export type ESendOnlyCallable<T extends Callable> = (...args: Parameters<T>) => Promise<void>;
13
- export type ESendOnlyMethods<T> = { readonly [P in keyof T]: T[P] extends Callable ? ESendOnlyCallable<T[P]> : never; };
14
- export type ESendOnlyCallableOrMethods<T> = (T extends Callable ? ESendOnlyCallable<T> & ESendOnlyMethods<Required<T>> : ESendOnlyMethods<Required<T>>);
15
- export type ECallableOrMethods<T> = (T extends Callable ? ECallable<T> & EMethods<Required<T>> : EMethods<Required<T>>);
16
- /**
17
- * Return a union of property names/symbols/numbers P for which the record element T[P]'s type extends U.
18
- *
19
- * Given const x = { a: 123, b: 'hello', c: 42, 49: () => {}, 53: 67 },
20
- *
21
- * FilteredKeys<typeof x, number> is the type 'a' | 'c' | 53.
22
- * FilteredKeys<typeof x, string> is the type 'b'.
23
- * FilteredKeys<typeof x, 42 | 67> is the type 'c' | 53.
24
- * FilteredKeys<typeof x, boolean> is the type never.
25
- */
26
- export type FilteredKeys<T, U> = { [P in keyof T]: T[P] extends U ? P : never; }[keyof T];
16
+ export type ECallableOrMethods<T> = (0 extends (1 & T) ? any : T extends Callable ? ECallable<T> & EMethods<Required<T>> : EMethods<Required<T>>);
27
17
  /**
28
18
  * `PickCallable<T>` means to return a single root callable or a record type
29
- * consisting only of properties that are functions.
19
+ * consisting only of properties that are functions. Like Endo's
20
+ * `PickCallable` but with an extra guard against `Pick<T, never>` collapse
21
+ * when `T` has no callable members.
30
22
  */
31
- export type PickCallable<T> = (T extends Callable ? (...args: Parameters<T>) => ReturnType<T> : FilteredKeys<T, Callable> extends never ? never : Pick<T, FilteredKeys<T, Callable>>);
23
+ export type PickCallable<T> = (0 extends (1 & T) ? any : T extends Callable ? (...args: Parameters<T>) => ReturnType<T> : FilteredKeys<T, Callable> extends never ? never : Pick<T, FilteredKeys<T, Callable>>);
32
24
  /**
33
- * `RemoteFunctions<T>` means to return the functions and properties that are remotely callable.
25
+ * `RemoteFunctions<T>` means to return the functions and properties that are
26
+ * remotely callable, after unwrapping any Vow chain via `EUnwrap`.
34
27
  */
35
- export type RemoteFunctions<T> = (EUnwrap<T> extends RemotableBrand<any, infer R> ? PickCallable<R> : PickCallable<EUnwrap<T>>);
28
+ export type RemoteFunctions<T> = (0 extends (1 & T) ? any : EUnwrap<T> extends RemotableBrand<any, infer R> ? PickCallable<R> : PickCallable<EUnwrap<T>>);
36
29
  export type LocalRecord<T> = (T extends RemotableBrand<infer L, any> ? L : EUnwrap<T>);
37
- /**
38
- * Type for an object that must only be invoked with E. It supports a given
39
- * interface but declares all the functions as asyncable.
40
- */
41
- export type EOnly<T> = (T extends Callable ? (...args: Parameters<T>) => ERef<Awaited<EOnly<ReturnType<T>>>> : T extends Record<PropertyKey, Callable> ? { [K in keyof T]: T[K] extends Callable ? (...args: Parameters<T[K]>) => ERef<Awaited<EOnly<ReturnType<T[K]>>>> : T[K]; } : T);
42
30
  /**
43
31
  * @template [A={}]
44
32
  * @param {HandledPromiseConstructor} HandledPromise
@@ -99,6 +87,6 @@ declare function makeE<A = {}>(HandledPromise: HandledPromiseConstructor, powers
99
87
  } & A;
100
88
  import type { EUnwrap } from './types.js';
101
89
  import type { RemotableBrand } from '@endo/eventual-send';
102
- import type { ERef } from '@endo/far';
103
90
  import type { HandledPromiseConstructor } from '@endo/eventual-send';
91
+ import type { ERef } from '@endo/far';
104
92
  //# sourceMappingURL=E.d.ts.map
package/src/E.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"E.d.ts","sourceRoot":"","sources":["E.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"E.d.ts","sourceRoot":"","sources":["E.js"],"names":[],"mappings":"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"}
package/src/E.js CHANGED
@@ -312,108 +312,127 @@ export default makeE;
312
312
 
313
313
  /** @typedef {ReturnType<typeof makeE>} EProxy */
314
314
 
315
+ // =====================================================================
316
+ // Type helpers re-exported from `@endo/eventual-send`.
317
+ //
318
+ // These helpers are byte-equivalent (or close enough) to Endo's, so we
319
+ // re-export rather than maintain duplicate definitions. This file
320
+ // keeps only the helpers whose semantics differ because vow needs to
321
+ // recursively unwrap Vows via `EUnwrap` (a no-op in plain Endo, where
322
+ // `Awaited` is sufficient).
323
+ //
324
+ // Re-exporting via JSDoc `@typedef` preserves the public type names
325
+ // for external consumers (e.g.
326
+ // `import type { ECallable } from '@agoric/vow/src/E.js'`) while
327
+ // pointing the actual definition at Endo.
328
+ // =====================================================================
329
+
315
330
  /**
316
- * `DataOnly<T>` means to return a record type `T2` consisting only of
317
- * properties that are *not* functions.
318
- *
319
- * @template T The type to be filtered.
320
- * @typedef {Omit<T, FilteredKeys<T, Callable>>} DataOnly
331
+ * @template T
332
+ * @typedef {import('@endo/eventual-send').DataOnly<T>} DataOnly
333
+ */
334
+
335
+ /**
336
+ * @template T
337
+ * @typedef {import('@endo/eventual-send').EGetters<T>} EGetters
321
338
  */
322
339
 
323
340
  /**
324
341
  * @template {Callable} T
325
- * @typedef {ReturnType<T> extends Promise<EUnwrap<ReturnType<T>>>
326
- * ? T
327
- * : (...args: Parameters<T>) => Promise<EUnwrap<ReturnType<T>>>} ECallable
342
+ * @typedef {import('@endo/eventual-send').ESendOnlyCallable<T>} ESendOnlyCallable
328
343
  */
329
344
 
330
345
  /**
331
346
  * @template T
332
- * @typedef {{
333
- * readonly [P in keyof T]: T[P] extends Callable
334
- * ? ECallable<T[P]>
335
- * : never;
336
- * }} EMethods
347
+ * @typedef {import('@endo/eventual-send').ESendOnlyMethods<T>} ESendOnlyMethods
337
348
  */
338
349
 
339
350
  /**
340
351
  * @template T
341
- * @typedef {{
342
- * readonly [P in keyof T]: T[P] extends PromiseLike<any>
343
- * ? T[P]
344
- * : Promise<Awaited<T[P]>>;
345
- * }} EGetters
352
+ * @typedef {import('@endo/eventual-send').ESendOnlyCallableOrMethods<T>} ESendOnlyCallableOrMethods
346
353
  */
347
354
 
348
355
  /**
349
- * @template {Callable} T
350
- * @typedef {(...args: Parameters<T>) => Promise<void>} ESendOnlyCallable
356
+ * @template T
357
+ * @template U
358
+ * @typedef {import('@endo/eventual-send').FilteredKeys<T, U>} FilteredKeys
351
359
  */
352
360
 
353
361
  /**
354
362
  * @template T
355
- * @typedef {{
356
- * readonly [P in keyof T]: T[P] extends Callable
357
- * ? ESendOnlyCallable<T[P]>
358
- * : never;
359
- * }} ESendOnlyMethods
363
+ * @typedef {import('@endo/eventual-send').EOnly<T>} EOnly
360
364
  */
361
365
 
366
+ // =====================================================================
367
+ // Vow-specific type helpers.
368
+ //
369
+ // These helpers diverge from Endo's because vow auto-unwraps the Vow
370
+ // chain via `EUnwrap`, while Endo only unwraps Promises via `Awaited`.
371
+ // `ECallable` is the root of the divergence — every helper that
372
+ // transitively references it (`EMethods`, `ECallableOrMethods`,
373
+ // `RemoteFunctions`, `LocalRecord`) must stay local.
374
+ // =====================================================================
375
+
362
376
  /**
363
- * @template T
377
+ * Maps a callable to its remotely called type, with Vow auto-unwrapping.
378
+ *
379
+ * @template {Callable} T
364
380
  * @typedef {(
365
- * T extends Callable
366
- * ? ESendOnlyCallable<T> & ESendOnlyMethods<Required<T>>
367
- * : ESendOnlyMethods<Required<T>>
368
- * )} ESendOnlyCallableOrMethods
381
+ * ReturnType<T> extends Promise<EUnwrap<ReturnType<T>>>
382
+ * ? T
383
+ * : (...args: Parameters<T>) => Promise<EUnwrap<ReturnType<T>>>
384
+ * )} ECallable
369
385
  */
370
386
 
371
387
  /**
372
388
  * @template T
373
- * @typedef {(
374
- * T extends Callable
375
- * ? ECallable<T> & EMethods<Required<T>>
376
- * : EMethods<Required<T>>
377
- * )} ECallableOrMethods
389
+ * @typedef {{
390
+ * readonly [P in keyof T]: T[P] extends Callable
391
+ * ? ECallable<T[P]>
392
+ * : never;
393
+ * }} EMethods
378
394
  */
379
395
 
380
396
  /**
381
- * Return a union of property names/symbols/numbers P for which the record element T[P]'s type extends U.
382
- *
383
- * Given const x = { a: 123, b: 'hello', c: 42, 49: () => {}, 53: 67 },
384
- *
385
- * FilteredKeys<typeof x, number> is the type 'a' | 'c' | 53.
386
- * FilteredKeys<typeof x, string> is the type 'b'.
387
- * FilteredKeys<typeof x, 42 | 67> is the type 'c' | 53.
388
- * FilteredKeys<typeof x, boolean> is the type never.
389
- *
390
397
  * @template T
391
- * @template U
392
- * @typedef {{ [P in keyof T]: T[P] extends U ? P : never; }[keyof T]} FilteredKeys
398
+ * @typedef {(
399
+ * 0 extends (1 & T) // if T is any
400
+ * ? any // propagate any cleanly (avoid distributive collapse)
401
+ * : T extends Callable
402
+ * ? ECallable<T> & EMethods<Required<T>>
403
+ * : EMethods<Required<T>>
404
+ * )} ECallableOrMethods
393
405
  */
394
406
 
395
407
  /**
396
408
  * `PickCallable<T>` means to return a single root callable or a record type
397
- * consisting only of properties that are functions.
409
+ * consisting only of properties that are functions. Like Endo's
410
+ * `PickCallable` but with an extra guard against `Pick<T, never>` collapse
411
+ * when `T` has no callable members.
398
412
  *
399
413
  * @template T
400
414
  * @typedef {(
401
- * T extends Callable
402
- * ? (...args: Parameters<T>) => ReturnType<T> // a root callable, no methods
403
- * : FilteredKeys<T, Callable> extends never
404
- * ? never
405
- * : Pick<T, FilteredKeys<T, Callable>> // any callable methods
415
+ * 0 extends (1 & T) // if T is any
416
+ * ? any // propagate any cleanly (avoid Pick<any, string> distributive collapse)
417
+ * : T extends Callable
418
+ * ? (...args: Parameters<T>) => ReturnType<T> // a root callable, no methods
419
+ * : FilteredKeys<T, Callable> extends never
420
+ * ? never
421
+ * : Pick<T, FilteredKeys<T, Callable>> // any callable methods
406
422
  * )} PickCallable
407
423
  */
408
424
 
409
425
  /**
410
- * `RemoteFunctions<T>` means to return the functions and properties that are remotely callable.
426
+ * `RemoteFunctions<T>` means to return the functions and properties that are
427
+ * remotely callable, after unwrapping any Vow chain via `EUnwrap`.
411
428
  *
412
429
  * @template T
413
430
  * @typedef {(
414
- * EUnwrap<T> extends RemotableBrand<any, infer R> // if a given T will settle to some remote interface R
415
- * ? PickCallable<R> // then return the callable properties of R
416
- * : PickCallable<EUnwrap<T>> // otherwise return the callable properties of the settled T
431
+ * 0 extends (1 & T) // if T is any
432
+ * ? any // propagate any cleanly
433
+ * : EUnwrap<T> extends RemotableBrand<any, infer R> // if a given T will settle to some remote interface R
434
+ * ? PickCallable<R> // then return the callable properties of R
435
+ * : PickCallable<EUnwrap<T>> // otherwise return the callable properties of the settled T
417
436
  * )} RemoteFunctions
418
437
  */
419
438
 
@@ -425,21 +444,3 @@ export default makeE;
425
444
  * : EUnwrap<T>
426
445
  * )} LocalRecord
427
446
  */
428
-
429
- /**
430
- * Type for an object that must only be invoked with E. It supports a given
431
- * interface but declares all the functions as asyncable.
432
- *
433
- * @template T
434
- * @typedef {(
435
- * T extends Callable
436
- * ? (...args: Parameters<T>) => ERef<Awaited<EOnly<ReturnType<T>>>>
437
- * : T extends Record<PropertyKey, Callable>
438
- * ? {
439
- * [K in keyof T]: T[K] extends Callable
440
- * ? (...args: Parameters<T[K]>) => ERef<Awaited<EOnly<ReturnType<T[K]>>>>
441
- * : T[K];
442
- * }
443
- * : T
444
- * )} EOnly
445
- */
package/src/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "../vat.js";
2
2
  export * from "./types-index.js";
3
3
  export { default as makeE } from "./E.js";
4
- export { VowShape, toPassableCap } from "./vow-utils.js";
4
+ export { VowShape, Vow$, toPassableCap } from "./vow-utils.js";
5
5
  //# sourceMappingURL=index.d.ts.map
package/src/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  // reconfigure if not running under SwingSet.
5
5
  export * from '../vat.js';
6
6
  export { default as makeE } from './E.js';
7
- export { VowShape, toPassableCap } from './vow-utils.js';
7
+ export { VowShape, Vow$, toPassableCap } from './vow-utils.js';
8
8
 
9
9
  // eslint-disable-next-line import/export
10
10
  export * from './types-index.js';
@@ -8,7 +8,10 @@ export function prepareVowRejectionTracker(zone: Zone): import("@endo/exo").Guar
8
8
  * @param {any} reason
9
9
  */
10
10
  reject(vowCap: PassableCap, reason: any): void;
11
- }>;
11
+ }, import("@endo/patterns").InterfaceGuard<{
12
+ handle: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").MatcherOf<"remotable", any>], import("@endo/patterns").ArgGuard[], any, import("@endo/patterns").SyncValueGuard>;
13
+ reject: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").MatcherOf<"remotable", any>, import("@endo/patterns").RawGuard], import("@endo/patterns").ArgGuard[], any, import("@endo/patterns").SyncValueGuard>;
14
+ }>>;
12
15
  export type VowRejectionTracker = ReturnType<typeof prepareVowRejectionTracker>;
13
16
  import type { Zone } from '@agoric/base-zone';
14
17
  import type { PassableCap } from '@endo/pass-style';
@@ -1 +1 @@
1
- {"version":3,"file":"rejection-tracker.d.ts","sourceRoot":"","sources":["rejection-tracker.js"],"names":[],"mappings":"AA4BO,iDADK,IAAI;IA4BV;;OAEG;mBADQ,WAAW;IAetB;;;OAGG;mBAFQ,WAAW,UACX,GAAG;GA8BnB;kCAEa,UAAU,CAAC,OAAO,0BAA0B,CAAC;0BA/FpC,mBAAmB;iCAFZ,kBAAkB"}
1
+ {"version":3,"file":"rejection-tracker.d.ts","sourceRoot":"","sources":["rejection-tracker.js"],"names":[],"mappings":"AA4BO,iDADK,IAAI;IA4BV;;OAEG;mBADQ,WAAW;IAetB;;;OAGG;mBAFQ,WAAW,UACX,GAAG;;;;IA8BnB;kCAEa,UAAU,CAAC,OAAO,0BAA0B,CAAC;0BA/FpC,mBAAmB;iCAFZ,kBAAkB"}
@@ -12,6 +12,41 @@ export function prepareRetryableTools(outerZone: Zone, outerOptions: Preparation
12
12
  onFulfilled(value: any, runId: any): void;
13
13
  onRejected(reason: any, runId: any): void;
14
14
  };
15
+ }, {
16
+ flow: import("@endo/patterns").InterfaceGuard<{
17
+ restart: import("@endo/patterns").MethodGuard<"sync", [], import("@endo/patterns").ArgGuard[], any, import("@endo/patterns").SyncValueGuard>;
18
+ getOutcome: import("@endo/patterns").MethodGuard<"sync", [], import("@endo/patterns").ArgGuard[], (string & {
19
+ "Symbol(castedType)"?: Vow | undefined;
20
+ }) | (number & {
21
+ "Symbol(castedType)"?: Vow | undefined;
22
+ }) | (bigint & {
23
+ "Symbol(castedType)"?: Vow | undefined;
24
+ }) | (false & {
25
+ "Symbol(castedType)"?: Vow | undefined;
26
+ }) | (true & {
27
+ "Symbol(castedType)"?: Vow | undefined;
28
+ }) | (symbol & {
29
+ "Symbol(castedType)"?: Vow | undefined;
30
+ }) | (void & {
31
+ "Symbol(castedType)"?: Vow | undefined;
32
+ }) | (ArrayBuffer & {
33
+ "Symbol(castedType)"?: Vow | undefined;
34
+ }) | (import("@endo/pass-style").RemotableObject<string> & {
35
+ "Symbol(castedType)"?: Vow | undefined;
36
+ }) | (import("@endo/eventual-send").RemotableBrand<any, any> & {
37
+ "Symbol(castedType)"?: Vow | undefined;
38
+ }) | (import("@endo/pass-style").CopyArrayInterface<PassableCap, Error> & {
39
+ "Symbol(castedType)"?: Vow | undefined;
40
+ }) | (import("@endo/pass-style").CopyRecordInterface<PassableCap, Error> & {
41
+ "Symbol(castedType)"?: Vow | undefined;
42
+ }) | (import("@endo/pass-style").CopyTaggedInterface<PassableCap, Error> & {
43
+ "Symbol(castedType)"?: Vow | undefined;
44
+ }), import("@endo/patterns").SyncValueGuard>;
45
+ }>;
46
+ resultWatcher: import("@endo/patterns").InterfaceGuard<{
47
+ onFulfilled: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").RawGuard], import("@endo/patterns").ArgGuard[], import("@endo/patterns").MatcherOf<"kind", "undefined">, import("@endo/patterns").RawGuard>;
48
+ onRejected: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").RawGuard], import("@endo/patterns").ArgGuard[], import("@endo/patterns").MatcherOf<"kind", "undefined">, import("@endo/patterns").RawGuard>;
49
+ }>;
15
50
  }>;
16
51
  adminRetryableFlow: import("@endo/exo").Guarded<{
17
52
  /**
@@ -24,8 +59,39 @@ export function prepareRetryableTools(outerZone: Zone, outerOptions: Preparation
24
59
  */
25
60
  restart(): void;
26
61
  getOutcome(): Vow<any>;
27
- }>;
28
- }>;
62
+ }, import("@endo/patterns").InterfaceGuard<{
63
+ restart: import("@endo/patterns").MethodGuard<"sync", [], import("@endo/patterns").ArgGuard[], any, import("@endo/patterns").SyncValueGuard>;
64
+ getOutcome: import("@endo/patterns").MethodGuard<"sync", [], import("@endo/patterns").ArgGuard[], (string & {
65
+ "Symbol(castedType)"?: Vow | undefined;
66
+ }) | (number & {
67
+ "Symbol(castedType)"?: Vow | undefined;
68
+ }) | (bigint & {
69
+ "Symbol(castedType)"?: Vow | undefined;
70
+ }) | (false & {
71
+ "Symbol(castedType)"?: Vow | undefined;
72
+ }) | (true & {
73
+ "Symbol(castedType)"?: Vow | undefined;
74
+ }) | (symbol & {
75
+ "Symbol(castedType)"?: Vow | undefined;
76
+ }) | (void & {
77
+ "Symbol(castedType)"?: Vow | undefined;
78
+ }) | (ArrayBuffer & {
79
+ "Symbol(castedType)"?: Vow | undefined;
80
+ }) | (import("@endo/pass-style").RemotableObject<string> & {
81
+ "Symbol(castedType)"?: Vow | undefined;
82
+ }) | (import("@endo/eventual-send").RemotableBrand<any, any> & {
83
+ "Symbol(castedType)"?: Vow | undefined;
84
+ }) | (import("@endo/pass-style").CopyArrayInterface<PassableCap, Error> & {
85
+ "Symbol(castedType)"?: Vow | undefined;
86
+ }) | (import("@endo/pass-style").CopyRecordInterface<PassableCap, Error> & {
87
+ "Symbol(castedType)"?: Vow | undefined;
88
+ }) | (import("@endo/pass-style").CopyTaggedInterface<PassableCap, Error> & {
89
+ "Symbol(castedType)"?: Vow | undefined;
90
+ }), import("@endo/patterns").SyncValueGuard>;
91
+ }>>;
92
+ }, import("@endo/patterns").InterfaceGuard<{
93
+ getFlowForOutcomeVow: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").CastedPattern<Vow>], import("@endo/patterns").ArgGuard[], import("@endo/patterns").MatcherOf<"or", [import("@endo/patterns").MatcherOf<"remotable", any>, import("@endo/patterns").MatcherOf<"kind", "undefined">]>, import("@endo/patterns").SyncValueGuard>;
94
+ }>>;
29
95
  retryable: import("./types.js").RetryableTool;
30
96
  };
31
97
  export type PreparationOptions = {
@@ -40,6 +106,7 @@ export type RetryableFlowKit = ReturnType<MakeRetryableFlowKit>;
40
106
  export type RetryableFlow = RetryableFlowKit["flow"];
41
107
  import type { Zone } from '@agoric/base-zone';
42
108
  import type { Vow } from './types.js';
109
+ import type { PassableCap } from '@endo/pass-style';
43
110
  import type { VowKit } from './types.js';
44
111
  import type { IsRetryableReason } from './types.js';
45
112
  import type { Passable } from '@endo/pass-style';
@@ -1 +1 @@
1
- {"version":3,"file":"retryable.d.ts","sourceRoot":"","sources":["retryable.js"],"names":[],"mappings":"AAwCO,iDAHI,IAAI,gBACJ,kBAAkB;oCAoBhB,IAAI,OACJ,MAAM,iBACN,aAAa;;YAsBhB;;;eAGG;;;;;;;;;;QAyGP;;WAEG;yCADQ,GAAG;YA7GV;;;eAGG;;;;;;EAuHZ;;gBA9La,MAAM,OAAO,GAAG,CAAC;uBACjB,iBAAiB;;4BAIlB,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;6BA6LrC,UAAU,CAAC,OAAO,qBAAqB,CAAC;iCAIxC,cAAc,CAAC,oBAAoB,CAAC;mCAIpC,UAAU,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;+BAIrD,UAAU,CAAC,oBAAoB,CAAC;4BAIhC,gBAAgB,CAAC,MAAM,CAAC;0BAzNd,mBAAmB;yBACiB,YAAY;4BAAZ,YAAY;uCAAZ,YAAY;8BAC/B,kBAAkB"}
1
+ {"version":3,"file":"retryable.d.ts","sourceRoot":"","sources":["retryable.js"],"names":[],"mappings":"AAwCO,iDAHI,IAAI,gBACJ,kBAAkB;oCAoBhB,IAAI,OACJ,MAAM,iBACN,aAAa;;YAsBhB;;;eAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyGP;;WAEG;yCADQ,GAAG;YA7GV;;;eAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuHZ;;gBA9La,MAAM,OAAO,GAAG,CAAC;uBACjB,iBAAiB;;4BAIlB,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;6BA6LrC,UAAU,CAAC,OAAO,qBAAqB,CAAC;iCAIxC,cAAc,CAAC,oBAAoB,CAAC;mCAIpC,UAAU,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;+BAIrD,UAAU,CAAC,oBAAoB,CAAC;4BAIhC,gBAAgB,CAAC,MAAM,CAAC;0BAzNd,mBAAmB;yBACiB,YAAY;iCAC/B,kBAAkB;4BADC,YAAY;uCAAZ,YAAY;8BAC/B,kBAAkB"}
package/src/retryable.js CHANGED
@@ -148,7 +148,7 @@ export const prepareRetryableTools = (outerZone, outerOptions) => {
148
148
  const retryableKit = internalMakeRetryableFlowKit(activationArgs);
149
149
  const { flow } = retryableKit;
150
150
 
151
- const vow = flow.getOutcome();
151
+ const vow = /** @type {Vow} */ (flow.getOutcome());
152
152
  flowForOutcomeVowKey.init(toPassableCap(vow), flow);
153
153
  flow.restart();
154
154
  return retryableKit;
package/src/types.d.ts CHANGED
@@ -124,7 +124,15 @@ export type VowTools = {
124
124
  * @deprecated use `retryable`
125
125
  */
126
126
  retriable: RetryableTool;
127
- watch: <T = any, TResult1 = T, TResult2 = never, C extends any[] = any[]>(specimenP: EVow<T>, watcher?: Watcher<T, TResult1, TResult2, C> | undefined, ...watcherArgs: C) => Vow<Exclude<TResult1, void> | Exclude<TResult2, void> extends never ? TResult1 : Exclude<TResult1, void> | Exclude<TResult2, void>>;
127
+ /**
128
+ * @remarks The watcher type is decoupled from the caller's `watcherArgs`
129
+ * type. The watcher accepts `any[]` args (since its inferred guard
130
+ * signature often has `Passable[]` rest args, which would otherwise
131
+ * propagate to the caller and reject contexts containing `Remote<T>`
132
+ * references). The caller passes whatever args they want; the watcher
133
+ * receives them at runtime as whatever its impl typed them.
134
+ */
135
+ watch: <T = any, TResult1 = T, TResult2 = never, C extends unknown[] = []>(specimenP: EVow<T>, watcher?: Watcher<T, TResult1, TResult2, any[]> | undefined, ...watcherArgs: C) => Vow<Fulfilled<Exclude<TResult1, void> | Exclude<TResult2, void> extends never ? TResult1 : Exclude<TResult1, void> | Exclude<TResult2, void>>>;
128
136
  /**
129
137
  * Shorten `specimenP` until we achieve a final result.
130
138
  *
@@ -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.js CHANGED
@@ -178,14 +178,24 @@
178
178
 
179
179
 
180
180
 
181
-
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
182
190
 
183
-
191
+
184
192
 
185
193
 
186
-
187
-
188
-
194
+
195
+
196
+
197
+
198
+
189
199
 
190
200
 
191
201
 
@@ -1,12 +1,36 @@
1
1
  export function sink(): void;
2
2
  export { basicE };
3
- export const VowShape: import("@endo/patterns").Matcher;
3
+ /**
4
+ * Runtime pattern that matches a Vow (a tagged record with a vowV0
5
+ * shortener). Typed as `CastedPattern<Vow>` so it carries the Vow<any>
6
+ * type through `@endo/patterns`' TypeFromPattern resolution when used
7
+ * in guards. Use {@link Vow$} to narrow the resolved value type:
8
+ *
9
+ * query: M.call(...).returns(Vow$\<ResponseQuery[]\>(M.array()))
10
+ */
11
+ export const VowShape: CastedPattern<Vow>;
12
+ /**
13
+ * Typed Vow shape factory. At runtime returns the fixed `VowShape` (the
14
+ * payload pattern is ignored — Vows are opaque at runtime). At the type
15
+ * level, the returned value is a {@link CastedPattern} of `Vow<T>`, so
16
+ * guards like
17
+ *
18
+ * query: M.call(...).returns(Vow$(M.arrayOf(M.record())))
19
+ *
20
+ * infer the method's return type as `Vow<{ ... }[]>` instead of the
21
+ * bare `CopyTagged<'Vow', Passable>`. Pass the desired resolved-value
22
+ * type as an explicit type parameter, e.g.
23
+ * `Vow$<JsonSafe<ResponseQuery>[]>(M.arrayOf(M.record()))`.
24
+ */
25
+ export const Vow$: <T = any>(_resolvedShape: Pattern) => CastedPattern<Vow<T>>;
4
26
  export function isVow(specimen: unknown): specimen is Vow;
5
27
  export function getVowPayload<T>(specimen: any): VowPayload<T> | undefined;
6
28
  export function toPassableCap(k: PassableCap | Vow): PassableCap;
7
29
  export function makeAsVow(makeVowKit: MakeVowKit): <T extends unknown>(fn: (...args: any[]) => Vow<Awaited<T>> | Awaited<T> | PromiseVow<T>) => Vow<Awaited<T>>;
8
30
  import { E as basicE } from '@endo/eventual-send';
9
31
  import type { Vow } from './types.js';
32
+ import type { CastedPattern } from '@endo/patterns';
33
+ import type { Pattern } from '@endo/patterns';
10
34
  import type { VowPayload } from './types.js';
11
35
  import type { PassableCap } from '@endo/pass-style';
12
36
  import type { MakeVowKit } from './vow.js';
@@ -1 +1 @@
1
- {"version":3,"file":"vow-utils.d.ts","sourceRoot":"","sources":["vow-utils.js"],"names":[],"mappings":"AAWO,6BAAqB;;AAK5B,wDAKE;AAMK,gCAHI,OAAO,GACL,QAAQ,IAAI,GAAG,CAGyB;AAc9C,8BAJM,CAAC,YACH,GAAG,GACD,WAAW,CAAC,CAAC,GAAG,SAAS,CASrC;AAoBM,iCAHI,WAAW,GAAG,GAAG,GACf,WAAW,CAUvB;AAIM,sCADK,UAAU,IAKD,CAAC,sBACT,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAC9D,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAiB7B;4BAvG2B,qBAAqB;yBAMH,YAAY;gCAAZ,YAAY;iCAD5B,kBAAkB;gCAEnB,UAAU;gCADO,YAAY"}
1
+ {"version":3,"file":"vow-utils.d.ts","sourceRoot":"","sources":["vow-utils.js"],"names":[],"mappings":"AAaO,6BAAqB;;AAK5B;;;;;;;GAOG;AACH,uBAAmC,cAAc,GAAG,CAAC,CAOnD;AAEF;;;;;;;;;;;;GAYG;AACH,mBACa,CAAC,CAAC,GAAG,GAAG,EAAE,cAAc,EAAE,OAAO,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,CAEpE;AAOG,gCAHI,OAAO,GACL,QAAQ,IAAI,GAAG,CAGyB;AAc9C,8BAJM,CAAC,YACH,GAAG,GACD,WAAW,CAAC,CAAC,GAAG,SAAS,CASrC;AAoBM,iCAHI,WAAW,GAAG,GAAG,GACf,WAAW,CAUvB;AAIM,sCADK,UAAU,IAKD,CAAC,sBACT,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAC9D,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAiB7B;4BAtI2B,qBAAqB;yBAOH,YAAY;mCAE1B,gBAAgB;6BAHtB,gBAAgB;gCACI,YAAY;iCAF5B,kBAAkB;gCAGnB,UAAU;gCADO,YAAY"}
package/src/vow-utils.js CHANGED
@@ -5,8 +5,10 @@ import { M, matches } from '@endo/patterns';
5
5
 
6
6
  /**
7
7
  * @import {PassableCap} from '@endo/pass-style';
8
+ * @import {Pattern} from '@endo/patterns';
8
9
  * @import {VowPayload, Vow, PromiseVow} from './types.js';
9
10
  * @import {MakeVowKit} from './vow.js';
11
+ * @import {CastedPattern} from '@endo/patterns';
10
12
  */
11
13
 
12
14
  export const sink = () => {};
@@ -14,13 +16,42 @@ harden(sink);
14
16
 
15
17
  export { basicE };
16
18
 
17
- export const VowShape = M.tagged(
18
- 'Vow',
19
- M.splitRecord({
20
- vowV0: M.remotable('VowV0'),
21
- }),
19
+ /**
20
+ * Runtime pattern that matches a Vow (a tagged record with a vowV0
21
+ * shortener). Typed as `CastedPattern<Vow>` so it carries the Vow<any>
22
+ * type through `@endo/patterns`' TypeFromPattern resolution when used
23
+ * in guards. Use {@link Vow$} to narrow the resolved value type:
24
+ *
25
+ * query: M.call(...).returns(Vow$\<ResponseQuery[]\>(M.array()))
26
+ */
27
+ export const VowShape = /** @type {CastedPattern<Vow>} */ (
28
+ M.tagged(
29
+ 'Vow',
30
+ M.splitRecord({
31
+ vowV0: M.remotable('VowV0'),
32
+ }),
33
+ )
22
34
  );
23
35
 
36
+ /**
37
+ * Typed Vow shape factory. At runtime returns the fixed `VowShape` (the
38
+ * payload pattern is ignored — Vows are opaque at runtime). At the type
39
+ * level, the returned value is a {@link CastedPattern} of `Vow<T>`, so
40
+ * guards like
41
+ *
42
+ * query: M.call(...).returns(Vow$(M.arrayOf(M.record())))
43
+ *
44
+ * infer the method's return type as `Vow<{ ... }[]>` instead of the
45
+ * bare `CopyTagged<'Vow', Passable>`. Pass the desired resolved-value
46
+ * type as an explicit type parameter, e.g.
47
+ * `Vow$<JsonSafe<ResponseQuery>[]>(M.arrayOf(M.record()))`.
48
+ */
49
+ export const Vow$ =
50
+ /** @type {<T = any>(_resolvedShape: Pattern) => CastedPattern<Vow<T>>} */ (
51
+ _resolvedShape => VowShape
52
+ );
53
+ harden(Vow$);
54
+
24
55
  /**
25
56
  * @param {unknown} specimen
26
57
  * @returns {specimen is Vow}
@@ -17,7 +17,15 @@ export function prepareWatchUtils(zone: Zone, { watch, when, makeVowKit, isRetry
17
17
  */
18
18
  allSettled<S extends readonly unknown[]>(specimens: S): Vow<{ [P in keyof S]: PromiseSettledResult<Fulfilled<S[P]>>; }>;
19
19
  asPromise(specimenP: any, watcher?: import("./types.js").Watcher<any, any, never, any[]> | undefined, watcherArgs?: any[] | undefined): Promise<any>;
20
- }>;
20
+ }, import("@endo/patterns").InterfaceGuard<{
21
+ all: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").MatcherOf<"arrayOf", import("@endo/patterns").MatcherOf<"any", any>>], import("@endo/patterns").ArgGuard[], import("@endo/patterns").MatcherOf<"tagged", ["Vow", {
22
+ vowV0: import("@endo/patterns").MatcherOf<"remotable", import("@endo/pass-style").Passable<import("@endo/pass-style").PassableCap, Error>>;
23
+ }]>, import("@endo/patterns").SyncValueGuard>;
24
+ allSettled: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").MatcherOf<"arrayOf", import("@endo/patterns").MatcherOf<"any", any>>], import("@endo/patterns").ArgGuard[], import("@endo/patterns").MatcherOf<"tagged", ["Vow", {
25
+ vowV0: import("@endo/patterns").MatcherOf<"remotable", import("@endo/pass-style").Passable<import("@endo/pass-style").PassableCap, Error>>;
26
+ }]>, import("@endo/patterns").SyncValueGuard>;
27
+ asPromise: import("@endo/patterns").MethodGuard<"sync", [import("@endo/patterns").RawGuard], import("@endo/patterns").ArgGuard[], import("@endo/patterns").MatcherOf<"promise", any>, import("@endo/patterns").RawGuard>;
28
+ }>>;
21
29
  import type { Zone } from '@agoric/base-zone';
22
30
  import type { Watch } from './watch.js';
23
31
  import type { When } from './when.js';
@@ -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;;;;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"}
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;;;;;;;;;;IA6LlF;0BA1QsB,mBAAmB;2BAClB,YAAY;0BACb,WAAW;4BAC6C,YAAY;uCAAZ,YAAY;+BAAZ,YAAY;yBAAZ,YAAY"}
package/src/watch.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export function prepareWatch(zone: Zone, makeVowKit: () => VowKit<any>, isRetryableReason?: (reason: any, lastValue: any) => any): <T = any, TResult1 = T, TResult2 = never, C extends any[] = any[]>(specimenP: EVow<T>, watcher?: Watcher<T, TResult1, TResult2, C>, ...watcherArgs: C) => import("./types.js").Vow<Exclude<TResult1, void> | Exclude<TResult2, void> extends never ? TResult1 : Exclude<TResult1, void> | Exclude<TResult2, void>>;
1
+ export function prepareWatch(zone: Zone, makeVowKit: () => VowKit<any>, isRetryableReason?: (reason: any, lastValue: any) => any): <T = any, TResult1 = T, TResult2 = never, C extends any[] = any[]>(specimenP: EVow<T>, watcher?: Watcher<T, TResult1, TResult2, C>, ...watcherArgs: C) => import("./types.js").Vow<import("./types.js").Fulfilled<Exclude<TResult1, void> | Exclude<TResult2, void> extends never ? TResult1 : Exclude<TResult1, void> | Exclude<TResult2, void>>>;
2
2
  export type Watch = ReturnType<typeof prepareWatch>;
3
3
  import type { Zone } from '@agoric/base-zone';
4
4
  import type { VowKit } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["watch.js"],"names":[],"mappings":"AA4KO,mCAJI,IAAI,cACJ,MAAM,OAAO,GAAG,CAAC,sBACjB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,GAAG,IAe/B,CAAC,QACD,QAAQ,MACR,QAAQ,UACA,CAAC,SAAT,GAAG,EAAG,qBACT,KAAK,CAAC,CAAC,YACP,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,kBACjC,CAAC,8JAqBb;oBAIa,UAAU,CAAC,OAAO,YAAY,CAAC;0BAjNJ,mBAAmB;4BACc,YAAY;0BAAZ,YAAY;6BAAZ,YAAY"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["watch.js"],"names":[],"mappings":"AA4KO,mCAJI,IAAI,cACJ,MAAM,OAAO,GAAG,CAAC,sBACjB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,GAAG,IAe/B,CAAC,QACD,QAAQ,MACR,QAAQ,UACA,CAAC,SAAT,GAAG,EAAG,qBACT,KAAK,CAAC,CAAC,YACP,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,kBACjC,CAAC,8LAuBb;oBAIa,UAAU,CAAC,OAAO,YAAY,CAAC;0BAnNJ,mBAAmB;4BACc,YAAY;0BAAZ,YAAY;6BAAZ,YAAY"}
package/src/watch.js CHANGED
@@ -194,7 +194,9 @@ export const prepareWatch = (
194
194
  const watch = (specimenP, watcher, ...watcherArgs) => {
195
195
  /** @typedef {Exclude<TResult1, void> | Exclude<TResult2, void>} Voidless */
196
196
  /** @typedef {Voidless extends never ? TResult1 : Voidless} Narrowest */
197
- /** @type {VowKit<Narrowest>} */
197
+ // Unwrap any nested VowLikes in Narrowest so the returned Vow's
198
+ // payload is the final fulfilled value, never another Vow.
199
+ /** @type {VowKit<import('./types.js').Fulfilled<Narrowest>>} */
198
200
  const { resolver, vow } = makeVowKit();
199
201
 
200
202
  // Create a promise watcher to track vows, retrying upon rejection as