diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 72490feef3..0000000000 --- a/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -.git -node_modules -build diff --git a/.github/workflows/generate-pages.yml b/.github/workflows/generate-pages.yml index 21b0a38faa..d974b3ae89 100644 --- a/.github/workflows/generate-pages.yml +++ b/.github/workflows/generate-pages.yml @@ -20,11 +20,13 @@ jobs: steps: - name: Checkout source uses: actions/checkout@v2 + with: + submodules: true - name: Setup Node.js & Yarn uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 cache: yarn env: # Workaround for https://github.com/actions/setup-node/issues/317 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..075198e5f1 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "bold"] + path = bold + url = git@github.com:liquity/bold.git diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 9f4a50731c..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -# === Build stage === - -FROM node:12 as build - -WORKDIR /build - -# Install dependencies first, so the layer can be reused from cache when only the sources change -COPY package.json yarn.lock ./ -RUN yarn install --frozen-lockfile - -COPY . . -RUN yarn build - -# === Production stage === - -FROM node:12-alpine - -WORKDIR /app -COPY --from=build /build/build . -COPY --from=build /build/node_modules ./node_modules - -EXPOSE 8080 -ENV NODE_ENV=production -CMD [ "node", "index.js" ] diff --git a/bold b/bold new file mode 160000 index 0000000000..cd60305211 --- /dev/null +++ b/bold @@ -0,0 +1 @@ +Subproject commit cd6030521106184d329b0bef9d860274b716b152 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index a031af8dae..0000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: "3" - -services: - lqty-circulating-supply: - build: . - image: "liquity/lqty-circulating-supply" - ports: - - 8080:8080 - environment: - - ALCHEMY_API_KEY= - restart: always diff --git a/package.json b/package.json index 4b85f31800..282cc3b1bc 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "private": true, "type": "module", "scripts": { - "start": "ts-node-esm src/index.ts", - "once": "ts-node-esm src/once.ts", + "start": "tsx src/index.ts", + "once": "tsx src/once.ts", "build": "tsc --project tsconfig.json" }, "dependencies": { @@ -24,7 +24,8 @@ "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "eslint": "8.57.1", - "ts-node": "10.9.2", + "tsx": "^4.19.1", "typescript": "5.6.3" - } + }, + "packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72" } diff --git a/src/AlchemyProvider.ts b/src/AlchemyProvider.ts new file mode 100644 index 0000000000..14a0841f12 --- /dev/null +++ b/src/AlchemyProvider.ts @@ -0,0 +1,111 @@ +import { Network, Networkish } from "@ethersproject/networks"; +import { defineReadOnly } from "@ethersproject/properties"; +import { ConnectionInfo } from "@ethersproject/web"; + +import { + CommunityResourcable, + showThrottleMessage, + WebSocketProvider, + UrlJsonRpcProvider +} from "@ethersproject/providers"; + +import { Logger } from "@ethersproject/logger"; +const logger = new Logger("providers/5.8.0-custom"); + +// This key was provided to ethers.js by Alchemy to be used by the +// default provider, but it is recommended that for your own +// production environments, that you acquire your own API key at: +// https://dashboard.alchemyapi.io + +const defaultApiKey = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC"; + +export class AlchemyWebSocketProvider extends WebSocketProvider implements CommunityResourcable { + readonly apiKey!: string; + + constructor(network?: Networkish, apiKey?: any) { + const provider = new AlchemyProvider(network, apiKey); + + const url = provider.connection.url + .replace(/^http/i, "ws") + .replace(".alchemyapi.", ".ws.alchemyapi."); + + super(url, provider.network); + defineReadOnly(this, "apiKey", provider.apiKey); + } + + isCommunityResource(): boolean { + return this.apiKey === defaultApiKey; + } +} + +export class AlchemyProvider extends UrlJsonRpcProvider { + static getWebSocketProvider(network?: Networkish, apiKey?: any): AlchemyWebSocketProvider { + return new AlchemyWebSocketProvider(network, apiKey); + } + + static getApiKey(apiKey: any): any { + if (apiKey == null) { + return defaultApiKey; + } + if (apiKey && typeof apiKey !== "string") { + logger.throwArgumentError("invalid apiKey", "apiKey", apiKey); + } + return apiKey; + } + + static getUrl(network: Network, apiKey: string): ConnectionInfo { + let host = null; + switch (network.name) { + case "homestead": + host = "eth-mainnet.alchemyapi.io/v2/"; + break; + case "goerli": + host = "eth-goerli.g.alchemy.com/v2/"; + break; + case "sepolia": + host = "eth-sepolia.g.alchemy.com/v2/"; + break; + case "matic": + host = "polygon-mainnet.g.alchemy.com/v2/"; + break; + case "maticmum": + host = "polygon-mumbai.g.alchemy.com/v2/"; + break; + case "arbitrum": + host = "arb-mainnet.g.alchemy.com/v2/"; + break; + case "arbitrum-goerli": + host = "arb-goerli.g.alchemy.com/v2/"; + break; + case "arbitrum-sepolia": + host = "arb-sepolia.g.alchemy.com/v2/"; + break; + case "optimism": + host = "opt-mainnet.g.alchemy.com/v2/"; + break; + case "optimism-goerli": + host = "opt-goerli.g.alchemy.com/v2/"; + break; + case "optimism-sepolia": + host = "opt-sepolia.g.alchemy.com/v2/"; + break; + default: + logger.throwArgumentError("unsupported network", "network", arguments[0]); + } + + return { + allowGzip: true, + url: "https:/" + "/" + host + apiKey, + throttleCallback: (attempt: number, url: string) => { + if (apiKey === defaultApiKey) { + showThrottleMessage(); + } + return Promise.resolve(true); + } + }; + } + + isCommunityResource(): boolean { + return this.apiKey === defaultApiKey; + } +} diff --git a/src/connection.ts b/src/connection.ts index 82a41d93a0..c13424e156 100644 --- a/src/connection.ts +++ b/src/connection.ts @@ -1,8 +1,9 @@ -import { AlchemyProvider } from "@ethersproject/providers"; +import type { Provider } from "@ethersproject/abstract-provider"; import { Networkish, getNetwork } from "@ethersproject/networks"; -import { EthersLiquity } from "@liquity/lib-ethers"; import { Batched, WebSocketAugmented } from "@liquity/providers"; +import { AlchemyProvider } from "./AlchemyProvider.js"; + const BatchedWebSocketAugmentedAlchemyProvider = Batched(WebSocketAugmented(AlchemyProvider)); export interface LiquityConnectionOptions { @@ -10,13 +11,12 @@ export interface LiquityConnectionOptions { useWebSocket?: boolean; } -export const connectToLiquity = ( +export const getProvider = ( networkish: Networkish, options?: LiquityConnectionOptions -): Promise => { +): Provider => { const network = getNetwork(networkish); const provider = new BatchedWebSocketAugmentedAlchemyProvider(network, options?.alchemyApiKey); - const liquity = EthersLiquity.connect(provider); provider.chainId = network.chainId; @@ -27,5 +27,5 @@ export const connectToLiquity = ( ); } - return liquity; + return provider; }; diff --git a/src/constants.ts b/src/constants.ts index b8d4649b01..780d31e787 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,9 +1,9 @@ +import path from "path"; import { Decimal } from "@liquity/lib-base"; -export const DEFAULT_SERVER_PORT = 8080; -export const DEFAULT_NETWORK = "mainnet"; - -export const DEFAULT_OUTPUT_DIR = "docs/v1"; +export const OUTPUT_DIR = "docs"; +export const OUTPUT_DIR_V1 = path.join(OUTPUT_DIR, "v1"); +export const OUTPUT_DIR_V2 = path.join(OUTPUT_DIR, "v2"); export const LQTY_CIRCULATING_SUPPLY_FILE = "lqty_circulating_supply.txt"; export const LUSD_TOTAL_SUPPLY_FILE = "lusd_total_supply.txt"; export const LUSD_CB_BAMM_STATS_FILE = "lusd_cb_bamm_stats.json"; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index f0d9412e21..0000000000 --- a/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import WebSocket from "ws"; -import express from "express"; - -import { DEFAULT_NETWORK, DEFAULT_SERVER_PORT } from "./constants"; -import { connectToLiquity } from "./connection"; -import { LQTYCirculatingSupplyPoller } from "./LQTYCirculatingSupplyPoller"; - -Object.assign(globalThis, { WebSocket }); - -const PORT = process.env.PORT || DEFAULT_SERVER_PORT; -const alchemyApiKey = process.env.ALCHEMY_API_KEY || undefined; // filter out empty string - -const app = express(); -const liquity = connectToLiquity(DEFAULT_NETWORK, { alchemyApiKey, useWebSocket: true }); -const poller = new LQTYCirculatingSupplyPoller(liquity); - -app.get("/", (_req, res) => { - res.type("text/plain").send(`${poller.latestCirculatingSupply}`); -}); - -poller.start().then(() => - app.listen(PORT, () => { - console.log(`Listening on port ${PORT}...`); - }) -); diff --git a/src/once.ts b/src/once.ts index 8fea2f8186..253ab32b0b 100644 --- a/src/once.ts +++ b/src/once.ts @@ -1,14 +1,19 @@ import fs from "fs"; import path from "path"; +import util from "util"; +import { EthersLiquity } from "@liquity/lib-ethers"; -import { connectToLiquity } from "./connection.js"; +import { getProvider } from "./connection.js"; import { fetchLQTYCirculatingSupply } from "./fetchLQTYCirculatingSupply.js"; import { fetchLUSDTotalSupply } from "./fetchLUSDTotalSupply.js"; import { fetchLUSDCBBAMMStats } from "./fetchLUSDCBBAMMStats.js"; +import { fetchV2Stats } from "./v2/fetchV2Stats.js"; +// import v2MainnetAddresses from "../bold/contracts/addresses/1.json"; +import v2SepoliaAddresses from "../bold/contracts/addresses/11155111.json"; import { - DEFAULT_NETWORK, - DEFAULT_OUTPUT_DIR, + OUTPUT_DIR_V1, + OUTPUT_DIR_V2, LQTY_CIRCULATING_SUPPLY_FILE, LUSD_CB_BAMM_STATS_FILE, LUSD_TOTAL_SUPPLY_FILE @@ -21,27 +26,72 @@ const panic = (message: string): T => { const alchemyApiKey = process.env.ALCHEMY_API_KEY || undefined; // filter out empty string const transposeApiKey: string = process.env.TRANSPOSE_API_KEY || panic("missing TRANSPOSE_API_KEY"); -const outputDir = DEFAULT_OUTPUT_DIR; -const lqtyCirculatingSupplyFile = path.join(outputDir, LQTY_CIRCULATING_SUPPLY_FILE); -const lusdTotalSupplyFile = path.join(outputDir, LUSD_TOTAL_SUPPLY_FILE); -const lusdCBBAMMStatsFile = path.join(outputDir, LUSD_CB_BAMM_STATS_FILE); +const lqtyCirculatingSupplyFile = path.join(OUTPUT_DIR_V1, LQTY_CIRCULATING_SUPPLY_FILE); +const lusdTotalSupplyFile = path.join(OUTPUT_DIR_V1, LUSD_TOTAL_SUPPLY_FILE); +const lusdCBBAMMStatsFile = path.join(OUTPUT_DIR_V1, LUSD_CB_BAMM_STATS_FILE); -connectToLiquity(DEFAULT_NETWORK, { alchemyApiKey }) +const mainnetProvider = getProvider("mainnet", { alchemyApiKey }); +const sepoliaProvider = getProvider("sepolia", { alchemyApiKey }); + +interface Tree extends Record {} + +const writeTree = (parentDir: string, tree: Tree) => { + if (!fs.existsSync(parentDir)) fs.mkdirSync(parentDir); + + for (const [k, v] of Object.entries(tree)) { + const prefix = path.join(parentDir, k); + + if (typeof v === "string") { + fs.writeFileSync(`${prefix}.txt`, v); + } else { + writeTree(prefix, v); + } + } +}; + +EthersLiquity.connect(mainnetProvider) .then(async liquity => { - const [lqtyCirculatingSupply, lusdTotalSupply, lusdCBBAMMStats] = await Promise.all([ + const [ + lqtyCirculatingSupply, + lusdTotalSupply, + lusdCBBAMMStats, + // v2MainnetStats, + v2SepoliaStats + ] = await Promise.all([ fetchLQTYCirculatingSupply(liquity), fetchLUSDTotalSupply(liquity), - fetchLUSDCBBAMMStats(transposeApiKey) + fetchLUSDCBBAMMStats(transposeApiKey), + // fetchV2Stats(mainnetProvider, v2MainnetAddresses), + fetchV2Stats(sepoliaProvider, v2SepoliaAddresses) ]); - fs.mkdirSync(outputDir, { recursive: true }); + const v2Stats = { + // ...v2MainnetStats, + testnet: { + sepolia: v2SepoliaStats + } + }; + + fs.mkdirSync(OUTPUT_DIR_V1, { recursive: true }); fs.writeFileSync(lqtyCirculatingSupplyFile, `${lqtyCirculatingSupply}`); fs.writeFileSync(lusdTotalSupplyFile, `${lusdTotalSupply}`); fs.writeFileSync(lusdCBBAMMStatsFile, JSON.stringify(lusdCBBAMMStats)); + writeTree(OUTPUT_DIR_V2, v2Stats); + // fs.writeFileSync( + // path.join(OUTPUT_DIR_V2, "mainnet.json"), + // JSON.stringify(v2MainnetStats, null, 2) + // ); + fs.writeFileSync( + path.join(OUTPUT_DIR_V2, "testnet", "sepolia.json"), + JSON.stringify(v2SepoliaStats, null, 2) + ); + console.log(`LQTY circulating supply: ${lqtyCirculatingSupply}`); console.log(`LUSD total supply: ${lusdTotalSupply}`); console.log("LUSD CB BAMM stats:", lusdCBBAMMStats); + console.log(); + console.log("v2 stats:", util.inspect(v2Stats, { colors: true, depth: null })); }) .catch(error => { console.error(error); diff --git a/src/v2/contracts.ts b/src/v2/contracts.ts new file mode 100644 index 0000000000..578711b7ea --- /dev/null +++ b/src/v2/contracts.ts @@ -0,0 +1,83 @@ +import type { Provider } from "@ethersproject/abstract-provider"; +import type { BigNumber } from "@ethersproject/bignumber"; +import { type CallOverrides, Contract } from "@ethersproject/contracts"; + +export interface LiquityV2Addresses { + boldToken: string; + branches: LiquityV2BranchAddresses[]; +} + +export interface LiquityV2BranchAddresses { + activePool: string; + collToken: string; + defaultPool: string; + priceFeed: string; + stabilityPool: string; +} + +const erc20Abi = [ + "function symbol() view returns (string)", + "function totalSupply() view returns (uint256)" +]; + +export interface ERC20 { + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; +} + +const activePoolAbi = [ + "function getCollBalance() view returns (uint256)", + "function aggRecordedDebt() view returns (uint256)", + "function aggWeightedDebtSum() view returns (uint256)", + "function aggBatchManagementFees() view returns (uint256)", + "function calcPendingAggInterest() view returns (uint256)", + "function calcPendingAggBatchManagementFee() view returns (uint256)" +]; + +export interface ActivePool { + getCollBalance(overrides?: CallOverrides): Promise; + aggRecordedDebt(overrides?: CallOverrides): Promise; + aggWeightedDebtSum(overrides?: CallOverrides): Promise; + aggBatchManagementFees(overrides?: CallOverrides): Promise; + calcPendingAggInterest(overrides?: CallOverrides): Promise; + calcPendingAggBatchManagementFee(overrides?: CallOverrides): Promise; +} + +const defaultPoolAbi = ["function getCollBalance() view returns (uint256)"]; + +export interface DefaultPool { + getCollBalance(overrides?: CallOverrides): Promise; +} + +const priceFeedAbi = ["function fetchPrice() returns (uint256, bool)"]; + +export interface PriceFeed { + callStatic: { + fetchPrice(overrides?: CallOverrides): Promise<[BigNumber, boolean]>; + }; +} + +const stabilityPoolAbi = ["function getTotalBoldDeposits() view returns (uint256)"]; + +export interface StabilityPool { + getTotalBoldDeposits(overrides?: CallOverrides): Promise; +} + +export const getContracts = (provider: Provider, addresses: LiquityV2Addresses) => ({ + boldToken: new Contract(addresses.boldToken, erc20Abi, provider) as unknown as ERC20, + branches: addresses.branches.map(branch => ({ + activePool: new Contract(branch.activePool, activePoolAbi, provider) as unknown as ActivePool, + collToken: new Contract(branch.collToken, erc20Abi, provider) as unknown as ERC20, + defaultPool: new Contract( + branch.defaultPool, + defaultPoolAbi, + provider + ) as unknown as DefaultPool, + priceFeed: new Contract(branch.priceFeed, priceFeedAbi, provider) as unknown as PriceFeed, + stabilityPool: new Contract( + branch.stabilityPool, + stabilityPoolAbi, + provider + ) as unknown as StabilityPool + })) +}); diff --git a/src/v2/fetchV2Stats.ts b/src/v2/fetchV2Stats.ts new file mode 100644 index 0000000000..a750dae274 --- /dev/null +++ b/src/v2/fetchV2Stats.ts @@ -0,0 +1,74 @@ +import type { BlockTag, Provider } from "@ethersproject/abstract-provider"; +import type { BigNumber } from "@ethersproject/bignumber"; +import { resolveProperties } from "@ethersproject/properties"; +import { Decimal } from "@liquity/lib-base"; + +import { getContracts, type LiquityV2Addresses } from "./contracts.js"; + +const ONE_WEI = Decimal.fromBigNumberString("1"); + +const decimalify = (bigNumber: BigNumber) => Decimal.fromBigNumberString(bigNumber.toHexString()); + +const mapObj = , U>(t: T, f: (v: T[keyof T]) => U) => + Object.fromEntries(Object.entries(t).map(([k, v]) => [k, f(v)])) as { [K in keyof T]: U }; + +export const fetchV2Stats = async ( + provider: Provider, + addresses: LiquityV2Addresses, + blockTag: BlockTag = "latest" +) => { + const contracts = getContracts(provider, addresses); + + const [total_bold_supply, branches] = await Promise.all([ + contracts.boldToken.totalSupply({ blockTag }).then(decimalify), + + Promise.all( + contracts.branches.map(branch => + resolveProperties({ + coll_symbol: branch.collToken.symbol({ blockTag }), + coll_active: branch.activePool.getCollBalance({ blockTag }).then(decimalify), + coll_default: branch.defaultPool.getCollBalance({ blockTag }).then(decimalify), + coll_price: branch.priceFeed.callStatic + .fetchPrice({ blockTag }) + .then(([x]) => x) + .then(decimalify), + sp_deposits: branch.stabilityPool.getTotalBoldDeposits({ blockTag }).then(decimalify), + interest_accrual_1y: branch.activePool + .aggWeightedDebtSum({ blockTag }) + .then(decimalify) + .then(x => x.mul(ONE_WEI)), + interest_pending: branch.activePool.calcPendingAggInterest({ blockTag }).then(decimalify), + batch_management_fees_pending: Promise.all([ + branch.activePool.aggBatchManagementFees({ blockTag }).then(decimalify), + branch.activePool.calcPendingAggBatchManagementFee({ blockTag }).then(decimalify) + ]).then(([a, b]) => a.add(b)) + }) + .then(branch => ({ + ...branch, + debt_pending: branch.interest_pending.add(branch.batch_management_fees_pending), + coll_value: branch.coll_active.add(branch.coll_default).mul(branch.coll_price), + sp_apy: Number(branch.interest_accrual_1y) / Number(branch.sp_deposits) + })) + .then(branch => ({ + ...branch, + value_locked: branch.coll_value.add(branch.sp_deposits) // taking BOLD at face value + })) + ) + ) + ]); + + const sp_apys = branches.map(b => b.sp_apy).filter(x => !isNaN(x)); + + return { + total_bold_supply: `${total_bold_supply}`, + total_debt_pending: `${branches.map(b => b.debt_pending).reduce((a, b) => a.add(b))}`, + total_coll_value: `${branches.map(b => b.coll_value).reduce((a, b) => a.add(b))}`, + total_sp_deposits: `${branches.map(b => b.sp_deposits).reduce((a, b) => a.add(b))}`, + total_value_locked: `${branches.map(b => b.value_locked).reduce((a, b) => a.add(b))}`, + max_sp_apy: `${sp_apys.length > 0 ? Math.max(...sp_apys) : NaN}`, + + branch: Object.fromEntries( + branches.map(({ coll_symbol, ...b }) => [coll_symbol, mapObj(b, x => `${x}`)]) + ) + }; +}; diff --git a/tsconfig.json b/tsconfig.json index e4cec8ab62..c31258908e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,8 @@ "declaration": true, "declarationMap": true, "sourceMap": true, - "target": "ES6", - "module": "ES6", + "target": "ESNext", + "module": "ESNext", "moduleResolution": "Node", "strict": true, "esModuleInterop": true, diff --git a/yarn.lock b/yarn.lock index 479c4e3137..00c2da4738 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,12 +7,125 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@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" +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== "@eslint-community/eslint-utils@^4.2.0": version "4.3.0" @@ -416,24 +529,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== - -"@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" - "@liquity/lib-base@3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@liquity/lib-base/-/lib-base-3.0.0.tgz#3a2c1ccf7d147d59ffc48e1b8eb775b363124735" @@ -477,26 +572,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@tsconfig/node10@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.7.tgz#1eb1de36c73478a2479cc661ef5af1c16d86d606" - integrity sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ== - -"@tsconfig/node12@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b" - integrity sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A== - -"@tsconfig/node14@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e" - integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ== - -"@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== - "@types/body-parser@*": version "1.19.0" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" @@ -680,12 +755,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" - integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== - -acorn@^8.4.1, acorn@^8.9.0: +acorn@^8.9.0: version "8.10.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== @@ -717,11 +787,6 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -863,11 +928,6 @@ cookie@0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -920,11 +980,6 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -979,6 +1034,36 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -1281,6 +1366,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.3.3: + 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.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -1297,6 +1387,13 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: has-symbols "^1.0.3" hasown "^2.0.0" +get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== + dependencies: + resolve-pkg-maps "^1.0.0" + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1530,11 +1627,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -1790,6 +1882,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -1945,25 +2042,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -ts-node@10.9.2: - 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.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.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: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -1976,6 +2054,16 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tsx@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.1.tgz#b7bffdf4b565813e4dea14b90872af279cd0090b" + integrity sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA== + dependencies: + esbuild "~0.23.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -2023,11 +2111,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -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== - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -2065,11 +2148,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -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"