@nomicfoundation/hardhat-viem 1.0.4 → 2.0.1

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/README.md CHANGED
@@ -154,7 +154,7 @@ const contractA = await hre.viem.deployContract(
154
154
  "contractName",
155
155
  ["arg1", 50, "arg3"],
156
156
  {
157
- walletClient: secondWalletClient,
157
+ client: { wallet: secondWalletClient }
158
158
  gas: 1000000,
159
159
  value: parseEther("0.0001"),
160
160
  confirmations: 5, // 1 by default
@@ -185,7 +185,7 @@ const [_, secondWalletClient] = await hre.viem.getWalletClients();
185
185
  const contract = await hre.viem.getContractAt(
186
186
  "contractName",
187
187
  "0x1234567890123456789012345678901234567890",
188
- { walletClient: secondWalletClient }
188
+ { client: { wallet: secondWalletClient } }
189
189
  );
190
190
  ```
191
191
 
@@ -210,7 +210,7 @@ const { contract: contractName, deploymentTransaction } =
210
210
  "contractName",
211
211
  ["arg1", 50, "arg3"],
212
212
  {
213
- walletClient: secondWalletClient,
213
+ client: { wallet: secondWalletClient },
214
214
  gas: 1000000,
215
215
  value: parseEther("0.0001"),
216
216
  }
@@ -14,7 +14,7 @@ export declare function innerGetPublicClient(provider: EthereumProvider, chain:
14
14
  /**
15
15
  * Get a list of WalletClient instances. These are read-write clients that can
16
16
  * be used to send transactions to the blockchain. Each client is associated
17
- * with a an account obtained from the provider using `eth_accounts`.
17
+ * with an account obtained from the provider using `eth_accounts`.
18
18
  *
19
19
  * @param provider The Ethereum provider used to connect to the blockchain.
20
20
  * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information.
@@ -56,7 +56,7 @@ exports.innerGetPublicClient = innerGetPublicClient;
56
56
  /**
57
57
  * Get a list of WalletClient instances. These are read-write clients that can
58
58
  * be used to send transactions to the blockchain. Each client is associated
59
- * with a an account obtained from the provider using `eth_accounts`.
59
+ * with an account obtained from the provider using `eth_accounts`.
60
60
  *
61
61
  * @param provider The Ethereum provider used to connect to the blockchain.
62
62
  * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information.
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,+BAA+B,EAC/B,YAAY,EACb,MAAM,UAAU,CAAC;AAUlB,wBAAsB,cAAc,CAClC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAuBhC;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,GAAG,EAChB,gBAAgB,EAAE,GAAG,EACrB,eAAe,EAAE,GAAG,EAAE,EACtB,wBAAwB,GAAE,oBAAyB,EACnD,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAkDhC;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,+BAAoC,GAC3C,OAAO,CAAC;IACT,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qBAAqB,EAAE,wBAAwB,CAAC;CACjD,CAAC,CAqBD;AAuDD,wBAAsB,aAAa,CACjC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAchC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,+BAA+B,EAC/B,YAAY,EACb,MAAM,UAAU,CAAC;AAUlB,wBAAsB,cAAc,CAClC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,GAAG,EAChB,gBAAgB,EAAE,GAAG,EACrB,eAAe,EAAE,GAAG,EAAE,EACtB,wBAAwB,GAAE,oBAAyB,EACnD,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAkDhC;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,+BAAoC,GAC3C,OAAO,CAAC;IACT,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qBAAqB,EAAE,wBAAwB,CAAC;CACjD,CAAC,CAgBD;AAuDD,wBAAsB,aAAa,CACjC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAchC"}
@@ -27,11 +27,10 @@ exports.getContractAt = exports.sendDeploymentTransaction = exports.innerDeployC
27
27
  const clients_1 = require("./clients");
28
28
  const errors_1 = require("./errors");
29
29
  async function deployContract({ artifacts, network }, contractName, constructorArgs = [], config = {}) {
30
- const { walletClient: configWalletClient, publicClient: configPublicClient, confirmations, ...deployContractParameters } = config;
30
+ const { client, confirmations, ...deployContractParameters } = config;
31
31
  const [publicClient, walletClient, contractArtifact] = await Promise.all([
32
- configPublicClient ?? (0, clients_1.getPublicClient)(network.provider),
33
- configWalletClient ??
34
- getDefaultWalletClient(network.provider, network.name),
32
+ client?.public ?? (0, clients_1.getPublicClient)(network.provider),
33
+ client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
35
34
  artifacts.readArtifact(contractName),
36
35
  ]);
37
36
  return innerDeployContract(publicClient, walletClient, contractArtifact.abi, contractArtifact.bytecode, constructorArgs, deployContractParameters, confirmations);
@@ -70,7 +69,7 @@ async function innerDeployContract(publicClient, walletClient, contractAbi, cont
70
69
  hash: deploymentTxHash,
71
70
  confirmations,
72
71
  });
73
- if (contractAddress === null) {
72
+ if (contractAddress === null || contractAddress === undefined) {
74
73
  const transaction = await publicClient.getTransaction({
75
74
  hash: deploymentTxHash,
76
75
  });
@@ -81,11 +80,10 @@ async function innerDeployContract(publicClient, walletClient, contractAbi, cont
81
80
  }
82
81
  exports.innerDeployContract = innerDeployContract;
83
82
  async function sendDeploymentTransaction({ artifacts, network }, contractName, constructorArgs = [], config = {}) {
84
- const { walletClient: configWalletClient, publicClient: configPublicClient, ...deployContractParameters } = config;
83
+ const { client, ...deployContractParameters } = config;
85
84
  const [publicClient, walletClient, contractArtifact] = await Promise.all([
86
- configPublicClient ?? (0, clients_1.getPublicClient)(network.provider),
87
- configWalletClient ??
88
- getDefaultWalletClient(network.provider, network.name),
85
+ client?.public ?? (0, clients_1.getPublicClient)(network.provider),
86
+ client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
89
87
  artifacts.readArtifact(contractName),
90
88
  ]);
91
89
  return innerSendDeploymentTransaction(publicClient, walletClient, contractArtifact.abi, contractArtifact.bytecode, constructorArgs, deployContractParameters);
@@ -127,8 +125,8 @@ async function innerSendDeploymentTransaction(publicClient, walletClient, contra
127
125
  }
128
126
  async function getContractAt({ artifacts, network }, contractName, address, config = {}) {
129
127
  const [publicClient, walletClient, contractArtifact] = await Promise.all([
130
- config.publicClient ?? (0, clients_1.getPublicClient)(network.provider),
131
- config.walletClient ??
128
+ config.client?.public ?? (0, clients_1.getPublicClient)(network.provider),
129
+ config.client?.wallet ??
132
130
  getDefaultWalletClient(network.provider, network.name),
133
131
  artifacts.readArtifact(contractName),
134
132
  ]);
@@ -139,8 +137,10 @@ async function innerGetContractAt(publicClient, walletClient, contractAbi, addre
139
137
  const viem = await Promise.resolve().then(() => __importStar(require("viem")));
140
138
  const contract = viem.getContract({
141
139
  address,
142
- publicClient,
143
- walletClient,
140
+ client: {
141
+ public: publicClient,
142
+ wallet: walletClient,
143
+ },
144
144
  abi: contractAbi,
145
145
  });
146
146
  return contract;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomicfoundation/hardhat-viem",
3
- "version": "1.0.4",
3
+ "version": "2.0.1",
4
4
  "description": "Hardhat plugin for viem",
5
5
  "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-viem",
6
6
  "repository": "github:nomicfoundation/hardhat",
@@ -31,7 +31,7 @@
31
31
  "@types/lodash": "^4.14.123",
32
32
  "@types/lodash.memoize": "^4.1.7",
33
33
  "@types/mocha": ">=9.1.0",
34
- "@types/node": "^16.0.0",
34
+ "@types/node": "^18.0.0",
35
35
  "@types/sinon": "^9.0.8",
36
36
  "@typescript-eslint/eslint-plugin": "5.61.0",
37
37
  "@typescript-eslint/parser": "5.61.0",
@@ -40,7 +40,7 @@
40
40
  "eslint": "^8.44.0",
41
41
  "eslint-config-prettier": "8.3.0",
42
42
  "eslint-plugin-import": "2.27.5",
43
- "eslint-plugin-no-only-tests": "3.0.0",
43
+ "eslint-plugin-mocha": "10.4.1",
44
44
  "eslint-plugin-prettier": "3.4.0",
45
45
  "hardhat": "^2.17.0",
46
46
  "jest-diff": "^29.7.0",
@@ -51,14 +51,14 @@
51
51
  "sinon": "^9.0.0",
52
52
  "ts-node": "^10.8.0",
53
53
  "typescript": "~5.0.0",
54
- "viem": "^1.15.1",
55
- "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2",
56
- "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0"
54
+ "viem": "^2.7.6",
55
+ "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0",
56
+ "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "hardhat": "^2.17.0",
60
60
  "typescript": "~5.0.0",
61
- "viem": "^1.15.1"
61
+ "viem": "^2.7.6"
62
62
  },
63
63
  "dependencies": {
64
64
  "abitype": "^0.9.8",
@@ -54,7 +54,7 @@ export async function innerGetPublicClient(
54
54
  /**
55
55
  * Get a list of WalletClient instances. These are read-write clients that can
56
56
  * be used to send transactions to the blockchain. Each client is associated
57
- * with a an account obtained from the provider using `eth_accounts`.
57
+ * with an account obtained from the provider using `eth_accounts`.
58
58
  *
59
59
  * @param provider The Ethereum provider used to connect to the blockchain.
60
60
  * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information.
@@ -27,16 +27,10 @@ export async function deployContract(
27
27
  constructorArgs: any[] = [],
28
28
  config: DeployContractConfig = {}
29
29
  ): Promise<GetContractReturnType> {
30
- const {
31
- walletClient: configWalletClient,
32
- publicClient: configPublicClient,
33
- confirmations,
34
- ...deployContractParameters
35
- } = config;
30
+ const { client, confirmations, ...deployContractParameters } = config;
36
31
  const [publicClient, walletClient, contractArtifact] = await Promise.all([
37
- configPublicClient ?? getPublicClient(network.provider),
38
- configWalletClient ??
39
- getDefaultWalletClient(network.provider, network.name),
32
+ client?.public ?? getPublicClient(network.provider),
33
+ client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
40
34
  artifacts.readArtifact(contractName),
41
35
  ]);
42
36
 
@@ -94,7 +88,7 @@ export async function innerDeployContract(
94
88
  confirmations,
95
89
  });
96
90
 
97
- if (contractAddress === null) {
91
+ if (contractAddress === null || contractAddress === undefined) {
98
92
  const transaction = await publicClient.getTransaction({
99
93
  hash: deploymentTxHash,
100
94
  });
@@ -120,15 +114,10 @@ export async function sendDeploymentTransaction(
120
114
  contract: GetContractReturnType;
121
115
  deploymentTransaction: GetTransactionReturnType;
122
116
  }> {
123
- const {
124
- walletClient: configWalletClient,
125
- publicClient: configPublicClient,
126
- ...deployContractParameters
127
- } = config;
117
+ const { client, ...deployContractParameters } = config;
128
118
  const [publicClient, walletClient, contractArtifact] = await Promise.all([
129
- configPublicClient ?? getPublicClient(network.provider),
130
- configWalletClient ??
131
- getDefaultWalletClient(network.provider, network.name),
119
+ client?.public ?? getPublicClient(network.provider),
120
+ client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
132
121
  artifacts.readArtifact(contractName),
133
122
  ]);
134
123
 
@@ -202,8 +191,8 @@ export async function getContractAt(
202
191
  config: GetContractAtConfig = {}
203
192
  ): Promise<GetContractReturnType> {
204
193
  const [publicClient, walletClient, contractArtifact] = await Promise.all([
205
- config.publicClient ?? getPublicClient(network.provider),
206
- config.walletClient ??
194
+ config.client?.public ?? getPublicClient(network.provider),
195
+ config.client?.wallet ??
207
196
  getDefaultWalletClient(network.provider, network.name),
208
197
  artifacts.readArtifact(contractName),
209
198
  ]);
@@ -225,8 +214,10 @@ async function innerGetContractAt(
225
214
  const viem = await import("viem");
226
215
  const contract = viem.getContract({
227
216
  address,
228
- publicClient,
229
- walletClient,
217
+ client: {
218
+ public: publicClient,
219
+ wallet: walletClient,
220
+ },
230
221
  abi: contractAbi,
231
222
  });
232
223
 
package/src/types.ts CHANGED
@@ -13,13 +13,22 @@ export type TestClient = viemT.TestClient<
13
13
  viemT.Chain
14
14
  >;
15
15
 
16
+ export type KeyedClient =
17
+ | {
18
+ public?: PublicClient;
19
+ wallet: WalletClient;
20
+ }
21
+ | {
22
+ public: PublicClient;
23
+ wallet?: WalletClient;
24
+ };
25
+
16
26
  export type TestClientMode = Parameters<
17
27
  typeof viemT.createTestClient
18
28
  >[0]["mode"];
19
29
 
20
30
  export interface SendTransactionConfig {
21
- walletClient?: WalletClient;
22
- publicClient?: PublicClient;
31
+ client?: KeyedClient;
23
32
  gas?: bigint;
24
33
  gasPrice?: bigint;
25
34
  maxFeePerGas?: bigint;
@@ -34,18 +43,12 @@ export interface DeployContractConfig extends SendTransactionConfig {
34
43
  export type SendDeploymentTransactionConfig = SendTransactionConfig;
35
44
 
36
45
  export interface GetContractAtConfig {
37
- walletClient?: WalletClient;
38
- publicClient?: PublicClient;
46
+ client?: KeyedClient;
39
47
  }
40
48
 
41
49
  export type GetContractReturnType<
42
50
  TAbi extends viemT.Abi | readonly unknown[] = viemT.Abi
43
- > = viemT.GetContractReturnType<
44
- TAbi,
45
- PublicClient,
46
- WalletClient,
47
- viemT.Address
48
- >;
51
+ > = viemT.GetContractReturnType<TAbi, Required<KeyedClient>, viemT.Address>;
49
52
 
50
53
  export type GetTransactionReturnType = viemT.GetTransactionReturnType<
51
54
  viemT.Chain,
package/types.d.ts CHANGED
@@ -3,10 +3,16 @@ import type { ArtifactsMap } from "hardhat/types/artifacts";
3
3
  export type PublicClient = viemT.PublicClient<viemT.Transport, viemT.Chain>;
4
4
  export type WalletClient = viemT.WalletClient<viemT.Transport, viemT.Chain, viemT.Account>;
5
5
  export type TestClient = viemT.TestClient<TestClientMode, viemT.Transport, viemT.Chain>;
6
+ export type KeyedClient = {
7
+ public?: PublicClient;
8
+ wallet: WalletClient;
9
+ } | {
10
+ public: PublicClient;
11
+ wallet?: WalletClient;
12
+ };
6
13
  export type TestClientMode = Parameters<typeof viemT.createTestClient>[0]["mode"];
7
14
  export interface SendTransactionConfig {
8
- walletClient?: WalletClient;
9
- publicClient?: PublicClient;
15
+ client?: KeyedClient;
10
16
  gas?: bigint;
11
17
  gasPrice?: bigint;
12
18
  maxFeePerGas?: bigint;
@@ -18,10 +24,9 @@ export interface DeployContractConfig extends SendTransactionConfig {
18
24
  }
19
25
  export type SendDeploymentTransactionConfig = SendTransactionConfig;
20
26
  export interface GetContractAtConfig {
21
- walletClient?: WalletClient;
22
- publicClient?: PublicClient;
27
+ client?: KeyedClient;
23
28
  }
24
- export type GetContractReturnType<TAbi extends viemT.Abi | readonly unknown[] = viemT.Abi> = viemT.GetContractReturnType<TAbi, PublicClient, WalletClient, viemT.Address>;
29
+ export type GetContractReturnType<TAbi extends viemT.Abi | readonly unknown[] = viemT.Abi> = viemT.GetContractReturnType<TAbi, Required<KeyedClient>, viemT.Address>;
25
30
  export type GetTransactionReturnType = viemT.GetTransactionReturnType<viemT.Chain, "latest">;
26
31
  export type ContractName<StringT extends string> = StringT extends keyof ArtifactsMap ? never : StringT;
27
32
  export declare function deployContract<CN extends string>(contractName: ContractName<CN>, constructorArgs?: any[], config?: DeployContractConfig): Promise<GetContractReturnType>;
package/types.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAC3C,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;AACF,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CACvC,cAAc,EACd,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,CACZ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC,OAAO,KAAK,CAAC,gBAAgB,CAC9B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEb,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,+BAA+B,GAAG,qBAAqB,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,MAAM,qBAAqB,CAC/B,IAAI,SAAS,KAAK,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,IACrD,KAAK,CAAC,qBAAqB,CAC7B,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,KAAK,CAAC,OAAO,CACd,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,wBAAwB,CACnE,KAAK,CAAC,KAAK,EACX,QAAQ,CACT,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,MAAM,IAC7C,OAAO,SAAS,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,SAAS,MAAM,EACtD,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,EAC9B,eAAe,CAAC,EAAE,GAAG,EAAE,EACvB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAAE,SAAS,MAAM,EACjE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,EAC9B,eAAe,CAAC,EAAE,GAAG,EAAE,EACvB,MAAM,CAAC,EAAE,+BAA+B,GACvC,OAAO,CAAC;IACT,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qBAAqB,EAAE,wBAAwB,CAAC;CACjD,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,SAAS,MAAM,EACrD,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,EAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAElC,YAAY,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"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"}