@agoric/async-flow 0.1.1-dev-eef7b69.0.eef7b69 → 0.1.1-dev-6fe0466.0.6fe0466

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/async-flow",
3
- "version": "0.1.1-dev-eef7b69.0.eef7b69",
3
+ "version": "0.1.1-dev-6fe0466.0.6fe0466",
4
4
  "description": "Upgrade async functions at await points by replay",
5
5
  "type": "module",
6
6
  "repository": "https://github.com/Agoric/agoric-sdk",
@@ -24,10 +24,10 @@
24
24
  "author": "Agoric",
25
25
  "license": "Apache-2.0",
26
26
  "dependencies": {
27
- "@agoric/base-zone": "0.1.1-dev-eef7b69.0.eef7b69",
28
- "@agoric/internal": "0.3.3-dev-eef7b69.0.eef7b69",
29
- "@agoric/store": "0.9.3-dev-eef7b69.0.eef7b69",
30
- "@agoric/vow": "0.1.1-dev-eef7b69.0.eef7b69",
27
+ "@agoric/base-zone": "0.1.1-dev-6fe0466.0.6fe0466",
28
+ "@agoric/internal": "0.3.3-dev-6fe0466.0.6fe0466",
29
+ "@agoric/store": "0.9.3-dev-6fe0466.0.6fe0466",
30
+ "@agoric/vow": "0.1.1-dev-6fe0466.0.6fe0466",
31
31
  "@endo/common": "^1.2.13",
32
32
  "@endo/errors": "^1.2.13",
33
33
  "@endo/eventual-send": "^1.3.4",
@@ -37,8 +37,8 @@
37
37
  "@endo/promise-kit": "^1.1.13"
38
38
  },
39
39
  "devDependencies": {
40
- "@agoric/swingset-vat": "0.32.3-dev-eef7b69.0.eef7b69",
41
- "@agoric/zone": "0.2.3-dev-eef7b69.0.eef7b69",
40
+ "@agoric/swingset-vat": "0.32.3-dev-6fe0466.0.6fe0466",
41
+ "@agoric/zone": "0.2.3-dev-6fe0466.0.6fe0466",
42
42
  "@endo/env-options": "^1.1.11",
43
43
  "ava": "^5.3.0",
44
44
  "tsd": "^0.33.0"
@@ -62,5 +62,5 @@
62
62
  "typeCoverage": {
63
63
  "atLeast": 77.17
64
64
  },
65
- "gitHead": "eef7b69aab783beedcb95e10c7ef55bf65ba72c8"
65
+ "gitHead": "6fe0466cc3004cb835c4f176016d2a2c3d1c2a41"
66
66
  }
package/src/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Passable } from '@endo/pass-style';
2
- import type { Vow, VowTools } from '@agoric/vow';
2
+ import type { Fulfilled, VowLike, Vow, VowTools } from '@agoric/vow';
3
+ import type { IsPrimitive, IsRemotable } from '@agoric/internal';
3
4
  import type { LogStore } from './log-store.js';
4
5
  import type { Bijection } from './bijection.js';
5
6
  import type { EndowmentTools } from './endowments.js';
@@ -29,11 +30,27 @@ export type GuestOf<F extends HostAsyncFuncWrapper> = F extends (...args: infer
29
30
  type Simplify<T> = {
30
31
  [KeyType in keyof T]: T[KeyType];
31
32
  } & {};
33
+ type EmptyRecord = {
34
+ [K in never]: never;
35
+ };
36
+ /**
37
+ * Returns a boolean indicating whether the parameter is exactly the `any` type.
38
+ */
39
+ type IsStrictAny<T> = 0 extends 1 & T ? false : true;
40
+ /**
41
+ * Returns a boolean indicating whether the parameter is the `unknown` type.
42
+ */
43
+ type IsUnknown<T> = unknown extends T ? IsStrictAny<T> : false;
44
+ /**
45
+ * Returns a boolean for whether Host or Guest type recursion should stop for
46
+ * the given parameter.
47
+ */
48
+ type StopRecursion<T> = IsRemotable<T> extends true ? true : IsUnknown<T> extends true ? true : IsPrimitive<T> extends true ? true : false;
32
49
  /**
33
50
  * Convert an entire Guest interface into what the host will implement.
34
51
  */
35
- export type HostInterface<T> = {
36
- [K in keyof T]: T[K] extends CallableFunction ? HostOf<T[K]> : T[K] extends Record<string, any> ? Simplify<HostInterface<T[K]>> : T[K];
52
+ export type HostInterface<T, Overrides = EmptyRecord> = StopRecursion<NonNullable<T>> extends true ? T : T extends VowLike<infer P> ? Vow<HostInterface<Fulfilled<P>>> : {
53
+ [K in keyof T]: K extends keyof Overrides ? Overrides[K] : T[K] extends CallableFunction ? HostOf<T[K]> : T[K] extends Record<string, any> ? Simplify<HostInterface<T[K]>> : HostInterface<T[K]>;
37
54
  };
38
55
  /**
39
56
  * Convert an entire Host interface into what the Guest will receive.
@@ -46,7 +63,7 @@ export type GuestInterface<T> = {
46
63
  *
47
64
  * Specifically, Promise return values are converted to Vows.
48
65
  */
49
- export type HostOf<F extends CallableFunction> = F extends (...args: infer A) => infer R ? R extends Promise<infer T> ? (...args: A) => Vow<T extends Passable ? T : HostInterface<T>> : (...args: A) => HostInterface<R> : F;
66
+ export type HostOf<F> = StopRecursion<F> extends true ? F : F extends (...args: infer A) => infer R ? (...args: A) => HostInterface<R> : F;
50
67
  export type HostArgs<GA extends any[]> = {
51
68
  [K in keyof GA]: HostOf<GA[K]>;
52
69
  };
@@ -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
@@ -1,5 +1,6 @@
1
1
  import type { Passable } from '@endo/pass-style';
2
- import type { Vow, VowTools } from '@agoric/vow';
2
+ import type { Fulfilled, VowLike, Vow, VowTools } from '@agoric/vow';
3
+ import type { IsPrimitive, IsRemotable } from '@agoric/internal';
3
4
  import type { LogStore } from './log-store.js';
4
5
  import type { Bijection } from './bijection.js';
5
6
  import type { EndowmentTools } from './endowments.js';
@@ -49,16 +50,48 @@ export type GuestOf<F extends HostAsyncFuncWrapper> = F extends (
49
50
  // from https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts
50
51
  type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
51
52
 
53
+ type EmptyRecord = { [K in never]: never };
54
+
55
+ /**
56
+ * Returns a boolean indicating whether the parameter is exactly the `any` type.
57
+ */
58
+ type IsStrictAny<T> = 0 extends 1 & T ? false : true;
59
+
60
+ /**
61
+ * Returns a boolean indicating whether the parameter is the `unknown` type.
62
+ */
63
+ type IsUnknown<T> = unknown extends T ? IsStrictAny<T> : false;
64
+
65
+ /**
66
+ * Returns a boolean for whether Host or Guest type recursion should stop for
67
+ * the given parameter.
68
+ */
69
+ type StopRecursion<T> =
70
+ IsRemotable<T> extends true
71
+ ? true
72
+ : IsUnknown<T> extends true
73
+ ? true
74
+ : IsPrimitive<T> extends true
75
+ ? true
76
+ : false;
77
+
52
78
  /**
53
79
  * Convert an entire Guest interface into what the host will implement.
54
80
  */
55
- export type HostInterface<T> = {
56
- [K in keyof T]: T[K] extends CallableFunction
57
- ? HostOf<T[K]>
58
- : T[K] extends Record<string, any>
59
- ? Simplify<HostInterface<T[K]>>
60
- : T[K];
61
- };
81
+ export type HostInterface<T, Overrides = EmptyRecord> =
82
+ StopRecursion<NonNullable<T>> extends true
83
+ ? T
84
+ : T extends VowLike<infer P>
85
+ ? Vow<HostInterface<Fulfilled<P>>>
86
+ : {
87
+ [K in keyof T]: K extends keyof Overrides
88
+ ? Overrides[K]
89
+ : T[K] extends CallableFunction
90
+ ? HostOf<T[K]>
91
+ : T[K] extends Record<string, any>
92
+ ? Simplify<HostInterface<T[K]>>
93
+ : HostInterface<T[K]>;
94
+ };
62
95
 
63
96
  /**
64
97
  * Convert an entire Host interface into what the Guest will receive.
@@ -80,13 +113,12 @@ export type GuestInterface<T> = {
80
113
  *
81
114
  * Specifically, Promise return values are converted to Vows.
82
115
  */
83
- export type HostOf<F extends CallableFunction> = F extends (
84
- ...args: infer A
85
- ) => infer R
86
- ? R extends Promise<infer T>
87
- ? (...args: A) => Vow<T extends Passable ? T : HostInterface<T>>
88
- : (...args: A) => HostInterface<R>
89
- : F;
116
+ export type HostOf<F> =
117
+ StopRecursion<F> extends true
118
+ ? F
119
+ : F extends (...args: infer A) => infer R
120
+ ? (...args: A) => HostInterface<R>
121
+ : F;
90
122
 
91
123
  export type HostArgs<GA extends any[]> = { [K in keyof GA]: HostOf<GA[K]> };
92
124
 
@@ -1,5 +1,6 @@
1
- import { expectType } from 'tsd';
1
+ import { expectAssignable, expectType } from 'tsd';
2
2
  import type { Vow, VowTools } from '@agoric/vow';
3
+ import type { RemotableObject } from '@endo/pass-style';
3
4
  import type {
4
5
  HostOf,
5
6
  GuestOf,
@@ -71,3 +72,16 @@ expectType<{
71
72
  facet: ExoHostAPI;
72
73
  }>,
73
74
  );
75
+
76
+ type AssetKind = 'nat' | 'set' | 'copySet';
77
+ type Brand<K extends AssetKind = AssetKind> = RemotableObject & {
78
+ isMyIssuer: (issuer: Promise<K> | K) => Promise<boolean>;
79
+ };
80
+ expectAssignable<{ brand?: Brand<'nat'>; other: { getN: () => Vow<number> } }>(
81
+ castable as HostInterface<{
82
+ brand?: Brand;
83
+ other: {
84
+ getN: () => Promise<number>;
85
+ };
86
+ }>,
87
+ );