@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 +8 -8
- package/src/types.d.ts +21 -4
- package/src/types.d.ts.map +1 -1
- package/src/types.ts +47 -15
- package/test/types.test-d.ts +15 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/async-flow",
|
|
3
|
-
"version": "0.1.1-dev-
|
|
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-
|
|
28
|
-
"@agoric/internal": "0.3.3-dev-
|
|
29
|
-
"@agoric/store": "0.9.3-dev-
|
|
30
|
-
"@agoric/vow": "0.1.1-dev-
|
|
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-
|
|
41
|
-
"@agoric/zone": "0.2.3-dev-
|
|
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": "
|
|
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
|
|
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
|
};
|
package/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
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
|
-
|
|
57
|
-
?
|
|
58
|
-
: T
|
|
59
|
-
?
|
|
60
|
-
:
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
|
package/test/types.test-d.ts
CHANGED
|
@@ -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
|
+
);
|