From cda6c917344ea70056fe7f3c4df643ff13afab0b Mon Sep 17 00:00:00 2001 From: bus Date: Tue, 9 Apr 2024 15:42:38 +0000 Subject: [PATCH] Migration to viem --- README.md | 2 +- package.json | 4 +- src/abis/erc20.read.ts | 144 -- src/constants.ts | 31 +- src/constants/mainnetTokens.ts | 4 +- src/context.ts | 156 +- src/croc.ts | 45 +- src/encoding/init.ts | 13 +- src/encoding/knockout.ts | 46 +- src/encoding/liquidity.ts | 74 +- src/encoding/longform.ts | 194 +- src/examples/demo.ts | 349 ++-- src/examples/queryMinimal.ts | 44 +- src/index.ts | 2 +- src/knockout.ts | 68 +- src/pool.ts | 165 +- src/position.ts | 77 +- src/recipes/reposition.ts | 84 +- src/slots.ts | 22 +- src/swap.ts | 128 +- src/tokens.ts | 136 +- src/utils/gas.ts | 46 +- src/utils/index.ts | 4 + src/utils/liquidity.ts | 55 +- src/utils/math.ts | 26 +- src/utils/price.ts | 31 +- src/utils/token.ts | 26 +- tsconfig.json | 2 +- yarn.lock | 3193 +++++++++++++++----------------- 29 files changed, 2410 insertions(+), 2761 deletions(-) delete mode 100644 src/abis/erc20.read.ts diff --git a/README.md b/README.md index d1a7e75..6078d03 100644 --- a/README.md +++ b/README.md @@ -32,5 +32,5 @@ parse a transaction receipt from ethers.js and web3.js # yarn ts-node ./examples/01-retrieve-spot-price.ts # project dependencies -ethers +viem ``` diff --git a/package.json b/package.json index 1fc3a21..bcc6a7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@crocswap-libs/sdk", - "version": "0.3.9-2", + "version": "1.0.0", "description": "🛠🐊🛠 An SDK for building applications on top of CrocSwap", "author": "Ben Wolski ", "repository": "https://github.com/CrocSwap/sdk.git", @@ -40,6 +40,6 @@ "typescript": "^5.3.3" }, "dependencies": { - "ethers": "^5.5.3" + "viem": "^2.9.13" } } diff --git a/src/abis/erc20.read.ts b/src/abis/erc20.read.ts deleted file mode 100644 index ac2bbf8..0000000 --- a/src/abis/erc20.read.ts +++ /dev/null @@ -1,144 +0,0 @@ -export const ERC20_READ_ABI = [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "balance", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - } -] \ No newline at end of file diff --git a/src/constants.ts b/src/constants.ts index 7703e7b..7961d25 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,14 +1,14 @@ -import { BigNumber } from "ethers"; +import { mainnet, goerli, sepolia, scroll, blast, blastSepolia, arbitrumGoerli, localhost, Chain, scrollSepolia } from "viem/chains"; type ChainAddress = string; -type ChainId = string; +type ChainId = `0x${string}`; export const MIN_TICK = -665454; export const MAX_TICK = 831818; -export const MAX_SQRT_PRICE: BigNumber = BigNumber.from( - "21267430153580247136652501917186561138").sub(1); -export const MIN_SQRT_PRICE: BigNumber = BigNumber.from("65538").sub(1); -export const MAX_LIQ = BigNumber.from(2).pow(128).sub(1); +export const MAX_SQRT_PRICE: bigint = BigInt( + "21267430153580247136652501917186561138") - BigInt(1); +export const MIN_SQRT_PRICE: bigint = BigInt("65538") - BigInt(1); +export const MAX_LIQ = BigInt(2) ** BigInt(128) - BigInt(1); export interface ChainSpec { nodeUrl: string; @@ -33,20 +33,21 @@ export interface ChainSpec { blockExplorer?: string; displayName: string; logoUrl?: string; + viemChain: Chain; } const ETHEREUM_LOGO = "https://d33wubrfki0l68.cloudfront.net/fcd4ecd90386aeb50a235ddc4f0063cfbb8a7b66/4295e/static/bfc04ac72981166c740b189463e1f74c/40129/eth-diamond-black-white.jpg"; const SCROLL_LOGO = "https://develop--ambient-finance.netlify.app/scroll_logo.png"; -const BLAST_LOGO = +const BLAST_LOGO = "https://assets-global.website-files.com/65a6baa1a3f8ed336f415cb4/65a6cc95aae1066cf96d497d_Logo%20Black%20on%20Yellow%20Background%402x-p-500.png" const DFLT_SDK_INFURA_KEY = '4741d1713bff4013bc3075ed6e7ce091' const GOERLI_CHAIN: ChainSpec = { - nodeUrl: "https://goerli.infura.io/v3/" + DFLT_SDK_INFURA_KEY, - wsUrl: "wss://goerli.infura.io/ws/v3/" + DFLT_SDK_INFURA_KEY, + nodeUrl: "https://goerli.infura.io/v3/" + DFLT_SDK_INFURA_KEY, + wsUrl: "wss://goerli.infura.io/ws/v3/" + DFLT_SDK_INFURA_KEY, addrs: { dex: "0xfafcd1f5530827e7398b6d3c509f450b1b24a209", query: "0xc9900777baa5EE94Cd2C6509fb09278A1A46b7e8", @@ -64,9 +65,9 @@ const GOERLI_CHAIN: ChainSpec = { blockExplorer: "https://goerli.etherscan.io/", displayName: "Görli", logoUrl: ETHEREUM_LOGO, + viemChain: goerli, }; - const ARB_GOERLI_CHAIN: ChainSpec = { nodeUrl: "https://goerli-rollup.arbitrum.io/rpc", addrs: { @@ -86,6 +87,7 @@ const ARB_GOERLI_CHAIN: ChainSpec = { blockExplorer: "https://goerli.arbiscan.io/", displayName: "Arbitrum Görli", logoUrl: ETHEREUM_LOGO, + viemChain: arbitrumGoerli, }; const MAINNET_CHAIN: ChainSpec = { @@ -111,6 +113,7 @@ const MAINNET_CHAIN: ChainSpec = { blockExplorer: "https://etherscan.io/", displayName: "Ethereum", logoUrl: ETHEREUM_LOGO, + viemChain: mainnet, }; const SEPOLIA_CHAIN: ChainSpec = { @@ -135,6 +138,7 @@ const SEPOLIA_CHAIN: ChainSpec = { blockExplorer: "https://sepolia.etherscan.io/", displayName: "Sepolia", logoUrl: ETHEREUM_LOGO, + viemChain: sepolia, }; const BLAST_CHAIN: ChainSpec = { @@ -159,6 +163,7 @@ const BLAST_CHAIN: ChainSpec = { blockExplorer: "https://blastscan.io/", displayName: "Blast", logoUrl: BLAST_LOGO, + viemChain: blast, }; const BLAST_SEPOLIA_CHAIN: ChainSpec = { @@ -183,6 +188,7 @@ const BLAST_SEPOLIA_CHAIN: ChainSpec = { blockExplorer: "https://testnet.blastscan.io/", displayName: "Blast Sepolia", logoUrl: BLAST_LOGO, + viemChain: blastSepolia, }; const SCROLL_SEPOLIA_CHAIN: ChainSpec = { @@ -206,6 +212,7 @@ const SCROLL_SEPOLIA_CHAIN: ChainSpec = { blockExplorer: "https://sepolia.scrollscan.dev/", displayName: "Scroll Sepolia", logoUrl: SCROLL_LOGO, + viemChain: scrollSepolia, }; const SCROLL_CHAIN: ChainSpec = { @@ -230,12 +237,14 @@ const SCROLL_CHAIN: ChainSpec = { blockExplorer: "https://scrollscan.com/", displayName: "Scroll", logoUrl: SCROLL_LOGO, + viemChain: scroll, }; const LOCAL_FORK_CHAIN: ChainSpec = Object.assign({}, GOERLI_CHAIN, { nodeUrl: "http://127.0.0.1:8545", chainId: "0x7a69", - displayName: "Local Fork" + displayName: "Local Fork", + viemChain: localhost, }); export const CHAIN_SPECS: { [chainId: string]: ChainSpec } = { diff --git a/src/constants/mainnetTokens.ts b/src/constants/mainnetTokens.ts index 95f5f3b..d1ae68c 100644 --- a/src/constants/mainnetTokens.ts +++ b/src/constants/mainnetTokens.ts @@ -1,6 +1,6 @@ -import { ethers } from "ethers"; +import { AddressZero } from "../utils" -export const ETH = ethers.constants.AddressZero +export const ETH = AddressZero export const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" export const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f" diff --git a/src/context.ts b/src/context.ts index 5739863..0769ba3 100644 --- a/src/context.ts +++ b/src/context.ts @@ -1,97 +1,101 @@ -import { Provider, JsonRpcProvider } from "@ethersproject/providers"; -import { Contract, ethers, Signer } from "ethers"; +import { WalletClient, PublicClient, getContract, Address, createPublicClient, http } from "viem"; import { ChainSpec, CHAIN_SPECS } from "./constants"; -import { CROC_ABI, QUERY_ABI, ERC20_ABI } from "./abis"; -import { AddressZero } from "@ethersproject/constants"; +import { CROC_ABI, QUERY_ABI } from "./abis"; import { IMPACT_ABI } from "./abis/impact"; -import { ERC20_READ_ABI } from "./abis/erc20.read"; export interface CrocContext { - provider: Provider; - dex: Contract; - router?: Contract; - routerBypass?: Contract; - query: Contract; - slipQuery: Contract; - erc20Read: Contract; - erc20Write: Contract; + publicClient: PublicClient; + walletClient?: WalletClient; + dex: any; + router?: any; + routerBypass?: any; + query: any; + slipQuery: any; + // erc20Read: any; + // erc20Write: any; chain: ChainSpec; senderAddr?: string } export type ChainIdentifier = number | string; -export type ConnectArg = Provider | Signer | ChainIdentifier; +export type ConnectArg = PublicClient | ChainIdentifier; export async function connectCroc( providerOrChainId: ConnectArg, - signer?: Signer + signer?: WalletClient ): Promise { - const [provider, maybeSigner] = await buildProvider(providerOrChainId, signer); - return setupProvider(provider, maybeSigner); + const [provider, maybeWalletClient] = await buildPublicClient(providerOrChainId, signer); + return setupPublicClient(provider, maybeWalletClient); } -async function buildProvider( +async function buildPublicClient( arg: ConnectArg, - signer?: Signer -): Promise<[Provider, Signer | undefined]> { + signer?: WalletClient +): Promise { // TODO: fix any if (typeof arg === "number" || typeof arg == "string") { const context = lookupChain(arg); - return buildProvider(new JsonRpcProvider(context.nodeUrl), signer); - } else if ("getNetwork" in arg) { + // console.warn("crocsdk is creating a public client from scratch") + const p = createPublicClient({ + chain: context.viemChain, + transport: http(context.nodeUrl), + batch: { + multicall: true, + } + }); + return [p, signer] + } else if ("estimateGas" in arg) { return [arg, signer]; - } else { - const chainId = await arg.getChainId(); - return buildProvider(chainId, signer); } } -async function setupProvider( - provider: Provider, - signer?: Signer +async function setupPublicClient( + publicClient: PublicClient, + walletClient?: WalletClient ): Promise { - const actor = determineActor(provider, signer); - const chainId = await getChain(provider); - let cntx = inflateContracts(chainId, provider, actor); - return await attachSenderAddr(cntx, actor) -} - -async function attachSenderAddr (cntx: CrocContext, - actor: Provider | Signer): Promise { - if ('getAddress' in actor) { - try { - cntx.senderAddr = await actor.getAddress() - } catch (e) { } - } + // const actor = determineActor(provider, signer); + const chainId = await getChain(publicClient); + const cntx = inflateContracts(chainId, publicClient, walletClient); + cntx.senderAddr = walletClient?.account?.address + // return await attachSenderAddr(cntx, actor) return cntx } -function determineActor( - provider: Provider, - signer?: Signer -): Signer | Provider { - if (signer) { - try { - return signer.connect(provider) - } catch { - return signer - } - } else if ("getSigner" in provider) { - try { - let signer = (provider as ethers.providers.Web3Provider).getSigner(); - return signer - } catch { - return provider - } - } else { - return provider; - } -} +// async function attachSenderAddr (cntx: CrocContext, +// actor: PublicClient | WalletClient): Promise { +// try { +// cntx.senderAddr = (actor.account?.address) +// } catch (e) { } +// return cntx +// } + +// function determineActor( +// provider: PublicClient, +// signer?: WalletClient +// ): WalletClient | PublicClient { +// if (signer) { +// try { +// return signer.connect(provider) +// } catch { +// return signer +// } +// } else if ("getWalletClient" in provider) { +// try { +// let signer = (provider as ethers.providers.Web3PublicClient).getWalletClient(); +// return signer +// } catch { +// return provider +// } +// } else { +// return provider; +// } +// } -async function getChain(provider: Provider): Promise { +// TODO: types here +async function getChain(provider: PublicClient): Promise { if ("chainId" in provider) { return (provider as any).chainId as number; - } else if ("getNetwork" in provider) { - return provider.getNetwork().then((n) => n.chainId); + } else if ("chain" in provider) { + return provider.chain?.id as number; } else { throw new Error("Invalid provider"); } @@ -99,20 +103,22 @@ async function getChain(provider: Provider): Promise { function inflateContracts( chainId: number, - provider: Provider, - actor: Provider | Signer, + publicClient: PublicClient, + walletClient?: WalletClient, addr?: string ): CrocContext { const context = lookupChain(chainId); + const actor = walletClient ? walletClient : publicClient; return { - provider: provider, - dex: new Contract(context.addrs.dex, CROC_ABI, actor), - router: context.addrs.router ? new Contract(context.addrs.router || AddressZero, CROC_ABI, actor) : undefined, - routerBypass: context.addrs.routerBypass ? new Contract(context.addrs.routerBypass || AddressZero, CROC_ABI, actor) : undefined, - query: new Contract(context.addrs.query, QUERY_ABI, provider), - slipQuery: new Contract(context.addrs.impact, IMPACT_ABI, provider), - erc20Write: new Contract(AddressZero, ERC20_ABI, actor), - erc20Read: new Contract(AddressZero, ERC20_READ_ABI, provider), + publicClient, + walletClient, + dex: getContract({address: context.addrs.dex as Address, abi: CROC_ABI, client: actor}), + router: context.addrs.router ? getContract({address: context.addrs.router as Address, abi: CROC_ABI, client: actor}): undefined, + routerBypass: context.addrs.routerBypass ? getContract({address: context.addrs.routerBypass as Address, abi: CROC_ABI, client: actor}) : undefined, + query: getContract({address: context.addrs.query as Address, abi: QUERY_ABI, client: actor}), + slipQuery: getContract({address: context.addrs.impact as Address, abi: IMPACT_ABI, client: actor}), + // erc20Write: getContract({address: AddressZero as Address, abi: ERC20_ABI, client: actor}), + // erc20Read: getContract({address: AddressZero as Address, abi: ERC20_READ_ABI, client: actor}), chain: context, senderAddr: addr }; diff --git a/src/croc.ts b/src/croc.ts index 483ebd9..1b6a981 100644 --- a/src/croc.ts +++ b/src/croc.ts @@ -1,55 +1,54 @@ import { ConnectArg, CrocContext, connectCroc } from './context'; import { CrocPoolView } from './pool'; -import { AddressZero } from '@ethersproject/constants'; import { TokenQty, CrocTokenView } from './tokens'; import { CrocSwapPlan, CrocSwapPlanOpts } from './swap'; -import { Signer } from 'ethers'; +import { Address, WalletClient } from 'viem'; import { CrocKnockoutHandle } from './knockout'; import { CrocPositionView } from './position'; import { CrocSlotReader } from './slots'; -import { TransactionResponse } from "@ethersproject/providers"; +import { AddressZero } from './utils'; /* This is the main entry point for the Croc SDK. It provides a high-level interface * for interacting with CrocSwap smart contracts in an ergonomic way. */ export class CrocEnv { - constructor (conn: ConnectArg, signer?: Signer) { - this.context = connectCroc(conn, signer) - this.tokens = new TokenRepo(this.context) + constructor (conn: ConnectArg, wallet?: WalletClient) { + this.context = connectCroc(conn, wallet) + this.tokens = new TokenRepo(this.context) } - /* Generates a prefix object for a swap with a fixed buy quantity. + /* Generates a prefix object for a swap with a fixed buy quantity. * Example of generating a swap plan for buying 100 USDC by swapping DAI: * crocEnv.buy(USDC, 100).with(DAI) - * + * * @param token The address of the token to buy. * @param qty The fixed quantity of the token to buy. */ buy (token: string, qty: TokenQty): BuyPrefix { return new BuyPrefix(token, qty, this.tokens, this.context) } - /* Generates a prefix object for a swap with a fixed buy quantity of native ETH. + /* Generates a prefix object for a swap with a fixed buy quantity of native ETH. * Example of generating a swap plan for buying 100 USDC by swapping DAI: * crocEnv.buyEth(100).with(DAI) - * + * * @param qty The fixed quantity of native ETH to buy. */ buyEth (qty: TokenQty): BuyPrefix { return new BuyPrefix(AddressZero, qty, this.tokens, this.context) } - /* Generates a prefix object for a swap with a fixed sell quantity. + /* Generates a prefix object for a swap with a fixed sell quantity. * Example of generating a swap plan for selling 100 USDC to swap into DAI: * crocEnv.sell(USDC, 100).for(DAI) - * + * * @param token The address of the token to sell. * @param qty The fixed quantity of the token to sell. */ sell (token: string, qty: TokenQty): SellPrefix { return new SellPrefix(token, qty, this.tokens, this.context) } - /* Generates a prefix object for a swap with a fixed sell quantity of native ETH. + /* Generates a prefix object for a swap with a fixed sell quantity of native ETH. * Example of generating a swap plan for selling 100 native ETH to swap into DAI: * crocEnv.sellEth(100).for(DAI) - * + * * @param qty The fixed quantity of native ETH to sell. */ sellEth (qty: TokenQty): SellPrefix { return new SellPrefix(AddressZero, qty, this.tokens, this.context) @@ -69,7 +68,7 @@ export class CrocEnv { return new CrocPoolView(viewA, viewB, this.context) } - /* Returns a view of the canonical pool for the token pair against native ETH. For example + /* Returns a view of the canonical pool for the token pair against native ETH. For example * the below woudl return a pool view for MKR/ETH with MKR priced in ETH for display purposes * crocEnv.poolEth(MKR) */ poolEth (token: string): CrocPoolView { @@ -91,7 +90,7 @@ export class CrocEnv { } /* Returns a tokenView for a single token - * @param token The address of the specifc token. */ + * @param token The address of the specifc token. */ token (token: string): CrocTokenView { return this.tokens.materialize(token) } @@ -101,7 +100,7 @@ export class CrocEnv { return this.tokens.materialize(AddressZero) } - async approveBypassRouter(): Promise { + async approveBypassRouter(): Promise { // TODO: fix any return this.tokenEth().approveBypassRouter() } @@ -122,7 +121,7 @@ class BuyPrefix { } with (token: string, args?: CrocSwapPlanOpts): CrocSwapPlan { - return new CrocSwapPlan(this.repo.materialize(token), + return new CrocSwapPlan(this.repo.materialize(token), this.repo.materialize(this.token), this.qty, true, this.context, args) } @@ -131,7 +130,7 @@ class BuyPrefix { } atLimit (token: string, tick: number): CrocKnockoutHandle { - return new CrocKnockoutHandle(this.repo.materialize(token), + return new CrocKnockoutHandle(this.repo.materialize(token), this.repo.materialize(this.token), this.qty, false, tick, this.context) } @@ -150,7 +149,7 @@ class SellPrefix { } for (token: string, args?: CrocSwapPlanOpts): CrocSwapPlan { - return new CrocSwapPlan(this.repo.materialize(this.token), + return new CrocSwapPlan(this.repo.materialize(this.token), this.repo.materialize(token), this.qty, false, this.context, args) } @@ -159,7 +158,7 @@ class SellPrefix { } atLimit (token: string, tick: number): CrocKnockoutHandle { - return new CrocKnockoutHandle(this.repo.materialize(this.token), + return new CrocKnockoutHandle(this.repo.materialize(this.token), this.repo.materialize(token), this.qty, true, tick, this.context) } @@ -185,7 +184,7 @@ class TokenRepo { materialize (tokenAddr: string): CrocTokenView { let tokenView = this.tokenViews.get(tokenAddr) if (!tokenView) { - tokenView = new CrocTokenView(this.context, tokenAddr) + tokenView = new CrocTokenView(this.context, tokenAddr as Address) this.tokenViews.set(tokenAddr, tokenView) } return tokenView @@ -193,4 +192,4 @@ class TokenRepo { tokenViews: Map context: Promise -} \ No newline at end of file +} diff --git a/src/encoding/init.ts b/src/encoding/init.ts index 7006285..dc9dcf7 100644 --- a/src/encoding/init.ts +++ b/src/encoding/init.ts @@ -1,4 +1,4 @@ -import { ethers } from "ethers"; +import { encodeAbiParameters } from "viem"; import { encodeCrocPrice } from "../utils/price"; type Address = string; @@ -10,18 +10,19 @@ export class PoolInitEncoder { this.baseToken = baseToken this.quoteToken = quoteToken this.poolIdx = poolIdx - this.abiCoder = new ethers.utils.AbiCoder(); } encodeInitialize (initPrice: number): string { const crocPrice = encodeCrocPrice(initPrice) - const POOL_INIT_TYPES = ["uint8", "address", "address", "uint256", "uint128"] - return this.abiCoder.encode(POOL_INIT_TYPES, + const POOL_INIT_TYPES = [{type: "uint8", name: "subCmd"}, + {type: "address", name: "baseToken"}, + {type: "address", name: "quoteToken"}, + {type: "uint256", name: "poolIdx"},] + return encodeAbiParameters(POOL_INIT_TYPES, [71, this.baseToken, this.quoteToken, this.poolIdx, crocPrice]) } private baseToken: Address private quoteToken: Address private poolIdx: PoolType - private abiCoder: ethers.utils.AbiCoder; -} \ No newline at end of file +} diff --git a/src/encoding/knockout.ts b/src/encoding/knockout.ts index 17cdb71..c1421bb 100644 --- a/src/encoding/knockout.ts +++ b/src/encoding/knockout.ts @@ -1,63 +1,61 @@ -import { BigNumberish, ethers } from "ethers"; +import { encodeAbiParameters } from "viem"; export class KnockoutEncoder { constructor(base: string, quote: string, poolIdx: number) { this.base = base; this.quote = quote; this.poolIdx = poolIdx; - this.abiCoder = new ethers.utils.AbiCoder(); } - + private base: string; private quote: string; private poolIdx: number; - private abiCoder: ethers.utils.AbiCoder; - encodeKnockoutMint (qty: BigNumberish, lowerTick:number, upperTick: number, + encodeKnockoutMint (qty: bigint, lowerTick:number, upperTick: number, isBid: boolean, useSurplusFlags: number): string { const MINT_SUBCMD = 91 - const suppArgs = this.abiCoder.encode(["uint128", "bool"], [qty, false]) + const suppArgs = encodeAbiParameters([{type: "uint128", name: "qty"}, {type: "bool", name: "insideMid"}], [qty, false]) return this.encodeCommonArgs(MINT_SUBCMD, lowerTick, upperTick, isBid, useSurplusFlags, suppArgs) } - encodeKnockoutBurnQty (qty: BigNumberish, lowerTick:number, upperTick: number, + encodeKnockoutBurnQty (qty: bigint, lowerTick:number, upperTick: number, isBid: boolean, useSurplusFlags: number): string { const BURN_SUBCMD = 92 - const suppArgs = this.abiCoder.encode(["uint128", "bool", "bool"], [qty, false, false]) + const suppArgs = encodeAbiParameters([{type: "uint128", name: "qty"}, {type: "bool", name: "inLiqQty"}, {type: "bool", name: "insideMid"}], [qty, false, false]) return this.encodeCommonArgs(BURN_SUBCMD, lowerTick, upperTick, isBid, useSurplusFlags, suppArgs) } - encodeKnockoutBurnLiq (liq: BigNumberish, lowerTick:number, upperTick: number, + encodeKnockoutBurnLiq (liq: bigint, lowerTick:number, upperTick: number, isBid: boolean, useSurplusFlags: number): string { const BURN_SUBCMD = 92 - const suppArgs = this.abiCoder.encode(["uint128", "bool", "bool"], [liq, true, true]) + const suppArgs = encodeAbiParameters([{type: "uint128", name: "qty"}, {type: "bool", name: "inLiqQty"}, {type: "bool", name: "insideMid"}], [liq, true, true]) return this.encodeCommonArgs(BURN_SUBCMD, lowerTick, upperTick, isBid, useSurplusFlags, suppArgs) } encodeKnockoutRecover (pivotTime: number, lowerTick:number, upperTick: number, isBid: boolean, useSurplusFlags: number): string { const BURN_SUBCMD = 94 - const suppArgs = this.abiCoder.encode(["uint32"], [pivotTime]) + const suppArgs = encodeAbiParameters([{type: "uint32", name: "pivotTime"}], [pivotTime]) return this.encodeCommonArgs(BURN_SUBCMD, lowerTick, upperTick, isBid, useSurplusFlags, suppArgs) } private encodeCommonArgs (subcmd: number, lowerTick:number, upperTick: number, isBid: boolean, useSurplusFlags: number, suppArgs: string): string { - return this.abiCoder.encode(KNOCKOUT_ARG_TYPES, - [subcmd, this.base, this.quote, this.poolIdx, - lowerTick, upperTick, isBid, + return encodeAbiParameters(KNOCKOUT_ARG_TYPES, + [subcmd, this.base, this.quote, this.poolIdx, + lowerTick, upperTick, isBid, useSurplusFlags, suppArgs]) } } const KNOCKOUT_ARG_TYPES = [ - "uint8", // Type call - "address", // Base - "address", // Quote - "uint24", // Pool Index - "int24", // Lower Tick - "int24", // Upper Tick - "bool", // isBid - "uint8", // reserve flags - "bytes", // subcmd args - ]; \ No newline at end of file + {type: "uint8", name: "subCmd"}, + {type: "address", name: "baseToken"}, + {type: "address", name: "quoteToken"}, + {type: "uint24", name: "poolIdx"}, + {type: "int24", name: "lowerTick"}, + {type: "int24", name: "upperTick"}, + {type: "bool", name: "isBid"}, + {type: "uint8", name: "reserveFlags"}, + {type: "bytes", name: "suppArgs"}, + ]; diff --git a/src/encoding/liquidity.ts b/src/encoding/liquidity.ts index 27c4b03..3e9dedd 100644 --- a/src/encoding/liquidity.ts +++ b/src/encoding/liquidity.ts @@ -1,7 +1,7 @@ -import { BigNumber, ethers } from "ethers"; +import { decodeAbiParameters, encodeAbiParameters, hexToBytes } from "viem"; import { MAX_LIQ } from "../constants"; import { encodeCrocPrice } from "../utils/price"; -import { AddressZero } from "@ethersproject/constants"; +import { AddressZero } from "../utils"; type Address = string; type PoolType = number; @@ -11,18 +11,16 @@ export class WarmPathEncoder { this.base = base; this.quote = quote; this.poolIdx = poolIdx; - this.abiCoder = new ethers.utils.AbiCoder(); } private base: Address; private quote: Address; private poolIdx: PoolType; - private abiCoder: ethers.utils.AbiCoder; encodeMintConc( lowerTick: number, upperTick: number, - qty: BigNumber, + qty: bigint, qtyIsBase: boolean, limitLow: number, limitHigh: number, @@ -42,7 +40,7 @@ export class WarmPathEncoder { encodeBurnConc( lowerTick: number, upperTick: number, - liq: BigNumber, + liq: bigint, limitLow: number, limitHigh: number, useSurplus: number @@ -69,7 +67,7 @@ export class WarmPathEncoder { HARVEST_CONCENTRATED, lowerTick, upperTick, - BigNumber.from(0), + BigInt(0), limitLow, limitHigh, useSurplus @@ -77,7 +75,7 @@ export class WarmPathEncoder { } encodeMintAmbient( - qty: BigNumber, + qty: bigint, qtyIsBase: boolean, limitLow: number, limitHigh: number, @@ -95,7 +93,7 @@ export class WarmPathEncoder { } encodeBurnAmbient( - liq: BigNumber, + liq: bigint, limitLow: number, limitHigh: number, useSurplus: number @@ -131,12 +129,12 @@ export class WarmPathEncoder { callCode: number, lowerTick: number, upperTick: number, - qty: BigNumber, + qty: bigint, limitLow: number, limitHigh: number, useSurplus: number ): string { - return this.abiCoder.encode(WARM_ARG_TYPES, [ + return encodeAbiParameters(WARM_ARG_TYPES, [ callCode, this.base, this.quote, @@ -162,29 +160,29 @@ const MINT_AMBIENT_QUOTE: number = 32; const BURN_AMBIENT: number = 4; const HARVEST_CONCENTRATED: number = 5 + const WARM_ARG_TYPES = [ - "uint8", // Type call - "address", // Base - "address", // Quote - "uint24", // Pool Index - "int24", // Lower Tick - "int24", // Upper Tick - "uint128", // Liquidity - "uint128", // Lower limit - "uint128", // Upper limit - "uint8", // reserve flags - "address", // deposit vault + { type: "uint8", name: "callType" }, + { type: "address", name: "base" }, + { type: "address", name: "quote" }, + { type: "uint24", name: "poolIdx" }, + { type: "int24", name: "lowerTick" }, + { type: "int24", name: "upperTick" }, + { type: "uint128", name: "qty" }, + { type: "uint128", name: "limitLow" }, + { type: "uint128", name: "limitHigh" }, + { type: "uint8", name: "useSurplus" }, + { type: "address", name: "depositVault"} ]; export function isTradeWarmCall(txData: string): boolean { const USER_CMD_METHOD = "0xa15112f9"; const LIQ_PATH = 2 - const encoder = new ethers.utils.AbiCoder(); if (txData.slice(0, 10) === USER_CMD_METHOD) { - const result = encoder.decode( - ["uint16", "bytes"], - "0x".concat(txData.slice(10)) + const result = decodeAbiParameters( + [{ type: "uint16", name: "cmd" }, { type: "bytes", name: "data" }], + hexToBytes(txData.slice(10) as any) // TODO: fix typing ); return result[0] == LIQ_PATH; } @@ -199,21 +197,21 @@ interface WarmPathArgs { poolIdx: number; lowerTick: number; upperTick: number; - qty: BigNumber; + qty: bigint; } +// TODO: fix typing mess export function decodeWarmPathCall(txData: string): WarmPathArgs { - const argData = "0x".concat(txData.slice(10 + 192)); - const encoder = new ethers.utils.AbiCoder(); - const result = encoder.decode(WARM_ARG_TYPES, argData); + const argData = "0x" + txData.slice(10 + 192); + const result = decodeAbiParameters(WARM_ARG_TYPES, hexToBytes(argData as any)); return { - isMint: [MINT_AMBIENT, MINT_CONCENTRATED].includes(result[0]), - isAmbient: [MINT_AMBIENT, BURN_AMBIENT].includes(result[0]), - base: result[1], - quote: result[2], - poolIdx: result[3], - lowerTick: result[4], - upperTick: result[5], - qty: result[6], + isMint: [MINT_AMBIENT, MINT_CONCENTRATED].includes(result[0] as number), + isAmbient: [MINT_AMBIENT, BURN_AMBIENT].includes(result[0] as number), + base: result[1] as Address, + quote: result[2] as Address, + poolIdx: result[3] as number, + lowerTick: result[4] as number, + upperTick: result[5] as number, + qty: result[6] as bigint, }; } diff --git a/src/encoding/longform.ts b/src/encoding/longform.ts index 460f187..952527b 100644 --- a/src/encoding/longform.ts +++ b/src/encoding/longform.ts @@ -1,21 +1,21 @@ -import { BigNumber, BytesLike, ethers, BigNumberish } from 'ethers'; +import { encodeAbiParameters, concatBytes, ByteArray, toBytes, pad, Address } from "viem" export class OrderDirective { - constructor (openToken: string) { + constructor (openToken: Address) { this.open = simpleSettle(openToken) this.hops = [] } - encodeBytes(): BytesLike { - let schema = encodeWord(LONG_FORM_SCHEMA_TYPE) - let open = encodeSettlement(this.open) - let hops = listEncoding(this.hops, encodeHop) - return ethers.utils.concat([schema, open, hops]) + encodeBytes(): ByteArray { + const schema = encodeWord(LONG_FORM_SCHEMA_TYPE) + const open = encodeSettlement(this.open) + const hops = listEncoding(this.hops, encodeHop) + return concatBytes([schema, open, hops]) } - appendHop (nextToken: string): HopDirective { - const hop = { settlement: simpleSettle(nextToken), + appendHop (nextToken: Address): HopDirective { + const hop = { settlement: simpleSettle(nextToken), pools: [], improve: { isEnabled: false, useBaseSide: false } } this.hops.push(hop) @@ -23,18 +23,18 @@ export class OrderDirective { } appendPool (poolIdx: number): PoolDirective { - const pool = { - poolIdx: poolIdx, + const pool = { + poolIdx: BigInt(poolIdx), passive: { - ambient: { isAdd: false, rollType: 0, liquidity: BigNumber.from(0) }, + ambient: { isAdd: false, rollType: 0, liquidity: BigInt(0) }, concentrated: [] }, swap: { isBuy: false, inBaseQty: false, - rollType: 0, - qty: BigNumber.from(0), - limitPrice: BigNumber.from(0) + rollType: 0, + qty: BigInt(0), + limitPrice: BigInt(0) }, chain: { rollExit: false, swapDefer: false, offsetSurplus: false} }; @@ -42,29 +42,29 @@ export class OrderDirective { return pool } - appendRangeMint (lowTick: number, highTick: number, liq: BigNumberish): ConcentratedDirective { - const range = { lowTick: lowTick, highTick: highTick, - isRelTick: false, - isAdd: true, - rollType: 0, - liquidity: BigNumber.from(liq).abs()} + appendRangeMint (lowTick: number, highTick: number, liq: bigint): ConcentratedDirective { + const range = { lowTick: lowTick, highTick: highTick, + isRelTick: false, + isAdd: true, + rollType: 0, + liquidity: liq < 0 ? -liq : BigInt(liq)} const pool = ((this.hops.at(-1) as HopDirective).pools.at(-1) as PoolDirective) pool.passive.concentrated.push(range) return range } - appendAmbientMint (liq: BigNumberish): AmbientDirective { + appendAmbientMint (liq: bigint): AmbientDirective { const pool = ((this.hops.at(-1) as HopDirective).pools.at(-1) as PoolDirective) pool.passive.ambient = { - isAdd: true, - rollType: 0, - liquidity: BigNumber.from(liq).abs() + isAdd: true, + rollType: 0, + liquidity: liq < 0 ? -liq : BigInt(liq) } return pool.passive.ambient } - appendRangeBurn (lowTick: number, highTick: number, liq: BigNumberish): ConcentratedDirective { - let range = this.appendRangeMint(lowTick, highTick, liq) + appendRangeBurn (lowTick: number, highTick: number, liq: bigint): ConcentratedDirective { + const range = this.appendRangeMint(lowTick, highTick, liq) range.isAdd = false return range } @@ -75,9 +75,9 @@ export class OrderDirective { const LONG_FORM_SCHEMA_TYPE = 1 -function simpleSettle (token: string): SettlementDirective { - return { token: token, limitQty: BigNumber.from(2).pow(125), - dustThresh: BigNumber.from(0), useSurplus: false } +function simpleSettle (token: Address): SettlementDirective { + return { token: token, limitQty: BigInt(2) ** BigInt(125), + dustThresh: BigInt(0), useSurplus: false } } export interface OrderDirective { @@ -86,9 +86,9 @@ export interface OrderDirective { } export interface SettlementDirective { - token: string - limitQty: BigNumber, - dustThresh: BigNumber, + token: Address + limitQty: bigint, + dustThresh: bigint, useSurplus: boolean } @@ -110,7 +110,7 @@ export interface HopDirective { } export interface PoolDirective { - poolIdx: BigNumberish + poolIdx: bigint passive: PassiveDirective, swap: SwapDirective chain: ChainingDirective @@ -119,9 +119,9 @@ export interface PoolDirective { export interface SwapDirective { isBuy: boolean, inBaseQty: boolean, - qty: BigNumber, + qty: bigint, rollType?: number, - limitPrice: BigNumber + limitPrice: bigint } export interface PassiveDirective { @@ -132,7 +132,7 @@ export interface PassiveDirective { export interface AmbientDirective { isAdd: boolean, rollType?: number, - liquidity: BigNumber + liquidity: bigint } export interface ConcentratedDirective { @@ -141,100 +141,100 @@ export interface ConcentratedDirective { isRelTick: boolean, isAdd: boolean, rollType?: number, - liquidity: BigNumber + liquidity: bigint } -function encodeSettlement (dir: SettlementDirective): BytesLike { - let token = encodeToken(dir.token) - let limit = encodeSigned(dir.limitQty) - let dust = encodeFull(dir.dustThresh) - let reserveFlag = encodeWord(dir.useSurplus ? 1 : 0) - return ethers.utils.concat([token, limit, dust, reserveFlag]) +function encodeSettlement (dir: SettlementDirective): ByteArray { + const token = encodeToken(dir.token) + const limit = encodeSigned(dir.limitQty) + const dust = encodeFull(dir.dustThresh) + const reserveFlag = encodeWord(dir.useSurplus ? 1 : 0) + return concatBytes([token, limit, dust, reserveFlag]) } -function encodeHop (hop: HopDirective): BytesLike { - let pools = listEncoding(hop.pools, encodePool) - let settle = encodeSettlement(hop.settlement) - let improve = encodeImprove(hop.improve) - return ethers.utils.concat([pools, settle, improve]) +function encodeHop (hop: HopDirective): ByteArray { + const pools = listEncoding(hop.pools, encodePool) + const settle = encodeSettlement(hop.settlement) + const improve = encodeImprove(hop.improve) + return concatBytes([pools, settle, improve]) } -function encodeImprove (improve: ImproveDirective): BytesLike { - let abiCoder = new ethers.utils.AbiCoder() - return abiCoder.encode(["bool", "bool"], [improve.isEnabled, improve.useBaseSide]) +function encodeImprove (improve: ImproveDirective): ByteArray { + return toBytes(encodeAbiParameters([{type: "bool"}, {type: "bool"}], [improve.isEnabled, improve.useBaseSide])) } -function encodeChain (chain: ChainingDirective): BytesLike { - let abiCoder = new ethers.utils.AbiCoder() - return abiCoder.encode(["bool", "bool", "bool"], [chain.rollExit, chain.swapDefer, chain.offsetSurplus]) +function encodeChain (chain: ChainingDirective): ByteArray { + return toBytes(encodeAbiParameters([{type: "bool"}, {type: "bool"}, {type: "bool"}], [chain.rollExit, chain.swapDefer, chain.offsetSurplus])) } -function encodePool (pool: PoolDirective): BytesLike { - let poolIdx = encodeFull(pool.poolIdx) - let passive = encodePassive(pool.passive) - let swap = encodeSwap(pool.swap) - let chain = encodeChain(pool.chain) - return ethers.utils.concat([poolIdx, passive, swap, chain]) +function encodePool (pool: PoolDirective): ByteArray { + const poolIdx = encodeFull(pool.poolIdx) + const passive = encodePassive(pool.passive) + const swap = encodeSwap(pool.swap) + const chain = encodeChain(pool.chain) + return concatBytes([poolIdx, passive, swap, chain]) } -function encodeSwap (swap: SwapDirective): BytesLike { - let abiCoder = new ethers.utils.AbiCoder() - return abiCoder.encode(["bool", "bool", "uint8", "uint128", "uint128"], - [swap.isBuy, swap.inBaseQty, swap.rollType ? swap.rollType : 0, swap.qty, swap.limitPrice]) +function encodeSwap (swap: SwapDirective): ByteArray { + // return toBytes(encodeAbiParameters(["bool", "bool", "uint8", "uint128", "uint128"], + return toBytes(encodeAbiParameters([{type: "bool", name: "isBuy"}, + {type: "bool", name: "inBaseQty"}, + {type: "uint8", name: "rollType"}, + {type: "uint128", name: "qty"}, + {type: "uint128", name: "limitPrice"}], + [swap.isBuy, swap.inBaseQty, swap.rollType ? swap.rollType : 0, swap.qty, swap.limitPrice])) } -function encodePassive (passive: PassiveDirective): BytesLike { - let ambAdd = encodeBool(passive.ambient.isAdd) - let rollType = encodeWord(passive.ambient.rollType ? passive.ambient.rollType : 0) - let ambLiq = encodeFull(passive.ambient.liquidity) - let conc = listEncoding(passive.concentrated, encodeConc) - return ethers.utils.concat([ambAdd, rollType, ambLiq, conc]) +function encodePassive (passive: PassiveDirective): ByteArray { + const ambAdd = encodeBool(passive.ambient.isAdd) + const rollType = encodeWord(passive.ambient.rollType ? passive.ambient.rollType : 0) + const ambLiq = encodeFull(passive.ambient.liquidity) + const conc = listEncoding(passive.concentrated, encodeConc) + return concatBytes([ambAdd, rollType, ambLiq, conc]) } -function encodeConc (conc: ConcentratedDirective): BytesLike { - let openTick = encodeJsSigned(conc.lowTick) - let closeTick = encodeJsSigned(conc.highTick) - let isRelTick = encodeBool(conc.isRelTick) - let isAdd = encodeBool(conc.isAdd) - let rollType = encodeWord(conc.rollType ? conc.rollType : 0) - let liq = encodeFull(conc.liquidity) - return ethers.utils.concat([openTick, closeTick, isRelTick, isAdd, rollType, liq]) +function encodeConc (conc: ConcentratedDirective): ByteArray { + const openTick = encodeJsSigned(conc.lowTick) + const closeTick = encodeJsSigned(conc.highTick) + const isRelTick = encodeBool(conc.isRelTick) + const isAdd = encodeBool(conc.isAdd) + const rollType = encodeWord(conc.rollType ? conc.rollType : 0) + const liq = encodeFull(conc.liquidity) + return concatBytes([openTick, closeTick, isRelTick, isAdd, rollType, liq]) } -function listEncoding (elems: T[], encoderFn: (x: T) => BytesLike): BytesLike { - let count = encodeWord(elems.length) - let vals = elems.map(encoderFn) - return ethers.utils.concat([count].concat(vals)) +function listEncoding (elems: T[], encoderFn: (x: T) => ByteArray): ByteArray { + const count = encodeWord(elems.length) + const vals = elems.map(encoderFn) + return concatBytes([count].concat(vals)) } -function encodeToken (tokenAddr: BytesLike): BytesLike { - return ethers.utils.hexZeroPad(tokenAddr, 32) +function encodeToken (tokenAddr: Address): ByteArray { + return toBytes(pad(tokenAddr, {size: 32})) } -function encodeFull (val: BigNumberish): BytesLike { - let abiCoder = new ethers.utils.AbiCoder() - return abiCoder.encode(["uint256"], [val]); +function encodeFull (val: bigint): ByteArray { + return toBytes(encodeAbiParameters([{type: "uint256"}], [val])); } -function encodeSigned (val: BigNumber): BytesLike { - let abiCoder = new ethers.utils.AbiCoder() - return abiCoder.encode(["int256"], [val]); +function encodeSigned (val: bigint): ByteArray { + return toBytes(encodeAbiParameters([{type: "int256"}], [val])); } -function encodeJsNum (val: number): BytesLike { - return encodeFull(BigNumber.from(val)) +function encodeJsNum (val: number): ByteArray { + return encodeFull(BigInt(val)) } -function encodeJsSigned (val: number): BytesLike { - return encodeSigned(BigNumber.from(val)) +function encodeJsSigned (val: number): ByteArray { + return encodeSigned(BigInt(val)) } -function encodeWord (val: number): BytesLike { +function encodeWord (val: number): ByteArray { return encodeJsNum(val) } -function encodeBool (flag: boolean): BytesLike { +function encodeBool (flag: boolean): ByteArray { return encodeWord(flag ? 1 : 0) } diff --git a/src/examples/demo.ts b/src/examples/demo.ts index a990c9f..bf3ca6e 100644 --- a/src/examples/demo.ts +++ b/src/examples/demo.ts @@ -1,242 +1,247 @@ -import { CrocEnv } from '../croc'; -import { ethers } from 'ethers'; +// import { Hex } from 'viem'; +// import { CrocEnv } from '../croc'; +// import { privateKeyToAccount } from 'viem/accounts'; +// import { createWalletClient } from 'viem'; + +// //const ETH = ethers.constants.AddressZero +// //const DAI = "0xdc31Ee1784292379Fbb2964b3B9C4124D8F89C60" -//const ETH = ethers.constants.AddressZero -//const DAI = "0xdc31Ee1784292379Fbb2964b3B9C4124D8F89C60" +// // Scroll +// //const USDC = "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4" -// Scroll -//const USDC = "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4" +// // Mainnet +// //const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" -// Mainnet -//const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" +// // Sepolia +// //const USDC = "0x60bBA138A74C5e7326885De5090700626950d509" -// Sepolia -//const USDC = "0x60bBA138A74C5e7326885De5090700626950d509" +// // Blast +// const USDB = "0x4300000000000000000000000000000000000003" -// Blast -const USDB = "0x4300000000000000000000000000000000000003" +// // deepcode ignore HardcodedSecret: testnet dummy key +// const KEY = process.env.WALLET_KEY || "0x7c5e2cfbba7b00ba95e5ed7cd80566021da709442e147ad3e08f23f5044a3d5a" -// deepcode ignore HardcodedSecret: testnet dummy key -const KEY = process.env.WALLET_KEY || "0x7c5e2cfbba7b00ba95e5ed7cd80566021da709442e147ad3e08f23f5044a3d5a" +// async function demo() { +// const account = privateKeyToAccount(KEY as Hex) +// const wallet = createWalletClient({ +// account, +// transport: custom(window.ethereum) +// }) +// const croc = new CrocEnv("blast", wallet) -async function demo() { - const wallet = new ethers.Wallet(KEY) +// //let tx = croc.token(USDB).approve() +// //let tx = croc.tokenEth().deposit(0.01, wallet.address) +// //let tx = croc.token(USDB).deposit(100, wallet.address) +// //console.log(await tx) - const croc = new CrocEnv("blast", wallet) +// //console.log(await croc.approveBypassRouter()) +// //console.log(await croc.token(USDC).approveRouter(100)) - //let tx = croc.token(USDB).approve() - //let tx = croc.tokenEth().deposit(0.01, wallet.address) - //let tx = croc.token(USDB).deposit(100, wallet.address) - //console.log(await tx) +// //console.log((await croc.buy(USDC, 5).withEth().useRouter().swap())) +// /*console.log((await croc.sell(USDC, 0.01).forEth().useBypass().swap())) +// console.log((await croc.sellEth(0.00001).for(USDC).useBypass().swap())) +// console.log((await croc.buyEth(0.00001).with(USDC).useBypass().swap()))*/ - //console.log(await croc.approveBypassRouter()) - //console.log(await croc.token(USDC).approveRouter(100)) +// /*const types = ["uint128","uint128","uint128","uint64","uint64","int24","bool","bool","uint8","uint128","uint128", +// "uint8","uint16","uint8","uint16","uint8","uint8","uint8","bytes32","address"] +// console.log(abi.decode(types, log))*/ - //console.log((await croc.buy(USDC, 5).withEth().useRouter().swap())) - /*console.log((await croc.sell(USDC, 0.01).forEth().useBypass().swap())) - console.log((await croc.sellEth(0.00001).for(USDC).useBypass().swap())) - console.log((await croc.buyEth(0.00001).with(USDC).useBypass().swap()))*/ +// //await croc.token(USDC).approve(0.001) +// //await croc.token(USDC).approveRouter() +// //await croc.token(USDC).approveBypassRouter() - /*const types = ["uint128","uint128","uint128","uint64","uint64","int24","bool","bool","uint8","uint128","uint128", - "uint8","uint16","uint8","uint16","uint8","uint8","uint8","bytes32","address"] - console.log(abi.decode(types, log))*/ +// //console.log((await croc.sell(USDC, 7.5).forEth().useBypass().swap())) +// //console.log((await croc.sellEth(0).for(USDC).swap())) +// //console.log((await croc.buy(USDC, 1).withEth().useBypass().swap())) +// //console.log((await croc.buyEth(0).with(USDC).forceProxy().swap())) - //await croc.token(USDC).approve(0.001) - //await croc.token(USDC).approveRouter() - //await croc.token(USDC).approveBypassRouter() - - //console.log((await croc.sell(USDC, 7.5).forEth().useBypass().swap())) - //console.log((await croc.sellEth(0).for(USDC).swap())) - //console.log((await croc.buy(USDC, 1).withEth().useBypass().swap())) - //console.log((await croc.buyEth(0).with(USDC).forceProxy().swap())) +// /*croc.token(DAI).deposit(1, wallet.address) +// croc.token(DAI).withdraw(0.25, wallet.address) +// croc.token(DAI).transfer(0.001, "0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e")*/ - /*croc.token(DAI).deposit(1, wallet.address) - croc.token(DAI).withdraw(0.25, wallet.address) - croc.token(DAI).transfer(0.001, "0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e")*/ +// //croc.tokenEth().deposit(0.001, wallet.address) +// //croc.tokenEth().withdraw(0.0001, wallet.address) +// /*let tx = croc.tokenEth().transfer(0.0001, "0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e") - //croc.tokenEth().deposit(0.001, wallet.address) - //croc.tokenEth().withdraw(0.0001, wallet.address) - /*let tx = croc.tokenEth().transfer(0.0001, "0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e") +// await (await tx).wait() +// console.log(await croc.token(DAI).balanceDisplay(wallet.address)) +// console.log(await croc.token(DAI).balanceDisplay("0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e")) +// console.log(await croc.tokenEth().balanceDisplay("0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e")) +// console.log(await croc.token(DAI).walletDisplay(wallet.address))*/ - await (await tx).wait() - console.log(await croc.token(DAI).balanceDisplay(wallet.address)) - console.log(await croc.token(DAI).balanceDisplay("0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e")) - console.log(await croc.tokenEth().balanceDisplay("0xd825D73CDD050ecbEBC0B3a8D9C5952d1F64722e")) - console.log(await croc.token(DAI).walletDisplay(wallet.address))*/ +// //let ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -78464+512, croc.context) +// /*ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -78464+1024, croc.context) +// //ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -78464+2048, croc.context) +// //ko = new CrocKnockoutHandle(AddressZero, DAI, 0.01, -78464-2048, croc.context) +// //ko = new CrocKnockoutHandle(AddressZero, DAI, 0.01, -78464-1024, croc.context) +// await (await ko.mint()).wait()*/ - //let ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -78464+512, croc.context) - /*ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -78464+1024, croc.context) - //ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -78464+2048, croc.context) - //ko = new CrocKnockoutHandle(AddressZero, DAI, 0.01, -78464-2048, croc.context) - //ko = new CrocKnockoutHandle(AddressZero, DAI, 0.01, -78464-1024, croc.context) - await (await ko.mint()).wait()*/ +// //let tx = croc.poolEth(DAI).burnAmbientLiq(BigNumber.from(10).pow(7), [0.0001, 0.001]) +// //let tx = croc.poolEth(DAI).mintRangeBase(0.0001, [-640000, 640000], [0.0001, 0.001]) +// //let tx = croc.poolEth(DAI).mintRangeBase(1.0, [-100000, 0], [0.0001, 0.001]) - //let tx = croc.poolEth(DAI).burnAmbientLiq(BigNumber.from(10).pow(7), [0.0001, 0.001]) - //let tx = croc.poolEth(DAI).mintRangeBase(0.0001, [-640000, 640000], [0.0001, 0.001]) - //let tx = croc.poolEth(DAI).mintRangeBase(1.0, [-100000, 0], [0.0001, 0.001]) +// //let tx = croc.poolEth(DAI).burnRangeLiq(BigNumber.from(10).pow(7), [-640000, 640000], [0.0001, 0.001]) +// /*let tx = croc.poolEth(DAI).harvestRange([-640000, 640000], [0.0001, 0.001]) +// await (await tx).wait()*/ - //let tx = croc.poolEth(DAI).burnRangeLiq(BigNumber.from(10).pow(7), [-640000, 640000], [0.0001, 0.001]) - /*let tx = croc.poolEth(DAI).harvestRange([-640000, 640000], [0.0001, 0.001]) - await (await tx).wait()*/ +// /*let ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -73152, croc.context) +// await (await ko.mint()).wait() +// ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -74432, croc.context) +// await (await ko.mint()).wait() - /*let ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -73152, croc.context) - await (await ko.mint()).wait() - ko = new CrocKnockoutHandle(DAI, AddressZero, 0.001, -74432, croc.context) - await (await ko.mint()).wait() - - croc.poolEth(DAI).spotTick().then(console.log) - croc.poolEth(DAI).spotPrice().then(console.log)*/ +// croc.poolEth(DAI).spotTick().then(console.log) +// croc.poolEth(DAI).spotPrice().then(console.log)*/ - /*croc.poolEth(DAI).spotPrice().then(console.log); - croc.pool(DAI, AddressZero).displayPrice().then(console.log); - croc.pool(AddressZero, DAI).displayPrice().then(console.log);*/ +// /*croc.poolEth(DAI).spotPrice().then(console.log); +// croc.pool(DAI, AddressZero).displayPrice().then(console.log); +// croc.pool(AddressZero, DAI).displayPrice().then(console.log);*/ - //await (await croc.pool(AddressZero, USDC).initPool(3000)).wait() +// //await (await croc.pool(AddressZero, USDC).initPool(3000)).wait() - /*croc.poolEth(USDC).spotPrice().then(console.log); - croc.pool(USDC, AddressZero).displayPrice().then(console.log); - croc.pool(AddressZero, USDC).displayPrice().then(console.log); +// /*croc.poolEth(USDC).spotPrice().then(console.log); +// croc.pool(USDC, AddressZero).displayPrice().then(console.log); +// croc.pool(AddressZero, USDC).displayPrice().then(console.log); - croc.pool(AddressZero, USDC).mintAmbientQuote(100, [2000, 4000])*/ +// croc.pool(AddressZero, USDC).mintAmbientQuote(100, [2000, 4000])*/ - //croc.poolEth(DAI).initPool() +// //croc.poolEth(DAI).initPool() - /*await croc.poolEth(DAI).mintAmbientQuote(50, [0.0005, 0.000625]) - await croc.poolEthQuote(DAI).mintAmbientBase(50, [1600, 1700])*/ - //await croc.poolEthQuote(DAI).mintRangeBase(50, [-80000, -64000], [1600, 1700]) +// /*await croc.poolEth(DAI).mintAmbientQuote(50, [0.0005, 0.000625]) +// await croc.poolEthQuote(DAI).mintAmbientBase(50, [1600, 1700])*/ +// //await croc.poolEthQuote(DAI).mintRangeBase(50, [-80000, -64000], [1600, 1700]) - /*await croc.poolEthQuote(DAI).mintRangeBase(5, [-80000, -64000], [1600, 1700], { surplus: [true, false]}) - await croc.poolEthQuote(DAI).mintRangeBase(5, [-80000, -64000], [1600, 1700], { surplus: [false, true]})*/ +// /*await croc.poolEthQuote(DAI).mintRangeBase(5, [-80000, -64000], [1600, 1700], { surplus: [true, false]}) +// await croc.poolEthQuote(DAI).mintRangeBase(5, [-80000, -64000], [1600, 1700], { surplus: [false, true]})*/ - //await croc.poolEth(DAI).mintAmbientBase(0.0001, [0.0001, 0.001]) - //await croc.poolEth(DAI).mintAmbientQuote(50, [0.0001, 0.001]) - //await croc.poolEth(DAI).mintRangeBase(0.03, [-640000, 640000], [0.0001, 0.001]) - //await croc.poolEth(DAI).mintRangeQuote(50, [-640000, 640000], [0.0001, 0.001]) +// //await croc.poolEth(DAI).mintAmbientBase(0.0001, [0.0001, 0.001]) +// //await croc.poolEth(DAI).mintAmbientQuote(50, [0.0001, 0.001]) +// //await croc.poolEth(DAI).mintRangeBase(0.03, [-640000, 640000], [0.0001, 0.001]) +// //await croc.poolEth(DAI).mintRangeQuote(50, [-640000, 640000], [0.0001, 0.001]) - //await croc.poolEth(DAI).burnAmbientAll([0.0001, 0.001]) +// //await croc.poolEth(DAI).burnAmbientAll([0.0001, 0.001]) - //await croc.sellEth(0.0001).for(DAI).swap() - //await croc.sell(DAI, 0.0001).forEth().swap() - /*await croc.buy(DAI, 0.0001).withEth().swap()*/ - //await croc.buyEth(0.01).with(DAI).swap() - //await croc.sellEth(0.01).for(DAI, { slippage: 0.1}).swap() +// //await croc.sellEth(0.0001).for(DAI).swap() +// //await croc.sell(DAI, 0.0001).forEth().swap() +// /*await croc.buy(DAI, 0.0001).withEth().swap()*/ +// //await croc.buyEth(0.01).with(DAI).swap() +// //await croc.sellEth(0.01).for(DAI, { slippage: 0.1}).swap() - //console.log(await croc.sellEth(20).for(DAI, { slippage: .05}).calcImpact()) +// //console.log(await croc.sellEth(20).for(DAI, { slippage: .05}).calcImpact()) - // Pay ETH from wallet, receive DAI to exchange balance - /*await croc.sellEth(0.01).for(DAI).swap({surplus: [false, true]}) +// // Pay ETH from wallet, receive DAI to exchange balance +// /*await croc.sellEth(0.01).for(DAI).swap({surplus: [false, true]}) - // Pay ETH from exchange balance, receive DAI to wallet - await croc.sellEth(0.01).for(DAI).swap({surplus: [false, true]}) +// // Pay ETH from exchange balance, receive DAI to wallet +// await croc.sellEth(0.01).for(DAI).swap({surplus: [false, true]}) - // Pay DAI from exchange balance, receive ETH to wallet - await croc.buyEth(0.01).with(DAI).swap({surplus: [true, false]}) +// // Pay DAI from exchange balance, receive ETH to wallet +// await croc.buyEth(0.01).with(DAI).swap({surplus: [true, false]}) - // Pay DAI from wallet, receive ETH to exchange balance - await croc.buyEth(0.01).with(DAI).swap({surplus: [false, true]}) +// // Pay DAI from wallet, receive ETH to exchange balance +// await croc.buyEth(0.01).with(DAI).swap({surplus: [false, true]}) - // Pay ETH to receive DAI, both to/from exchange balance - await croc.buy(DAI, 100).withEth().swap({surplus: true}) +// // Pay ETH to receive DAI, both to/from exchange balance +// await croc.buy(DAI, 100).withEth().swap({surplus: true}) - // Pay ETH to receive DAI, both to/from wallet - await croc.buy(DAI, 10).withEth().swap({surplus: false}) +// // Pay ETH to receive DAI, both to/from wallet +// await croc.buy(DAI, 10).withEth().swap({surplus: false}) - // Pay ETH to receive DAI, both to/from wallet - await croc.buy(DAI, 10).withEth().swap()*/ +// // Pay ETH to receive DAI, both to/from wallet +// await croc.buy(DAI, 10).withEth().swap()*/ - // Pays DAI to wallet and ETH to exchange balance - //await croc.pool(DAI, ETH).burnAmbientLiq(BigNumber.from(10).pow(7), [0.0001, 0.001], {surplus: [false, true]}) +// // Pays DAI to wallet and ETH to exchange balance +// //await croc.pool(DAI, ETH).burnAmbientLiq(BigNumber.from(10).pow(7), [0.0001, 0.001], {surplus: [false, true]}) - // Pays DAI to exchange balance and ETH to wallet - /*await croc.pool(DAI, ETH).burnAmbientLiq(BigNumber.from(10).pow(7), [0.0001, 0.001], {surplus: [true, false]}) +// // Pays DAI to exchange balance and ETH to wallet +// /*await croc.pool(DAI, ETH).burnAmbientLiq(BigNumber.from(10).pow(7), [0.0001, 0.001], {surplus: [true, false]}) - // Pays ETH to exchange balance and DAI to wallet - await croc.pool(ETH, DAI).burnAmbientLiq(BigNumber.from(10).pow(7), [1000, 10000], {surplus: [true, false]}) +// // Pays ETH to exchange balance and DAI to wallet +// await croc.pool(ETH, DAI).burnAmbientLiq(BigNumber.from(10).pow(7), [1000, 10000], {surplus: [true, false]}) - // Pays ETH to wallet and DAI to exchange balance - await croc.pool(ETH, DAI).burnAmbientLiq(BigNumber.from(10).pow(7), [1000, 10000], {surplus: [false, true]})*/ +// // Pays ETH to wallet and DAI to exchange balance +// await croc.pool(ETH, DAI).burnAmbientLiq(BigNumber.from(10).pow(7), [1000, 10000], {surplus: [false, true]})*/ - // Mint new limit order for $25. Pay from exchange balance - /*croc.sell(DAI, 200).atLimit(ETH, -64000).burn({surplus: true})*/ +// // Mint new limit order for $25. Pay from exchange balance +// /*croc.sell(DAI, 200).atLimit(ETH, -64000).burn({surplus: true})*/ - // Burn $10 worth of existing limit order. Receive to wallet - //croc.sell(DAI, 10).atLimit(ETH, -64000).mint({surplus: false}) +// // Burn $10 worth of existing limit order. Receive to wallet +// //croc.sell(DAI, 10).atLimit(ETH, -64000).mint({surplus: false}) - // Burn 1 billion units of concentrated liquidity for the limit order - //croc.sell(DAI, 2).atLimit(ETH, -64000).burnLiq(BigNumber.from(1000000000)) +// // Burn 1 billion units of concentrated liquidity for the limit order +// //croc.sell(DAI, 2).atLimit(ETH, -64000).burnLiq(BigNumber.from(1000000000)) - /*console.log(await (await croc.token(DAI).balance(wallet.address)).toString()) - console.log(await (await croc.tokenEth().balance(wallet.address)).toString()) +// /*console.log(await (await croc.token(DAI).balance(wallet.address)).toString()) +// console.log(await (await croc.tokenEth().balance(wallet.address)).toString()) - ///console.log(baseTokenForQuoteConc(100, 1600, 1700)) +// ///console.log(baseTokenForQuoteConc(100, 1600, 1700)) - //croc.buy(DAI, 10).atLimit(ETH, -80000).mint({surplus: false}) +// //croc.buy(DAI, 10).atLimit(ETH, -80000).mint({surplus: false}) - let plan = croc.buy(USDC, 1).with(ETH) - console.log((await plan.impact)) - console.log((await plan.calcSlipQty()).toString())*/ +// let plan = croc.buy(USDC, 1).with(ETH) +// console.log((await plan.impact)) +// console.log((await plan.calcSlipQty()).toString())*/ - /*console.log(await croc.poolEthQuote(DAI).spotTick()) - console.log(await croc.poolEthQuote(DAI).displayPrice())*/ +// /*console.log(await croc.poolEthQuote(DAI).spotTick()) +// console.log(await croc.poolEthQuote(DAI).displayPrice())*/ - //console.log(await croc.poolEth(DAI).mintAmbientQuote(50, [0.0001, 0.001])) - //console.log(await croc.poolEthQuote(DAI).mintRangeBase(50, [-64000 - 3200, -64000,], [0.00000001, 100000.0])) - //console.log(await croc.poolEthQuote(DAI).mintRangeBase(0.001, [-80000 - 3200, -80000,], [0.00000001, 100000.0])) +// //console.log(await croc.poolEth(DAI).mintAmbientQuote(50, [0.0001, 0.001])) +// //console.log(await croc.poolEthQuote(DAI).mintRangeBase(50, [-64000 - 3200, -64000,], [0.00000001, 100000.0])) +// //console.log(await croc.poolEthQuote(DAI).mintRangeBase(0.001, [-80000 - 3200, -80000,], [0.00000001, 100000.0])) - //console.log(await croc.poolEthQuote(USDC).mintRangeBase(50, [208000 - 3200, 208000,], [0.00000001, 100000.0])) +// //console.log(await croc.poolEthQuote(USDC).mintRangeBase(50, [208000 - 3200, 208000,], [0.00000001, 100000.0])) - //console.log(await croc.poolEthQuote(DAI).mintRangeBase(0.001, [3180*64, 3182*64], [1600, 1700])) +// //console.log(await croc.poolEthQuote(DAI).mintRangeBase(0.001, [3180*64, 3182*64], [1600, 1700])) - /*const pool = croc.poolEthQuote(DAI) - console.log(await pool.displayToPinTick(1500)) - console.log(await pool.displayToPinTick(1600)) +// /*const pool = croc.poolEthQuote(DAI) +// console.log(await pool.displayToPinTick(1500)) +// console.log(await pool.displayToPinTick(1600)) - let rebal = new CrocReposition(pool, { burn: [-64000 - 3200, -64000], mint: [-73792, -73088], - liquidity: BigNumber.from(10).pow(14) }) +// let rebal = new CrocReposition(pool, { burn: [-64000 - 3200, -64000], mint: [-73792, -73088], +// liquidity: BigNumber.from(10).pow(14) }) - /*console.log((await rebal.currentCollateral()).toString()) - console.log((await rebal.balancePercent()))*/ +// /*console.log((await rebal.currentCollateral()).toString()) +// console.log((await rebal.balancePercent()))*/ - //console.log((await (await rebal.mintInput()))) - //console.log((await (await rebal.swapOutput()))) - //console.log(await rebal.rebal()) - /*const burnRange: [number, number] = [-64000 - 3200, -64000] - const mintRange: [number, number] = [-76032, -72000] - console.log(await rebal.rebal(burnRange, mintRange))*/ - - //console.log(await croc.poolEthQuote(DAI).mintRangeBase(5, [-72000 - 3200, -64000,], [0.00000001, 100000.0])) - //console.log(await croc.poolEthQuote(DAI).mintRangeBase(5, [-76032, -72000,], [1600, 1700])) - //console.log(await croc.poolEth(DAI).mintRangeQuote(50, [-64000 - 3200, -64000,], [0.00000001, 100000.0])) - //console.log(await croc.poolEthQuote(DAI).mintRangeBase(50, [-64000 - 3200, -64000,], [0.00000001, 100000.0])) +// //console.log((await (await rebal.mintInput()))) +// //console.log((await (await rebal.swapOutput()))) +// //console.log(await rebal.rebal()) +// /*const burnRange: [number, number] = [-64000 - 3200, -64000] +// const mintRange: [number, number] = [-76032, -72000] +// console.log(await rebal.rebal(burnRange, mintRange))*/ - //console.log(capitalConcFactor(1000, 250, 4000))*/ +// //console.log(await croc.poolEthQuote(DAI).mintRangeBase(5, [-72000 - 3200, -64000,], [0.00000001, 100000.0])) +// //console.log(await croc.poolEthQuote(DAI).mintRangeBase(5, [-76032, -72000,], [1600, 1700])) +// //console.log(await croc.poolEth(DAI).mintRangeQuote(50, [-64000 - 3200, -64000,], [0.00000001, 100000.0])) +// //console.log(await croc.poolEthQuote(DAI).mintRangeBase(50, [-64000 - 3200, -64000,], [0.00000001, 100000.0])) - /*const pool = croc.poolEthQuote(DAI) - /*console.log(await pool.displayToPinTick(1378.62)) - console.log(await pool.displayToPinTick(1691.94))*/ +// //console.log(capitalConcFactor(1000, 250, 4000))*/ - /*const pool = croc.poolEthQuote(USDC) - console.log(await pool.spotPrice()) +// /*const pool = croc.poolEthQuote(DAI) +// /*console.log(await pool.displayToPinTick(1378.62)) +// console.log(await pool.displayToPinTick(1691.94))*/ - console.log(await pool.cumAmbientGrowth()) +// /*const pool = croc.poolEthQuote(USDC) +// console.log(await pool.spotPrice()) - const posView = new CrocPositionView(pool, "0x9ee66F4ac79395479d6A8Bb552AF6eC3F27049CC") +// console.log(await pool.cumAmbientGrowth()) - console.log(await posView.queryRangePos(199308, 201312))*/ +// const posView = new CrocPositionView(pool, "0x9ee66F4ac79395479d6A8Bb552AF6eC3F27049CC") - //console.log(await croc.poolEthQuote(USDC).displayPrice()) +// console.log(await posView.queryRangePos(199308, 201312))*/ - //croc.sell(DAI, 200).atLimit(ETH, -64000).burn({surplus: true}) +// //console.log(await croc.poolEthQuote(USDC).displayPrice()) - /*console.log((await croc.tokenEth().balance("benwolski.eth")).toString()) - console.log(await croc.tokenEth().balanceDisplay("benwolski.eth"))*/ +// //croc.sell(DAI, 200).atLimit(ETH, -64000).burn({surplus: true}) - croc.slotReader().isHotPathOpen().then(console.log) - console.log(await croc.slotReader().proxyContract(1)) - console.log(await croc.slotReader().proxyContract(131)) +// /*console.log((await croc.tokenEth().balance("benwolski.eth")).toString()) +// console.log(await croc.tokenEth().balanceDisplay("benwolski.eth"))*/ - console.log(await croc.poolEthQuote(USDB).curveState()) -} +// croc.slotReader().isHotPathOpen().then(console.log) +// console.log(await croc.slotReader().proxyContract(1)) +// console.log(await croc.slotReader().proxyContract(131)) -demo() +// console.log(await croc.poolEthQuote(USDB).curveState()) +// } + +// demo() diff --git a/src/examples/queryMinimal.ts b/src/examples/queryMinimal.ts index 232d9b3..cb91dfa 100644 --- a/src/examples/queryMinimal.ts +++ b/src/examples/queryMinimal.ts @@ -1,31 +1,31 @@ -/* Example script to make a query call to CrocQuery contract with - * minimal syntactic sugar from the SDK, to make clear what's going on. */ +// /* Example script to make a query call to CrocQuery contract with +// * minimal syntactic sugar from the SDK, to make clear what's going on. */ -import { Contract, ethers, providers } from "ethers" -import { QUERY_ABI } from "../abis" -import { CHAIN_SPECS } from "../constants" +// import { Contract, ethers, providers } from "ethers" +// import { QUERY_ABI } from "../abis" +// import { CHAIN_SPECS } from "../constants" -// Goerli network addresses -const ETH = ethers.constants.AddressZero -const USDC = "0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C" +// // Goerli network addresses +// const ETH = ethers.constants.AddressZero +// const USDC = "0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C" -// CrocQuery adddress -const QUERY_CONTRACT_ADDR = "0x93a4baFDd49dB0e06f3F3f9FddC1A67792F47518" +// // CrocQuery adddress +// const QUERY_CONTRACT_ADDR = "0x93a4baFDd49dB0e06f3F3f9FddC1A67792F47518" -// Standard pool type index on Goerli -const POOL_IDX = 36000 +// // Standard pool type index on Goerli +// const POOL_IDX = 36000 -// Goerli RPC endpoint -const rpc = CHAIN_SPECS["0x5"].nodeUrl +// // Goerli RPC endpoint +// const rpc = CHAIN_SPECS["0x5"].nodeUrl -async function queryContract() { - const provider = new providers.JsonRpcProvider(rpc) +// async function queryContract() { +// const provider = new providers.JsonRpcProvider(rpc) - const query = new Contract(QUERY_CONTRACT_ADDR, QUERY_ABI, provider) +// const query = new Contract(QUERY_CONTRACT_ADDR, QUERY_ABI, provider) - // Note this is the on-chain representation, not the display price - const chainPrice = await query.queryPrice(ETH, USDC, POOL_IDX) - console.log("On chain pool price is ", chainPrice.toString()) -} +// // Note this is the on-chain representation, not the display price +// const chainPrice = await query.queryPrice(ETH, USDC, POOL_IDX) +// console.log("On chain pool price is ", chainPrice.toString()) +// } -queryContract() +// queryContract() diff --git a/src/index.ts b/src/index.ts index bfe95da..fd7ca5b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,5 +7,5 @@ export * from "./swap"; export * from "./croc"; export * from "./encoding/liquidity"; - +export * from "./encoding/longform"; export * from "./recipes/reposition"; diff --git a/src/knockout.ts b/src/knockout.ts index f11ef7b..d797dcd 100644 --- a/src/knockout.ts +++ b/src/knockout.ts @@ -1,13 +1,9 @@ -import { BigNumber, BigNumberish } from "ethers"; -import { TransactionResponse } from '@ethersproject/providers'; import { CrocContext } from './context'; import { CrocEthView, CrocTokenView, sortBaseQuoteViews, TokenQty } from './tokens'; -import { AddressZero } from '@ethersproject/constants'; import { KnockoutEncoder } from "./encoding/knockout"; import { ChainSpec } from "./constants"; import { CrocSurplusFlags, decodeSurplusFlag, encodeSurplusArg } from "./encoding/flags"; -import { baseTokenForQuoteConc, bigNumToFloat, floatToBigNum, quoteTokenForBaseConc, roundForConcLiq } from "./utils"; -import { GAS_PADDING } from "./utils"; +import { baseTokenForQuoteConc, bigIntToFloat, floatToBigInt, quoteTokenForBaseConc, roundForConcLiq, GAS_PADDING, AddressZero } from "./utils"; export class CrocKnockoutHandle { @@ -21,88 +17,88 @@ export class CrocKnockoutHandle { const tokenView = this.qtyInBase ? this.baseToken : this.quoteToken const specQty = tokenView.normQty(qty) - this.qty = inSellQty ? specQty : + this.qty = inSellQty ? specQty : calcSellQty(specQty, !this.sellBase, knockoutTick, context) this.knockoutTick = knockoutTick this.context = context } - async mint (opts?: CrocKnockoutOpts): Promise { + async mint (opts?: CrocKnockoutOpts): Promise { // TODO: fix any const chain = (await this.context).chain - const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, + const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, chain.poolIndex) const [lowerTick, upperTick] = this.tickRange(chain) const surplus = this.maskSurplusFlags(opts) - const cmd = encoder.encodeKnockoutMint(await this.qty, lowerTick, upperTick, + const cmd = encoder.encodeKnockoutMint(await this.qty, lowerTick, upperTick, this.sellBase, surplus); return this.sendCmd(cmd, { value: await this.msgVal(surplus) }) } - async burn (opts?: CrocKnockoutOpts): Promise { + async burn (opts?: CrocKnockoutOpts): Promise { const chain = (await this.context).chain - const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, chain.poolIndex) const [lowerTick, upperTick] = this.tickRange(chain) const surplus = this.maskSurplusFlags(opts) - const cmd = encoder.encodeKnockoutBurnQty(await this.qty, lowerTick, upperTick, + const cmd = encoder.encodeKnockoutBurnQty(await this.qty, lowerTick, upperTick, this.sellBase, surplus); return this.sendCmd(cmd) } - async burnLiq (liq: BigNumber, opts?: CrocKnockoutOpts): Promise { + async burnLiq (liq: bigint, opts?: CrocKnockoutOpts): Promise { const chain = (await this.context).chain - const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, chain.poolIndex) const [lowerTick, upperTick] = this.tickRange(chain) const surplus = this.maskSurplusFlags(opts) - const cmd = encoder.encodeKnockoutBurnLiq(roundForConcLiq(liq), lowerTick, upperTick, + const cmd = encoder.encodeKnockoutBurnLiq(roundForConcLiq(liq), lowerTick, upperTick, this.sellBase, surplus); return this.sendCmd(cmd) } - async recoverPost (pivotTime: number, opts?: CrocKnockoutOpts): Promise { + async recoverPost (pivotTime: number, opts?: CrocKnockoutOpts): Promise { const chain = (await this.context).chain - const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + const encoder = new KnockoutEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, chain.poolIndex) const [lowerTick, upperTick] = this.tickRange(chain) const surplus = this.maskSurplusFlags(opts) - const cmd = encoder.encodeKnockoutRecover(pivotTime, lowerTick, upperTick, + const cmd = encoder.encodeKnockoutRecover(pivotTime, lowerTick, upperTick, this.sellBase, surplus); return this.sendCmd(cmd) } async willMintFail(): Promise { const gridSize = this.context.then(c => c.chain.gridSize) - const marketTick = this.context.then(c => c.query.queryCurveTick - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, c.chain.poolIndex)) + const marketTick = this.context.then(c => c.query.read.queryCurveTick + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, c.chain.poolIndex])) return this.sellBase ? (this.knockoutTick + await gridSize >= await marketTick) : (this.knockoutTick - await gridSize <= await marketTick) } - private async sendCmd (calldata: string, txArgs?: { value?: BigNumberish }): - Promise { - let cntx = await this.context + private async sendCmd (calldata: string, txArgs?: { value?: bigint }): + Promise { + const cntx = await this.context if (txArgs === undefined) { txArgs = {} } const gasEst = await cntx.dex.estimateGas.userCmd(KNOCKOUT_PATH, calldata, txArgs) - Object.assign(txArgs, { gasLimit: gasEst.add(GAS_PADDING)}) - return cntx.dex.userCmd(KNOCKOUT_PATH, calldata, txArgs); + Object.assign(txArgs, { gasLimit: gasEst + GAS_PADDING}) + return cntx.dex.write.userCmd([KNOCKOUT_PATH, calldata], txArgs) } private maskSurplusFlags (opts?: CrocKnockoutOpts): number { if (!opts || !opts.surplus) { return encodeSurplusArg(false) } - else { + else { return encodeSurplusArg(opts.surplus) } } - private async msgVal (surplusFlags: number): Promise { + private async msgVal (surplusFlags: number): Promise { if (this.baseToken.tokenAddr !== AddressZero || !this.sellBase) { - return BigNumber.from(0) + return BigInt(0) } const useSurp = decodeSurplusFlag(surplusFlags)[0] @@ -119,7 +115,7 @@ export class CrocKnockoutHandle { readonly baseToken: CrocTokenView readonly quoteToken: CrocTokenView - readonly qty: Promise + readonly qty: Promise readonly sellBase: boolean readonly qtyInBase: boolean readonly knockoutTick: number @@ -132,10 +128,10 @@ export interface CrocKnockoutOpts { const KNOCKOUT_PATH = 7 -async function calcSellQty (buyQty: Promise, isQtyInBase: boolean, knockoutTick: number, - context: Promise): Promise { - const sellQty = calcSellFloat(bigNumToFloat(await buyQty), isQtyInBase, knockoutTick, context) - return sellQty.then(floatToBigNum) +async function calcSellQty (buyQty: Promise, isQtyInBase: boolean, knockoutTick: number, + context: Promise): Promise { + const sellQty = calcSellFloat(bigIntToFloat(await buyQty), isQtyInBase, knockoutTick, context) + return sellQty.then(floatToBigInt) } async function calcSellFloat (buyQty: number, isQtyInBase: boolean, knockoutTick: number, @@ -144,13 +140,13 @@ async function calcSellFloat (buyQty: number, isQtyInBase: boolean, knockoutTick const lowerPrice = Math.pow(1.0001, lowerTick) const upperPrice = Math.pow(1.0001, upperTick) - return isQtyInBase ? + return isQtyInBase ? baseTokenForQuoteConc(buyQty, lowerPrice, upperPrice) : quoteTokenForBaseConc(buyQty, lowerPrice, upperPrice) } function tickRange (chain: ChainSpec, knockoutTick: number, sellBase: boolean): [number, number] { - return sellBase ? + return sellBase ? [knockoutTick, knockoutTick + chain.gridSize] : [knockoutTick - chain.gridSize, knockoutTick] -} \ No newline at end of file +} diff --git a/src/pool.ts b/src/pool.ts index 645224a..24acd1e 100644 --- a/src/pool.ts +++ b/src/pool.ts @@ -1,23 +1,20 @@ /* eslint-disable prefer-const */ import { CrocContext } from "./context"; -import { decodeCrocPrice, toDisplayPrice, bigNumToFloat, toDisplayQty, fromDisplayPrice, roundForConcLiq, concDepositSkew, pinTickLower, pinTickUpper, neighborTicks, pinTickOutside, tickToPrice, concBaseSlippagePrice, concQuoteSlippagePrice } from './utils'; +import { decodeCrocPrice, toDisplayPrice, bigIntToFloat, toDisplayQty, fromDisplayPrice, roundForConcLiq, concDepositSkew, pinTickLower, pinTickUpper, neighborTicks, pinTickOutside, tickToPrice, concBaseSlippagePrice, concQuoteSlippagePrice, GAS_PADDING, AddressZero } from './utils'; import { CrocEthView, CrocTokenView, sortBaseQuoteViews, TokenQty } from './tokens'; -import { TransactionResponse } from '@ethersproject/providers'; import { WarmPathEncoder } from './encoding/liquidity'; -import { BigNumber, BigNumberish } from 'ethers'; -import { AddressZero } from '@ethersproject/constants'; import { PoolInitEncoder } from "./encoding/init"; import { CrocSurplusFlags, decodeSurplusFlag, encodeSurplusArg } from "./encoding/flags"; -import { GAS_PADDING } from "./utils"; +import { toHex } from "viem"; type PriceRange = [number, number] type TickRange = [number, number] -type BlockTag = number | string +type BlockTag = number | string | bigint export class CrocPoolView { constructor (quoteToken: CrocTokenView, baseToken: CrocTokenView, context: Promise) { - [this.baseToken, this.quoteToken] = + [this.baseToken, this.quoteToken] = sortBaseQuoteViews(baseToken, quoteToken) this.context = context @@ -34,10 +31,10 @@ export class CrocPoolView { } async spotPrice (block?: BlockTag): Promise { - let txArgs = block ? { blockTag: block } : {} - let sqrtPrice = (await this.context).query.queryPrice - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - (await this.context).chain.poolIndex, txArgs) + let txArgs = block ? { blockTag: toHex(block) } : {} + let sqrtPrice = (await this.context).query.read.queryPrice + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + (await this.context).chain.poolIndex], txArgs) return decodeCrocPrice(await sqrtPrice) } @@ -47,33 +44,29 @@ export class CrocPoolView { } async spotTick (block?: BlockTag): Promise { - let txArgs = block ? { blockTag: block } : {} - return (await this.context).query.queryCurveTick - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - (await this.context).chain.poolIndex, txArgs) + let txArgs = block ? { blockTag: toHex(block) } : {} + return (await this.context).query.read.queryCurveTick + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + (await this.context).chain.poolIndex], txArgs) } async xykLiquidity (block?: BlockTag): Promise { - let txArgs = block ? { blockTag: block } : {} - return (await this.context).query.queryLiquidity - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - (await this.context).chain.poolIndex, txArgs) + let txArgs = block ? { blockTag: toHex(block) } : {} + return (await this.context).query.read.queryLiquidity + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + (await this.context).chain.poolIndex], txArgs) } - async curveState (block?: BlockTag) { - let txArgs = block ? { blockTag: block } : {} - return (await this.context).query.queryCurve - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - (await this.context).chain.poolIndex, txArgs) + async curveState (block?: BlockTag): Promise<{priceRoot_: bigint, ambientSeeds_: bigint, concLiq_: bigint, seedDeflator_: bigint, concGrowth_: bigint}> { + let txArgs = block ? { blockTag: toHex(block) } : {} + return (await this.context).query.read.queryCurve + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + (await this.context).chain.poolIndex], txArgs) } async cumAmbientGrowth (block?: BlockTag): Promise { - let txArgs = block ? { blockTag: block } : {} - const queryCurve = (await this.context).query.queryCurve - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - (await this.context).chain.poolIndex, txArgs) - const seedDeflator = (await queryCurve).seedDeflator_ - return seedDeflator / Math.pow(2, 48) + const seedDeflator = (await this.curveState(block)).seedDeflator_ + return bigIntToFloat(seedDeflator) / Math.pow(2, 48) } async toDisplayPrice (spotPrice: number): Promise { @@ -82,7 +75,7 @@ export class CrocPoolView { } async fromDisplayPrice (dispPrice: number): Promise { - return fromDisplayPrice(dispPrice, await this.baseDecimals, await this.quoteDecimals, + return fromDisplayPrice(dispPrice, await this.baseDecimals, await this.quoteDecimals, !this.useTrueBase) } @@ -92,14 +85,14 @@ export class CrocPoolView { return [pinTickLower(spotPrice, gridSize), pinTickUpper(spotPrice, gridSize)] } - async displayToNeighborTicks (dispPrice: number, nNeighbors: number = 3): + async displayToNeighborTicks (dispPrice: number, nNeighbors: number = 3): Promise<{below: number[], above: number[]}> { const spotPrice = await this.fromDisplayPrice(dispPrice) const gridSize = (await this.context).chain.gridSize return neighborTicks(spotPrice, gridSize, nNeighbors) } - async displayToNeighborTickPrices (dispPrice: number, nNeighbors: number = 3): + async displayToNeighborTickPrices (dispPrice: number, nNeighbors: number = 3): Promise<{below: number[], above: number[]}> { const ticks = await this.displayToNeighborTicks(dispPrice, nNeighbors) const toPriceFn = (tick: number) => this.toDisplayPrice(tickToPrice(tick)) @@ -112,7 +105,7 @@ export class CrocPoolView { { below: await abovePrices, above: await belowPrices } } - async displayToOutsidePin (dispPrice: number): + async displayToOutsidePin (dispPrice: number): Promise<{ tick: number, price: number, isTickBelow: boolean, isPriceBelow: boolean }> { const spotPrice = this.fromDisplayPrice(dispPrice) const gridSize = (await this.context).chain.gridSize @@ -120,63 +113,63 @@ export class CrocPoolView { const pinTick = pinTickOutside(await spotPrice, await this.spotPrice(), gridSize) const pinPrice = this.toDisplayPrice(tickToPrice(pinTick.tick)) - return Object.assign(pinTick, { price: await pinPrice, + return Object.assign(pinTick, { price: await pinPrice, isPriceBelow: (await pinPrice) < dispPrice }) } - async initPool (initPrice: number): Promise { + async initPool (initPrice: number): Promise { // TODO: fix any // Very small amount of ETH in economic terms but more than sufficient for min init burn - const ETH_INIT_BURN = BigNumber.from(10).pow(12) + const ETH_INIT_BURN = BigInt(10)**BigInt(12) let txArgs = this.baseToken.tokenAddr === AddressZero ? { value: ETH_INIT_BURN } : { } - - let encoder = new PoolInitEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + + let encoder = new PoolInitEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex) let spotPrice = this.fromDisplayPrice(initPrice) - let calldata = encoder.encodeInitialize(await spotPrice) + let calldata = encoder.encodeInitialize(await spotPrice) let cntx = await this.context - const gasEst = await cntx.dex.estimateGas.userCmd(cntx.chain.proxyPaths.cold, calldata, txArgs) - Object.assign(txArgs, { gasLimit: gasEst.add(GAS_PADDING)}) - return cntx.dex.userCmd(cntx.chain.proxyPaths.cold, calldata, txArgs) + const gasEst = await cntx.dex.estimateGas.userCmd([cntx.chain.proxyPaths.cold, calldata], txArgs) + Object.assign(txArgs, { gasLimit: gasEst + GAS_PADDING}) + return cntx.dex.write.userCmd([cntx.chain.proxyPaths.cold, calldata], txArgs) } - async mintAmbientBase (qty: TokenQty, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async mintAmbientBase (qty: TokenQty, limits: PriceRange, opts?: CrocLpOpts): + Promise { return this.mintAmbient(qty, this.useTrueBase, limits, opts) } - async mintAmbientQuote (qty: TokenQty, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async mintAmbientQuote (qty: TokenQty, limits: PriceRange, opts?: CrocLpOpts): + Promise { return this.mintAmbient(qty, !this.useTrueBase, limits, opts) } - async mintRangeBase (qty: TokenQty, range: TickRange, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async mintRangeBase (qty: TokenQty, range: TickRange, limits: PriceRange, opts?: CrocLpOpts): + Promise { return this.mintRange(qty, this.useTrueBase, range, await limits, opts) } - async mintRangeQuote (qty: TokenQty, range: TickRange, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async mintRangeQuote (qty: TokenQty, range: TickRange, limits: PriceRange, opts?: CrocLpOpts): + Promise { return this.mintRange(qty, !this.useTrueBase, range, await limits, opts) } - async burnAmbientLiq (liq: BigNumber, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async burnAmbientLiq (liq: bigint, limits: PriceRange, opts?: CrocLpOpts): + Promise { let [lowerBound, upperBound] = await this.transformLimits(limits) const calldata = (await this.makeEncoder()).encodeBurnAmbient (liq, lowerBound, upperBound, this.maskSurplusFlag(opts)) return this.sendCmd(calldata) } - async burnAmbientAll (limits: PriceRange, opts?: CrocLpOpts): Promise { + async burnAmbientAll (limits: PriceRange, opts?: CrocLpOpts): Promise { let [lowerBound, upperBound] = await this.transformLimits(limits) const calldata = (await this.makeEncoder()).encodeBurnAmbientAll (lowerBound, upperBound, this.maskSurplusFlag(opts)) return this.sendCmd(calldata) } - async burnRangeLiq (liq: BigNumber, range: TickRange, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async burnRangeLiq (liq: bigint, range: TickRange, limits: PriceRange, opts?: CrocLpOpts): + Promise { let [lowerBound, upperBound] = await this.transformLimits(limits) let roundLotLiq = roundForConcLiq(liq) const calldata = (await this.makeEncoder()).encodeBurnConc @@ -184,25 +177,25 @@ export class CrocPoolView { return this.sendCmd(calldata) } - async harvestRange (range: TickRange, limits: PriceRange, opts?: CrocLpOpts): - Promise { + async harvestRange (range: TickRange, limits: PriceRange, opts?: CrocLpOpts): + Promise { let [lowerBound, upperBound] = await this.transformLimits(limits) const calldata = (await this.makeEncoder()).encodeHarvestConc (range[0], range[1], lowerBound, upperBound, this.maskSurplusFlag(opts)) return this.sendCmd(calldata) } - private async sendCmd (calldata: string, txArgs?: { value?: BigNumberish }): - Promise { + private async sendCmd (calldata: string, txArgs?: { value?: bigint }): + Promise { let cntx = await this.context if (txArgs === undefined) { txArgs = {} } - const gasEst = await cntx.dex.estimateGas.userCmd(cntx.chain.proxyPaths.liq, calldata, txArgs) - Object.assign(txArgs, { gasLimit: gasEst.add(GAS_PADDING)}) - return cntx.dex.userCmd(cntx.chain.proxyPaths.liq, calldata, txArgs); + const gasEst = await cntx.dex.estimateGas.userCmd([cntx.chain.proxyPaths.liq, calldata], txArgs) + Object.assign(txArgs, { gasLimit: gasEst + GAS_PADDING}) + return cntx.dex.write.userCmd([cntx.chain.proxyPaths.liq, calldata], txArgs); } - private async mintAmbient (qty: TokenQty, isQtyBase: boolean, - limits: PriceRange, opts?: CrocLpOpts): Promise { + private async mintAmbient (qty: TokenQty, isQtyBase: boolean, + limits: PriceRange, opts?: CrocLpOpts): Promise { let msgVal = this.msgValAmbient(qty, isQtyBase, limits, opts) let weiQty = this.normQty(qty, isQtyBase) let [lowerBound, upperBound] = await this.transformLimits(limits) @@ -212,7 +205,7 @@ export class CrocPoolView { return this.sendCmd(calldata, {value: await msgVal}) } - private async boundLimits (range: TickRange, limits: PriceRange, isQtyBase: boolean, + private async boundLimits (range: TickRange, limits: PriceRange, isQtyBase: boolean, floatingSlippage: number = 0.1): Promise { let spotPrice = this.spotPrice() const [lowerPrice, upperPrice] = this.rangeToPrice(range) @@ -259,14 +252,14 @@ export class CrocPoolView { [await right, await left] } - private async mintRange (qty: TokenQty, isQtyBase: boolean, - range: TickRange, limits: PriceRange, opts?: CrocLpOpts): Promise { + private async mintRange (qty: TokenQty, isQtyBase: boolean, + range: TickRange, limits: PriceRange, opts?: CrocLpOpts): Promise { const saneLimits = await this.boundLimits(range, limits, isQtyBase, opts?.floatingSlippage) - + let msgVal = this.msgValRange(qty, isQtyBase, range, await saneLimits, opts) let weiQty = this.normQty(qty, isQtyBase) let [lowerBound, upperBound] = await this.transformLimits(await saneLimits) - + const calldata = (await this.makeEncoder()).encodeMintConc(range[0], range[1], await weiQty, isQtyBase, lowerBound, upperBound, this.maskSurplusFlag(opts)) return this.sendCmd(calldata, { value: await msgVal }) @@ -277,30 +270,30 @@ export class CrocPoolView { return encodeSurplusArg(opts.surplus, this.useTrueBase) } - private async msgValAmbient (qty: TokenQty, isQtyBase: boolean, limits: PriceRange, - opts?: CrocLpOpts): Promise { + private async msgValAmbient (qty: TokenQty, isQtyBase: boolean, limits: PriceRange, + opts?: CrocLpOpts): Promise { let ethQty = isQtyBase ? qty : this.ethForAmbientQuote(qty, limits) return this.ethToAttach(await ethQty, opts) } - private async msgValRange (qty: TokenQty, isQtyBase: boolean, range: TickRange, - limits: PriceRange, opts?: CrocLpOpts): Promise { + private async msgValRange (qty: TokenQty, isQtyBase: boolean, range: TickRange, + limits: PriceRange, opts?: CrocLpOpts): Promise { let ethQty = isQtyBase ? qty : this.ethForRangeQuote(qty, range, limits) return this.ethToAttach(await ethQty, opts) } - private async ethToAttach (neededQty: TokenQty, opts?: CrocLpOpts): Promise { - if (this.baseToken.tokenAddr !== AddressZero) { return BigNumber.from(0) } - + private async ethToAttach (neededQty: TokenQty, opts?: CrocLpOpts): Promise { + if (this.baseToken.tokenAddr !== AddressZero) { return BigInt(0) } + const ethQty = await this.normEth(neededQty) let useSurplus = decodeSurplusFlag(this.maskSurplusFlag(opts))[0] - if (useSurplus) { + if (useSurplus) { return new CrocEthView(this.context).msgValOverSurplus(ethQty) } else { - return BigNumber.from(ethQty) + return ethQty } } @@ -309,15 +302,15 @@ export class CrocPoolView { return toDisplayQty(await weiEth, await this.baseDecimals) } - private async calcEthInQuote (quoteQty: TokenQty, limits: PriceRange, + private async calcEthInQuote (quoteQty: TokenQty, limits: PriceRange, precAdj: number = 1.001): Promise { const weiQty = await this.normQty(quoteQty, false); const [, boundPrice] = await this.transformLimits(limits) - return Math.round(bigNumToFloat(weiQty) * boundPrice * precAdj) + return Math.round(bigIntToFloat(weiQty) * boundPrice * precAdj) } - private async ethForRangeQuote (quoteQty: TokenQty, range: TickRange, - limits: PriceRange): Promise { + private async ethForRangeQuote (quoteQty: TokenQty, range: TickRange, + limits: PriceRange): Promise { const spotPrice = await this.spotPrice() ; const [lowerPrice, upperPrice] = this.rangeToPrice(range) @@ -328,17 +321,17 @@ export class CrocPoolView { return toDisplayQty(await concQty, await this.baseDecimals) } - private async normEth (ethQty: TokenQty): Promise { + private async normEth (ethQty: TokenQty): Promise { return this.normQty(ethQty, true) // ETH is always on base side } - private async normQty (qty: TokenQty, isBase: boolean): Promise { + private async normQty (qty: TokenQty, isBase: boolean): Promise { let token = isBase ? this.baseToken : this.quoteToken return token.normQty(qty) } private async makeEncoder(): Promise { - return new WarmPathEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + return new WarmPathEncoder(this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex) } diff --git a/src/position.ts b/src/position.ts index ada2060..f4c7462 100644 --- a/src/position.ts +++ b/src/position.ts @@ -1,3 +1,4 @@ +import { toHex } from 'viem'; import { CrocContext } from './context'; import { CrocTokenView, sortBaseQuoteViews } from './tokens'; @@ -6,56 +7,56 @@ export type BlockTag = number | string export class CrocPositionView { constructor (base: CrocTokenView, quote: CrocTokenView, owner: Address, context: Promise) { - [this.baseToken, this.quoteToken] = + [this.baseToken, this.quoteToken] = sortBaseQuoteViews(base, quote) this.owner = owner this.context = context } - async queryRangePos (lowerTick: number, upperTick: number, block?: BlockTag) { - let blockArg = toCallArg(block) - let context = await this.context - return context.query.queryRangePosition(this.owner, - this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - context.chain.poolIndex, lowerTick, upperTick, blockArg) + async queryRangePos (lowerTick: number, upperTick: number, block?: BlockTag): Promise<{liq: bigint, fee: bigint, timestamp: bigint, atomic: boolean}> { + const blockArg = toCallArg(block) + const context = await this.context + return context.query.read.queryRangePosition([this.owner, + this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + context.chain.poolIndex, lowerTick, upperTick], blockArg).then((resp: any[]) => ({ liq: resp[0], fee: resp[1], timestamp: resp[2], atomic: resp[3] })) } - async queryAmbient (block?: BlockTag) { - let blockArg = toCallArg(block) - let context = await this.context - return context.query.queryAmbientPosition(this.owner, - this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - context.chain.poolIndex, blockArg) + async queryAmbient (block?: BlockTag): Promise<{seeds: bigint, timestamp: bigint}> { + const blockArg = toCallArg(block) + const context = await this.context + return context.query.read.queryAmbientPosition([this.owner, + this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + context.chain.poolIndex], blockArg).then((resp: any[]) => ({ seeds: resp[0], timestamp: resp[1] })) } - async queryAmbientPos (block?: BlockTag) { - let blockArg = toCallArg(block) - let context = await this.context - return context.query.queryAmbientTokens(this.owner, - this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - context.chain.poolIndex, blockArg) + async queryAmbientPos (block?: BlockTag): Promise<{liq: bigint, baseQty: bigint, quoteQty: bigint}> { + const blockArg = toCallArg(block) + const context = await this.context + return context.query.read.queryAmbientTokens([this.owner, + this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + context.chain.poolIndex], blockArg).then((resp: any[]) => ({ liq: resp[0], baseQty: resp[1], quoteQty: resp[2] })) } - async queryKnockoutLivePos (isBid: boolean, lowerTick: number, upperTick: number, block?: BlockTag) { - let blockArg = toCallArg(block) - let context = await this.context - let pivotTick = isBid ? lowerTick : upperTick - + async queryKnockoutLivePos (isBid: boolean, lowerTick: number, upperTick: number, block?: BlockTag): Promise<{liq: bigint, baseQty: bigint, quoteQty: bigint, knockedOut: boolean}> { + const blockArg = toCallArg(block) + const context = await this.context + const pivotTick = isBid ? lowerTick : upperTick + const pivotTime = (await context.query.queryKnockoutPivot( - this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - context.chain.poolIndex, isBid, pivotTick, blockArg)).pivot + this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + context.chain.poolIndex, isBid, pivotTick, blockArg))[1] - return context.query.queryKnockoutTokens(this.owner, - this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - context.chain.poolIndex, pivotTime, isBid, lowerTick, upperTick, blockArg) - } + return context.query.read.queryKnockoutTokens([this.owner, + this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + context.chain.poolIndex, pivotTime, isBid, lowerTick, upperTick], blockArg).then((resp: any[]) => ({ liq: resp[0], baseQty: resp[1], quoteQty: resp[2], knockedOut: resp[3] })) + } - async queryRewards (lowerTick: number, upperTick: number, block?: BlockTag) { - let blockArg = toCallArg(block) - let context = await this.context - return (await context.query.queryConcRewards(this.owner, - this.baseToken.tokenAddr, this.quoteToken.tokenAddr, - context.chain.poolIndex, lowerTick, upperTick, blockArg)) + async queryRewards (lowerTick: number, upperTick: number, block?: BlockTag): Promise<{liqRewards: bigint, baseRewards: bigint, quoteRewards: bigint}> { + const blockArg = toCallArg(block) + const context = await this.context + return (await context.query.read.queryConcRewards([this.owner, + this.baseToken.tokenAddr, this.quoteToken.tokenAddr, + context.chain.poolIndex, lowerTick, upperTick], blockArg)).then((resp: any[]) => ({ liqRewards: resp[0], baseRewards: resp[1], quoteRewards: resp[2] })) } readonly owner: Address @@ -65,5 +66,5 @@ export class CrocPositionView { } function toCallArg (block?: BlockTag): { blockTag?: BlockTag } { - return block ? { blockTag: block } : {} -} \ No newline at end of file + return block ? { blockTag: toHex(block) } : {} +} diff --git a/src/recipes/reposition.ts b/src/recipes/reposition.ts index 8027272..fb46ca9 100644 --- a/src/recipes/reposition.ts +++ b/src/recipes/reposition.ts @@ -1,5 +1,3 @@ -import { TransactionResponse } from "@ethersproject/abstract-provider"; -import { BigNumber, BigNumberish } from "ethers"; import { OrderDirective, PoolDirective } from "../encoding/longform"; import { CrocPoolView } from "../pool"; import { CrocSwapPlan } from "../swap"; @@ -12,7 +10,7 @@ import { GAS_PADDING } from "../utils"; interface RepositionTarget { mint: TickRange | AmbientRange burn: TickRange - liquidity: BigNumberish + liquidity: bigint } type AmbientRange = "ambient" @@ -27,63 +25,63 @@ export class CrocReposition { this.pool = pool this.burnRange = target.burn this.mintRange = target.mint - this.liquidity = BigNumber.from(target.liquidity) + this.liquidity = target.liquidity this.spotPrice = this.pool.spotPrice() this.spotTick = this.pool.spotTick() this.impact = opts?.impact || DEFAULT_REBAL_SLIPPAGE } - async rebal(): Promise { + async rebal(): Promise { // TODO: fix any const directive = await this.formatDirective() - let cntx = await this.pool.context + const cntx = await this.pool.context const path = cntx.chain.proxyPaths.long - const gasEst = await cntx.dex.estimateGas.userCmd(path, directive.encodeBytes()) - return cntx.dex.userCmd(path, directive.encodeBytes(), { gasLimit: gasEst.add(GAS_PADDING)}) + const gasEst = await cntx.dex.estimateGas.userCmd([path, directive.encodeBytes()]) + return cntx.dex.write.userCmd([path, directive.encodeBytes()], { gasLimit: gasEst + GAS_PADDING}) } async simStatic() { const directive = await this.formatDirective() const path = (await this.pool.context).chain.proxyPaths.long - return (await this.pool.context).dex.callStatic.userCmd(path, directive.encodeBytes()) + return (await this.pool.context).dex.simulate.userCmd([path, directive.encodeBytes()]) } - + async balancePercent(): Promise { if (this.mintRange === "ambient") { return 0.5 // Ambient positions are 50/50 balance - + } else { const baseQuoteBal = - concDepositBalance(await this.spotPrice, + concDepositBalance(await this.spotPrice, tickToPrice(this.mintRange[0]), tickToPrice(this.mintRange[1])) - return await this.isBaseOutOfRange() ? + return await this.isBaseOutOfRange() ? (1.0 - baseQuoteBal) : baseQuoteBal } } - async currentCollateral(): Promise { - let tokenFn = await this.isBaseOutOfRange() ? baseTokenForConcLiq : quoteTokenForConcLiq - return tokenFn(await this.spotPrice, this.liquidity, + async currentCollateral(): Promise { + const tokenFn = await this.isBaseOutOfRange() ? baseTokenForConcLiq : quoteTokenForConcLiq + return tokenFn(await this.spotPrice, this.liquidity, tickToPrice(this.burnRange[0]), tickToPrice(this.burnRange[1])) } - async convertCollateral(): Promise { - let balance = await this.swapFraction() - let collat = await this.currentCollateral() - return collat.mul(balance).div(10000) + async convertCollateral(): Promise { + const balance = await this.swapFraction() + const collat = await this.currentCollateral() + return collat * balance / BigInt(10000) } async postBalance(): Promise<[number, number]> { - let outside = this.mintInput().then(parseFloat) - let inside = this.swapOutput().then(parseFloat) + const outside = this.mintInput().then(parseFloat) + const inside = this.swapOutput().then(parseFloat) return await this.isBaseOutOfRange() ? [await outside, await inside] : [await inside, await outside] } async mintInput(): Promise { - let collat = (await this.currentCollateral()).sub(await this.convertCollateral()) - let pool = (await this.pool) + const collat = (await this.currentCollateral()) - (await this.convertCollateral()) + const pool = this.pool return await this.isBaseOutOfRange() ? pool.baseToken.toDisplay(collat) : pool.quoteToken.toDisplay(collat) @@ -91,15 +89,15 @@ export class CrocReposition { async swapOutput(): Promise { const [sellToken, buyToken] = await this.pivotTokens() - - let swap = new CrocSwapPlan(sellToken, buyToken, await this.convertCollateral(), - false, (await this.pool).context, { slippage: this.impact }) - let impact = await swap.calcImpact() + + const swap = new CrocSwapPlan(sellToken, buyToken, await this.convertCollateral(), + false, this.pool.context, { slippage: this.impact }) + const impact = await swap.calcImpact() return impact.buyQty } private async isBaseOutOfRange(): Promise { - let spot = await this.spotTick + const spot = await this.spotTick if (spot >= this.burnRange[1]) { return true } else if (spot < this.burnRange[0]) { @@ -117,33 +115,33 @@ export class CrocReposition { private async formatDirective(): Promise { const [openToken, closeToken] = await this.pivotTokens() - - let directive = new OrderDirective(openToken.tokenAddr) + + const directive = new OrderDirective(openToken.tokenAddr) directive.appendHop(closeToken.tokenAddr) - let pool = directive.appendPool((await this.pool.context).chain.poolIndex) + const pool = directive.appendPool((await this.pool.context).chain.poolIndex) directive.appendRangeBurn(this.burnRange[0], this.burnRange[1], this.liquidity) await this.setupSwap(pool) - + directive.appendPool((await this.pool.context).chain.poolIndex) if (this.mintRange === "ambient") { - let mint = directive.appendAmbientMint(0) + const mint = directive.appendAmbientMint(BigInt(0)) mint.rollType = 5 } else { - let mint = directive.appendRangeMint(this.mintRange[0], this.mintRange[1], 0) + const mint = directive.appendRangeMint(this.mintRange[0], this.mintRange[1], BigInt(0)) mint.rollType = 5 } - directive.open.limitQty = BigNumber.from(0) - directive.hops[0].settlement.limitQty = BigNumber.from(0) + directive.open.limitQty = BigInt(0) + directive.hops[0].settlement.limitQty = BigInt(0) return directive } private async setupSwap (pool: PoolDirective) { pool.chain.swapDefer = true pool.swap.rollType = 4 - pool.swap.qty = BigNumber.from(await this.swapFraction()) + pool.swap.qty = await this.swapFraction() const sellBase = await this.isBaseOutOfRange() pool.swap.isBuy = sellBase @@ -153,15 +151,15 @@ export class CrocReposition { pool.swap.limitPrice = encodeCrocPrice((await this.spotPrice) * priceMult) } - private async swapFraction(): Promise { - let swapProp = await this.balancePercent() + this.impact - return BigNumber.from(Math.floor(Math.min(swapProp, 1.0) * 10000)) + private async swapFraction(): Promise { + const swapProp = await this.balancePercent() + this.impact + return BigInt(Math.floor(Math.min(swapProp, 1.0) * 10000)) } pool: CrocPoolView burnRange: TickRange mintRange: TickRange | AmbientRange - liquidity: BigNumber + liquidity: bigint spotPrice: Promise spotTick: Promise impact: number @@ -170,4 +168,4 @@ export class CrocReposition { type TickRange = [number, number] -const DEFAULT_REBAL_SLIPPAGE = .02 \ No newline at end of file +const DEFAULT_REBAL_SLIPPAGE = .02 diff --git a/src/slots.ts b/src/slots.ts index 8eec19a..83493ea 100644 --- a/src/slots.ts +++ b/src/slots.ts @@ -1,25 +1,25 @@ -import { BigNumber, ethers } from 'ethers'; import { CrocContext } from './context'; +import { Address, PublicClient, numberToHex } from 'viem'; -/* This is the main entry point for the Croc SDK. It provides a high-level interface - * for interacting with CrocSwap smart contracts in an ergonomic way. */ export class CrocSlotReader { constructor (context: Promise) { - this.provider = context.then(p => p.provider) + this.provider = context.then(p => p.publicClient) this.dex = context.then(c => c.dex.address) } async isHotPathOpen(): Promise { - const STATE_SLOT = 0 - const HOT_OPEN_OFFSET = 22 + const STATE_SLOT = 0; + const HOT_OPEN_OFFSET = 22; - const hotShiftBits = 8 * (32 - HOT_OPEN_OFFSET) - const slotVal = this.readSlot(STATE_SLOT).then(BigNumber.from) - return (await slotVal).shl(hotShiftBits).shr(255).gt(0) + const hotShiftBits = BigInt(8 * (32 - HOT_OPEN_OFFSET)); + const slot = await this.readSlot(STATE_SLOT); + const slotVal = BigInt(slot); + + return (slotVal << hotShiftBits) >> BigInt(255) > BigInt(0); } async readSlot (slot: number): Promise { - return (await this.provider).getStorageAt(await this.dex, slot) + return (await this.provider).getStorageAt({address: await this.dex as Address, slot: numberToHex(slot)}) as Promise } async proxyContract (proxyIdx: number): Promise { @@ -29,6 +29,6 @@ export class CrocSlotReader { return "0x" + slotVal.slice(26) } - readonly provider: Promise + readonly provider: Promise readonly dex: Promise } diff --git a/src/swap.ts b/src/swap.ts index d9cf274..35f3820 100644 --- a/src/swap.ts +++ b/src/swap.ts @@ -1,23 +1,19 @@ -import { BigNumber, ContractFunction } from "ethers"; - -import { TransactionResponse } from '@ethersproject/providers'; +import { Address, encodeAbiParameters } from 'viem'; import { CrocContext } from './context'; import { CrocPoolView } from './pool'; import { decodeCrocPrice, getUnsignedRawTransaction } from './utils'; import { CrocEthView, CrocTokenView, sortBaseQuoteViews, TokenQty } from './tokens'; -import { AddressZero } from '@ethersproject/constants'; import { CrocSurplusFlags, decodeSurplusFlag, encodeSurplusArg } from "./encoding/flags"; import { MAX_SQRT_PRICE, MIN_SQRT_PRICE } from "./constants"; -import { AbiCoder } from "ethers/lib/utils"; import { CrocSlotReader } from "./slots"; -import { GAS_PADDING } from "./utils"; +import { GAS_PADDING, AddressZero } from "./utils"; -/* Describes the predicted impact of a given swap. +/* Describes the predicted impact of a given swap. * @property sellQty The total quantity of tokens predicted to be sold by the swapper to the dex. * @property buyQty The total quantity of tokens predicted to be bought by the swapper from the dex. - * @property finalPrice The final price of the pool after the swap. *Note* this is not the same as the + * @property finalPrice The final price of the pool after the swap. *Note* this is not the same as the * realized swap price. - * @property percentChange The percent change in the pool price after the swap. Note this is not the same + * @property percentChange The percent change in the pool price after the swap. Note this is not the same * as the swapper's slippage against the pool. */ export interface CrocImpact { @@ -29,9 +25,9 @@ export interface CrocImpact { /* Options for the */ export interface CrocSwapExecOpts { - settlement?: boolean | + settlement?: boolean | { buyDexSurplus: boolean, sellDexSurplus: boolean } - gasEst?: BigNumber + gasEst?: bigint } export interface CrocSwapPlanOpts { @@ -49,7 +45,7 @@ export class CrocSwapPlan { this.poolView = new CrocPoolView(this.baseToken, this.quoteToken, context) const tokenView = this.qtyInBase ? this.baseToken : this.quoteToken this.qty = tokenView.normQty(qty) - + this.slippage = opts.slippage || DFLT_SWAP_ARGS.slippage this.priceSlippage = this.slippage * PRICE_SLIP_MULT this.context = context @@ -57,93 +53,106 @@ export class CrocSwapPlan { this.impact = this.calcImpact() this.callType = "" } - - async swap (args: CrocSwapExecOpts = { }): Promise { + + async swap (args: CrocSwapExecOpts = { }): Promise { // TODO: fix any const gasEst = await this.estimateGas(args) const callArgs = Object.assign({gasEst: gasEst }, args) return this.sendTx(Object.assign({}, args, callArgs)) } - - async simulate (args: CrocSwapExecOpts = { }): Promise { + + async simulate (args: CrocSwapExecOpts = { }): Promise { const gasEst = await this.estimateGas(args) const callArgs = Object.assign({gasEst: gasEst }, args) return this.callStatic(Object.assign({}, args, callArgs)) } - private async sendTx (args: CrocSwapExecOpts): Promise { - return this.hotPathCall(await this.txBase(), args) + private async sendTx (args: CrocSwapExecOpts): Promise { + const base = await this.txBase() + return this.hotPathCall(base.write, args) } - private async callStatic (args: CrocSwapExecOpts): Promise { + private async callStatic (args: CrocSwapExecOpts): Promise { const base = await this.txBase() - return this.hotPathCall(base.callStatic, args) + return this.hotPathCall(base.simulate, args) } - async estimateGas (args: CrocSwapExecOpts = { }): Promise { + async estimateGas (args: CrocSwapExecOpts = { }): Promise { const base = await this.txBase() return this.hotPathCall(base.estimateGas, args) } private async txBase() { if (this.callType === "router") { - let router = (await this.context).router - if (!router) { throw new Error("Router not available on network") } + const router = (await this.context).router + if (!router) { throw new Error("Router not available on network") } + console.log('returning router', router) return router } else if (this.callType === "bypass" && (await this.context).routerBypass) { - let router = (await this.context).routerBypass + const router = (await this.context).routerBypass if (!router) { throw new Error("Router not available on network") } + console.log('returning router or dex', router, (await this.context).dex) return router || (await this.context).dex - + } else { + console.log('returning dex', (await this.context).dex) return (await this.context).dex } } - private async hotPathCall (base: { [name: string]: ContractFunction; }, args: CrocSwapExecOpts) { + private async hotPathCall (base: { [name: string]: any; }, args: CrocSwapExecOpts) { // TODO: fix generics const reader = new CrocSlotReader(this.context) if (this.callType === "router") { return this.swapCall(base, args) } else if (this.callType === "bypass") { return this.swapCall(base, args) - } else if (this.callType === "proxy" || (await this.context).chain.proxyPaths.dfltColdSwap) { - return this.userCmdCall(base, args) + } else if (this.callType === "proxy" || (await this.context).chain.proxyPaths.dfltColdSwap) { + return this.userCmdCall(base, args) } else { return await reader.isHotPathOpen() ? this.swapCall(base, args) : this.userCmdCall(base, args) } } - private async swapCall (base: { [name: string]: ContractFunction; }, args: CrocSwapExecOpts) { + private async swapCall (base: { [name: string]: any; }, args: CrocSwapExecOpts) { const TIP = 0 const surplusFlags = this.maskSurplusArgs(args) + console.log(base) return base.swap - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex, - this.sellBase, this.qtyInBase, await this.qty, TIP, - await this.calcLimitPrice(), await this.calcSlipQty(), surplusFlags, + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex, + this.sellBase, this.qtyInBase, await this.qty, TIP, + await this.calcLimitPrice(), await this.calcSlipQty(), surplusFlags], await this.buildTxArgs(surplusFlags, args.gasEst), ) } - private async userCmdCall (base: { [name: string]: ContractFunction; }, args: CrocSwapExecOpts) { + private async userCmdCall (base: { [name: string]: any; }, args: CrocSwapExecOpts) { const TIP = 0 const surplusFlags = this.maskSurplusArgs(args) const HOT_PROXY_IDX = 1 - let abi = new AbiCoder() - let cmd = abi.encode(["address", "address", "uint256", "bool", "bool", "uint128", "uint16", "uint128", "uint128", "uint8"], - [this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex, - this.sellBase, this.qtyInBase, await this.qty, TIP, + const cmd = encodeAbiParameters([{ type: "address", name: "baseToken" }, + { type: "address", name: "quoteToken" }, + { type: "uint256", name: "poolIndex" }, + { type: "bool", name: "sellBase" }, + { type: "bool", name: "qtyInBase" }, + { type: "uint128", name: "qty" }, + { type: "uint16", name: "tip" }, + { type: "uint128", name: "limitPrice" }, + { type: "uint128", name: "minOut" }, + { type: "uint8", name: "surplusFlags" }], + [this.baseToken.tokenAddr as Address, this.quoteToken.tokenAddr as Address, BigInt((await this.context).chain.poolIndex), + this.sellBase, this.qtyInBase, await this.qty, TIP, await this.calcLimitPrice(), await this.calcSlipQty(), surplusFlags]) - return base.userCmd(HOT_PROXY_IDX, cmd, await this.buildTxArgs(surplusFlags, args.gasEst)) + return base.userCmd([HOT_PROXY_IDX, cmd], await this.buildTxArgs(surplusFlags, args.gasEst)) } /** * Utility function to generate a "signed" raw transaction for a swap, used for L1 gas estimation on L2's like Scroll. * Extra 0xFF...F is appended to the unsigned raw transaction to simulate the signature and other missing fields. - * + * * Note: This function is only intended for L1 gas estimation, and does not generate valid signed transactions. */ async getFauxRawTx (args: CrocSwapExecOpts = { }): Promise<`0x${string}`> { @@ -152,7 +161,7 @@ export class CrocSwapPlan { const unsignedTx = await (await this.context).dex.populateTransaction.swap (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex, - this.sellBase, this.qtyInBase, await this.qty, TIP, + this.sellBase, this.qtyInBase, await this.qty, TIP, await this.calcLimitPrice(), await this.calcSlipQty(), surplusFlags, await this.buildTxArgs(surplusFlags)) @@ -163,14 +172,15 @@ export class CrocSwapPlan { async calcImpact(): Promise { const TIP = 0 const limitPrice = this.sellBase ? MAX_SQRT_PRICE : MIN_SQRT_PRICE - - const impact = await (await this.context).slipQuery.calcImpact - (this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex, - this.sellBase, this.qtyInBase, await this.qty, TIP, limitPrice); - const baseQty = this.baseToken.toDisplay(impact.baseFlow.abs()) - const quoteQty = this.quoteToken.toDisplay(impact.quoteFlow.abs()) - const spotPrice = decodeCrocPrice(impact.finalPrice) + const impact = await (await this.context).slipQuery.read.calcImpact + ([this.baseToken.tokenAddr, this.quoteToken.tokenAddr, (await this.context).chain.poolIndex, + this.sellBase, this.qtyInBase, await this.qty, TIP, limitPrice]); + console.log('impact', impact) + + const baseQty = this.baseToken.toDisplay(impact[0] < 0 ? -impact[0] : impact[0]) + const quoteQty = this.quoteToken.toDisplay(impact[1] < 0 ? -impact[1] : impact[1]) + const spotPrice = decodeCrocPrice(impact[2]) const startPrice = this.poolView.displayPrice() const finalPrice = this.poolView.toDisplayPrice(spotPrice) @@ -188,8 +198,8 @@ export class CrocSwapPlan { } private maskSurplusFlags (args?: CrocSwapExecOpts): CrocSurplusFlags { - if (!args || !args.settlement) { - return [false, false] + if (!args || !args.settlement) { + return [false, false] } else if (typeof args.settlement === "boolean") { return [args.settlement, args.settlement] } else { @@ -199,11 +209,11 @@ export class CrocSwapPlan { } } - private async buildTxArgs (surplusArg: number, gasEst?: BigNumber) { - let txArgs = await this.attachEthMsg(surplusArg) + private async buildTxArgs (surplusArg: number, gasEst?: bigint) { + const txArgs = await this.attachEthMsg(surplusArg) if (gasEst) { - Object.assign(txArgs, { gasLimit: gasEst.add(GAS_PADDING)}) + Object.assign(txArgs, { gasLimit: gasEst + GAS_PADDING}) } return txArgs @@ -212,12 +222,12 @@ export class CrocSwapPlan { private async attachEthMsg (surplusEncoded: number): Promise { // Only need msg.val if one token is native ETH (will always be base side) if (!this.sellBase || this.baseToken.tokenAddr !== AddressZero) { return { }} - + // Calculate the maximum amount of ETH we'll need. If on the floating side // account for potential slippage. (Contract will refund unused ETH) const val = this.qtyInBase ? this.qty : this.calcSlipQty() - if (decodeSurplusFlag(surplusEncoded)[0]) { + if (decodeSurplusFlag(surplusEncoded)[0]) { // If using surplus calculate the amount of ETH not covered by the surplus // collateral. const needed = new CrocEthView(this.context).msgValOverSurplus(await val) @@ -229,19 +239,19 @@ export class CrocSwapPlan { } } - async calcSlipQty(): Promise { + async calcSlipQty(): Promise { const qtyIsBuy = (this.sellBase === this.qtyInBase) const slipQty = !qtyIsBuy ? parseFloat((await this.impact).sellQty) * (1 + this.slippage) : parseFloat((await this.impact).buyQty) * (1 - this.slippage) - return !this.qtyInBase ? - this.baseToken.roundQty(slipQty) : + return !this.qtyInBase ? + this.baseToken.roundQty(slipQty) : this.quoteToken.roundQty(slipQty) } - async calcLimitPrice(): Promise { + async calcLimitPrice(): Promise { return this.sellBase ? MAX_SQRT_PRICE : MIN_SQRT_PRICE } @@ -262,7 +272,7 @@ export class CrocSwapPlan { readonly baseToken: CrocTokenView readonly quoteToken: CrocTokenView - readonly qty: Promise + readonly qty: Promise readonly sellBase: boolean readonly qtyInBase: boolean readonly slippage: number diff --git a/src/tokens.ts b/src/tokens.ts index 87bb907..9367a6a 100644 --- a/src/tokens.ts +++ b/src/tokens.ts @@ -1,33 +1,35 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { CrocContext } from "./context"; -import { Contract, BigNumber, ethers } from "ethers"; -import { TransactionResponse } from "@ethersproject/providers"; -import { AddressZero, MaxUint256 } from "@ethersproject/constants"; import { MAX_LIQ } from "./constants"; import { toDisplayQty, fromDisplayQty } from "./utils/token"; import { BlockTag } from "./position"; -import { GAS_PADDING } from "./utils"; +import { GAS_PADDING, AddressZero } from "./utils"; +import { Address, encodeAbiParameters, maxUint256, getContract } from "viem"; +import { ERC20_ABI } from "./abis"; /* Type representing specified token quantities. This type can either represent the raw non-decimalized * on-chain value in wei, if passed as a BigNuber. Or it can represent the decimalized value if passed * as a string or Javascript float. */ -export type TokenQty = BigNumber | string | number; +export type TokenQty = bigint | string | number; /* General top-level class for interacting with specific ERC20 tokens. Handles functionality for * approval, getting token balances both in wallet and on dex, and display/decimalization. */ export class CrocTokenView { - /* Creates a new CrocTokenView for specificied token address. - * + /* Creates a new CrocTokenView for specificied token address. + * * @param context The CrocContext environment context. Specific to a given chain. * @param tokenAddr The address of the token contract. Use zero address for native ETH token. */ - constructor(context: Promise, tokenAddr: string) { + constructor(context: Promise, tokenAddr: Address) { this.context = context; this.tokenAddr = tokenAddr; this.isNativeEth = tokenAddr == AddressZero; if (this.isNativeEth) { this.decimals = Promise.resolve(18); } else { - this.decimals = this.resolve().then((c) => c.decimals()); + this.decimals = this.resolve().then((c) => + { console.log(c); + return c.read.decimals()}); } } @@ -35,66 +37,71 @@ export class CrocTokenView { * * @param approveQty Optional arugment to specify the quantity to approve. Defaults to 2^120 * if unspecified. */ - async approve (approveQty?: TokenQty): Promise { + async approve (approveQty?: TokenQty): Promise { return this.approveAddr((await this.context).dex.address, approveQty) } - async approveRouter (approveQty?: TokenQty): Promise { - let router = (await this.context).router + async approveRouter (approveQty?: TokenQty): Promise { + const router = (await this.context).router return router && this.approveAddr(router.address, approveQty) } - private async approveAddr (addr: string, approveQty?: TokenQty): Promise { + private async approveAddr (addr: string, approveQty?: TokenQty): Promise { if (this.isNativeEth) { return undefined; } - const weiQty = approveQty ? await this.normQty(approveQty) : MaxUint256 + const weiQty = approveQty ? await this.normQty(approveQty) : maxUint256; + // const weiQty = BigInt(0); // We want to hardcode the gas limit, so we can manually pad it from the estimated // transaction. The default value is low gas calldata, but Metamask and other wallets // will often ask users to change the approval amount. Without the padding, approval // transactions can run out of gas. - const gasEst = (await this.resolveWrite()).estimateGas.approve( + const gasEst = (await this.resolve()).estimateGas.approve([ addr, - weiQty + weiQty], + {addr: (await this.context).walletClient?.account?.address} ); - return (await this.resolveWrite()).approve( - addr, weiQty, { gasLimit: (await gasEst).add(15000)} + return await (await this.resolve()).write.approve( + [addr, weiQty], { gasLimit: (await gasEst) + BigInt(15000)} ); } - async approveBypassRouter(): Promise { - let router = (await this.context).router + async approveBypassRouter(): Promise { + const router = (await this.context).router if (!router) { return undefined } - let abiCoder = new ethers.utils.AbiCoder() const MANY_CALLS = 1000000000 const HOT_PROXY_IDX = 1 const COLD_PROXY_IDX = 3 - const cmd = abiCoder.encode(["uint8", "address", "uint32", "uint16[]"], - [72, router.address, MANY_CALLS, [HOT_PROXY_IDX]]) - return (await this.context).dex.userCmd(COLD_PROXY_IDX, cmd) + const cmd = encodeAbiParameters([ + {type: "uint8", name: "subCmd"}, + {type: "address", name: "addr"}, + {type: "uint32", name: "nCalls"}, + {type: "uint16[]", name: "proxyIdxs"}], + [72, router.address, MANY_CALLS, [HOT_PROXY_IDX]]) + return (await this.context).dex.write.userCmd([COLD_PROXY_IDX, cmd]) } - async wallet (address: string, block: BlockTag = "latest"): Promise { + async wallet (address: string, block: bigint | undefined = undefined): Promise { if (this.isNativeEth) { - return (await this.context).provider.getBalance(address, block); + return (await this.context).publicClient.getBalance({address: address as Address, blockNumber: block}); } else { - return (await this.resolve()).balanceOf(address, { blockTag: block }); + return (await this.resolve()).read.balanceOf([address], {blockNumber: block}); } } - async walletDisplay (address: string, block: BlockTag = "latest"): Promise { + async walletDisplay (address: string, block: bigint | undefined = undefined): Promise { const balance = this.wallet(address, block); return toDisplayQty(await balance, await this.decimals); } - async balance (address: string, block: BlockTag = "latest"): Promise { - return (await this.context).query.querySurplus(address, this.tokenAddr, { blockTag: block }) + async balance (address: string, block: BlockTag = "latest"): Promise { + return (await this.context).query.read.querySurplus([address, this.tokenAddr], {blockTag: block}) } async balanceDisplay (address: string, block: BlockTag = "latest"): Promise { @@ -102,17 +109,18 @@ export class CrocTokenView { return toDisplayQty(await balance, await this.decimals); } - async allowance(address: string): Promise { + async allowance(address: string): Promise { + // return BigInt(0); if (this.isNativeEth) { return MAX_LIQ; } - return (await this.resolve()).allowance( - address, - (await this.context).dex.address + return (await this.resolve()).read.allowance( + [address, + (await this.context).dex.address] ); } - async roundQty (qty: TokenQty): Promise { + async roundQty (qty: TokenQty): Promise { if (typeof qty === "number" || typeof qty === "string") { return this.normQty(this.truncFraction(qty, await this.decimals)) } else { @@ -122,14 +130,14 @@ export class CrocTokenView { private truncFraction (qty: string | number, decimals: number): number { if (typeof(qty) === "number") { - let exp = Math.pow(10, decimals) + const exp = Math.pow(10, decimals) return Math.floor(qty * exp) / exp } else { return this.truncFraction(parseFloat(qty), decimals) } } - async normQty(qty: TokenQty): Promise { + async normQty(qty: TokenQty): Promise { if (typeof qty === "number" || typeof qty === "string") { return fromDisplayQty(qty.toString(), await this.decimals); } else { @@ -145,41 +153,41 @@ export class CrocTokenView { } } - private async resolve(): Promise { - return (await this.context).erc20Read.attach(this.tokenAddr); - } - - private async resolveWrite(): Promise { - return (await this.context).erc20Write.attach(this.tokenAddr); + private async resolve(): Promise { + return getContract({ address: this.tokenAddr, abi: ERC20_ABI, client: {wallet: (await this.context).walletClient, public: (await this.context).publicClient}}) } - async deposit (qty: TokenQty, recv: string): Promise { + async deposit (qty: TokenQty, recv: string): Promise { return this.surplusOp(73, qty, recv, this.isNativeEth) } - async withdraw (qty: TokenQty, recv: string): Promise { + async withdraw (qty: TokenQty, recv: string): Promise { return this.surplusOp(74, qty, recv) } - async transfer (qty: TokenQty, recv: string): Promise { + async transfer (qty: TokenQty, recv: string): Promise { return this.surplusOp(75, qty, recv) } - private async surplusOp (subCode: number, qty: TokenQty, recv: string, - useMsgVal: boolean = false): Promise { - const abiCoder = new ethers.utils.AbiCoder() + private async surplusOp (subCode: number, qty: TokenQty, recv: string, + useMsgVal: boolean = false): Promise { const weiQty = this.normQty(qty) - const cmd = abiCoder.encode(["uint8", "address", "uint128", "address"], - [subCode, recv, await weiQty, this.tokenAddr]) - + const cmd = encodeAbiParameters([{type: "uint8", name: "subCmd"}, + {type: "address", name: "recv"}, + {type: "uint256", name: "weiQty"}, + {type: "address", name: "tokenAddr"}], + [subCode, recv as Address, await weiQty, this.tokenAddr as Address]) + const txArgs = useMsgVal ? { value: await weiQty } : { } - let cntx = await this.context - const gasEst = await cntx.dex.estimateGas.userCmd(cntx.chain.proxyPaths.cold, cmd, txArgs) - Object.assign(txArgs, { gasLimit: gasEst.add(GAS_PADDING)}) - return cntx.dex.userCmd(cntx.chain.proxyPaths.cold, cmd, txArgs) + const cntx = await this.context + const gasEst = await cntx.dex.estimateGas.userCmd([cntx.chain.proxyPaths.cold, cmd], txArgs) + Object.assign(txArgs, { gasLimit: gasEst + GAS_PADDING}) + return cntx.dex.write.userCmd([cntx.chain.proxyPaths.cold, cmd], txArgs) + } - readonly tokenAddr: string; + // readonly contract: any; // TODO: fix any + readonly tokenAddr: Address; readonly context: Promise; readonly decimals: Promise; readonly isNativeEth: boolean; @@ -193,24 +201,24 @@ export class CrocEthView extends CrocTokenView { /* Returns the amount needed to attach to msg.value when spending * ETH from surplus collateral. (I.e. the difference between the * two, or 0 if surplus collateral is sufficient) */ - async msgValOverSurplus (ethNeeded: BigNumber): Promise { + async msgValOverSurplus (ethNeeded: bigint): Promise { const sender = (await this.context).senderAddr if (!sender) { console.warn("No sender address known, returning 0") - return BigNumber.from(0) + return BigInt(0) } const ethView = new CrocTokenView(this.context, AddressZero) const surpBal = await ethView.balance(sender) - const hasEnough = surpBal.gt(ethNeeded) - return hasEnough ? BigNumber.from(0) : - ethNeeded.sub(surpBal) + const hasEnough = surpBal > ethNeeded + return hasEnough ? BigInt(0) : + ethNeeded - surpBal } -} +} -export function sortBaseQuoteViews (tokenA: CrocTokenView, tokenB: CrocTokenView): +export function sortBaseQuoteViews (tokenA: CrocTokenView, tokenB: CrocTokenView): [CrocTokenView, CrocTokenView] { return tokenA.tokenAddr.toLowerCase() < tokenB.tokenAddr.toLowerCase() ? [tokenA, tokenB] : [tokenB, tokenA] diff --git a/src/utils/gas.ts b/src/utils/gas.ts index a58a36e..9e38a40 100644 --- a/src/utils/gas.ts +++ b/src/utils/gas.ts @@ -1,50 +1,50 @@ -import { BigNumber, Contract, PopulatedTransaction, Transaction, utils } from "ethers"; +import { serializeTransaction, Transaction, keccak256, getContract } from "viem"; import { CrocEnv } from "../croc"; import { L1_GAS_PRICE_ORACLE_ABI } from "../abis/external/L1GasPriceOracle"; // Applied to all gas estimates. -export const GAS_PADDING = 30000; +export const GAS_PADDING = BigInt(30000); /** * Compute the raw transaction data for a given transaction. - * + * * ref: https://docs.ethers.org/v5/cookbook/transactions/#cookbook--compute-raw-transaction */ export function getRawTransaction(tx: Transaction) { - function addKey(accum: any, key: keyof Transaction) { - if (tx[key]) { accum[key] = tx[key]; } - return accum; - } + // function addKey(accum: any, key: keyof Transaction) { + // if (tx[key]) { accum[key] = tx[key]; } + // return accum; + // } // Extract the relevant parts of the transaction and signature - const txFields = ["accessList","chainId","data","gasPrice","gasLimit","maxFeePerGas","maxPriorityFeePerGas","nonce","to","type","value"] as const; - const sigFields = ["v","r","s"] as const; + // const txFields = ["accessList","chainId","data","gasPrice","gasLimit","maxFeePerGas","maxPriorityFeePerGas","nonce","to","type","value"] as const; + // const sigFields = ["v","r","s"] as const; // Serialize the signed transaction - const raw = utils.serializeTransaction(txFields.reduce(addKey, { }), sigFields.reduce(addKey, { })); + const raw = serializeTransaction(tx); // Double check things went well - if (utils.keccak256(raw) !== tx.hash) { throw new Error("serializing failed!"); } + if (keccak256(raw) !== tx.hash) { throw new Error("serializing failed!"); } return raw as `0x${string}`; } /** * Compute the raw transaction data for a given transaction without the signature. - * + * * ref: https://docs.ethers.org/v5/cookbook/transactions/#cookbook--compute-raw-transaction */ -export function getUnsignedRawTransaction(tx: PopulatedTransaction) { - function addKey(accum: any, key: keyof PopulatedTransaction) { - if (tx[key]) { accum[key] = tx[key]; } - return accum; - } +export function getUnsignedRawTransaction(tx: any): `0x${string}` { // TODO: fix any + // function addKey(accum: any, key: keyof any) { + // if (tx[key]) { accum[key] = tx[key]; } + // return accum; + // } // Extract the relevant parts of the transaction and signature - const txFields = ["accessList","chainId","data","gasPrice","gasLimit","maxFeePerGas","maxPriorityFeePerGas","nonce","to","type","value"] as const; + // const txFields = ["accessList","chainId","data","gasPrice","gasLimit","maxFeePerGas","maxPriorityFeePerGas","nonce","to","type","value"] as const; // Serialize the signed transaction - const raw = utils.serializeTransaction(txFields.reduce(addKey, { })); + const raw = serializeTransaction(tx); return raw as `0x${string}`; } @@ -52,18 +52,18 @@ export function getUnsignedRawTransaction(tx: PopulatedTransaction) { /** * Estimates the additional L1 gas on Scroll for any data which is a RLP-encoded transaction with signature. */ -export async function estimateScrollL1Gas(crocEnv: CrocEnv, rawTransaction: `0x${string}`): Promise { +export async function estimateScrollL1Gas(crocEnv: CrocEnv, rawTransaction: `0x${string}`): Promise { const crocContext = await crocEnv.context; const chainId = crocContext.chain.chainId; const isScroll = chainId === "0x82750" || chainId === "0x8274f"; if (!isScroll) { - return BigNumber.from(0); + return BigInt(0); } const L1_GAS_PRICE_ORACLE_ADDRESS = "0x5300000000000000000000000000000000000002"; - const l1GasPriceOracle = new Contract(L1_GAS_PRICE_ORACLE_ADDRESS, L1_GAS_PRICE_ORACLE_ABI, crocContext.provider); + const l1GasPriceOracle = getContract({address: L1_GAS_PRICE_ORACLE_ADDRESS, abi: L1_GAS_PRICE_ORACLE_ABI, client: crocContext.publicClient}); // function getL1Fee(bytes memory _data) external view override returns (uint256); - const l1Gas = await l1GasPriceOracle.getL1Fee(rawTransaction) as BigNumber; + const l1Gas = await l1GasPriceOracle.read.getL1Fee([rawTransaction]) as bigint; return l1Gas; } diff --git a/src/utils/index.ts b/src/utils/index.ts index 9fda2c3..d19228e 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,5 +1,9 @@ +import { Address } from "viem"; + export * from "./math"; export * from "./price"; export * from "./token"; export * from "./liquidity"; export * from "./gas"; + +export const AddressZero: Address = "0x0000000000000000000000000000000000000000" diff --git a/src/utils/liquidity.ts b/src/utils/liquidity.ts index 0a055c3..d49302e 100644 --- a/src/utils/liquidity.ts +++ b/src/utils/liquidity.ts @@ -1,7 +1,6 @@ -import { BigNumber } from "ethers"; import { - bigNumToFloat, - floatToBigNum, + bigIntToFloat, + floatToBigInt, truncateRightBits, } from "./"; @@ -14,11 +13,11 @@ import { * @return The amount of virtual liquidity (in sqrt(X*Y)) supported by this base token quantity. */ export function liquidityForBaseQty( price: number, - qty: BigNumber, + qty: bigint, mult: number = 1.0 -): BigNumber { - return floatToBigNum( - Math.floor((bigNumToFloat(qty) / Math.sqrt(price)) * mult) +): bigint { + return floatToBigInt( + Math.floor((bigIntToFloat(qty) / Math.sqrt(price)) * mult) ); } @@ -31,28 +30,28 @@ export function liquidityForBaseQty( * @return The amount of virtual liquidity (in sqrt(X*Y)) supported by this quote token quantity. */ export function liquidityForQuoteQty( price: number, - qty: BigNumber, + qty: bigint, mult = 1.0 -): BigNumber { - return floatToBigNum( - Math.floor(bigNumToFloat(qty) * Math.sqrt(price) * mult) +): bigint { + return floatToBigInt( + Math.floor(bigIntToFloat(qty) * Math.sqrt(price) * mult) ); } export function baseVirtualReserves( price: number, - liq: BigNumber, + liq: bigint, mult: number = 1.0 -): BigNumber { - return floatToBigNum(bigNumToFloat(liq) * Math.sqrt(price) * mult); +): bigint { + return floatToBigInt(bigIntToFloat(liq) * Math.sqrt(price) * mult); } export function quoteVirtualReserves( price: number, - liq: BigNumber, + liq: bigint, mult: number = 1.0 -): BigNumber { - return floatToBigNum((bigNumToFloat(liq) / Math.sqrt(price)) * mult); +): bigint { + return floatToBigInt((bigIntToFloat(liq) / Math.sqrt(price)) * mult); } /* Converts a fixed amount of base token deposits to liquidity for a concentrated range order @@ -64,10 +63,10 @@ export function quoteVirtualReserves( * @return The amount of virtual liquidity (in sqrt(X*Y)) supported by this base token quantity. */ export function liquidityForBaseConc( price: number, - qty: BigNumber, + qty: bigint, lower: number, upper: number -): BigNumber { +): bigint { const concFactor = baseConcFactor(price, lower, upper); return liquidityForBaseQty(price, qty, concFactor); } @@ -81,35 +80,35 @@ export function liquidityForBaseConc( * @return The amount of virtual liquidity (in sqrt(X*Y)) supported by this quote token quantity. */ export function liquidityForQuoteConc( price: number, - qty: BigNumber, + qty: bigint, lower: number, upper: number -): BigNumber { +): bigint { const concFactor = quoteConcFactor(price, lower, upper); return liquidityForQuoteQty(price, qty, concFactor); } export function baseTokenForConcLiq( price: number, - liq: BigNumber, + liq: bigint, lower: number, upper: number -): BigNumber { +): bigint { const concFactor = baseConcFactor(price, lower, upper); return baseVirtualReserves(price, liq, 1 / concFactor); } export function quoteTokenForConcLiq( price: number, - liq: BigNumber, + liq: bigint, lower: number, upper: number -): BigNumber { +): bigint { const concFactor = quoteConcFactor(price, lower, upper); return quoteVirtualReserves(price, liq, 1 / concFactor); } -export function baseTokenForQuoteConc (baseQty: number, +export function baseTokenForQuoteConc (baseQty: number, lower: number, upper: number): number { const growth = Math.sqrt(upper/lower) - 1 const virtBase = baseQty / growth; @@ -117,7 +116,7 @@ export function baseTokenForQuoteConc (baseQty: number, return virtQuote * (1 / (1 - growth) - 1) } -export function quoteTokenForBaseConc (quoteQty: number, +export function quoteTokenForBaseConc (quoteQty: number, lower: number, upper: number): number { return baseTokenForQuoteConc(quoteQty, 1/upper, 1/lower) } @@ -212,7 +211,7 @@ export function concQuoteSlippagePrice (spotPrice: number, lowerPrice: number, s } /* Rounds a liquidity magnitude to a multiple that can be used inside the protocol. */ -export function roundForConcLiq(liq: BigNumber): BigNumber { +export function roundForConcLiq(liq: bigint): bigint { const CONC_LOTS_BITS = 11; return truncateRightBits(liq, CONC_LOTS_BITS); } diff --git a/src/utils/math.ts b/src/utils/math.ts index 112c2b1..78c01a4 100644 --- a/src/utils/math.ts +++ b/src/utils/math.ts @@ -1,17 +1,15 @@ -import { BigNumber } from 'ethers'; - export function toFixedNumber(num: number, digits: number, base?: number) { const pow = Math.pow(base || 10, digits); return Math.round(num * pow) / pow; } -export function bigNumToFloat (val: BigNumber): number { - return val.lt(Number.MAX_SAFE_INTEGER - 1) - ? val.toNumber() +export function bigIntToFloat (val: bigint): number { + return val < BigInt(Number.MAX_SAFE_INTEGER - 1) + ? Number(val) : parseFloat(val.toString()); } -export function floatToBigNum (x: number): BigNumber { +export function floatToBigInt (x: number): bigint { let floatPrice = x let scale = 0; @@ -22,15 +20,15 @@ export function floatToBigNum (x: number): BigNumber { } const pinPrice = Math.round(floatPrice); - const mult = BigNumber.from(2).pow(scale) - return BigNumber.from(pinPrice).mul(mult); + const mult = BigInt(2) ** BigInt(scale) + return BigInt(pinPrice) * mult; } -export function truncateRightBits (x: BigNumber, bits: number): BigNumber { - const mult = BigNumber.from(2).pow(bits) - return x.div(mult).mul(mult) +export function truncateRightBits(x: bigint, bits: number): bigint { + const mult = BigInt(2) ** BigInt(bits) + return x / mult * mult } -export function fromFixedGrowth (x: BigNumber): number { - return 1 + bigNumToFloat(x) / (2 ** 48) -} \ No newline at end of file +export function fromFixedGrowth (x: bigint): number { + return 1 + bigIntToFloat(x) / (2 ** 48) +} diff --git a/src/utils/price.ts b/src/utils/price.ts index 865cf2c..d27516b 100644 --- a/src/utils/price.ts +++ b/src/utils/price.ts @@ -1,27 +1,26 @@ -import { BigNumber } from "ethers"; import { MIN_TICK, MAX_TICK } from "../constants"; type Tick = number; -export function encodeCrocPrice(price: number): BigNumber { +export function encodeCrocPrice(price: number): bigint { let floatPrice = Math.sqrt(price) * 2 ** 64; - let scale = 0; + let scale = BigInt(0); const PRECISION_BITS = 16; while (floatPrice > Number.MAX_SAFE_INTEGER) { floatPrice = floatPrice / 2 ** PRECISION_BITS; - scale = scale + PRECISION_BITS; + scale = scale + BigInt(PRECISION_BITS); } const pinPrice = Math.round(floatPrice); - const bnSeed = BigNumber.from(pinPrice); + const bnSeed = BigInt(pinPrice); - return bnSeed.mul(BigNumber.from(2).pow(scale)); + return bnSeed * (BigInt(2) ** scale); } -export function decodeCrocPrice(val: BigNumber) { - const x = val.lt(Number.MAX_SAFE_INTEGER - 1) - ? val.toNumber() +export function decodeCrocPrice(val: bigint) { + const x = val < (Number.MAX_SAFE_INTEGER - 1) + ? Number(val) : parseFloat(val.toString()); const sq = x / 2 ** 64; return sq * sq; @@ -62,7 +61,7 @@ export function priceHalfBelowTick( const halfTickBelow = (tick - (.5 * nTicksGrid)) return Math.pow(1.0001, halfTickBelow); } - + export function pinTickUpper( price: number, nTicksGrid: number): Tick { @@ -82,7 +81,7 @@ export function pinTickOutside( const priceInTicks = priceToTick(price) const poolInTicks = priceToTick(poolPrice) - const [poolLower, poolUpper] = + const [poolLower, poolUpper] = [pinTickLower(poolPrice, nTicksGrid), pinTickUpper(poolPrice, nTicksGrid)] if (priceInTicks < poolInTicks) { @@ -91,7 +90,7 @@ export function pinTickOutside( } else { return { tick: pinTickLower(price, nTicksGrid), isTickBelow: true } } - + } else { if (priceInTicks <= poolUpper) { return { tick: poolUpper + nTicksGrid, isTickBelow: false } @@ -104,12 +103,12 @@ export function pinTickOutside( /* Returns the neighboring N on-grid ticks to a given price. Ticks will be * sorted from closest to furthers */ -export function neighborTicks (price: number, nTicksGrid: number, +export function neighborTicks (price: number, nTicksGrid: number, nNeighbors: number = 1): { below: number[], above: number[] } { const priceInTicks = pinTickLower(price, nTicksGrid) - return { + return { below: Array.from({length: nNeighbors}). map((_, idx: number) => priceInTicks - idx * nTicksGrid), above: Array.from({length: nNeighbors}). @@ -120,11 +119,11 @@ export function neighborTicks (price: number, nTicksGrid: number, export function priceToTick (price: number): Tick { return Math.floor(Math.log(price) / Math.log(1.0001)) } - + export function tickToPrice(tick: Tick): number { return Math.pow(1.0001, tick); } - + export function priceHalfAboveTick( tick: number, nTicksGrid: number): Tick { diff --git a/src/utils/token.ts b/src/utils/token.ts index 9ef851c..5fc65d5 100644 --- a/src/utils/token.ts +++ b/src/utils/token.ts @@ -1,13 +1,13 @@ -import { ethers, BigNumber } from "ethers"; +import { parseUnits, formatUnits } from "viem"; export function getBaseTokenAddress(token1: string, token2: string): string { let baseTokenAddress = ""; if (!!token1 && !!token2) { - const token1BigNum = BigNumber.from(token1); - const token2BigNum = BigNumber.from(token2); + const token1BigNum = BigInt(token1); + const token2BigNum = BigInt(token2); // On-chain base token is always the smaller of the two - baseTokenAddress = token1BigNum.lt(token2BigNum) ? token1 : token2; + baseTokenAddress = token1BigNum < token2BigNum ? token1 : token2; } return baseTokenAddress; } @@ -16,10 +16,10 @@ export function getQuoteTokenAddress(token1: string, token2: string): string { let quoteTokenAddress = ""; if (!!token1 && !!token2) { - const token1BigNum = BigNumber.from(token1); - const token2BigNum = BigNumber.from(token2); + const token1BigNum = BigInt(token1); + const token2BigNum = BigInt(token2); // On-chain quote token is always the larger of the two - quoteTokenAddress = token1BigNum.gt(token2BigNum) ? token1 : token2; + quoteTokenAddress = token1BigNum > token2BigNum ? token1 : token2; } return quoteTokenAddress; } @@ -34,31 +34,31 @@ export function sortBaseQuoteTokens( ]; } -export function fromDisplayQty(qty: string, tokenDecimals: number): BigNumber { +export function fromDisplayQty(qty: string, tokenDecimals: number): bigint { try { // First try to directly parse the string, so there's no loss of precision for // long fixed strings. - return ethers.utils.parseUnits(qty, tokenDecimals); + return parseUnits(qty, tokenDecimals); } catch { // If that fails (e.g. with scientific notation floats), then cast to float and // back to fixed string const sanitQty = parseFloat(qty).toFixed(tokenDecimals) - return ethers.utils.parseUnits(sanitQty, tokenDecimals) + return parseUnits(sanitQty, tokenDecimals) } } export function toDisplayQty( - qty: string | number | BigNumber, + qty: string | number | bigint, tokenDecimals: number ): string { // formatUnits is temperamental with Javascript numbers, so convert string to - // fullwide string to avoid scientific notation (which BigNumber pukes on) + // fullwide string to avoid scientific notation (which BigInt pukes on) if (typeof(qty) === "number" ) { const qtyString = qty.toLocaleString('fullwide', {useGrouping:false}) return toDisplayQty(qtyString, tokenDecimals) } - return ethers.utils.formatUnits(qty, tokenDecimals); + return formatUnits(BigInt(qty), tokenDecimals); } diff --git a/tsconfig.json b/tsconfig.json index f7de5ba..126c7e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,7 +20,7 @@ "sourceMap": true, "outDir": "./dist/", "types": ["node", "jest"], - "lib": ["ES2016", "DOM"] + "lib": ["ES2016", "DOM"], }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "**/*.test.ts"] diff --git a/yarn.lock b/yarn.lock index d4d1736..f896850 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,160 +2,174 @@ # yarn lockfile v1 -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@babel/highlight" "^7.16.7" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" -"@babel/compat-data@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" - integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== +"@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" - integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - convert-source-map "^1.7.0" + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/generator@^7.16.7", "@babel/generator@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" - integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/highlight@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" - integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" - integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -242,43 +256,44 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.16.7", "@babel/traverse@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" - integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - debug "^4.1.0" + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.24.1", "@babel/traverse@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== + dependencies: + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" - integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -286,386 +301,68 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + eslint-visitor-keys "^3.3.0" -"@eslint/eslintrc@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" - integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.2.0" - globals "^13.9.0" - ignore "^4.0.6" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" - minimatch "^3.0.4" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" - integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== - dependencies: - "@ethersproject/address" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/hash" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - -"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" - integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/networks" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/transactions" "^5.5.0" - "@ethersproject/web" "^5.5.0" - -"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" - integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== - dependencies: - "@ethersproject/abstract-provider" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - -"@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" - integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/rlp" "^5.5.0" - -"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" - integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== - dependencies: - "@ethersproject/bytes" "^5.5.0" - -"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" - integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - -"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" - integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - bn.js "^4.11.9" - -"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" - integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== - dependencies: - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" - integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - -"@ethersproject/contracts@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" - integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== - dependencies: - "@ethersproject/abi" "^5.5.0" - "@ethersproject/abstract-provider" "^5.5.0" - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/address" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/transactions" "^5.5.0" - -"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" - integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== - dependencies: - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/address" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - -"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" - integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== - dependencies: - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/basex" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/pbkdf2" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/sha2" "^5.5.0" - "@ethersproject/signing-key" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - "@ethersproject/transactions" "^5.5.0" - "@ethersproject/wordlists" "^5.5.0" - -"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" - integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== - dependencies: - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/address" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/hdnode" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/pbkdf2" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/random" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - "@ethersproject/transactions" "^5.5.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" - integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" - integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@ethersproject/networks@5.5.2", "@ethersproject/networks@^5.5.0": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b" - integrity sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@ethersproject/logger" "^5.5.0" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" -"@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" - integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/sha2" "^5.5.0" - -"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" - integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== - dependencies: - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/providers@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.2.tgz#131ccf52dc17afd0ab69ed444b8c0e3a27297d99" - integrity sha512-hkbx7x/MKcRjyrO4StKXCzCpWer6s97xnm34xkfPiarhtEUVAN4TBBpamM+z66WcTt7H5B53YwbRj1n7i8pZoQ== - dependencies: - "@ethersproject/abstract-provider" "^5.5.0" - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/address" "^5.5.0" - "@ethersproject/basex" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/hash" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/networks" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/random" "^5.5.0" - "@ethersproject/rlp" "^5.5.0" - "@ethersproject/sha2" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - "@ethersproject/transactions" "^5.5.0" - "@ethersproject/web" "^5.5.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.5.1", "@ethersproject/random@^5.5.0": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415" - integrity sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" - integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" - integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" - integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" - integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/sha2" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - -"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" - integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" - integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== - dependencies: - "@ethersproject/address" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/rlp" "^5.5.0" - "@ethersproject/signing-key" "^5.5.0" - -"@ethersproject/units@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" - integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/wallet@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" - integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== - dependencies: - "@ethersproject/abstract-provider" "^5.5.0" - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/address" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/hash" "^5.5.0" - "@ethersproject/hdnode" "^5.5.0" - "@ethersproject/json-wallets" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/random" "^5.5.0" - "@ethersproject/signing-key" "^5.5.0" - "@ethersproject/transactions" "^5.5.0" - "@ethersproject/wordlists" "^5.5.0" - -"@ethersproject/web@5.5.1", "@ethersproject/web@^5.5.0": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" - integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== - dependencies: - "@ethersproject/base64" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - -"@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" - integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/hash" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - -"@humanwhocodes/config-array@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" - integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -683,168 +380,168 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.6.tgz#0742e6787f682b22bdad56f9db2a8a77f6a86107" - integrity sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.4.6" - jest-util "^27.4.2" + jest-message-util "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" -"@jest/core@^27.4.7": - version "27.4.7" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.7.tgz#84eabdf42a25f1fa138272ed229bcf0a1b5e6913" - integrity sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg== +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== dependencies: - "@jest/console" "^27.4.6" - "@jest/reporters" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^27.4.2" - jest-config "^27.4.7" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-resolve-dependencies "^27.4.6" - jest-runner "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" - jest-watcher "^27.4.6" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.6.tgz#1e92885d64f48c8454df35ed9779fbcf31c56d8b" - integrity sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg== +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.4.6" + jest-mock "^27.5.1" -"@jest/fake-timers@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.6.tgz#e026ae1671316dbd04a56945be2fa251204324e8" - integrity sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A== +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-util "^27.4.2" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" -"@jest/globals@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.6.tgz#3f09bed64b0fd7f5f996920258bd4be8f52f060a" - integrity sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw== +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: - "@jest/environment" "^27.4.6" - "@jest/types" "^27.4.2" - expect "^27.4.6" + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" -"@jest/reporters@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.6.tgz#b53dec3a93baf9b00826abf95b932de919d6d8dd" - integrity sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ== +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.4.6" - jest-resolve "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/source-map@^27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" - integrity sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ== +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/test-result@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.6.tgz#b3df94c3d899c040f602cea296979844f61bdf69" - integrity sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ== +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: - "@jest/console" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz#447339b8a3d7b5436f50934df30854e442a9d904" - integrity sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw== +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: - "@jest/test-result" "^27.4.6" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-runtime "^27.4.6" + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" -"@jest/transform@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.6.tgz#153621940b1ed500305eacdb31105d415dc30231" - integrity sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw== +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-regex-util "^27.4.0" - jest-util "^27.4.2" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" - integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -852,6 +549,63 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -865,7 +619,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -873,10 +627,32 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@scure/base@~1.1.0", "@scure/base@~1.1.2": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -893,208 +669,234 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.20.7" "@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" - integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== + version "27.5.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" + integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== dependencies: - jest-diff "^27.0.0" + jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" "@types/json-schema@^7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@*": + version "20.12.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3" + integrity sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw== + dependencies: + undici-types "~5.26.4" -"@types/node@*", "@types/node@^17.0.8": - version "17.0.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" - integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== +"@types/node@^17.0.8": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/prettier@^2.1.5": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" - integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz#382182d5cb062f52aac54434cfc47c28898c8006" - integrity sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ== - dependencies: - "@typescript-eslint/experimental-utils" "5.9.0" - "@typescript-eslint/scope-manager" "5.9.0" - "@typescript-eslint/type-utils" "5.9.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.2.0" - semver "^7.3.5" + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz#652762d37d6565ef07af285021b8347b6c79a827" - integrity sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.9.0" - "@typescript-eslint/types" "5.9.0" - "@typescript-eslint/typescript-estree" "5.9.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@typescript-eslint/parser@^5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.9.0.tgz#fdbb08767a4caa6ca6ccfed5f9ffe9387f0c7d97" - integrity sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ== - dependencies: - "@typescript-eslint/scope-manager" "5.9.0" - "@typescript-eslint/types" "5.9.0" - "@typescript-eslint/typescript-estree" "5.9.0" - debug "^4.3.2" - -"@typescript-eslint/scope-manager@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz#02dfef920290c1dcd7b1999455a3eaae7a1a3117" - integrity sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg== - dependencies: - "@typescript-eslint/types" "5.9.0" - "@typescript-eslint/visitor-keys" "5.9.0" - -"@typescript-eslint/type-utils@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz#fd5963ead04bc9b7af9c3a8e534d8d39f1ce5f93" - integrity sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ== - dependencies: - "@typescript-eslint/experimental-utils" "5.9.0" - debug "^4.3.2" + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.9.0.tgz#e5619803e39d24a03b3369506df196355736e1a3" - integrity sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz#0e5c6f03f982931abbfbc3c1b9df5fbf92a3490f" - integrity sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.9.0" - "@typescript-eslint/visitor-keys" "5.9.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz#7585677732365e9d27f1878150fab3922784a1a6" - integrity sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw== +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.9.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== acorn-globals@^6.0.0: version "6.0.0" @@ -1104,7 +906,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1115,24 +917,19 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== agent-base@6: version "6.0.2" @@ -1141,7 +938,7 @@ agent-base@6: dependencies: debug "4" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1151,11 +948,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1193,9 +985,9 @@ ansi-styles@^5.0.0: integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1225,20 +1017,20 @@ array-union@^2.1.0: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -babel-jest@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.6.tgz#4d024e69e241cdf4f396e453a07100f44f7ce314" - integrity sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg== +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== dependencies: - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.4.0" + babel-preset-jest "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-plugin-istanbul@^6.1.1: @@ -1252,10 +1044,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz#d7831fc0f93573788d80dee7e682482da4c730d6" - integrity sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw== +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -1280,12 +1072,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz#70d0e676a282ccb200fbabd7f415db5fdf393bca" - integrity sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg== +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: - babel-plugin-jest-hoist "^27.4.0" + babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -1293,16 +1085,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1318,33 +1100,27 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.1: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.17.5: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== +browserslist@^4.22.2: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" bs-logger@0.x: version "0.2.6" @@ -1380,12 +1156,12 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001286: - version "1.0.30001298" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz#0e690039f62e91c3ea581673d716890512e7ec52" - integrity sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ== +caniuse-lite@^1.0.30001587: + version "1.0.30001607" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001607.tgz#b91e8e033f6bca4e13d3d45388d87fa88931d9a5" + integrity sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w== -chalk@^2.0.0: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1408,14 +1184,14 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== cliui@^7.0.2: version "7.0.4" @@ -1429,12 +1205,12 @@ cliui@^7.0.2: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== color-convert@^1.9.0: version "1.9.3" @@ -1453,7 +1229,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" @@ -1470,14 +1246,17 @@ combined-stream@^1.0.8: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" +convert-source-map@^1.4.0, convert-source-map@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== create-require@^1.1.0: version "1.1.1" @@ -1519,47 +1298,47 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" - integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== diff@^4.0.1: version "4.0.2" @@ -1587,23 +1366,10 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -electron-to-chromium@^1.4.17: - version "1.4.38" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.38.tgz#10ea58d73d36b13e78d5024f3b74a352d3958d01" - integrity sha512-WhHt3sZazKj0KK/UpgsbGQnUUoFeAHVishzHFExMxagpZgjiGYSC9S0ZlbhCfSH2L2i+2A1yyqOIliTctMx7KQ== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +electron-to-chromium@^1.4.668: + version "1.4.730" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.730.tgz#5e382c83085b50b9c63cb08692e8fcd875c1b9eb" + integrity sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg== emittery@^0.8.1: version "0.8.1" @@ -1615,136 +1381,149 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -esbuild-android-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz#b8b34e35a5b43880664ac7a3fbc70243d7ed894f" - integrity sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw== - -esbuild-darwin-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz#ba805de98c0412e50fcd0636451797da157b0625" - integrity sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ== - -esbuild-darwin-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz#4d3573e448af76ce33e16231f3d9f878542d6fe8" - integrity sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg== - -esbuild-freebsd-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz#9294e6ab359ec93590ab097b0f2017de7c78ab4d" - integrity sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA== - -esbuild-freebsd-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz#ae3e0b09173350b66cf8321583c9a1c1fcb8bb55" - integrity sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w== - -esbuild-linux-32@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz#ddadbc7038aa5a6b1675bb1503cf79a0cbf1229a" - integrity sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg== - -esbuild-linux-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz#d698e3ce3a231ddfeec6b5df8c546ae8883fcd88" - integrity sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg== - -esbuild-linux-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz#85faea9fa99ad355b5e3b283197a4dfd0a110fe7" - integrity sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg== - -esbuild-linux-arm@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz#74cbcf0b8a22c8401bcbcd6ebd4cbf2baca8b7b4" - integrity sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ== - -esbuild-linux-mips64le@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz#490429211a3233f5cbbd8575b7758b897e42979a" - integrity sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw== - -esbuild-linux-ppc64le@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz#fc79d60710213b5b98345f5b138d48245616827a" - integrity sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ== - -esbuild-linux-s390x@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz#ca4b93556bbba6cc95b0644f2ee93c982165ba07" - integrity sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw== - -esbuild-netbsd-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz#edb340bc6653c88804cac2253e21b74258fce165" - integrity sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw== - -esbuild-openbsd-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz#caeff5f946f79a60ce7bcf88871ca4c71d3476e8" - integrity sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q== - -esbuild-sunos-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz#90ce7e1749c2958a53509b4bae7b8f7d98f276d6" - integrity sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg== - -esbuild-windows-32@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz#d067f4ce15b29efba6336e6a23597120fafe49ec" - integrity sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ== - -esbuild-windows-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz#13e86dd37a6cd61a5276fa2d271342d0f74da864" - integrity sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg== - -esbuild-windows-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz#e8edfdf1d712085e6dc3fba18a0c225aaae32b75" - integrity sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== esbuild@^0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.11.tgz#ac4acb78907874832afb704c3afe58ad37715c27" - integrity sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg== + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== optionalDependencies: - esbuild-android-arm64 "0.14.11" - esbuild-darwin-64 "0.14.11" - esbuild-darwin-arm64 "0.14.11" - esbuild-freebsd-64 "0.14.11" - esbuild-freebsd-arm64 "0.14.11" - esbuild-linux-32 "0.14.11" - esbuild-linux-64 "0.14.11" - esbuild-linux-arm "0.14.11" - esbuild-linux-arm64 "0.14.11" - esbuild-linux-mips64le "0.14.11" - esbuild-linux-ppc64le "0.14.11" - esbuild-linux-s390x "0.14.11" - esbuild-netbsd-64 "0.14.11" - esbuild-openbsd-64 "0.14.11" - esbuild-sunos-64 "0.14.11" - esbuild-windows-32 "0.14.11" - esbuild-windows-64 "0.14.11" - esbuild-windows-arm64 "0.14.11" + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" @@ -1757,14 +1536,13 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" @@ -1776,93 +1554,81 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" - integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" - integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.6.0.tgz#4318c6a31c5584838c1a2e940c478190f58d558e" - integrity sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw== - dependencies: - "@eslint/eslintrc" "^1.0.5" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.0" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.1.0" - espree "^9.3.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.2.0" - semver "^7.2.1" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.2.0, espree@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" - integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.7.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.1.0" + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -1888,42 +1654,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -ethers@^5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.3.tgz#1e361516711c0c3244b6210e7e3ecabf0c75fca0" - integrity sha512-fTT4WT8/hTe/BLwRUtl7I5zlpF3XC3P/Xwqxc5AIP2HGlH15qpmjs0Ou78az93b1rLITzXLFxoNX63B8ZbUd7g== - dependencies: - "@ethersproject/abi" "5.5.0" - "@ethersproject/abstract-provider" "5.5.1" - "@ethersproject/abstract-signer" "5.5.0" - "@ethersproject/address" "5.5.0" - "@ethersproject/base64" "5.5.0" - "@ethersproject/basex" "5.5.0" - "@ethersproject/bignumber" "5.5.0" - "@ethersproject/bytes" "5.5.0" - "@ethersproject/constants" "5.5.0" - "@ethersproject/contracts" "5.5.0" - "@ethersproject/hash" "5.5.0" - "@ethersproject/hdnode" "5.5.0" - "@ethersproject/json-wallets" "5.5.0" - "@ethersproject/keccak256" "5.5.0" - "@ethersproject/logger" "5.5.0" - "@ethersproject/networks" "5.5.2" - "@ethersproject/pbkdf2" "5.5.0" - "@ethersproject/properties" "5.5.0" - "@ethersproject/providers" "5.5.2" - "@ethersproject/random" "5.5.1" - "@ethersproject/rlp" "5.5.0" - "@ethersproject/sha2" "5.5.0" - "@ethersproject/signing-key" "5.5.0" - "@ethersproject/solidity" "5.5.0" - "@ethersproject/strings" "5.5.0" - "@ethersproject/transactions" "5.5.0" - "@ethersproject/units" "5.5.0" - "@ethersproject/wallet" "5.5.0" - "@ethersproject/web" "5.5.1" - "@ethersproject/wordlists" "5.5.0" - execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -1942,17 +1672,17 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.6.tgz#f335e128b0335b6ceb4fcab67ece7cbd14c942e6" - integrity sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag== +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: - "@jest/types" "^27.4.2" - jest-get-type "^27.4.0" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -1960,9 +1690,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: - version "3.2.10" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.10.tgz#2734f83baa7f43b7fd41e13bc34438f4ffe284ee" - integrity sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -1975,22 +1705,22 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -2016,18 +1746,27 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== form-data@^3.0.0: version "3.0.1" @@ -2041,22 +1780,17 @@ form-data@^3.0.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -2085,7 +1819,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -2093,14 +1827,14 @@ glob-parent@^6.0.1: is-glob "^4.0.3" glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2109,14 +1843,14 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -globby@^11.0.4: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -2128,44 +1862,32 @@ globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.2.4: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" + function-bind "^1.1.2" html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -2189,9 +1911,9 @@ http-proxy-agent@^4.0.1: debug "4" https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" @@ -2208,17 +1930,12 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.8, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -2237,32 +1954,37 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-core-module@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -2286,6 +2008,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -2299,22 +2026,27 @@ is-stream@^2.0.0: is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -2323,12 +2055,12 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: semver "^6.3.0" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -2341,421 +2073,417 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" - integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.4.2.tgz#da2547ea47c6e6a5f6ed336151bd2075736eb4a5" - integrity sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A== +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.6.tgz#d3af34c0eb742a967b1919fbb351430727bcea6c" - integrity sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ== +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.4.6" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.7.tgz#d00e759e55d77b3bcfea0715f527c394ca314e5a" - integrity sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw== +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== dependencies: - "@jest/core" "^27.4.7" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.4.7" - jest-util "^27.4.2" - jest-validate "^27.4.6" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" yargs "^16.2.0" -jest-config@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.7.tgz#4f084b2acbd172c8b43aa4cdffe75d89378d3972" - integrity sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.4.6" - "@jest/types" "^27.4.2" - babel-jest "^27.4.6" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" - graceful-fs "^4.2.4" - jest-circus "^27.4.6" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-get-type "^27.4.0" - jest-jasmine2 "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-runner "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" micromatch "^4.0.4" - pretty-format "^27.4.6" + parse-json "^5.2.0" + pretty-format "^27.5.1" slash "^3.0.0" + strip-json-comments "^3.1.1" -jest-diff@^27.0.0, jest-diff@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" - integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: chalk "^4.0.0" - diff-sequences "^27.4.0" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-docblock@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" - integrity sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg== +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" -jest-each@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.6.tgz#e7e8561be61d8cc6dbf04296688747ab186c40ff" - integrity sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^27.4.0" - jest-util "^27.4.2" - pretty-format "^27.4.6" - -jest-environment-jsdom@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz#c23a394eb445b33621dfae9c09e4c8021dea7b36" - integrity sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" jsdom "^16.6.0" -jest-environment-node@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.6.tgz#ee8cd4ef458a0ef09d087c8cd52ca5856df90242" - integrity sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ== +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" -jest-get-type@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" - integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-haste-map@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.6.tgz#c60b5233a34ca0520f325b7e2cc0a0140ad0862a" - integrity sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ== +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^27.4.0" - jest-serializer "^27.4.0" - jest-util "^27.4.2" - jest-worker "^27.4.6" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz#109e8bc036cb455950ae28a018f983f2abe50127" - integrity sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw== +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== dependencies: - "@jest/environment" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.4.6" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" throat "^6.0.1" -jest-leak-detector@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz#ed9bc3ce514b4c582637088d9faf58a33bd59bf4" - integrity sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA== +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== dependencies: - jest-get-type "^27.4.0" - pretty-format "^27.4.6" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-matcher-utils@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz#53ca7f7b58170638590e946f5363b988775509b8" - integrity sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA== +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: chalk "^4.0.0" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-message-util@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.6.tgz#9fdde41a33820ded3127465e1a5896061524da31" - integrity sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA== +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.4.6" + pretty-format "^27.5.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.6.tgz#77d1ba87fbd33ccb8ef1f061697e7341b7635195" - integrity sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw== +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" - integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== - -jest-resolve-dependencies@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz#fc50ee56a67d2c2183063f6a500cc4042b5e2327" - integrity sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw== - dependencies: - "@jest/types" "^27.4.2" - jest-regex-util "^27.4.0" - jest-snapshot "^27.4.6" - -jest-resolve@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.6.tgz#2ec3110655e86d5bfcfa992e404e22f96b0b5977" - integrity sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw== - dependencies: - "@jest/types" "^27.4.2" + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" jest-pnp-resolver "^1.2.2" - jest-util "^27.4.2" - jest-validate "^27.4.6" + jest-util "^27.5.1" + jest-validate "^27.5.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.6.tgz#1d390d276ec417e9b4d0d081783584cbc3e24773" - integrity sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg== +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== dependencies: - "@jest/console" "^27.4.6" - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-docblock "^27.4.0" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-haste-map "^27.4.6" - jest-leak-detector "^27.4.6" - jest-message-util "^27.4.6" - jest-resolve "^27.4.6" - jest-runtime "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.6.tgz#83ae923818e3ea04463b22f3597f017bb5a1cffa" - integrity sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/globals" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.4.0.tgz#34866586e1cae2388b7d12ffa2c7819edef5958a" - integrity sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ== +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" -jest-snapshot@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.6.tgz#e2a3b4fff8bdce3033f2373b2e525d8b6871f616" - integrity sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.4.6" - graceful-fs "^4.2.4" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - jest-haste-map "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-util "^27.4.2" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^27.4.6" + pretty-format "^27.5.1" semver "^7.3.2" -jest-util@^27.0.0, jest-util@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" - integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== +jest-util@^27.0.0, jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.6.tgz#efc000acc4697b6cf4fa68c7f3f324c92d0c4f1f" - integrity sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ== +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.4.0" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^27.4.6" + pretty-format "^27.5.1" -jest-watcher@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.6.tgz#673679ebeffdd3f94338c24f399b85efc932272d" - integrity sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw== +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== dependencies: - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.4.2" + jest-util "^27.5.1" string-length "^4.0.1" -jest-worker@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" - integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.7.tgz#87f74b9026a1592f2da05b4d258e57505f28eca4" - integrity sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg== + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - "@jest/core" "^27.4.7" + "@jest/core" "^27.5.1" import-local "^3.0.2" - jest-cli "^27.4.7" - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + jest-cli "^27.5.1" js-tokens@^4.0.0: version "4.0.0" @@ -2815,6 +2543,16 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2823,19 +2561,24 @@ json-schema-traverse@^0.4.1: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" +json5@2.x, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" kleur@^3.0.3: version "3.0.3" @@ -2855,13 +2598,10 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^5.0.0: version "5.0.0" @@ -2870,10 +2610,17 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" @@ -2885,6 +2632,13 @@ lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2897,12 +2651,12 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-error@1.x, make-error@^1.1.1: version "1.3.6" @@ -2932,78 +2686,68 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.2" + picomatch "^2.3.1" -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.51.0" + mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" @@ -3018,14 +2762,14 @@ npm-run-path@^4.0.1: path-key "^3.0.0" nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -3036,29 +2780,17 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" p-limit@^2.2.0: version "2.3.0" @@ -3067,6 +2799,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -3074,6 +2813,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -3086,6 +2832,16 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -3099,7 +2855,7 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" @@ -3121,15 +2877,15 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.4.tgz#07df81e61028e402735cdd49db701e4885b4e6e6" - integrity sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^4.2.0: version "4.2.0" @@ -3143,25 +2899,15 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -pretty-format@^27.0.0, pretty-format@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" - integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== +pretty-format@^27.0.0, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^17.0.1" -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -3171,14 +2917,19 @@ prompts@^2.0.1: sisteransi "^1.0.5" psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" @@ -3190,15 +2941,15 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" @@ -3218,16 +2969,16 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== resolve@^1.20.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" - integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.8.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -3250,11 +3001,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3267,22 +3013,17 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@7.x, semver@^7.3.2, semver@^7.3.7, semver@^7.5.3: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== shebang-command@^2.0.0: version "2.0.0" @@ -3296,10 +3037,10 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@^0.14.1: - version "0.14.6" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.6.tgz#908a9cd5439f7e87279c6623e7c60a3b0a2df85c" - integrity sha512-R4koBBlQP33cC8cpzX0hAoOURBHJILp4Aaduh2eYi+Vj8ZBqtK/5SWNEHBS3qwUMu8dqOtI/ftno3ESfNeVW9g== +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== dependencies: ansi-sequence-parser "^1.1.0" jsonc-parser "^3.2.0" @@ -3307,9 +3048,9 @@ shiki@^0.14.1: vscode-textmate "^8.0.0" signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.6" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" @@ -3329,30 +3070,25 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -3390,7 +3126,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -3417,9 +3153,9 @@ supports-color@^8.0.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -3454,12 +3190,12 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== tmpl@1.0.5: version "1.0.5" @@ -3469,7 +3205,7 @@ tmpl@1.0.5: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" @@ -3479,13 +3215,14 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" tr46@^2.1.0: version "2.1.0" @@ -3495,9 +3232,9 @@ tr46@^2.1.0: punycode "^2.1.1" ts-jest@^27.1.2: - version "27.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.2.tgz#5991d6eb3fd8e1a8d4b8f6de3ec0a3cc567f3151" - integrity sha512-eSOiJOWq6Hhs6Khzk5wKC5sgWIXgXqOCiIl1+3lfnearu58Hj4QpE5tUhQcA3xtZrELbcvAGCsd6HB8OsaVaTA== + version "27.1.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" + integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" @@ -3509,11 +3246,11 @@ ts-jest@^27.1.2: yargs-parser "20.x" ts-node@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" - integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -3524,6 +3261,7 @@ ts-node@^10.4.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" tslib@^1.8.1: @@ -3545,13 +3283,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -3575,24 +3306,37 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typedoc@^0.25.4: - version "0.25.4" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.4.tgz#5c2c0677881f504e41985f29d9aef0dbdb6f1e6f" - integrity sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA== + version "0.25.13" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" + integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== dependencies: lunr "^2.3.9" marked "^4.3.0" minimatch "^9.0.3" - shiki "^0.14.1" + shiki "^0.14.7" typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + version "5.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" + integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" @@ -3601,10 +3345,18 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-to-istanbul@^8.1.0: version "8.1.1" @@ -3615,6 +3367,20 @@ v8-to-istanbul@^8.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" +viem@^2.9.13: + version "2.9.13" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.13.tgz#3053394a0b3b60e46706951fefba6dd43ed1f50b" + integrity sha512-TxNZOWFwr2Pc6CeY4tViFL2NRq9v86HofAPkhBgScP8DUn3EeSbQhmDXbjMZNkZvXoMqWVl0AZM81rEOlaKrbg== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + vscode-oniguruma@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" @@ -3684,11 +3450,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3701,7 +3462,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" @@ -3713,15 +3474,15 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== ws@^7.4.6: - version "7.5.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" - integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== xml-name-validator@^3.0.0: version "3.0.0" @@ -3738,6 +3499,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -3765,3 +3531,8 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==