-
Notifications
You must be signed in to change notification settings - Fork 206
/
types.test-d.ts
141 lines (125 loc) · 3.74 KB
/
types.test-d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/**
* @file uses .ts syntax to be able to declare types (e.g. of kit.creatorFacet as {})
* because "there is no JavaScript syntax for passing a a type argument"
* https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html
*/
import { E, RemoteFunctions } from '@endo/eventual-send';
import { expectNotType, expectType } from 'tsd';
import { M, type Key } from '@endo/patterns';
// 'prepare' is deprecated but still supported
import type { prepare as scaledPriceAuthorityStart } from '../src/contracts/scaledPriceAuthority.js';
import type { Instance } from '../src/zoeService/utils.js';
const zoe = {} as ZoeService;
const scaledPriceInstallation = {} as Installation<
typeof scaledPriceAuthorityStart
>;
const mock = null as any;
{
const kit = await E(zoe).startInstance(scaledPriceInstallation);
// @ts-expect-error
kit.notInKit;
void E(kit.publicFacet).getPriceAuthority();
expectType<{}>(kit.creatorFacet);
const validIssuers = {};
void E(zoe).startInstance(
scaledPriceInstallation,
validIssuers,
// @ts-expect-error missing terms
{},
);
const validTerms = {
sourcePriceAuthority: mock,
scaleIn: mock,
scaleOut: mock,
};
void E(zoe).startInstance(scaledPriceInstallation, validIssuers, validTerms);
const validPrivates = {};
void E(zoe).startInstance(
scaledPriceInstallation,
validIssuers,
validTerms,
validPrivates,
);
void E(zoe).startInstance(
scaledPriceInstallation,
validIssuers,
{
...validTerms,
// @ts-expect-error includes an extra term
extra: 'invalid',
},
validPrivates,
);
// This test can no longer check that the type of `privateArgs` is inferred
// since the contract used for testing does not define any specific private args.
// Because we do not have strict type checks turned on, TS downgrade the type
// `object` to `any`, making any invalid argument style check impossible.
// E(zoe).startInstance(
// scaledPriceInstallation,
// validIssuers,
// validTerms,
// // @ts-expect-error
// 'invalid privateArgs',
// );
}
{
const zcf = {} as ZCF;
const invitation = await zcf.makeInvitation(() => 1n, 'invitation');
expectType<Invitation<bigint>>(invitation);
const userSeat = E(zoe).offer(invitation);
const result = await E(userSeat).getOfferResult();
// @ts-expect-error
result.notInResult;
expectType<bigint>(result);
}
{
const zcfSeat: ZCFSeat = null as any;
expectType<Key>(zcfSeat);
}
{
const { instance } = await E(zoe).startInstance(scaledPriceInstallation);
expectType<Instance<typeof scaledPriceAuthorityStart>>(instance);
// XXX remote method requires E()
const pf1 = await zoe.getPublicFacet(instance);
void pf1.getPriceAuthority();
// @ts-expect-error
pf1.notInPublicFacet;
const rf: RemoteFunctions<typeof zoe> = mock;
rf.getPublicFacet;
const pf2 = await E(zoe).getPublicFacet(instance);
void pf2.getPriceAuthority();
// @ts-expect-error
pf2.notInPublicFacet;
}
{
const start = async (
zcf: ZCF<{ anchorBrand: Brand<'nat'> }>,
privateArgs: {
storageNode: StorageNode;
marshaller: Marshaller;
feeMintAccess?: FeeMintAccess;
},
) => ({});
const meta: ContractMeta<typeof start> = {
// XXX not detected
extrakey: 'bad',
privateArgsShape: {
// @ts-expect-error extra key
extraKey: 'bad',
marshaller: mock,
storageNode: mock,
},
// @ts-expect-error invalid upgradability value
upgradability: 'invalid',
};
const metaWithSplitRecord: ContractMeta<typeof start> = {
// XXX not detected
extrakey: 'bad',
// @ts-expect-error Matcher not assignable
privateArgsShape: M.splitRecord({
extraKey: 'bad',
marshaller: mock,
storageNode: mock,
}),
};
}