diff --git a/.github/workflows/gen-deploy-docs.yml b/.github/workflows/gen-deploy-docs.yml new file mode 100644 index 0000000..d0799cb --- /dev/null +++ b/.github/workflows/gen-deploy-docs.yml @@ -0,0 +1,28 @@ +name: Deploy documentation + +on: + push: + tags: + - v* + +jobs: + deploy-typedoc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Generate doc + run: | + npm ci + npm run doc + mv docs/documentation/html aave-v3-aptos-ts-sdk + - name: Deploy files + uses: appleboy/scp-action@master + with: + host: ${{ secrets.AAVEDOC_HOST }} + username: ${{ secrets.AAVEDOC_USERNAME }} + key: ${{ secrets.AAVEDOC_SSHKEY }} + source: "./aave-v3-aptos-ts-sdk" + target: "/var/www/type-doc" diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 0000000..7947732 --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,29 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: + push: + workflow_call: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16.x, 18.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci + - run: npm run build + - run: npm run fmt:check + - run: npm test diff --git a/.github/workflows/npm-publish-dev.yml b/.github/workflows/npm-publish-dev.yml new file mode 100644 index 0000000..4b891cb --- /dev/null +++ b/.github/workflows/npm-publish-dev.yml @@ -0,0 +1,22 @@ +name: Npm nightly publish + +on: + push: + branches: [main, buildnet] + +jobs: + test: + uses: ./.github/workflows/node.js.yml + + publish-npm-dev: + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: https://registry.npmjs.org + - run: ./scripts/publish-dev.sh + env: + NODE_AUTH_TOKEN: ${{ secrets.npm_token }} \ No newline at end of file diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..4449539 --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,36 @@ +name: NPM Publish + +on: + release: + types: [created] + +jobs: + test: + uses: ./.github/workflows/node.js.yml + + publish-npm: + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: https://registry.npmjs.org/ + + - name: Extract tag + id: get_tag + run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/} + env: + GITHUB_REF: ${{ github.ref }} + + - run: ./scripts/publish.sh ${{ steps.get_tag.outputs.TAG }} + env: + NODE_AUTH_TOKEN: ${{ secrets.npm_token }} + + - uses: softprops/action-gh-release@v1 + with: + files: | + bundle.js + bundle.min.js diff --git a/.github/workflows/test-example.yml b/.github/workflows/test-example.yml new file mode 100644 index 0000000..f9fa338 --- /dev/null +++ b/.github/workflows/test-example.yml @@ -0,0 +1,43 @@ +name: Borrow Example + +on: + push: + branches: + - main + +jobs: + deploy-SC-example: + defaults: + run: + working-directory: ./examples/ + + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Install node + uses: actions/setup-node@v3 + with: + node-version: "18" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Deploy + run: | + echo ${{ secrets.JSON_RPC_URL_PUBLIC }} + if npm run test-borrow-example ; then + echo "Borrow example passed!" + else + echo "Failed to run borrow example ..." + exit 1 + fi + env: + JSON_RPC_URL_PUBLIC: https://testnet.aptos.net/api/v2 diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml new file mode 100644 index 0000000..07ba04d --- /dev/null +++ b/.github/workflows/unit-test.yml @@ -0,0 +1,65 @@ +name: Unit tests + +on: + push: + workflow_call: + +jobs: + build: + + runs-on: ubuntu-latest + + permissions: + # Give the default GITHUB_TOKEN write permission to commit and push the changed files back to the repository. + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + # https://github.com/actions/checkout/issues/298#issuecomment-664976337 + ref: ${{ github.head_ref }} + # Checkout code using bot account + token: ${{ github.token }} + + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: 'npm' + + - name: Execute unit tests + run: | + npm ci + npm run build + npm run fmt:check + npm run test + + - name: allow access to coverage.sh + run: chmod +x ./scripts/coverage.sh + shell: bash + + - name: Extract coverage + id: coverage + run: | + value=$(npm run test:cov | awk '/All files/ {print $10}' | tr -d '%') + echo "coverage=$value" >> $GITHUB_OUTPUT + + - name: Add test coverage to README + run: ./scripts/coverage.sh + shell: bash + env: + COVERAGE: ${{ steps.coverage.outputs.coverage }} + + - name: Check if coverage changed + id: check_coverage_changed + run: | + echo "::set-output name=coverage_changed::$(git diff --name-only README.md | grep -E '^README.md$')" + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v4 + if: ${{ github.ref == 'refs/heads/main' && steps.check_coverage_changed.outputs.coverage_changed != '' }} + with: + commit_message: "Generate coverage badge" + file_pattern: "README.md" + commit_author: Aaave \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dcb9d61 --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +# build folder +dist/ + +# bundle files +bundle.* + +# docs files +docs + +#.env files +.env + +# Misc +.DS_Store diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..a095d7d --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run fmt:check diff --git a/.lintstagedrc b/.lintstagedrc new file mode 100644 index 0000000..2f6d8e3 --- /dev/null +++ b/.lintstagedrc @@ -0,0 +1,4 @@ +{ + "*.{js,ts,jsx,tsx,json,cjs}": ["npx eslint"], + "*.ts": ["npx as-prettier --check"] +} diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..c5383da --- /dev/null +++ b/.npmignore @@ -0,0 +1,6 @@ +src/ +test/ +tsconfig.json +tslint.json +.npmrc +.vs/ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f2ea0de --- /dev/null +++ b/.prettierignore @@ -0,0 +1,14 @@ +build +node_modules +.github +bundle.* +docs +dist +*.json +.lintstagedrc +README.md +*.html +*.md +coverage +*.yaml +*.lock \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e5af12f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,76 @@ +# Contributing to aave-v3-aptos-ts-sdk + +Thank you for considering contributing to aave-v3-aptos-ts-sdk! + +## Reporting Bugs + +If you discover a bug, please create a [new issue](https://github.com/aave/aave-v3-aptos-ts-sdk/issues/new?assignees=&labels=issue) on our GitHub repository. + +In your issue, please include a clear and concise description of the bug, any relevant code snippets, error messages, and steps to reproduce the issue. + +## Installation + +To start developing with `aave-v3-aptos-ts-sdk`, you must install all the necessary dev dependencies. You can do so by running the following command: + +```sh +npm install +``` + +This will install all the required packages listed in the package.json file, allowing you to update, fix, or improve `aave-v3-aptos-ts-sdk` in any way you see fit. + +## Contributing Code + +We welcome contributions in the form of bug fixes, enhancements, and new features. + +To contribute code, please follow these steps: + +1. Fork the `aave-v3-aptos-ts-sdk` repository to your own account. +2. Create a new branch from the `main` branch for your changes. +3. Make your changes and commit them to your branch. +4. Push your branch to your fork. +5. Create a pull request from your branch to the develop branch of the `aave-v3-aptos-ts-sdk` repository. + +> **NOTE:** When creating a pull request, please include a clear and concise title and description of your changes, as well as any relevant context or background information. + +## Code Style + +Please ensure that your code follows the existing code style used in the project. + +You can run the following command to format your code before committing: + +```sh +npm run fmt +``` + +## Tests + +Please ensure that your changes include any necessary tests. + +We use [jest library](https://jestjs.io/fr/) for unit testing. + +You can run the following command to run the tests: + +```sh +npm run build +``` + +and then + +```sh +npm run test +``` + +## License + +By contributing to `aave-v3-aptos-ts-sdk`, you agree that your contributions will be licensed under the MIT License. + +## Documentation + +`aave-v3-aptos-ts-sdk` provides complete documentation of all available functions and objects. + +To generate the documentation for a specific branch, run the following command: + +```sh +npm run doc +``` +The documentation will be generated inside each of the packages in the `./docs/documentation/html` directory. \ No newline at end of file diff --git a/LICENSE b/LICENSE index 7656b20..ed7cd96 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Aave Labs +Copyright (c) 2024 Aave Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f33c477..5dc0180 100644 --- a/README.md +++ b/README.md @@ -1 +1,53 @@ -# aave-v3-aptos-ts-sdk \ No newline at end of file +# aave-v3-aptos-ts-sdk![Node CI](https://github.com/aave/aave-v3-aptos-ts-sdk/workflows/Node.js%20CI/badge.svg) + +![check-code-coverage](https://img.shields.io/badge/coverage-96.33%25-green) + +> **PREREQUISITES:** +> +> - NodeJS 20+ +> - pnpm / yarn (see package.json) + + +Aave's typescript sdk for Aptos. Please note that it is currently under WIP! + +## Installation + +`aave-v3-aptos-ts-sdk` could be used as a library for frameworks or as a stand-alone bundled js file which can be easily loaded into the browser. + +### Library (Node.js/React/Vue.js) usage + +> npm install @aave/aave-v3-aptos-ts-sdk + +### Browser usage + +If you want to use `aave-v3-aptos-ts-sdk` in the browser directly, you can add the following script to your html file: + +```ts + +``` + +whereby the x.x.x is one of the available released versions. + +In your code, once the script is fully loaded, just use `window.aptosSdk` to access all `aave-v3-aptos-ts-sdk` exports. + +```ts + +``` + +## Documentation + +- [`TypeDoc API`] is available for all exported classes, interfaces and methods. + +## Contributing +We welcome contributions from the community! + +If you would like to contribute to `aave-v3-aptos-ts-sdk`, please read the [CONTRIBUTING file](CONTRIBUTING.md). + +## License +`aave-v3-aptos-ts-sdk` is released under the [MIT License](LICENSE). + +## Powered By +`aave-v3-aptos-ts-sdk` is developed with love by Avara diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..191dcd3 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,33 @@ +// eslint.config.js +const tsdocPlugin = require("eslint-plugin-tsdoc"); +const typescriptEslintPlugin = require("@typescript-eslint/eslint-plugin"); + +module.exports = [ + { + ignores: [ + "build/**/*", + "node_modules/**/*", + ".github", + "bundle.*", + "docs/**/*", + "dist/**/*", + "webpack.config.js", + "documentation/**/*", + "bundle.js", + "eslint.config.js", + "webpack.config.js", + "*.min.js", + "public/*", + "coverage/*", + ], + plugins: { + tsdoc: tsdocPlugin, + "@typescript-eslint": typescriptEslintPlugin, + }, + rules: { + "tsdoc/syntax": "warn", + camelcase: "off", + "@typescript-eslint/no-unused-vars": "error", + }, + }, +]; diff --git a/examples/borrow.ts b/examples/borrow.ts new file mode 100644 index 0000000..741728e --- /dev/null +++ b/examples/borrow.ts @@ -0,0 +1,47 @@ +import { Account, Ed25519Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider, CoreClient } from "../src/clients"; +import { testnetConfig } from "../src/configs/testnet"; + +const USER_APTOS_ACCOUNT_PRIVATE_KEY = "0x0"; +const CURRENCY_TO_BORROW = "DAI"; +const AMOUNT_TO_BORROW = "100"; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + // all pool-related operations client + const poolClient = new PoolClient(aptosProvider); + // user account + const aptosPrivateKey = new Ed25519PrivateKey(USER_APTOS_ACCOUNT_PRIVATE_KEY); + const userAccount = Account.fromPrivateKey({ privateKey: aptosPrivateKey }); + const coreClient = new CoreClient( + aptosProvider, + userAccount as Ed25519Account, + ); + + try { + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + const underlyingToken = allReserveUnderlyingTokens.find( + (token) => token.symbol === CURRENCY_TO_BORROW, + ); + if (!underlyingToken) { + throw new Error(`${underlyingToken} token was not found`); + } + const borrowAmount = BigInt(AMOUNT_TO_BORROW); + console.log("Underlying token: ", underlyingToken?.tokenAddress.toString()); + console.log("Value to borrow: ", borrowAmount.toString()); + + const txHash = await coreClient.borrow( + underlyingToken.tokenAddress, + borrowAmount, + 2, + 0, + userAccount.accountAddress, + ); + + console.info("Transaction executed: ", txHash.hash); + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/getAddresses.ts b/examples/getAddresses.ts new file mode 100644 index 0000000..18b165b --- /dev/null +++ b/examples/getAddresses.ts @@ -0,0 +1,45 @@ +import { AptosProvider } from "../src/clients"; +import { PoolAddressesProviderClient } from "../src/clients/poolAddressesProviderClient"; +import { testnetConfig } from "../src/configs/testnet"; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + + // pool addresses provider + const poolAddressesProviderClient = new PoolAddressesProviderClient( + aptosProvider, + ); + + try { + // get acl admin + const aclAdmin = await poolAddressesProviderClient.getAclAdmin(); + console.log("Acl Admin Account Address: ", aclAdmin?.toString()); + const aclManager = await poolAddressesProviderClient.getAclManager(); + console.log("Acl Manager Account Address: ", aclManager?.toString()); + const pool = poolAddressesProviderClient.getPool(); + console.log("Pool Account Account Address: ", pool.toString()); + const poolConfigurator = + await poolAddressesProviderClient.getPoolConfigurator(); + console.log( + "Pool Configurator Account Address: ", + poolConfigurator?.toString(), + ); + const poolDataProvider = + await poolAddressesProviderClient.getPoolDataProvider(); + console.log( + "Pool Data Provider Account Address: ", + poolDataProvider?.toString(), + ); + const priceOracle = await poolAddressesProviderClient.getPriceOracle(); + console.log("Price Oracle Account Address: ", priceOracle?.toString()); + const priceOracleSentinel = + await poolAddressesProviderClient.getPriceOracleSentinel(); + console.log( + "Price Oracle Sentinel Account Address: ", + priceOracleSentinel?.toString(), + ); + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/getAptos.ts b/examples/getAptos.ts new file mode 100644 index 0000000..7bdb27d --- /dev/null +++ b/examples/getAptos.ts @@ -0,0 +1,37 @@ +import { Account, AccountAddress, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../src/clients"; +import { testnetConfig } from "../src/configs/testnet"; + +const aptFunderPrivateKey = "0x0"; +const addressesToFund = ["0x0"].map((addr) => AccountAddress.fromString(addr)); +const fundAmount = BigInt(0.5); + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + + try { + // set the tx sender + const aptFunderAccount = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey(aptFunderPrivateKey), + }); + + // get details for each underlying token + for (const addressToFund of addressesToFund) { + const transaction = await aptosProvider + .getAptos() + .transferCoinTransaction({ + sender: aptFunderAccount.accountAddress, + recipient: addressToFund, + amount: fundAmount, + }); + const pendingTransaction = await aptosProvider + .getAptos() + .signAndSubmitTransaction({ signer: aptFunderAccount, transaction }); + console.log(`User addresses ${addressToFund.toString()} funded with ${fundAmount.toString()} APT + Tx Hash = ${pendingTransaction.hash}`); + } + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/getProtocolData.ts b/examples/getProtocolData.ts new file mode 100644 index 0000000..4117100 --- /dev/null +++ b/examples/getProtocolData.ts @@ -0,0 +1,134 @@ +import { ATokensClient } from "../src/clients/aTokensClient"; +import { UnderlyingTokensClient } from "../src/clients/underlyingTokensClient"; +import { UiPoolDataProviderClient } from "../src/clients/uiPoolDataProvider"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider } from "../src/clients/aptosProvider"; +import { testnetConfig } from "../src/configs/testnet"; +import { VariableTokensClient } from "../src/clients/variableTokensClient"; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + + // all atokens-related operations client + const aTokensClient = new ATokensClient(aptosProvider); + // all underlying-tokens-related operations client + const underlyingTokensClient = new UnderlyingTokensClient(aptosProvider); + // all variable-tokens-related operations client + // const variableTokensClient = new VariableTokensClient(aptosProvider); + // all pool-related operations client + const poolClient = new PoolClient(aptosProvider); + // all core-related operations client (supply, borrow, withdraw, repay) + // const coreClient = new CoreClient(aptosProvider); + const varTokensClient = new VariableTokensClient(aptosProvider); + // special ui functions client + const uiPoolDataProviderClient = new UiPoolDataProviderClient(aptosProvider); + + try { + // get all reserve underlying tokens + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + + // get details for each underlying token + for (const reserveUnderlyingToken of allReserveUnderlyingTokens) { + console.log( + "[UNDERLYING_TOKEN] Token Metadata Address: ", + reserveUnderlyingToken.tokenAddress.toString(), + ); + const tokenSymbol = await underlyingTokensClient.symbol( + reserveUnderlyingToken.tokenAddress, + ); + console.log("[UNDERLYING_TOKEN] Token Symbol: ", tokenSymbol); + const tokenName = await underlyingTokensClient.name( + reserveUnderlyingToken.tokenAddress, + ); + console.log("[UNDERLYING_TOKEN] Token Name: ", tokenName); + const tokenDecimals = await underlyingTokensClient.decimals( + reserveUnderlyingToken.tokenAddress, + ); + console.log("[UNDERLYING_TOKEN] Token Decimals: ", Number(tokenDecimals)); + console.log("=========================================================="); + } + + // get all atokens in the protocol + const allATokens = await poolClient.getAllATokens(); + + // get details for each underlying token + for (const aToken of allATokens) { + console.log( + "[ATOKEN] Token Metadata Address: ", + aToken.tokenAddress.toString(), + ); + const tokenSymbol = await aTokensClient.symbol(aToken.tokenAddress); + console.log("[ATOKEN] Token Symbol: ", tokenSymbol); + const tokenName = await aTokensClient.name(aToken.tokenAddress); + console.log("[ATOKEN] Token Name: ", tokenName); + const tokenDecimals = await aTokensClient.decimals(aToken.tokenAddress); + console.log("[ATOKEN] Token Decimals: ", Number(tokenDecimals)); + const tokenSupply = await aTokensClient.scaledTotalSupply( + aToken.tokenAddress, + ); + console.log("[ATOKEN] Scaled Token Supply: ", Number(tokenSupply)); + console.log("=========================================================="); + } + + const allVarTokens = await poolClient.getAllVariableTokens(); + + // get details for each variable token + for (const varToken of allVarTokens) { + console.log( + "[VARTOKEN] Token Metadata Address: ", + varToken.tokenAddress.toString(), + ); // same as asset metadata address + const assetAddress = await varTokensClient.getUnderlyingAssetAddress( + varToken.tokenAddress, + ); + console.log("[VARTOKEN] Asset Address: ", assetAddress.toString()); + const tokenSymbol = await varTokensClient.symbol(varToken.tokenAddress); + console.log("[VARTOKEN] Token Symbol: ", tokenSymbol); + const tokenName = await varTokensClient.name(varToken.tokenAddress); + console.log("[VARTOKEN] Token Name: ", tokenName); + const tokenDecimals = await varTokensClient.decimals( + varToken.tokenAddress, + ); + console.log("[VARTOKEN] Token Decimals: ", Number(tokenDecimals)); + const tokenSupply = await varTokensClient.scaledTotalSupplyOf( + varToken.tokenAddress, + ); + console.log("[VARTOKEN] Scaled Token Supply: ", Number(tokenSupply)); + console.log("=========================================================="); + } + + // get reserves count + const reservesCount = await poolClient.getReservesCount(); + console.log("[RESERVES] Total reserves count: ", Number(reservesCount)); + console.log("=========================================================="); + + // get reserves addresses + const reserveAddresses = await poolClient.getReservesList(); + for (const reserveAddress of reserveAddresses) { + console.log("[RESERVES] Reserve addresses: ", reserveAddress.toString()); + } + console.log("=========================================================="); + + const uiPoolDataProviderV32DataAddress = + await uiPoolDataProviderClient.uiPoolDataProviderV32DataAddress(); + console.log( + "[UI DATA POOL PROVIDER] Address: ", + uiPoolDataProviderV32DataAddress.toString(), + ); + console.log("=========================================================="); + + const reservesList = await uiPoolDataProviderClient.getReservesList(); + console.log( + "[UI DATA POOL PROVIDER] Reserves List: ", + reservesList.map((item) => item.toString()).join(","), + ); + console.log("=========================================================="); + + const reservesData = await uiPoolDataProviderClient.getReservesData(); + console.log("[UI DATA POOL PROVIDER] Reserves Data: ", reservesData); + console.log("=========================================================="); + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/getUserData.ts b/examples/getUserData.ts new file mode 100644 index 0000000..4e9493f --- /dev/null +++ b/examples/getUserData.ts @@ -0,0 +1,57 @@ +import { AccountAddress } from "@aptos-labs/ts-sdk"; +import { UnderlyingTokensClient } from "../src/clients/underlyingTokensClient"; +import { UiPoolDataProviderClient } from "../src/clients/uiPoolDataProvider"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider } from "../src/clients/aptosProvider"; +import { testnetConfig } from "../src/configs/testnet"; + +const USER_APTOS_ACCOUNT = "0x0"; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + + const uiPoolDataProviderClient = new UiPoolDataProviderClient(aptosProvider); + const poolClient = new PoolClient(aptosProvider); + const underlyingTokensClient = new UnderlyingTokensClient(aptosProvider); + const userAccount = AccountAddress.fromString(USER_APTOS_ACCOUNT); + + try { + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + const userReserveData = ( + await uiPoolDataProviderClient.getUserReserveData(userAccount.toString()) + ).userReserves; + + for (const userReserve of userReserveData) { + const underlyingToken = allReserveUnderlyingTokens.find( + (token) => + token.tokenAddress.toString() === userReserve.underlyingAsset, + ); + if (!underlyingToken) { + throw new Error(`${underlyingToken} token was not found`); + } + const underlyingTokenMetadata = + await underlyingTokensClient.getMetadataBySymbol( + underlyingToken.symbol, + ); + const underlyingTokenBalance = await underlyingTokensClient.balanceOf( + userAccount, + underlyingTokenMetadata, + ); + console.log( + "UNDERLYING ASSET ADDRESS-SYMBOL: ", + userReserve.underlyingAsset, + underlyingToken.symbol, + ); + console.log( + "UNSCALED UNDERLYING ASSET BALANCE: ", + underlyingTokenBalance, + ); + console.log("SCALED ATOKEN BALANCE: ", userReserve.scaledATokenBalance); + console.log("SCALED VARTOKEN BALANCE: ", userReserve.scaledVariableDebt); + console.log("=========================================================="); + } + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/mintUnderlyings.ts b/examples/mintUnderlyings.ts new file mode 100644 index 0000000..ef799e5 --- /dev/null +++ b/examples/mintUnderlyings.ts @@ -0,0 +1,48 @@ +import { Account, AccountAddress, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { UnderlyingTokensClient } from "../src/clients/underlyingTokensClient"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider } from "../src/clients"; +import { testnetConfig } from "../src/configs/testnet"; + +const UNDERLYING_MANAGER_PRIVATE_KEY = "0x0"; +const ADDRESSES_TO_FUND = ["0x0"].map((addr) => + AccountAddress.fromString(addr), +); +const fundAmount = BigInt(1000); + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + // all underlying-tokens-related operations client + const underlyingTokensClient = new UnderlyingTokensClient(aptosProvider); + // all pool-related operations client + const poolClient = new PoolClient(aptosProvider); + + try { + // get all reserve underlying tokens + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + + // set the tx sender + const underlyingManagerAccount = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey(UNDERLYING_MANAGER_PRIVATE_KEY), + }); + underlyingTokensClient.setSigner(underlyingManagerAccount); + + // get details for each underlying token + for (const reserveUnderlyingToken of allReserveUnderlyingTokens) { + for (const addressToFund of ADDRESSES_TO_FUND) { + const txReceipt = await underlyingTokensClient.mint( + addressToFund.toString(), + fundAmount, + reserveUnderlyingToken.tokenAddress.toString(), + ); + console.log(`User addresses ${addressToFund.toString()} funded with ${fundAmount.toString()} ${ + reserveUnderlyingToken.symbol + } + Tx Hash = ${txReceipt.hash}`); + } + } + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/repay.ts b/examples/repay.ts new file mode 100644 index 0000000..741cfdc --- /dev/null +++ b/examples/repay.ts @@ -0,0 +1,60 @@ +import { Account, Ed25519Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { MaxUint256 } from "ethers"; +import { BigNumber } from "bignumber.js"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider, CoreClient } from "../src/clients"; +import { testnetConfig } from "../src/configs/testnet"; + +const USER_APTOS_ACCOUNT_PRIVATE_KEY = "0x0"; +const CURRENCY_TO_REPAY = "DAI"; +const INTEREST_RATE_STRATEGY = 2; +const USE_A_TOKENS = true; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + // all pool-related operations client + const poolClient = new PoolClient(aptosProvider); + // user account + const aptosPrivateKey = new Ed25519PrivateKey(USER_APTOS_ACCOUNT_PRIVATE_KEY); + const userAccount = Account.fromPrivateKey({ privateKey: aptosPrivateKey }); + const coreClient = new CoreClient( + aptosProvider, + userAccount as Ed25519Account, + ); + + try { + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + const underlyingToken = allReserveUnderlyingTokens.find( + (token) => token.symbol === CURRENCY_TO_REPAY, + ); + if (!underlyingToken) { + throw new Error(`${underlyingToken} token was not found`); + } + const AMOUNT_TO_REPAY = new BigNumber(MaxUint256.toString()) + .minus(1) + .toFixed(0); + const repayAmount = BigInt(AMOUNT_TO_REPAY); + console.log("Underlying token: ", underlyingToken?.tokenAddress.toString()); + console.log("Value to repay: ", repayAmount.toString()); + console.log("Interest rate strategy: ", INTEREST_RATE_STRATEGY); + console.log("Using A Tokens?: ", USE_A_TOKENS); + + const txHash = USE_A_TOKENS + ? await coreClient.repayWithATokens( + underlyingToken.tokenAddress, + repayAmount, + INTEREST_RATE_STRATEGY, + ) + : await coreClient.repay( + underlyingToken.tokenAddress, + repayAmount, + INTEREST_RATE_STRATEGY, + userAccount.accountAddress, + ); + + console.info("Transaction executed: ", txHash.hash); + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/setAssetsPrice.ts b/examples/setAssetsPrice.ts new file mode 100644 index 0000000..6ffe925 --- /dev/null +++ b/examples/setAssetsPrice.ts @@ -0,0 +1,46 @@ +/* eslint-disable no-console */ +/* eslint-disable no-await-in-loop */ +import dotenv from "dotenv"; +import { Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { OracleClient, PoolClient } from "../src/clients"; +import { AptosProvider } from "../src/clients/aptosProvider"; +import { testnetConfig } from "../src/configs/testnet"; + +dotenv.config(); + +const priceMapper = { + DAI: 100000000, + USDC: 100000000, + WETH: 300000000000, + AAVE: 10000000000, +}; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + + if (!process.env.AAVE_MOCK_ORACLE_PRIVATE_KEY) { + throw new Error(`AAVE_MOCK_ORACLE_PRIVATE_KEY env was not found`); + } + + const oracleManageAccount = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey(process.env.AAVE_MOCK_ORACLE_PRIVATE_KEY), + }); + + const oracleClient = new OracleClient(aptosProvider, oracleManageAccount); + const poolClient = new PoolClient(aptosProvider); + + const assets = await poolClient.getAllReservesTokens(); + for (const asset of assets) { + const price = priceMapper[asset.symbol]; + if (price) { + const txReceipt = await oracleClient.setAssetPrice( + asset.tokenAddress, + BigInt(price), + ); + console.log( + `Asset ${asset.symbol} price set to ${price} with tx hash ${txReceipt.hash}`, + ); + } + } +})(); diff --git a/examples/setupTtestnet.ts b/examples/setupTtestnet.ts new file mode 100644 index 0000000..97dc7f8 --- /dev/null +++ b/examples/setupTtestnet.ts @@ -0,0 +1,286 @@ +/* eslint-disable no-await-in-loop */ +import dotenv from "dotenv"; +import { Account, AccountAddress, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../src/clients/aptosProvider"; +import { testnetConfig } from "../src/configs/testnet"; +import { PoolClient, UnderlyingTokensClient } from "../src/clients"; + +dotenv.config(); + +const eModes = [ + { + categoryId: 1, + ltv: 9000, + liquidationThreshold: 9300, + liquidationBonus: 10200, + oracle: AccountAddress.ZERO, + label: "ETH correlated", + }, + { + categoryId: 2, + ltv: 9500, + liquidationThreshold: 9700, + liquidationBonus: 10100, + oracle: AccountAddress.ZERO, + label: "Stablecoins", + }, +]; + +interface ReserveConfig { + maxSupply: bigint; + name: string; + symbol: string; + decimals: number; + iconUri: string; + projectUri: string; + treasury: AccountAddress; + aTokenName: string; + aTokenSymbol: string; + variableDebtTokenName: string; + variableDebtTokenSymbol: string; + optimalUsageRatio: bigint; + baseVariableBorrowRate: bigint; + variableRateSlope1: bigint; + variableRateSlope2: bigint; + ltv: bigint; + liquidationThreshold: bigint; + liquidationBonus: bigint; + reserveFactor: bigint; + borrowCap: bigint; + supplyCap: bigint; + borrowingEnabled: boolean; + flashloanEnabled: boolean; + eModeCategoryId: number; +} + +interface ReserveConfigWithDeployedAsset extends ReserveConfig { + underlyingAsset: AccountAddress; +} + +const reserves: ReserveConfig[] = [ + { + maxSupply: 25610806455078778_000_000n, + name: "USD Coin", + symbol: "USDC", + decimals: 6, + iconUri: "https://assets.coingecko.com/coins/images/6319/standard/usdc.png", + projectUri: "https://app.aave.com/", + treasury: AccountAddress.ZERO, + aTokenName: "Aave USDC", + aTokenSymbol: "aUSDC", + variableDebtTokenName: "Aave Variable Debt USDC", + variableDebtTokenSymbol: "vUSDC", + optimalUsageRatio: 920000000000000000000000000n, + baseVariableBorrowRate: 0n, + variableRateSlope1: 65000000000000000000000000n, + variableRateSlope2: 600000000000000000000000000n, + ltv: 7500n, + liquidationThreshold: 7800n, + liquidationBonus: 10450n, + reserveFactor: 1000n, + borrowCap: 2100000000n, + supplyCap: 2250000000n, + borrowingEnabled: true, + flashloanEnabled: true, + eModeCategoryId: 2, + }, + { + maxSupply: 52986637760874451_000_000n, + name: "Tether USD", + symbol: "USDT", + decimals: 6, + iconUri: + "https://assets.coingecko.com/coins/images/325/standard/Tether.png", + projectUri: "https://app.aave.com/", + treasury: AccountAddress.ZERO, + aTokenName: "Aave USDT", + aTokenSymbol: "aUSDT", + variableDebtTokenName: "Aave Variable Debt USDT", + variableDebtTokenSymbol: "vUSDT", + optimalUsageRatio: 920000000000000000000000000n, + baseVariableBorrowRate: 0n, + variableRateSlope1: 65000000000000000000000000n, + variableRateSlope2: 750000000000000000000000000n, + ltv: 7500n, + liquidationThreshold: 7800n, + liquidationBonus: 10450n, + reserveFactor: 1000n, + borrowCap: 2250000000n, + supplyCap: 2500000000n, + borrowingEnabled: true, + flashloanEnabled: true, + eModeCategoryId: 2, + }, +]; + +if (!process.env.UNDERLYING_TOKENS_PRIVATE_KEY) { + throw new Error(`UNDERLYING_TOKENS_PRIVATE_KEY env was not found`); +} + +const underlyingTokensSigner = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey(process.env.UNDERLYING_TOKENS_PRIVATE_KEY), +}); + +if (!process.env.AAVE_POOL_PRIVATE_KEY) { + throw new Error(`AAVE_POOL_PRIVATE_KEY env was not found`); +} + +const poolSigner = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey(process.env.AAVE_POOL_PRIVATE_KEY), +}); + +(async () => { + const aptosProvider = new AptosProvider(testnetConfig); + + const poolClient = new PoolClient(aptosProvider, poolSigner); + const underlyingTokenClient = new UnderlyingTokensClient( + aptosProvider, + underlyingTokensSigner, + ); + + const reservesWithAsset: Array = []; + + // create tokens that dont exist + for (const reserve of reserves) { + const tokenAddress = await underlyingTokenClient.getMetadataBySymbol( + reserve.symbol, + ); + if (!tokenAddress) { + await underlyingTokenClient.createToken( + reserve.maxSupply, + reserve.name, + reserve.symbol, + reserve.decimals, + reserve.iconUri, + reserve.projectUri, + ); + const address = await underlyingTokenClient.getMetadataBySymbol( + reserve.symbol, + ); + reservesWithAsset.push({ + ...reserve, + underlyingAsset: address, + }); + } else { + // const maxSupply = await underlyingTokenClient.maximum(tokenAddress); + const decimals = await underlyingTokenClient.decimals(tokenAddress); + const name = await underlyingTokenClient.name(tokenAddress); + // console.log(maxSupply); + reservesWithAsset.push({ + ...reserve, + // maxSupply, + decimals: Number(decimals), + name, + underlyingAsset: tokenAddress, + }); + } + } + + // configure eModes + + for (const eMode of eModes) { + await poolClient.setEmodeCategory( + eMode.categoryId, + eMode.ltv, + eMode.liquidationThreshold, + eMode.liquidationBonus, + eMode.oracle, + eMode.label, + ); + } + + // create rate strategies + + for (const reserve of reservesWithAsset) { + await poolClient.setReserveInterestRateStrategy( + reserve.underlyingAsset, + reserve.optimalUsageRatio, + reserve.baseVariableBorrowRate, + reserve.variableRateSlope1, + reserve.variableRateSlope2, + ); + } + + // init reserves that dont exist + + const reservesToInit = { + assets: [] as Array, + decimals: [] as Array, + treasury: [] as Array, + aTokenName: [] as Array, + aTokenSymbol: [] as Array, + variableDebtTokenName: [] as Array, + variableDebtTokenSymbol: [] as Array, + }; + + const currentReserves = await poolClient.getReservesList(); + + reservesWithAsset.forEach((reserve) => { + if (!currentReserves.find((elem) => elem.equals(reserve.underlyingAsset))) { + reservesToInit.assets.push(reserve.underlyingAsset); + reservesToInit.decimals.push(reserve.decimals); + reservesToInit.treasury.push(reserve.treasury); + reservesToInit.aTokenName.push(reserve.aTokenName); + reservesToInit.aTokenSymbol.push(reserve.aTokenSymbol); + reservesToInit.variableDebtTokenName.push(reserve.variableDebtTokenName); + reservesToInit.variableDebtTokenSymbol.push( + reserve.variableDebtTokenSymbol, + ); + } + }); + + if (reservesToInit.assets.length > 0) { + await poolClient.initReserves( + reservesToInit.assets, + reservesToInit.decimals, + reservesToInit.treasury, + reservesToInit.aTokenName, + reservesToInit.aTokenSymbol, + reservesToInit.variableDebtTokenName, + reservesToInit.variableDebtTokenSymbol, + ); + } + + const reservesToConfigure = { + asset: [] as Array, + ltv: [] as Array, + liquidationThreshold: [] as Array, + liquidationBonus: [] as Array, + reserveFactor: [] as Array, + borrowCap: [] as Array, + supplyCap: [] as Array, + borrowingEnabled: [] as Array, + flashloanEnabled: [] as Array, + }; + + for (const reserve of reservesWithAsset) { + reservesToConfigure.asset.push(reserve.underlyingAsset); + reservesToConfigure.ltv.push(reserve.ltv); + reservesToConfigure.liquidationThreshold.push(reserve.liquidationThreshold); + reservesToConfigure.liquidationBonus.push(reserve.liquidationBonus); + reservesToConfigure.reserveFactor.push(reserve.reserveFactor); + reservesToConfigure.borrowCap.push(reserve.borrowCap); + reservesToConfigure.supplyCap.push(reserve.supplyCap); + reservesToConfigure.borrowingEnabled.push(reserve.borrowingEnabled); + reservesToConfigure.flashloanEnabled.push(reserve.flashloanEnabled); + } + + await poolClient.configureReserves( + reservesToConfigure.asset, + reservesToConfigure.ltv, + reservesToConfigure.liquidationThreshold, + reservesToConfigure.liquidationBonus, + reservesToConfigure.reserveFactor, + reservesToConfigure.borrowCap, + reservesToConfigure.supplyCap, + reservesToConfigure.borrowingEnabled, + reservesToConfigure.flashloanEnabled, + ); + + for (const reserve of reservesWithAsset) { + await poolClient.setAssetEmodeCategory( + reserve.underlyingAsset, + reserve.eModeCategoryId, + ); + } +})(); diff --git a/examples/supply.ts b/examples/supply.ts new file mode 100644 index 0000000..bacf3ba --- /dev/null +++ b/examples/supply.ts @@ -0,0 +1,49 @@ +/* eslint-disable no-console */ +/* eslint-disable no-await-in-loop */ +import { Account, Ed25519Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider, CoreClient } from "../src/clients"; +import { testnetConfig } from "../src/configs/testnet"; + +const USER_APTOS_ACCOUNT_PRIVATE_KEY = + "0xf5e502058d6995bccf625107f12f138cc4ff3f57b1487a256a6dec23f338f831"; +const CURRENCY_TO_SUPPLY = "DAI"; +const AMOUNT_TO_SUPPLY = "100"; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + // all pool-related operations client + const poolClient = new PoolClient(aptosProvider); + // user account + const aptosPrivateKey = new Ed25519PrivateKey(USER_APTOS_ACCOUNT_PRIVATE_KEY); + const userAccount = Account.fromPrivateKey({ privateKey: aptosPrivateKey }); + const coreClient = new CoreClient( + aptosProvider, + userAccount as Ed25519Account, + ); + + try { + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + const underlyingToken = allReserveUnderlyingTokens.find( + (token) => token.symbol === CURRENCY_TO_SUPPLY, + ); + if (!underlyingToken) { + throw new Error(`${underlyingToken} token was not found`); + } + const supplyAmount = BigInt(AMOUNT_TO_SUPPLY); + console.log("Underlying token: ", underlyingToken.tokenAddress.toString()); + console.log("Value to supply: ", supplyAmount.toString()); + + const txHash = await coreClient.supply( + underlyingToken.tokenAddress, + supplyAmount, + userAccount.accountAddress, + 0, + ); + + console.info("Transaction executed: ", txHash.hash); + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/examples/withdraw.ts b/examples/withdraw.ts new file mode 100644 index 0000000..5e548df --- /dev/null +++ b/examples/withdraw.ts @@ -0,0 +1,48 @@ +/* eslint-disable no-console */ +/* eslint-disable no-await-in-loop */ +import { Account, Ed25519Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk"; +import { PoolClient } from "../src/clients/poolClient"; +import { AptosProvider, CoreClient } from "../src/clients"; +import { testnetConfig } from "../src/configs/testnet"; + +const USER_APTOS_ACCOUNT_PRIVATE_KEY = + "0xf5e502058d6995bccf625107f12f138cc4ff3f57b1487a256a6dec23f338f831"; +const CURRENCY_TO_WITHDRAW = "DAI"; +const AMOUNT_TO_WITHDRAW = "100"; + +(async () => { + // global aptos provider + const aptosProvider = new AptosProvider(testnetConfig); + // all pool-related operations client + const poolClient = new PoolClient(aptosProvider); + // user account + const aptosPrivateKey = new Ed25519PrivateKey(USER_APTOS_ACCOUNT_PRIVATE_KEY); + const userAccount = Account.fromPrivateKey({ privateKey: aptosPrivateKey }); + const coreClient = new CoreClient( + aptosProvider, + userAccount as Ed25519Account, + ); + + try { + const allReserveUnderlyingTokens = await poolClient.getAllReservesTokens(); + const underlyingToken = allReserveUnderlyingTokens.find( + (token) => token.symbol === CURRENCY_TO_WITHDRAW, + ); + if (!underlyingToken) { + throw new Error(`${underlyingToken} token was not found`); + } + const withdrawAmount = BigInt(AMOUNT_TO_WITHDRAW); + console.log("Underlying token: ", underlyingToken.tokenAddress.toString()); + console.log("Value to withdraw: ", withdrawAmount.toString()); + + const txHash = await coreClient.withdraw( + underlyingToken.tokenAddress, + withdrawAmount, + userAccount.accountAddress, + ); + + console.info("Transaction executed: ", txHash.hash); + } catch (ex) { + console.error("Expection = ", ex); + } +})(); diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..ca04795 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,18 @@ +import type { Config } from "jest"; + +const config: Config = { + verbose: true, + testEnvironment: "node", + preset: "ts-jest", + roots: [""], + testMatch: ["**/*.spec.ts"], + transform: { + "^.+\\.ts$": "ts-jest", + }, + moduleNameMapper: { + "@/(.*)": "/src/$1", + }, + moduleFileExtensions: ["ts", "js", "json"], +}; + +export default config; diff --git a/package.json b/package.json new file mode 100644 index 0000000..79f5d40 --- /dev/null +++ b/package.json @@ -0,0 +1,116 @@ +{ + "name": "@aave/aave-v3-aptos-ts-sdk", + "version": "0.0.1", + "description": "Aave's typescript sdk for Aptos", + "main": "dist/cmd/index.js", + "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", + "scripts": { + "up": "pnpm update", + "check": "pnpm outdated", + "upgrade": "pnpm run up && pnpm run check && pnpm run build", + "clean-dist": "rimraf dist/*", + "build-esm": "tsc --project tsconfig.esm.json", + "build-commonjs": "tsc --project tsconfig.commonjs.json", + "build-bundle": "webpack", + "build": "npm-run-all clean-dist build-*", + "update-version-major": "pnpm version major", + "update-version-minor": "pnpm version minor", + "update-version-patch": "pnpm version patch", + "test": "jest", + "test:cov": "jest --coverage", + "supply": "ts-node examples/supply.ts", + "borrow": "ts-node examples/borrow.ts", + "withdraw": "ts-node examples/withdraw.ts", + "repay": "ts-node examples/repay.ts", + "get-aptos": "ts-node examples/getAptos.ts", + "get-addresses": "ts-node examples/getAddresses.ts", + "get-user-data": "ts-node examples/getUserData.ts", + "setup-testnet": "ts-node examples/setupTestnet.ts", + "lint": "eslint . --no-cache --ignore-pattern 'bundle.js'", + "lint:fix": "eslint . --fix --no-cache --ignore-pattern 'bundle.js'", + "prettier": "prettier --check .", + "prettier:fix": "prettier --write .", + "fmt": "pnpm run prettier:fix && pnpm run lint:fix", + "fmt:check": "pnpm run prettier && pnpm run lint", + "doc": "typedoc src/index.ts --name aave-aptos --out docs/documentation/html --tsconfig tsconfig.json", + "prepare": "husky install" + }, + "author": "Avara ", + "contributors": [ + "The Avara Team" + ], + "license": "(MIT AND Apache-2.0)", + "homepage": "https://github.com/aave/aave-v3-aptos-ts-sdk", + "repository": { + "type": "git", + "url": "git+https://github.com/aave/aave-v3-aptos-ts-sdk" + }, + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "keywords": [ + "aptos", + "sdk", + "aave" + ], + "files": [ + "dist", + "bundle.js", + "bundle.min.js" + ], + "dependencies": { + "@aptos-labs/ts-sdk": "^1.29.0", + "bignumber.js": "^9.1.2", + "buffer": "^6.0.3", + "crypto-js": "^4.2.0", + "dotenv": "^16.4.5", + "ethers": "^6.13.3", + "events": "^3.3.0", + "jest-environment-jsdom": "^29.7.0", + "tslib": "^2.7.0", + "util": "^0.12.5" + }, + "devDependencies": { + "@types/bn.js": "^5.1.6", + "@types/jest": "^29.5.13", + "@types/node": "^22.7.5", + "@typescript-eslint/eslint-plugin": "^8.8.1", + "@typescript-eslint/parser": "^8.8.1", + "chalk": "^5.3.0", + "eslint": "^9.12.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^18.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsdoc": "^50.3.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^7.1.0", + "eslint-plugin-tsdoc": "^0.3.0", + "husky": "^9.1.6", + "jest": "^29.7.0", + "jsdom": "^25.0.1", + "node-ts": "^6.1.3", + "npm-run-all": "^4.1.5", + "ora": "^8.1.0", + "prettier": "^3.3.3", + "prettier-eslint": "^16.3.0", + "prettier-standard": "^16.4.1", + "rimraf": "^6.0.1", + "ts-jest": "^29.2.5", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "typedoc": "^0.26.8", + "typescript": "^5.6.2", + "typescript-eslint": "^8.8.1", + "webpack": "^5.95.0", + "webpack-cli": "^5.1.4" + }, + "optionalDependencies": { + "bufferutil": "^4.0.8", + "utf-8-validate": "^6.0.4" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..82bc338 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,9548 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@aptos-labs/ts-sdk': + specifier: ^1.29.0 + version: 1.29.0 + bignumber.js: + specifier: ^9.1.2 + version: 9.1.2 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + ethers: + specifier: ^6.13.3 + version: 6.13.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + events: + specifier: ^3.3.0 + version: 3.3.0 + jest-environment-jsdom: + specifier: ^29.7.0 + version: 29.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + tslib: + specifier: ^2.7.0 + version: 2.7.0 + util: + specifier: ^0.12.5 + version: 0.12.5 + optionalDependencies: + bufferutil: + specifier: ^4.0.8 + version: 4.0.8 + utf-8-validate: + specifier: ^6.0.4 + version: 6.0.4 + devDependencies: + '@types/bn.js': + specifier: ^5.1.6 + version: 5.1.6 + '@types/jest': + specifier: ^29.5.13 + version: 29.5.13 + '@types/node': + specifier: ^22.7.5 + version: 22.7.5 + '@typescript-eslint/eslint-plugin': + specifier: ^8.8.1 + version: 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/parser': + specifier: ^8.8.1 + version: 8.8.1(eslint@9.12.0)(typescript@5.6.2) + chalk: + specifier: ^5.3.0 + version: 5.3.0 + eslint: + specifier: ^9.12.0 + version: 9.12.0 + eslint-config-airbnb-base: + specifier: ^15.0.0 + version: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint@9.12.0) + eslint-config-airbnb-typescript: + specifier: ^18.0.0 + version: 18.0.0(@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2))(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint@9.12.0) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.12.0) + eslint-config-standard: + specifier: ^17.1.0 + version: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint-plugin-n@16.6.2(eslint@9.12.0))(eslint-plugin-promise@7.1.0(eslint@9.12.0))(eslint@9.12.0) + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0) + eslint-plugin-jsdoc: + specifier: ^50.3.1 + version: 50.3.1(eslint@9.12.0) + eslint-plugin-node: + specifier: ^11.1.0 + version: 11.1.0(eslint@9.12.0) + eslint-plugin-promise: + specifier: ^7.1.0 + version: 7.1.0(eslint@9.12.0) + eslint-plugin-tsdoc: + specifier: ^0.3.0 + version: 0.3.0 + husky: + specifier: ^9.1.6 + version: 9.1.6 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + jsdom: + specifier: ^25.0.1 + version: 25.0.1(bufferutil@4.0.8)(utf-8-validate@6.0.4) + node-ts: + specifier: ^6.1.3 + version: 6.1.3 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + ora: + specifier: ^8.1.0 + version: 8.1.0 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + prettier-eslint: + specifier: ^16.3.0 + version: 16.3.0 + prettier-standard: + specifier: ^16.4.1 + version: 16.4.1(typescript@5.6.2) + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + ts-jest: + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)))(typescript@5.6.2) + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.6.2)(webpack@5.95.0(webpack-cli@5.1.4)) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.7.5)(typescript@5.6.2) + typedoc: + specifier: ^0.26.8 + version: 0.26.8(typescript@5.6.2) + typescript: + specifier: ^5.6.2 + version: 5.6.2 + typescript-eslint: + specifier: ^8.8.1 + version: 8.8.1(eslint@9.12.0)(typescript@5.6.2) + webpack: + specifier: ^5.95.0 + version: 5.95.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack@5.95.0) + +packages: + + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@angular/compiler@8.2.14': + resolution: {integrity: sha512-ABZO4E7eeFA1QyJ2trDezxeQM5ZFa1dXw1Mpl/+1vuXDKNjJgNyWYwKp/NwRkLmrsuV0yv4UDCDe4kJOGbPKnw==} + + '@aptos-labs/aptos-cli@0.2.0': + resolution: {integrity: sha512-6kljJFRsTLXCvgkNhBoOLhVyo7rmih+8+XAtdeciIXkZYwzwVS3TFPLMqBUO2HcY6gYtQQRmTG52R5ihyi/bXA==} + hasBin: true + + '@aptos-labs/aptos-client@0.1.1': + resolution: {integrity: sha512-kJsoy4fAPTOhzVr7Vwq8s/AUg6BQiJDa7WOqRzev4zsuIS3+JCuIZ6vUd7UBsjnxtmguJJulMRs9qWCzVBt2XA==} + engines: {node: '>=15.10.0'} + + '@aptos-labs/ts-sdk@1.29.0': + resolution: {integrity: sha512-aKYPXOqrSj/y+mDBa7r0PMxryqmLs2oxo0ZCvyx3t8712cFXxAA22jdcWpq6Mym4mTg1UY6Nc6MgbeiYjhJYng==} + engines: {node: '>=11.0.0'} + + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.8.3': + resolution: {integrity: sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==} + + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.9.4': + resolution: {integrity: sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@discoveryjs/json-ext@0.5.7': + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + + '@es-joy/jsdoccomment@0.48.0': + resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} + engines: {node: '>=16'} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@9.12.0': + resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@glimmer/interfaces@0.41.4': + resolution: {integrity: sha512-MzXwMyod3MlwSZezHSaVBsCEIW/giYYfTDYARR46QnYsaFVatMVbydjsI7jkAuBCbnLCyNOIc1TrYIj71i/rpg==} + + '@glimmer/syntax@0.41.4': + resolution: {integrity: sha512-NLPNirZDbNmpZ8T/ccle22zt2rhUq5il7ST6IJk62T58QZeJsdr3m3RS4kaGSBsQhXoKELrgX048yYEX5sC+fw==} + + '@glimmer/util@0.41.4': + resolution: {integrity: sha512-DwS94K+M0vtG+cymxH0rslJr09qpdjyOLdCjmpKcG/nNiZQfMA1ybAaFEmwk9UaVlUG9STENFeQwyrLevJB+7g==} + + '@humanfs/core@0.19.0': + resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.5': + resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@iarna/toml@2.2.3': + resolution: {integrity: sha512-FmuxfCuolpLl0AnQ2NHSzoUKWEJDFl63qXjzdoWBVyFCXzMGm1spBzk7LeHNoVCiWCF7mRVms9e6jEV9+MoPbg==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@microsoft/tsdoc-config@0.17.0': + resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} + + '@microsoft/tsdoc@0.15.0': + resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} + + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + + '@noble/curves@1.6.0': + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rauschma/stringio@1.4.0': + resolution: {integrity: sha512-3uor2f/MXZkmX5RJf8r+OC3WvZVzpSme0yyL0rQDPEnatE02qRcqwEwnsgpgriEck0S/n4vWtUd6tTtrJwk45Q==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@samverschueren/stream-to-observable@0.3.1': + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/bip32@1.5.0': + resolution: {integrity: sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==} + + '@scure/bip39@1.4.0': + resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==} + + '@shikijs/core@1.22.0': + resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} + + '@shikijs/engine-javascript@1.22.0': + resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} + + '@shikijs/engine-oniguruma@1.22.0': + resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} + + '@shikijs/types@1.22.0': + resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} + + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/bn.js@5.1.6': + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.13': + resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} + + '@types/jsdom@20.0.1': + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/node@10.17.60': + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + '@types/node@18.15.13': + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@8.8.1': + resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.8.1': + resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@8.8.1': + resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.8.1': + resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@8.8.1': + resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@2.6.1': + resolution: {integrity: sha512-+sTnssW6bcbDZKE8Ce7VV6LdzkQz2Bxk7jzk1J8H1rovoTxnm6iXvYIyncvNsaB/kBCOM63j/LNJfm27bNdUoA==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.8.1': + resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.8.1': + resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@8.8.1': + resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@webpack-cli/configtest@2.1.1': + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + + '@webpack-cli/info@2.0.2': + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + + '@webpack-cli/serve@2.0.5': + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + angular-estree-parser@1.3.1: + resolution: {integrity: sha512-jvlnNk4aoEmA6EKK12OnsOkCSdsWleBsYB+aWyH8kpfTB6Li1kxWVbHKVldH9zDCwVVi1hXfqPi/gbSv49tkbQ==} + engines: {node: '>= 6'} + peerDependencies: + '@angular/compiler': '>= 6.0.0 < 9.0.6' + + angular-html-parser@1.4.0: + resolution: {integrity: sha512-5KyzzYOeZV9g9ahXw4rbi8IIbMjUdXoarXJ0CfbWue5U1YsvMnjMZJ3oadpU8ZtnIx1zR/dsyt+FLJx2U65d2Q==} + engines: {node: '>= 6'} + + ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-observable@0.3.0: + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zenObservable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zenObservable: + optional: true + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-differ@2.1.0: + resolution: {integrity: sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==} + engines: {node: '>=6'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + bail@1.0.5: + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + + caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + + callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + + character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjk-regex@2.0.0: + resolution: {integrity: sha512-E4gFi2f3jC0zFVHpaAcupW+gv9OejZ2aV3DP/LlSO0dDcZJAXw7W0ivn+vN17edN/PhU4HCgs1bfx7lPK7FpdA==} + engines: {node: '>= 4'} + + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + + collapse-white-space@1.0.6: + resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + cssstyle@4.1.0: + resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} + engines: {node: '>=18'} + + dashify@2.0.0: + resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==} + engines: {node: '>=4'} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + date-fns@1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + editorconfig-to-prettier@0.1.1: + resolution: {integrity: sha512-MMadSSVRDb4uKdxV6bCXXN4cTsxIsXYtV4XdPu6FOCSAw6zsCIDA+QEktEU+u6h+c/mTrul5NR+pwFpPxwetiQ==} + + editorconfig@0.15.3: + resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} + hasBin: true + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.33: + resolution: {integrity: sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==} + + elegant-spinner@1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-config-airbnb-base@15.0.0: + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + + eslint-config-airbnb-typescript@18.0.0: + resolution: {integrity: sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^7.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-config-standard@17.1.0: + resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: '^15.0.0 || ^16.0.0 ' + eslint-plugin-promise: ^6.0.0 + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-es@3.0.1: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsdoc@50.3.1: + resolution: {integrity: sha512-SY9oUuTMr6aWoJggUS40LtMjsRzJPB5ZT7F432xZIHK3EfHF+8i48GbUBpwanrtlL9l1gILNTHK9o8gEhYLcKA==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-n@16.6.2: + resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-node@11.1.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + + eslint-plugin-promise@7.1.0: + resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-tsdoc@0.3.0: + resolution: {integrity: sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.1.0: + resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-utils@1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} + engines: {node: '>=6'} + + eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + + eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.1.0: + resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@6.8.0: + resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + eslint@9.12.0: + resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.2.0: + resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} + engines: {node: '>=6.0.0'} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + ethers@6.13.3: + resolution: {integrity: sha512-/DzbZOLVtoO4fKvvQwpEucHAQgIwBGWuRvBdwE/lMXgXvvHHTSkn7XqAQ2b+gjJzZDJjWA9OD05bVceVOsBHbg==} + engines: {node: '>=14.0.0'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@2.1.0: + resolution: {integrity: sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==} + engines: {node: ^8.12.0 || >=9.7.0} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} + engines: {node: '>=4'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-parent-dir@0.3.0: + resolution: {integrity: sha512-41+Uo9lF5JNGpIMGrujNKDuqH9ofU2ISJ1XCZPLIN/Yayql599PtA0ywYtlLMYmJcSPkr4uAF14wJmKlW2Fx3g==} + + find-project-root@1.1.1: + resolution: {integrity: sha512-4+yZ013W+EZc+hvdgA2RlzlgNfP1eGdMNxU6xzw1yt518cF6/xZD3kLV+bprYX5+AD0IL76xcN28TPqYJHxrHw==} + hasBin: true + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} + engines: {node: '>=4'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + flatten@1.0.3: + resolution: {integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==} + deprecated: flatten is deprecated in favor of utility frameworks such as lodash. + + flow-parser@0.111.3: + resolution: {integrity: sha512-iEjGZ94OBMcESxnLorXNjJmtd/JtQYXUVrQpfwvtAKkuyawRmv+2LM6nqyOsOJkISEYbyY6ziudRE0u4VyPSVA==} + engines: {node: '>=0.4.0'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stdin@7.0.0: + resolution: {integrity: sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==} + engines: {node: '>=8'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@14.6.0: + resolution: {integrity: sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg==} + engines: {node: '>= 6.x'} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + html-element-attributes@2.2.1: + resolution: {integrity: sha512-gGTgCeQu+g1OFExZKWQ1LwbFXxLJ6cGdCGj64ByEaxatr/EPVc23D6Gxngb37ao+SNInP/sGu8FXxRsSxMm7aQ==} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-styles@1.0.0: + resolution: {integrity: sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w==} + + html-tag-names@1.1.5: + resolution: {integrity: sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + husky@9.1.6: + resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + engines: {node: '>=18'} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@3.3.10: + resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==} + + ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indexes-of@1.0.1: + resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + + is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-observable@1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-whitespace-character@1.0.4: + resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} + + is-word-character@1.0.4: + resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterall@1.3.0: + resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} + + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@25.3.0: + resolution: {integrity: sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==} + engines: {node: '>= 8.3'} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-jsdom@29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + + jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stable-stringify@1.0.1: + resolution: {integrity: sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@2.1.0: + resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} + engines: {node: '>=0.10.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.1.6: + resolution: {integrity: sha512-8ZmlJFVK9iCmtLz19HpSsR8HaAMWBT284VMNednLwlIMDP2hJDCIhUp0IZ2xUcZ+Ob6BM0VvCSJwzASDM45NLQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linguist-languages@7.6.0: + resolution: {integrity: sha512-DBZPIWjrQmb/52UlSEN8MTiwwugrAh4NBX9/DyIG8IuO8rDLYDRM+KVPbuiPVKd3ResxYtZB5AiSuc8dTzOSog==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + lint-staged@9.4.3: + resolution: {integrity: sha512-PejnI+rwOAmKAIO+5UuAZU9gxdej/ovSEOAY34yMfC3OS4Ac82vCBPzAWLReR9zCPOMqeVwQRaZ3bUBpAsaL2Q==} + hasBin: true + + listr-silent-renderer@1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} + + listr-update-renderer@0.5.0: + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 + + listr-verbose-renderer@0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} + + listr@0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.unescape@4.0.1: + resolution: {integrity: sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==} + + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} + + log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + + loglevel-colored-level-prefix@1.0.0: + resolution: {integrity: sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@11.0.1: + resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} + engines: {node: 20 || >=22} + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + + markdown-escapes@1.0.4: + resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + mem@5.1.1: + resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==} + engines: {node: '>=8'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multimatch@3.0.0: + resolution: {integrity: sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==} + engines: {node: '>=6'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + n-readlines@1.0.0: + resolution: {integrity: sha512-ISDqGcspVu6U3VKqtJZG1uR55SmNNF9uK0EMq1IvNVVZOui6MW6VR0+pIZhqz85ORAGp+4zW+5fJ/SE7bwEibA==} + engines: {node: '>=6.x.x'} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + hasBin: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + node-ts@6.1.3: + resolution: {integrity: sha512-efSBNOe7AJxg2QKmDVzzQGxYMTfR51USAlteD6UCFlR2B4nMGhJiTVsypzKFupimWj9kwYUl5faeJcuMGpcwXw==} + engines: {node: '>=18.0.0'} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + npm-run-path@3.1.0: + resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==} + engines: {node: '>=8'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@8.1.0: + resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} + engines: {node: '>=18'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + + p-finally@2.0.1: + resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} + engines: {node: '>=8'} + + p-is-promise@2.1.0: + resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} + engines: {node: '>=6'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@1.2.2: + resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} + + parse-imports@2.2.1: + resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} + engines: {node: '>= 18'} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-srcset@1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + please-upgrade-node@3.2.0: + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} + + poseidon-lite@0.2.1: + resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-less@2.0.0: + resolution: {integrity: sha512-pPNsVnpCB13nBMOcl5GVh8JGmB0JGFjqkLUDzKdVpptFFKEe9wFdEzvh2j4lD2AD+7qcrUfw9Ta+oi5+Fw7jjQ==} + engines: {node: '>=4'} + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-scss@2.0.0: + resolution: {integrity: sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==} + engines: {node: '>=6.0.0'} + + postcss-selector-parser@2.2.3: + resolution: {integrity: sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==} + + postcss-values-parser@1.5.0: + resolution: {integrity: sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ==} + engines: {node: '>=4'} + + postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + + postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-eslint@16.3.0: + resolution: {integrity: sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==} + engines: {node: '>=16.10.0'} + peerDependencies: + prettier-plugin-svelte: ^3.0.0 + svelte-eslint-parser: '*' + peerDependenciesMeta: + prettier-plugin-svelte: + optional: true + svelte-eslint-parser: + optional: true + + prettier-standard@16.4.1: + resolution: {integrity: sha512-IW3Sct4GOdqc1s4+1HZjH2HegzLZQ6mDMl2xz6i6KHCac7kCM+obLbvm2e0zp8PytKkLQCdOpj0cWWa48Ruetw==} + engines: {node: '>=8'} + hasBin: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prettierx@0.11.3: + resolution: {integrity: sha512-Xf04LEfD3ITo26i5U/zR++hwqKPG3feR06rrjB0t2o+QFv8ZidFp4o7nPqPGLfE4UwHJgd0qwnZKwm0MsUQHUA==} + engines: {node: '>=8'} + hasBin: true + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regex@4.3.3: + resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + + regexp-util@1.2.2: + resolution: {integrity: sha512-5/rl2UD18oAlLQEIuKBeiSIOp1hb5wCXcakl5yvHxlY1wyWI4D5cUKKzCibBeu741PA9JKvZhMqbkDQqPusX3w==} + engines: {node: '>= 4'} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + regexpp@2.0.1: + resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} + engines: {node: '>=6.5.0'} + + regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + + remark-math@1.0.6: + resolution: {integrity: sha512-I43wU/QOQpXvVFXKjA4FHp5xptK65+5F6yolm8+69/JV0EqSOB64wURUZ3JK50JtnTL8FvwLiH2PZ+fvsBxviA==} + peerDependencies: + remark-parse: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + + remark-parse@5.0.0: + resolution: {integrity: sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-relative@0.8.7: + resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.15.1: + resolution: {integrity: sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shiki@1.22.0: + resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + sigmund@1.0.1: + resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-html-tokenizer@0.5.11: + resolution: {integrity: sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + + slice-ansi@0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + + slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + state-toggle@1.0.3: + resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + + string-width@4.2.0: + resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==} + engines: {node: '>=8'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + table@5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} + engines: {node: '>=6.0.0'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.34.1: + resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tldts-core@6.1.50: + resolution: {integrity: sha512-na2EcZqmdA2iV9zHV7OHQDxxdciEpxrjbkp+aHmZgnZKHzoElLajP59np5/4+sare9fQBfixgvXKx8ev1d7ytw==} + + tldts@6.1.50: + resolution: {integrity: sha512-q9GOap6q3KCsLMdOjXhWU5jVZ8/1dIib898JBRLsN+tBhENpBDcAVQbE0epADOjw11FhQQy9AcbqKGBQPUfTQA==} + hasBin: true + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trim-trailing-lines@1.1.4: + resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} + + trim@0.0.1: + resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} + deprecated: Use String.prototype.trim() instead + + trough@1.0.5: + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-loader@9.5.1: + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typedoc@0.26.8: + resolution: {integrity: sha512-QBF0BMbnNeUc6U7pRHY7Jb8pjhmiNWZNQT8LU6uk9qP9t3goP9bJptdlNqMC0wBB2w9sQrxjZt835bpRSSq1LA==} + engines: {node: '>= 18'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x + + typescript-eslint@8.8.1: + resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unherit@1.1.3: + resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} + + unicode-regex@2.0.0: + resolution: {integrity: sha512-5nbEG2YU7loyTvPABaKb+8B0u8L7vWCsVmCSsiaO249ZdMKlvrXlxR2ex4TUVAdzv/Cne/TdoXSSaJArGXaleQ==} + engines: {node: '>= 4'} + + unicode-regex@3.0.0: + resolution: {integrity: sha512-WiDJdORsqgxkZrjC8WsIP573130HNn7KsB0IDnUccW2BG2b19QQNloNhVe6DKk3Aef0UcoIHhNVj7IkkcYWrNw==} + engines: {node: '>= 4'} + + unified@8.4.2: + resolution: {integrity: sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==} + + uniq@1.0.1: + resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==} + + unist-util-is@3.0.0: + resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@1.1.4: + resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==} + + unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@2.1.2: + resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@1.4.1: + resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + utf-8-validate@6.0.4: + resolution: {integrity: sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==} + engines: {node: '>=6.14.2'} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vfile-location@2.0.6: + resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} + + vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vnopts@1.0.2: + resolution: {integrity: sha512-d2rr2EFhAGHnTlURu49G7GWmiJV80HbAnkYdD9IFAtfhmxC+kSWEaZ6ZF064DJFTv9lQZQV1vuLTntyQpoanGQ==} + engines: {node: '>= 6'} + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-cli@5.1.4: + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + + webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.95.0: + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + write@1.0.3: + resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} + engines: {node: '>=4'} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml-unist-parser@1.1.1: + resolution: {integrity: sha512-cGtqhHBlcft+rTKiPsVcSyi43Eqm5a1buYokW9VkztroKMErBSdR9ANHx+/XxNppHZTu2KMEn4yY8MdhuGoFuA==} + engines: {node: '>= 6'} + + yaml@1.8.3: + resolution: {integrity: sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==} + engines: {node: '>= 6'} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@adraffy/ens-normalize@1.10.1': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular/compiler@8.2.14': + dependencies: + tslib: 1.14.1 + + '@aptos-labs/aptos-cli@0.2.0': {} + + '@aptos-labs/aptos-client@0.1.1': + dependencies: + axios: 1.7.4 + got: 11.8.6 + transitivePeerDependencies: + - debug + + '@aptos-labs/ts-sdk@1.29.0': + dependencies: + '@aptos-labs/aptos-cli': 0.2.0 + '@aptos-labs/aptos-client': 0.1.1 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + eventemitter3: 5.0.1 + form-data: 4.0.0 + js-base64: 3.7.7 + jwt-decode: 4.0.0 + poseidon-lite: 0.2.1 + transitivePeerDependencies: + - debug + + '@babel/code-frame@7.25.7': + dependencies: + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 + + '@babel/code-frame@7.8.3': + dependencies: + '@babel/highlight': 7.25.7 + + '@babel/compat-data@7.25.7': {} + + '@babel/core@7.25.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.7': + dependencies: + '@babel/types': 7.25.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-compilation-targets@7.25.7': + dependencies: + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.25.7': {} + + '@babel/helper-simple-access@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.7': {} + + '@babel/helper-validator-identifier@7.25.7': {} + + '@babel/helper-validator-option@7.25.7': {} + + '@babel/helpers@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + + '@babel/highlight@7.25.7': + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/parser@7.25.7': + dependencies: + '@babel/types': 7.25.7 + + '@babel/parser@7.9.4': + dependencies: + '@babel/types': 7.25.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/runtime@7.25.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + + '@babel/traverse@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.7': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@discoveryjs/json-ext@0.5.7': {} + + '@es-joy/jsdoccomment@0.48.0': + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': + dependencies: + eslint: 9.12.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.6.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 10.2.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@eslint/js@9.12.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.0': + dependencies: + levn: 0.4.1 + + '@glimmer/interfaces@0.41.4': {} + + '@glimmer/syntax@0.41.4': + dependencies: + '@glimmer/interfaces': 0.41.4 + '@glimmer/util': 0.41.4 + handlebars: 4.7.8 + simple-html-tokenizer: 0.5.11 + + '@glimmer/util@0.41.4': {} + + '@humanfs/core@0.19.0': {} + + '@humanfs/node@0.16.5': + dependencies: + '@humanfs/core': 0.19.0 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@iarna/toml@2.2.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.7.5 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.7.5 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.25.7 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.7.5 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@microsoft/tsdoc-config@0.17.0': + dependencies: + '@microsoft/tsdoc': 0.15.0 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.8 + + '@microsoft/tsdoc@0.15.0': {} + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/curves@1.6.0': + dependencies: + '@noble/hashes': 1.5.0 + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.5.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgr/core@0.1.1': {} + + '@rauschma/stringio@1.4.0': + dependencies: + '@types/node': 10.17.60 + + '@rtsao/scc@1.1.0': {} + + '@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)': + dependencies: + any-observable: 0.3.0(rxjs@6.6.7) + optionalDependencies: + rxjs: 6.6.7 + transitivePeerDependencies: + - zenObservable + + '@scure/base@1.1.9': {} + + '@scure/bip32@1.5.0': + dependencies: + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.4.0': + dependencies: + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 + + '@shikijs/core@1.22.0': + dependencies: + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.22.0': + dependencies: + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-js: 0.4.3 + + '@shikijs/engine-oniguruma@1.22.0': + dependencies: + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + + '@shikijs/types@1.22.0': + dependencies: + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@9.3.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sindresorhus/is@4.6.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@tootallnate/once@2.0.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.7 + + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 22.7.5 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.7.5 + '@types/responselike': 1.0.3 + + '@types/estree@1.0.6': {} + + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.7.5 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.7.5 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/http-cache-semantics@4.0.4': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.13': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/jsdom@20.0.1': + dependencies: + '@types/node': 22.7.5 + '@types/tough-cookie': 4.0.5 + parse5: 7.1.2 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.7.5 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/minimatch@5.1.2': {} + + '@types/node@10.17.60': {} + + '@types/node@18.15.13': {} + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.7.5 + + '@types/stack-utils@2.0.3': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.1 + eslint: 9.12.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.1 + debug: 4.3.7 + eslint: 9.12.0 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/scope-manager@8.8.1': + dependencies: + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/visitor-keys': 8.8.1 + + '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.6.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/types@8.8.1': {} + + '@typescript-eslint/typescript-estree@2.6.1(typescript@5.6.2)': + dependencies: + debug: 4.3.7 + glob: 7.2.3 + is-glob: 4.0.3 + lodash.unescape: 4.0.1 + semver: 6.3.0 + tsutils: 3.21.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.2)': + dependencies: + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/visitor-keys': 8.8.1 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.6.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2) + eslint: 9.12.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.8.1': + dependencies: + '@typescript-eslint/types': 8.8.1 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + '@webassemblyjs/ast@1.12.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + + '@webassemblyjs/helper-api-error@1.11.6': {} + + '@webassemblyjs/helper-buffer@1.12.1': {} + + '@webassemblyjs/helper-numbers@1.11.6': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + + '@webassemblyjs/helper-wasm-section@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + + '@webassemblyjs/ieee754@1.11.6': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.11.6': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.11.6': {} + + '@webassemblyjs/wasm-edit@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + + '@webassemblyjs/wasm-gen@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wasm-opt@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + + '@webassemblyjs/wasm-parser@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wast-printer@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4))': + dependencies: + webpack: 5.95.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.95.0) + + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4))': + dependencies: + webpack: 5.95.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.95.0) + + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4))': + dependencies: + webpack: 5.95.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.95.0) + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abab@2.0.6: {} + + acorn-globals@7.0.1: + dependencies: + acorn: 8.12.1 + acorn-walk: 8.3.4 + + acorn-import-attributes@1.9.5(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn-jsx@5.3.2(acorn@7.4.1): + dependencies: + acorn: 7.4.1 + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 + + acorn@7.4.1: {} + + acorn@8.12.1: {} + + aes-js@4.0.0-beta.5: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + agent-base@7.1.1: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + angular-estree-parser@1.3.1(@angular/compiler@8.2.14): + dependencies: + '@angular/compiler': 8.2.14 + lines-and-columns: 1.1.6 + tslib: 1.14.1 + + angular-html-parser@1.4.0: + dependencies: + tslib: 1.14.1 + + ansi-escapes@3.2.0: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@2.1.1: {} + + ansi-regex@3.0.1: {} + + ansi-regex@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@2.2.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-observable@0.3.0(rxjs@6.6.7): + optionalDependencies: + rxjs: 6.6.7 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + are-docs-informative@0.0.2: {} + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-differ@2.1.0: {} + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@1.0.2: + dependencies: + array-uniq: 1.0.3 + + array-union@2.1.0: {} + + array-uniq@1.0.3: {} + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + arrify@1.0.1: {} + + astral-regex@1.0.0: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axios@1.7.4: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-jest@29.7.0(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.25.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.25.7 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + + babel-preset-jest@29.6.3(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + + bail@1.0.5: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bignumber.js@9.1.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.0: + dependencies: + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.33 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.2 + optional: true + + builtin-modules@3.3.0: {} + + builtins@5.1.0: + dependencies: + semver: 7.6.3 + + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + caller-callsite@2.0.0: + dependencies: + callsites: 2.0.0 + + caller-path@2.0.0: + dependencies: + caller-callsite: 2.0.0 + + callsites@2.0.0: {} + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001667: {} + + ccount@2.0.1: {} + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + char-regex@1.0.2: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@1.1.4: {} + + character-entities-legacy@3.0.0: {} + + character-entities@1.2.4: {} + + character-reference-invalid@1.1.4: {} + + chardet@0.7.0: {} + + chrome-trace-event@1.0.4: {} + + ci-info@2.0.0: {} + + ci-info@3.9.0: {} + + cjk-regex@2.0.0: + dependencies: + regexp-util: 1.2.2 + unicode-regex: 2.0.0 + + cjs-module-lexer@1.4.1: {} + + clean-stack@2.2.0: {} + + cli-cursor@2.1.0: + dependencies: + restore-cursor: 2.0.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@0.2.1: + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + + cli-width@3.0.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + co@4.6.0: {} + + code-point-at@1.1.0: {} + + collapse-white-space@1.0.6: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@10.0.1: {} + + commander@2.20.3: {} + + comment-parser@1.4.1: {} + + common-tags@1.8.2: {} + + concat-map@0.0.1: {} + + confusing-browser-globals@1.0.11: {} + + convert-source-map@2.0.0: {} + + cosmiconfig@5.2.1: + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + + create-jest@29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@6.0.5: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + cssom@0.3.8: {} + + cssom@0.5.0: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + cssstyle@4.1.0: + dependencies: + rrweb-cssom: 0.7.1 + + dashify@2.0.0: {} + + data-urls@3.0.2: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + date-fns@1.30.1: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decimal.js@10.4.3: {} + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + dedent@0.7.0: {} + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + del@5.1.0: + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + detect-newline@3.1.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + dotenv@16.4.5: {} + + eastasianwidth@0.2.0: {} + + editorconfig-to-prettier@0.1.1: {} + + editorconfig@0.15.3: + dependencies: + commander: 2.20.3 + lru-cache: 4.1.5 + semver: 5.7.2 + sigmund: 1.0.1 + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.33: {} + + elegant-spinner@1.0.1: {} + + emittery@0.13.1: {} + + emoji-regex@10.4.0: {} + + emoji-regex@7.0.3: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@4.5.0: {} + + envinfo@7.14.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-module-lexer@1.5.4: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-compat-utils@0.5.1(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + semver: 7.6.3 + + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint@9.12.0): + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 9.12.0 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0) + object.assign: 4.1.5 + object.entries: 1.1.8 + semver: 6.3.1 + + eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2))(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint@9.12.0): + dependencies: + '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + eslint: 9.12.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint@9.12.0) + transitivePeerDependencies: + - eslint-plugin-import + + eslint-config-prettier@9.1.0(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + + eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0))(eslint-plugin-n@16.6.2(eslint@9.12.0))(eslint-plugin-promise@7.1.0(eslint@9.12.0))(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0) + eslint-plugin-n: 16.6.2(eslint@9.12.0) + eslint-plugin-promise: 7.1.0(eslint@9.12.0) + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + eslint: 9.12.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + + eslint-plugin-es-x@7.8.0(eslint@9.12.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@eslint-community/regexpp': 4.11.1 + eslint: 9.12.0 + eslint-compat-utils: 0.5.1(eslint@9.12.0) + + eslint-plugin-es@3.0.1(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.12.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsdoc@50.3.1(eslint@9.12.0): + dependencies: + '@es-joy/jsdoccomment': 0.48.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint: 9.12.0 + espree: 10.2.0 + esquery: 1.6.0 + parse-imports: 2.2.1 + semver: 7.6.3 + spdx-expression-parse: 4.0.0 + synckit: 0.9.2 + transitivePeerDependencies: + - supports-color + + eslint-plugin-n@16.6.2(eslint@9.12.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + builtins: 5.1.0 + eslint: 9.12.0 + eslint-plugin-es-x: 7.8.0(eslint@9.12.0) + get-tsconfig: 4.8.1 + globals: 13.24.0 + ignore: 5.3.2 + is-builtin-module: 3.2.1 + is-core-module: 2.15.1 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.6.3 + + eslint-plugin-node@11.1.0(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + eslint-plugin-es: 3.0.1(eslint@9.12.0) + eslint-utils: 2.1.0 + ignore: 5.3.2 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 6.3.1 + + eslint-plugin-promise@7.1.0(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + + eslint-plugin-tsdoc@0.3.0: + dependencies: + '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc-config': 0.17.0 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@8.1.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-utils@1.4.3: + dependencies: + eslint-visitor-keys: 1.3.0 + + eslint-utils@2.1.0: + dependencies: + eslint-visitor-keys: 1.3.0 + + eslint-visitor-keys@1.3.0: {} + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.1.0: {} + + eslint@6.8.0: + dependencies: + '@babel/code-frame': 7.25.7 + ajv: 6.12.6 + chalk: 2.4.2 + cross-spawn: 6.0.5 + debug: 4.3.7 + doctrine: 3.0.0 + eslint-scope: 5.1.1 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + esquery: 1.6.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + inquirer: 7.3.3 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.3.0 + lodash: 4.17.21 + minimatch: 3.1.2 + mkdirp: 0.5.6 + natural-compare: 1.4.0 + optionator: 0.8.3 + progress: 2.0.3 + regexpp: 2.0.1 + semver: 6.3.1 + strip-ansi: 5.2.0 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + eslint@9.12.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.12.0 + '@eslint/plugin-kit': 0.2.0 + '@humanfs/node': 0.16.5 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint-scope: 8.1.0 + eslint-visitor-keys: 4.1.0 + espree: 10.2.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.2.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.1.0 + + espree@6.2.1: + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + ethers@6.13.3(bufferutil@4.0.8)(utf-8-validate@6.0.4): + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@6.0.4) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + execa@2.1.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 3.1.0 + onetime: 5.1.2 + p-finally: 2.0.1 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + extend@3.0.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + figures@1.7.0: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@5.0.1: + dependencies: + flat-cache: 2.0.1 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-parent-dir@0.3.0: {} + + find-project-root@1.1.1: {} + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@2.0.1: + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flat@5.0.2: {} + + flatted@2.0.2: {} + + flatted@3.3.1: {} + + flatten@1.0.3: {} + + flow-parser@0.111.3: {} + + follow-redirects@1.15.9: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functional-red-black-tree@1.0.1: {} + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.2.0: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-package-type@0.1.0: {} + + get-stdin@7.0.0: {} + + get-stream@4.1.0: + dependencies: + pump: 3.0.2 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@11.0.0: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@12.4.0: + dependencies: + type-fest: 0.8.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@10.0.2: + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.2.3 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + graphql@14.6.0: + dependencies: + iterall: 1.3.0 + + handlebars@4.7.8: + dependencies: + minimist: 1.2.5 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.0.2: {} + + has-flag@1.0.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hosted-git-info@2.8.9: {} + + html-element-attributes@2.2.1: {} + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-escaper@2.0.2: {} + + html-styles@1.0.0: {} + + html-tag-names@1.1.5: {} + + html-void-elements@3.0.0: {} + + http-cache-semantics@4.1.1: {} + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + husky@9.1.6: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@3.3.10: {} + + ignore@4.0.6: {} + + ignore@5.3.2: {} + + import-fresh@2.0.0: + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@3.2.0: {} + + indent-string@4.0.0: {} + + indexes-of@1.0.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + interpret@3.1.1: {} + + is-alphabetical@1.0.4: {} + + is-alphanumerical@1.0.4: + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-buffer@2.0.5: {} + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-callable@1.2.7: {} + + is-ci@2.0.0: + dependencies: + ci-info: 2.0.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-decimal@1.0.4: {} + + is-directory@0.3.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@1.0.0: + dependencies: + number-is-nan: 1.0.1 + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@1.0.4: {} + + is-interactive@2.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-observable@1.1.0: + dependencies: + symbol-observable: 1.2.0 + + is-path-cwd@2.2.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@2.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-potential-custom-element-name@1.0.1: {} + + is-promise@2.2.2: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-regexp@1.0.0: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-whitespace-character@1.0.4: {} + + is-word-character@1.0.4: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.7 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterall@1.3.0: {} + + jackspeak@4.0.2: + dependencies: + '@isaacs/cliui': 8.0.2 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)): + dependencies: + '@babel/core': 7.25.7 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.7) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.7.5 + ts-node: 10.9.2(@types/node@22.7.5)(typescript@5.6.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@25.3.0: + dependencies: + detect-newline: 3.1.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-jsdom@29.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.4): + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/jsdom': 20.0.1 + '@types/node': 22.7.5 + jest-mock: 29.7.0 + jest-util: 29.7.0 + jsdom: 20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.7.5 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.25.7 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/types': 7.25.7 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.7.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.7.5 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jju@1.4.0: {} + + js-base64@2.6.4: {} + + js-base64@3.7.7: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsdoc-type-pratt-parser@4.1.0: {} + + jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.4): + dependencies: + abab: 2.0.6 + acorn: 8.12.1 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.4.3 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.0 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.13 + parse5: 7.1.2 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsdom@25.0.1(bufferutil@4.0.8)(utf-8-validate@6.0.4): + dependencies: + cssstyle: 4.1.0 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.13 + parse5: 7.1.2 + rrweb-cssom: 0.7.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.0.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stable-stringify@1.0.1: + dependencies: + jsonify: 0.0.1 + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonify@0.0.1: {} + + jwt-decode@4.0.0: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + leven@2.1.0: {} + + leven@3.1.0: {} + + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.1.6: {} + + lines-and-columns@1.2.4: {} + + linguist-languages@7.6.0: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + lint-staged@9.4.3: + dependencies: + chalk: 2.4.2 + commander: 2.20.3 + cosmiconfig: 5.2.1 + debug: 4.3.7 + dedent: 0.7.0 + del: 5.1.0 + execa: 2.1.0 + listr: 0.14.3 + log-symbols: 3.0.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + please-upgrade-node: 3.2.0 + string-argv: 0.3.2 + stringify-object: 3.3.0 + transitivePeerDependencies: + - supports-color + - zen-observable + - zenObservable + + listr-silent-renderer@1.1.1: {} + + listr-update-renderer@0.5.0(listr@0.14.3): + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.2.0 + listr: 0.14.3 + log-symbols: 1.0.2 + log-update: 2.3.0 + strip-ansi: 3.0.1 + + listr-verbose-renderer@0.5.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 1.30.1 + figures: 2.0.0 + + listr@0.14.3: + dependencies: + '@samverschueren/stream-to-observable': 0.3.1(rxjs@6.6.7) + is-observable: 1.1.0 + is-promise: 2.2.2 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.5.0(listr@0.14.3) + listr-verbose-renderer: 0.5.0 + p-map: 2.1.0 + rxjs: 6.6.7 + transitivePeerDependencies: + - zen-observable + - zenObservable + + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + + loader-runner@4.3.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.unescape@4.0.1: {} + + lodash.uniqby@4.7.0: {} + + lodash@4.17.21: {} + + log-symbols@1.0.2: + dependencies: + chalk: 1.1.3 + + log-symbols@3.0.0: + dependencies: + chalk: 2.4.2 + + log-symbols@6.0.0: + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + + log-update@2.3.0: + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + + loglevel-colored-level-prefix@1.0.0: + dependencies: + chalk: 1.1.3 + loglevel: 1.9.2 + + loglevel@1.9.2: {} + + lowercase-keys@2.0.0: {} + + lru-cache@11.0.1: {} + + lru-cache@4.1.5: + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lunr@2.3.9: {} + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + map-age-cleaner@0.1.3: + dependencies: + p-defer: 1.0.0 + + markdown-escapes@1.0.4: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdurl@2.0.0: {} + + mem@5.1.1: + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 2.1.0 + p-is-promise: 2.1.0 + + memorystream@0.3.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromark-util-character@2.1.0: + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-encode@2.0.0: {} + + micromark-util-sanitize-uri@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + + micromark-util-symbol@2.0.0: {} + + micromark-util-types@2.0.0: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@1.2.0: {} + + mimic-fn@2.1.0: {} + + mimic-function@5.0.1: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.0.4: + dependencies: + brace-expansion: 1.1.11 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.5: {} + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mri@1.2.0: {} + + ms@2.1.3: {} + + multimatch@3.0.0: + dependencies: + array-differ: 2.1.0 + array-union: 1.0.2 + arrify: 1.0.1 + minimatch: 3.1.2 + + mute-stream@0.0.8: {} + + n-readlines@1.0.0: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + nice-try@1.0.5: {} + + node-gyp-build@4.8.2: + optional: true + + node-int64@0.4.0: {} + + node-releases@2.0.18: {} + + node-ts@6.1.3: + dependencies: + '@rauschma/stringio': 1.4.0 + '@types/node': 22.7.5 + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + normalize-url@6.1.0: {} + + npm-run-all@4.1.5: + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.5 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.1 + string.prototype.padend: 3.1.6 + + npm-run-path@3.1.0: + dependencies: + path-key: 3.1.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + number-is-nan@1.0.1: {} + + nwsapi@2.2.13: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@2.0.1: + dependencies: + mimic-fn: 1.2.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + oniguruma-to-js@0.4.3: + dependencies: + regex: 4.3.3 + + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@8.1.0: + dependencies: + chalk: 5.3.0 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-tmpdir@1.0.2: {} + + p-cancelable@2.1.1: {} + + p-defer@1.0.0: {} + + p-finally@2.0.1: {} + + p-is-promise@2.1.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@2.1.0: {} + + p-map@3.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@1.2.2: + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + + parse-imports@2.2.1: + dependencies: + es-module-lexer: 1.5.4 + slashes: 3.0.12 + + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.25.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-srcset@1.0.2: {} + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.1 + minipass: 7.1.2 + + path-type@3.0.0: + dependencies: + pify: 3.0.0 + + path-type@4.0.0: {} + + picocolors@0.2.1: {} + + picocolors@1.1.0: {} + + picomatch@2.3.1: {} + + pidtree@0.3.1: {} + + pify@2.3.0: {} + + pify@3.0.0: {} + + pinkie-promise@2.0.1: + dependencies: + pinkie: 2.0.4 + + pinkie@2.0.4: {} + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + please-upgrade-node@3.2.0: + dependencies: + semver-compare: 1.0.0 + + poseidon-lite@0.2.1: {} + + possible-typed-array-names@1.0.0: {} + + postcss-less@2.0.0: + dependencies: + postcss: 5.2.18 + + postcss-media-query-parser@0.2.3: {} + + postcss-scss@2.0.0: + dependencies: + postcss: 7.0.39 + + postcss-selector-parser@2.2.3: + dependencies: + flatten: 1.0.3 + indexes-of: 1.0.1 + uniq: 1.0.1 + + postcss-values-parser@1.5.0: + dependencies: + flatten: 1.0.3 + indexes-of: 1.0.1 + uniq: 1.0.1 + + postcss@5.2.18: + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + + postcss@7.0.39: + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + + prelude-ls@1.1.2: {} + + prelude-ls@1.2.1: {} + + prettier-eslint@16.3.0: + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + common-tags: 1.8.2 + dlv: 1.1.3 + eslint: 8.57.1 + indent-string: 4.0.0 + lodash.merge: 4.6.2 + loglevel-colored-level-prefix: 1.0.0 + prettier: 3.3.3 + pretty-format: 29.7.0 + require-relative: 0.8.7 + typescript: 5.6.2 + vue-eslint-parser: 9.4.3(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + prettier-standard@16.4.1(typescript@5.6.2): + dependencies: + chalk: 2.4.2 + diff: 4.0.2 + eslint: 6.8.0 + execa: 2.1.0 + find-up: 4.1.0 + get-stdin: 7.0.0 + globby: 6.1.0 + ignore: 3.3.10 + lint-staged: 9.4.3 + mri: 1.2.0 + multimatch: 3.0.0 + prettierx: 0.11.3(typescript@5.6.2) + transitivePeerDependencies: + - supports-color + - typescript + - zen-observable + - zenObservable + + prettier@3.3.3: {} + + prettierx@0.11.3(typescript@5.6.2): + dependencies: + '@angular/compiler': 8.2.14 + '@babel/code-frame': 7.8.3 + '@babel/parser': 7.9.4 + '@glimmer/syntax': 0.41.4 + '@iarna/toml': 2.2.3 + '@typescript-eslint/typescript-estree': 2.6.1(typescript@5.6.2) + angular-estree-parser: 1.3.1(@angular/compiler@8.2.14) + angular-html-parser: 1.4.0 + camelcase: 5.3.1 + chalk: 3.0.0 + cjk-regex: 2.0.0 + cosmiconfig: 5.2.1 + dashify: 2.0.0 + dedent: 0.7.0 + diff: 4.0.2 + editorconfig: 0.15.3 + editorconfig-to-prettier: 0.1.1 + escape-string-regexp: 2.0.0 + esutils: 2.0.3 + find-parent-dir: 0.3.0 + find-project-root: 1.1.1 + flow-parser: 0.111.3 + get-stream: 4.1.0 + globby: 6.1.0 + graphql: 14.6.0 + html-element-attributes: 2.2.1 + html-styles: 1.0.0 + html-tag-names: 1.1.5 + ignore: 4.0.6 + is-ci: 2.0.0 + jest-docblock: 25.3.0 + json-stable-stringify: 1.0.1 + leven: 3.1.0 + lines-and-columns: 1.1.6 + linguist-languages: 7.6.0 + lodash.uniqby: 4.7.0 + mem: 5.1.1 + minimatch: 3.0.4 + minimist: 1.2.5 + n-readlines: 1.0.0 + normalize-path: 3.0.0 + parse-srcset: 1.0.2 + postcss-less: 2.0.0 + postcss-media-query-parser: 0.2.3 + postcss-scss: 2.0.0 + postcss-selector-parser: 2.2.3 + postcss-values-parser: 1.5.0 + regexp-util: 1.2.2 + remark-math: 1.0.6(remark-parse@5.0.0) + remark-parse: 5.0.0 + resolve: 1.15.1 + semver: 6.3.0 + string-width: 4.2.0 + unicode-regex: 3.0.0 + unified: 8.4.2 + vnopts: 1.0.2 + yaml: 1.8.3 + yaml-unist-parser: 1.1.1 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + progress@2.0.3: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + property-information@6.5.0: {} + + proxy-from-env@1.1.0: {} + + pseudomap@1.0.2: {} + + psl@1.9.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode.js@2.3.1: {} + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + react-is@18.3.1: {} + + read-pkg@3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + + rechoir@0.8.0: + dependencies: + resolve: 1.22.8 + + regenerator-runtime@0.14.1: {} + + regex@4.3.3: {} + + regexp-util@1.2.2: + dependencies: + tslib: 1.14.1 + + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regexpp@2.0.1: {} + + regexpp@3.2.0: {} + + remark-math@1.0.6(remark-parse@5.0.0): + dependencies: + remark-parse: 5.0.0 + trim-trailing-lines: 1.1.4 + + remark-parse@5.0.0: + dependencies: + collapse-white-space: 1.0.6 + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + is-whitespace-character: 1.0.4 + is-word-character: 1.0.4 + markdown-escapes: 1.0.4 + parse-entities: 1.2.2 + repeat-string: 1.6.1 + state-toggle: 1.0.3 + trim: 0.0.1 + trim-trailing-lines: 1.1.4 + unherit: 1.1.3 + unist-util-remove-position: 1.1.4 + vfile-location: 2.0.6 + xtend: 4.0.2 + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-relative@0.8.7: {} + + requires-port@1.0.0: {} + + resolve-alpn@1.2.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@3.0.0: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.2: {} + + resolve@1.15.1: + dependencies: + path-parse: 1.0.7 + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + restore-cursor@2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.0.4: {} + + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@6.0.1: + dependencies: + glob: 11.0.0 + package-json-from-dist: 1.0.1 + + rrweb-cssom@0.7.1: {} + + run-async@2.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + semver-compare@1.0.0: {} + + semver@5.7.2: {} + + semver@6.3.0: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shell-quote@1.8.1: {} + + shiki@1.22.0: + dependencies: + '@shikijs/core': 1.22.0 + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + sigmund@1.0.1: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-html-tokenizer@0.5.11: {} + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slashes@3.0.12: {} + + slice-ansi@0.0.4: {} + + slice-ansi@2.1.0: + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + space-separated-tokens@2.0.2: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.20 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + + spdx-license-ids@3.0.20: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + state-toggle@1.0.3: {} + + stdin-discarder@0.2.2: {} + + string-argv@0.3.2: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + + string-width@3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + + string-width@4.2.0: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + + string.prototype.padend@3.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 + + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + supports-color@2.0.0: {} + + supports-color@3.2.3: + dependencies: + has-flag: 1.0.0 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-observable@1.2.0: {} + + symbol-tree@3.2.4: {} + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.7.0 + + table@5.4.6: + dependencies: + ajv: 6.12.6 + lodash: 4.17.21 + slice-ansi: 2.1.0 + string-width: 3.1.0 + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.10(webpack@5.95.0(webpack-cli@5.1.4)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.34.1 + webpack: 5.95.0(webpack-cli@5.1.4) + + terser@5.34.1: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-table@0.2.0: {} + + through@2.3.8: {} + + tldts-core@6.1.50: {} + + tldts@6.1.50: + dependencies: + tldts-core: 6.1.50 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tough-cookie@5.0.0: + dependencies: + tldts: 6.1.50 + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + + trim-lines@3.0.1: {} + + trim-trailing-lines@1.1.4: {} + + trim@0.0.1: {} + + trough@1.0.5: {} + + ts-api-utils@1.3.0(typescript@5.6.2): + dependencies: + typescript: 5.6.2 + + ts-jest@29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)))(typescript@5.6.2): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.7.5)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.6.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.25.7 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.7) + + ts-loader@9.5.1(typescript@5.6.2)(webpack@5.95.0(webpack-cli@5.1.4)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.17.1 + micromatch: 4.0.8 + semver: 7.6.3 + source-map: 0.7.4 + typescript: 5.6.2 + webpack: 5.95.0(webpack-cli@5.1.4) + + ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.7.5 + acorn: 8.12.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@1.14.1: {} + + tslib@2.4.0: {} + + tslib@2.7.0: {} + + tsutils@3.21.0(typescript@5.6.2): + dependencies: + tslib: 1.14.1 + typescript: 5.6.2 + + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@0.8.1: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typedoc@0.26.8(typescript@5.6.2): + dependencies: + lunr: 2.3.9 + markdown-it: 14.1.0 + minimatch: 9.0.5 + shiki: 1.22.0 + typescript: 5.6.2 + yaml: 2.5.1 + + typescript-eslint@8.8.1(eslint@9.12.0)(typescript@5.6.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + typescript@5.6.2: {} + + uc.micro@2.1.0: {} + + uglify-js@3.19.3: + optional: true + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@6.19.8: {} + + unherit@1.1.3: + dependencies: + inherits: 2.0.4 + xtend: 4.0.2 + + unicode-regex@2.0.0: + dependencies: + regexp-util: 1.2.2 + + unicode-regex@3.0.0: + dependencies: + regexp-util: 1.2.2 + + unified@8.4.2: + dependencies: + '@types/unist': 2.0.11 + bail: 1.0.5 + extend: 3.0.2 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + + uniq@1.0.1: {} + + unist-util-is@3.0.0: {} + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@1.1.4: + dependencies: + unist-util-visit: 1.4.1 + + unist-util-stringify-position@2.0.3: + dependencies: + '@types/unist': 2.0.11 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@2.1.2: + dependencies: + unist-util-is: 3.0.0 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@1.4.1: + dependencies: + unist-util-visit-parents: 2.1.2 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + universalify@0.2.0: {} + + update-browserslist-db@1.1.1(browserslist@4.24.0): + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + utf-8-validate@6.0.4: + dependencies: + node-gyp-build: 4.8.2 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + v8-compile-cache-lib@3.0.1: {} + + v8-compile-cache@2.4.0: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vfile-location@2.0.6: {} + + vfile-message@2.0.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 2.0.3 + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@4.2.1: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vnopts@1.0.2: + dependencies: + chalk: 2.4.2 + leven: 2.1.0 + tslib: 1.14.1 + + vue-eslint-parser@9.4.3(eslint@8.57.1): + dependencies: + debug: 4.3.7 + eslint: 8.57.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + w3c-xmlserializer@4.0.0: + dependencies: + xml-name-validator: 4.0.0 + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webidl-conversions@7.0.0: {} + + webpack-cli@5.1.4(webpack@5.95.0): + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4)) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.3 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.95.0(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + + webpack-merge@5.10.0: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-sources@3.2.3: {} + + webpack@5.95.0(webpack-cli@5.1.4): + dependencies: + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.24.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(webpack@5.95.0(webpack-cli@5.1.4)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack@5.95.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@3.0.0: {} + + whatwg-mimetype@4.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@14.0.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wildcard@2.0.1: {} + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + wrap-ansi@3.0.1: + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write@1.0.3: + dependencies: + mkdirp: 0.5.6 + + ws@8.17.1(bufferutil@4.0.8)(utf-8-validate@6.0.4): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.4 + + ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.4 + + xml-name-validator@4.0.0: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@2.1.2: {} + + yallist@3.1.1: {} + + yaml-unist-parser@1.1.1: + dependencies: + lines-and-columns: 1.1.6 + tslib: 1.14.1 + yaml: 1.8.3 + + yaml@1.8.3: + dependencies: + '@babel/runtime': 7.25.7 + + yaml@2.5.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + zwitch@2.0.4: {} diff --git a/scripts/coverage.sh b/scripts/coverage.sh new file mode 100755 index 0000000..57958ab --- /dev/null +++ b/scripts/coverage.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +color="red" + +if [ "$(echo "$COVERAGE >= 80" | bc -l)" -eq 1 ]; then + color="green" +elif [ "$(echo "$COVERAGE >= 70" | bc -l)" -eq 1 ]; then + color="orange" +fi + +filename="README.md" + +coverageLine=$(sed -n '3p' $filename) + +regex="coverage-([0-9]+([.][0-9]+)?)%" + +if [[ $coverageLine =~ $regex ]]; then + oldCoverage="${BASH_REMATCH[1]}" + echo "Coverage is $COVERAGE%" +else + echo "No coverage found" +fi + +if [ -z "$oldCoverage" ] || [ "$(echo "$COVERAGE - $oldCoverage >= 1" | bc -l)" -eq 1 ] || [ "$(echo "$oldCoverage - $COVERAGE >= 1" | bc -l)" -eq 1 ]; then + echo "Updating badge" + newLine="![check-code-coverage](https://img.shields.io/badge/coverage-$COVERAGE%25-$color)" + sed -i "3s#.*#${newLine}#" $filename +fi \ No newline at end of file diff --git a/scripts/publish-dev.sh b/scripts/publish-dev.sh new file mode 100755 index 0000000..2eb7f5b --- /dev/null +++ b/scripts/publish-dev.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -e + +npm ci +npm run build +npm version --preid dev --no-git-tag-version --no-commit-hooks prepatch +#Use timestamp as package suffix +TIME=$(date -u +%Y%m%d%H%M%S) +sed -i "/version/s/dev.0/dev.$TIME/g" package.json + +PACKAGE_NAME=$(cat package.json | jq -r '.name') +PUBLISH_VERSION=$(cat package.json | jq -r '.version') +echo publishing ${PACKAGE_NAME}@$PUBLISH_VERSION + +BRANCH=${GITHUB_REF##*/} +TAG="" +if [[ "$BRANCH" == "main" ]]; then + TAG="main-" +else + TAG="test-" +fi + +npm publish --access public --tag ${TAG}dev \ No newline at end of file diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100755 index 0000000..d833ea7 --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -e + +npm ci +npm run build + +PACKAGE_NAME=$(cat package.json | jq -r '.name') +PUBLISH_VERSION=$(cat package.json | jq -r '.version') +echo "Publishing ${PACKAGE_NAME}@$PUBLISH_VERSION" + +ref=$1 +TAG="" +if [[ "$ref" == *"testnet"* ]]; then + TAG="--tag testnet" +elif [[ "$ref" == *"latest"* ]]; then + TAG="" +fi + +npm publish --access public $TAG \ No newline at end of file diff --git a/src/clients/aTokensClient.ts b/src/clients/aTokensClient.ts new file mode 100644 index 0000000..d22c961 --- /dev/null +++ b/src/clients/aTokensClient.ts @@ -0,0 +1,239 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, + MoveFunctionId, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { Metadata } from "../helpers/interfaces"; +import { AptosProvider } from "./aptosProvider"; +import { TokensContract } from "../contracts/tokens"; +import { mapToBigInt } from "../helpers/common"; + +export class ATokensClient extends AptosContractWrapperBaseClass { + tokensContract: TokensContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.tokensContract = new TokensContract(provider); + } + + public async createToken( + maximumSupply: bigint, + name: string, + symbol: string, + decimals: number, + iconUri: string, + projectUri: string, + underlyingAsset: AccountAddress, + treasuryAddress: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.tokensContract.ATokenCreateTokenFuncAddr, + [ + maximumSupply, + name, + symbol, + decimals, + iconUri, + projectUri, + underlyingAsset, + treasuryAddress, + ], + ); + } + + public async rescueTokens( + token: AccountAddress, + to: AccountAddress, + amount: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.tokensContract.ATokenRescueTokensFuncAddr, + [token, to, amount.toString()], + ); + } + + public async getRevision(): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenGetRevisionFuncAddr, + [], + ); + return resp as number; + } + + public async getMetadataBySymbol( + owner: AccountAddress, + symbol: string, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenGetMetadataBySymbolFuncAddr, + [owner, symbol], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getTokenAccountAddress( + metadataAddress: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenGetTokenAccountAddressFuncAddr, + [metadataAddress], + ); + return AccountAddress.fromString(resp as string); + } + + public async getTokenAddress( + owner: AccountAddress, + symbol: string, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenTokenAddressFuncAddr, + [owner, symbol], + ); + return AccountAddress.fromString(resp as string); + } + + public async assetMetadata( + owner: AccountAddress, + symbol: string, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenAssetMetadataFuncAddr, + [owner, symbol], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getReserveTreasuryAddress( + metadataAddress: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenGetReserveTreasuryAddressFuncAddr, + [metadataAddress], + ); + return AccountAddress.fromString(resp as string); + } + + public async getUnderlyingAssetAddress( + metadataAddress: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenGetUnderlyingAssetAddressFuncAddr, + [metadataAddress], + ); + return AccountAddress.fromString(resp as string); + } + + public async balanceOf( + owner: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod(this.tokensContract.ATokenBalanceOfFuncAddr, [ + owner, + metadataAddress, + ]) + ).map(mapToBigInt); + return resp; + } + + public async scaledBalanceOf( + owner: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.ATokenScaledBalanceOfFuncAddr, + [owner, metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async scaledTotalSupply( + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.ATokenScaledTotalSupplyFuncAddr, + [metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async getPreviousIndex( + user: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.ATokenGetGetPreviousIndexFuncAddr, + [user, metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async getScaledUserBalanceAndSupply( + owner: AccountAddress, + metadataAddress: AccountAddress, + ): Promise<{ scaledUserBalance: bigint; supply: bigint }> { + const [scaledUserBalance, supply] = ( + await this.callViewMethod( + this.tokensContract.ATokenGetScaledUserBalanceAndSupplyFuncAddr, + [owner, metadataAddress], + ) + ).map(mapToBigInt); + return { scaledUserBalance, supply }; + } + + // Get the name of the fungible asset from the metadata object. + public async name(metadataAddress: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenNameFuncAddr, + [metadataAddress], + ); + return resp as string; + } + + // Get the symbol of the fungible asset from the metadata object. + public async symbol(metadataAddress: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.ATokenSymbolFuncAddr, + [metadataAddress], + ); + return resp as string; + } + + // Get the decimals from the metadata object. + public async decimals(metadataAddress: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod(this.tokensContract.ATokenDecimalsFuncAddr, [ + metadataAddress, + ]) + ).map(mapToBigInt); + return resp; + } + + // get metadata address + public async getMetadataAddress( + funcAddr: MoveFunctionId, + coinName: string, + ): Promise { + const [resp] = await this.callViewMethod(funcAddr, [coinName]); + return AccountAddress.fromString((resp as Metadata).inner); + } + + // get decimals + public async getDecimals( + funcAddr: MoveFunctionId, + metadataAddr: AccountAddress, + ): Promise { + const [res] = (await this.callViewMethod(funcAddr, [metadataAddr])).map( + mapToBigInt, + ); + return res; + } +} diff --git a/src/clients/aclClient.ts b/src/clients/aclClient.ts new file mode 100644 index 0000000..25f69b4 --- /dev/null +++ b/src/clients/aclClient.ts @@ -0,0 +1,292 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { AclManagerContract } from "../contracts/acl_manage"; +import { AptosProvider } from "./aptosProvider"; + +export class AclClient extends AptosContractWrapperBaseClass { + AclManagerContract: AclManagerContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.AclManagerContract = new AclManagerContract(provider); + } + + public async hasRole(role: string, user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.hasRoleFuncAddr, + [role, user], + ); + return resp as boolean; + } + + public async grantRole( + role: string, + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.grantRoleFuncAddr, + [role, user], + ); + } + + public async renounceRole( + role: string, + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.grantRoleFuncAddr, + [role, user], + ); + } + + public async revokeRole( + role: string, + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.revokeRoleFuncAddr, + [role, user], + ); + } + + public async addPoolAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.AddPoolAdminFuncAddr, + [user], + ); + } + + public async removePoolAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.removePoolAdminFuncAddr, + [user], + ); + } + + public async isPoolAdmin(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.isPoolAdminFuncAddr, + [user], + ); + return resp as boolean; + } + + public async addEmergencyAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.addEmergencyAdminFuncAddr, + [user], + ); + } + + public async removeEmergencyAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.removeEmergencyAdminFuncAddr, + [user], + ); + } + + public async isEmergencyAdmin(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.isEmergencyAdminFuncAddr, + [user], + ); + return resp as boolean; + } + + public async addRiskAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.addRiskAdminFuncAddr, + [user], + ); + } + + public async removeRiskAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.removeRiskAdminFuncAddr, + [user], + ); + } + + public async isRiskAdmin(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.isRiskAdminFuncAddr, + [user], + ); + return resp as boolean; + } + + public async addFlashBorrower( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.addFlashBorrowerFuncAddr, + [user], + ); + } + + public async removeFlashBorrower( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.removeFlashBorrowerFuncAddr, + [user], + ); + } + + public async isFlashBorrower(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.isFlashBorrowerFuncAddr, + [user], + ); + return resp as boolean; + } + + public async addBridge( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.addBridgeFuncAddr, + [user], + ); + } + + public async removeBridge( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.removeBridgeFuncAddr, + [user], + ); + } + + public async isBridge(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.isBridgeFuncAddr, + [user], + ); + return resp as boolean; + } + + public async addAssetListingAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.addAssetListingAdminFuncAddr, + [user], + ); + } + + public async removeAssetListingAdmin( + user: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.removeAssetListingAdminFuncAddr, + [user], + ); + } + + public async isAssetListingAdmin(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.isAssetListingAdminFuncAddr, + [user], + ); + return resp as boolean; + } + + public async getPoolAdminRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getPoolAdminRoleFuncAddr, + [], + ); + return resp as string; + } + + public async getEmergencyAdminRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getEmergencyAdminRoleFuncAddr, + [], + ); + return resp as string; + } + + public async getRiskAdminRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getRiskAdminRoleFuncAddr, + [], + ); + return resp as string; + } + + public async getFlashBorrowerRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getFlashBorrowerRoleFuncAddr, + [], + ); + return resp as string; + } + + public async getBridgeRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getBridgeRoleFuncAddr, + [], + ); + return resp as string; + } + + public async getAssetListingAdminRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getAssetListingAdminRoleFuncAddr, + [], + ); + return resp as string; + } + + public async grantDefaultRoleAdmin(): Promise { + return this.sendTxAndAwaitResponse( + this.AclManagerContract.grantDefaultAdminRole, + [], + ); + } + + public async getDefaultAdminRole(): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.defaultAdminRole, + [], + ); + return resp as string; + } + + public async getRoleAdmin(role: string): Promise { + const [resp] = await this.callViewMethod( + this.AclManagerContract.getRoleAdmin, + [role], + ); + return resp as string; + } + + public async setRoleAdmin( + role: string, + adminRole: string, + ): Promise { + return this.sendTxAndAwaitResponse(this.AclManagerContract.setRoleAdmin, [ + role, + adminRole, + ]); + } +} diff --git a/src/clients/aptosProvider.ts b/src/clients/aptosProvider.ts new file mode 100644 index 0000000..ae97319 --- /dev/null +++ b/src/clients/aptosProvider.ts @@ -0,0 +1,96 @@ +import { + Network, + AptosConfig, + Aptos, + AccountAddress, +} from "@aptos-labs/ts-sdk"; + +export interface AptosProviderConfig { + network: Network; + addresses: { + A_TOKENS: string; + UNDERLYING_TOKENS: string; + VARIABLE_TOKENS: string; + AAVE_ACL: string; + AAVE_CONFIG: string; + AAVE_MOCK_ORACLE: string; + AAVE_POOL: string; + AAVE_ROLE_SUPER_ADMIN: string; + }; + oracle: { + URL: string; + CONTRACT_ACCOUNT: string; + DEPLOYER_ACCOUNT: string; + WORMHOLE: string; + }; +} + +export class AptosProvider { + private readonly network: Network; + + private readonly oracleUrl: string; + + private accountProfilesMap: Map = new Map(); + + private aptos: Aptos; + + constructor(config: AptosProviderConfig) { + this.network = config.network; + this.oracleUrl = config.oracle.URL; + this.accountProfilesMap.set( + "A_TOKENS_ADDRESS", + AccountAddress.fromString(config.addresses.A_TOKENS), + ); + this.accountProfilesMap.set( + "UNDERLYING_TOKENS_ADDRESS", + AccountAddress.fromString(config.addresses.UNDERLYING_TOKENS), + ); + this.accountProfilesMap.set( + "VARIABLE_TOKENS_ADDRESS", + AccountAddress.fromString(config.addresses.VARIABLE_TOKENS), + ); + this.accountProfilesMap.set( + "AAVE_ACL_ADDRESS", + AccountAddress.fromString(config.addresses.AAVE_ACL), + ); + this.accountProfilesMap.set( + "AAVE_CONFIG_ADDRESS", + AccountAddress.fromString(config.addresses.AAVE_CONFIG), + ); + this.accountProfilesMap.set( + "AAVE_MOCK_ORACLE_ADDRESS", + AccountAddress.fromString(config.addresses.AAVE_MOCK_ORACLE), + ); + this.accountProfilesMap.set( + "AAVE_POOL_ADDRESS", + AccountAddress.fromString(config.addresses.AAVE_POOL), + ); + this.accountProfilesMap.set( + "AAVE_ROLE_SUPER_ADMIN_ADDRESS", + AccountAddress.fromString(config.addresses.AAVE_ROLE_SUPER_ADMIN), + ); + + const aptosConfig = new AptosConfig({ network: this.network }); + this.aptos = new Aptos(aptosConfig); + } + + /** Returns the aptos instance. */ + public getAptos(): Aptos { + return this.aptos; + } + + /** Returns the account profile by name if found. */ + public getProfileAccountByName(profileName: string): AccountAddress { + return this.accountProfilesMap.get(profileName); + } + + /** Gets the selected network. */ + public getNetwork(): Network { + return this.network; + } + + /** Gets the oracle url. */ + public getOracleUrl(): string { + return this.oracleUrl; + } +} diff --git a/src/clients/baseClass.ts b/src/clients/baseClass.ts new file mode 100644 index 0000000..f0364d7 --- /dev/null +++ b/src/clients/baseClass.ts @@ -0,0 +1,197 @@ +import { + AccountAddress, + Aptos, + CommittedTransactionResponse, + Ed25519Account, + EntryFunctionArgumentTypes, + HexInput, + MoveFunctionId, + MoveValue, + SimpleEntryFunctionArgumentTypes, + UserTransactionResponse, + isBlockMetadataTransactionResponse, + isUserTransactionResponse, + Event, + SimpleTransaction, +} from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "./aptosProvider"; + +const getAccountBalance = async ( + aptos: Aptos, + accountAddress: AccountAddress, + versionToWaitFor?: bigint, +): Promise => { + const amount = await aptos.getAccountAPTAmount({ + accountAddress, + minimumLedgerVersion: versionToWaitFor, + }); + return BigInt(amount); +}; + +async function fundAccount( + aptos: Aptos, + account: AccountAddress, + amount: number, +): Promise { + return aptos.fundAccount({ + accountAddress: account, + amount, + }); +} + +async function transactionData( + aptos: Aptos, + user: AccountAddress, + func_addr: MoveFunctionId, + func_args: Array< + EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes + >, +) { + return aptos.transaction.build.simple({ + sender: user, + data: { + function: func_addr, + functionArguments: func_args, + }, + }); +} + +async function transaction( + aptos: Aptos, + signer: Ed25519Account, + func_addr: MoveFunctionId, + func_args: Array< + EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes + >, +) { + const transaction = await aptos.transaction.build.simple({ + sender: signer.accountAddress, + data: { + function: func_addr, + functionArguments: func_args, + }, + }); + // using signAndSubmit combined + const commitTx = await aptos.signAndSubmitTransaction({ + signer, + transaction, + }); + return aptos.waitForTransaction({ transactionHash: commitTx.hash }); +} + +async function view( + aptos: Aptos, + func_addr: MoveFunctionId, + func_args: Array< + EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes + >, +) { + return aptos.view({ + payload: { + function: func_addr, + functionArguments: func_args, + }, + }); +} + +export class AptosContractWrapperBaseClass { + protected signer: Ed25519Account; + + protected readonly aptosProvider: AptosProvider; + + constructor(aptosProvider: AptosProvider, signer?: Ed25519Account) { + this.aptosProvider = aptosProvider; + this.signer = signer; + } + + /** Sets the signer. */ + public setSigner(senderAccount: Ed25519Account) { + this.signer = senderAccount; + } + + /** Returns the signer. */ + public getSigner(): Ed25519Account { + return this.signer; + } + + /** Sends and awaits a response. */ + public async sendTxAndAwaitResponse( + functionId: MoveFunctionId, + func_args: Array< + EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes + >, + ): Promise { + return transaction( + this.aptosProvider.getAptos(), + this.signer, + functionId, + func_args, + ); + } + + public async buildTx( + user: AccountAddress, + functionId: MoveFunctionId, + func_args: Array< + EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes + >, + ): Promise { + return transactionData( + this.aptosProvider.getAptos(), + user, + functionId, + func_args, + ); + } + + /** Calls a view method. */ + public async callViewMethod( + functionId: MoveFunctionId, + func_args: Array< + EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes + >, + ): Promise { + return view(this.aptosProvider.getAptos(), functionId, func_args); + } + + /// funds a given account + public async fundAccount( + account: AccountAddress, + amount: bigint, + ): Promise { + return fundAccount(this.aptosProvider.getAptos(), account, Number(amount)); + } + + /// returns the account apt balance + public async getAccounAptBalance( + account: Ed25519Account, + accountAddress: AccountAddress, + versionToWaitFor?: bigint, + ): Promise { + return getAccountBalance( + this.aptosProvider.getAptos(), + accountAddress, + versionToWaitFor, + ); + } + + /// gets all events for a tx hash + public async getTxEvents( + aptos: Aptos, + txHash: HexInput, + ): Promise> { + const txResponse = await this.aptosProvider + .getAptos() + .getTransactionByHash({ transactionHash: txHash }); + let events: Array = []; + if ( + isBlockMetadataTransactionResponse(txResponse) || + isUserTransactionResponse(txResponse) + ) { + events = txResponse.events; + } + return events.map((event) => ({ + data: JSON.parse(event.data), + })); + } +} diff --git a/src/clients/bridgeClient.ts b/src/clients/bridgeClient.ts new file mode 100644 index 0000000..a042cd6 --- /dev/null +++ b/src/clients/bridgeClient.ts @@ -0,0 +1,40 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { BridgeContract } from "../contracts/bridge"; +import { AptosProvider } from "./aptosProvider"; + +export class BridgeClient extends AptosContractWrapperBaseClass { + bridgeContract: BridgeContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.bridgeContract = new BridgeContract(provider); + } + + public async backUnbacked( + asset: AccountAddress, + amount: bigint, + fee: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.bridgeContract.BackUnbackedFuncAddr, + [asset, amount.toString(), fee.toString()], + ); + } + + public async mintUnbacked( + asset: AccountAddress, + amount: bigint, + onBehalfOf: AccountAddress, + referralCode: number, + ): Promise { + return this.sendTxAndAwaitResponse( + this.bridgeContract.MintUnbackedFuncAddr, + [asset, amount.toString(), onBehalfOf, referralCode], + ); + } +} diff --git a/src/clients/coreClient.ts b/src/clients/coreClient.ts new file mode 100644 index 0000000..3fdbfd2 --- /dev/null +++ b/src/clients/coreClient.ts @@ -0,0 +1,177 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, + SimpleTransaction, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { AptosProvider } from "./aptosProvider"; +import { SupplyBorrowContract } from "../contracts/supply_borrow"; +import { mapToBigInt } from "../helpers/common"; + +export class CoreClient extends AptosContractWrapperBaseClass { + supplyBorrowContract: SupplyBorrowContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.supplyBorrowContract = new SupplyBorrowContract(provider); + } + + /// User supplies + public async supply( + asset: AccountAddress, + amount: bigint, + onBehalfOf: AccountAddress, + referralCode: number, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.SupplyFuncAddr, + [asset, amount.toString(), onBehalfOf, referralCode], + ); + } + + public async buildSupply( + user: AccountAddress, + asset: AccountAddress, + amount: bigint, + onBehalfOf: AccountAddress, + referralCode: number, + ): Promise { + return this.buildTx(user, this.supplyBorrowContract.SupplyFuncAddr, [ + asset, + amount.toString(), + onBehalfOf, + referralCode, + ]); + } + + /// User withdraws + public async withdraw( + asset: AccountAddress, + amount: bigint, + to: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.WithdrawFuncAddr, + [asset, amount.toString(), to], + ); + } + + /// User borrows + public async borrow( + asset: AccountAddress, + amount: bigint, + interestRateMode: number, + referralCode: number, + onBehalfOf: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.BorrowFuncAddr, + [asset, amount.toString(), interestRateMode, referralCode, onBehalfOf], + ); + } + + /// User repays + public async repay( + asset: AccountAddress, + amount: bigint, + interestRateMode: number, + onBehalfOf: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.RepayFuncAddr, + [asset, amount.toString(), interestRateMode, onBehalfOf], + ); + } + + /// User repays with A tokens + public async repayWithATokens( + asset: AccountAddress, + amount: bigint, + interestRateMode: number, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.RepayWithATokensFuncAddr, + [asset, amount.toString(), interestRateMode], + ); + } + + /// User finalizes the transfer + public async finalizeTransfer( + asset: AccountAddress, + from: AccountAddress, + to: AccountAddress, + amount: bigint, + balance_from_before: bigint, + balance_to_before: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.FinalizeTransferFuncAddr, + [ + asset, + from, + to, + amount.toString(), + balance_from_before.toString(), + balance_to_before.toString(), + ], + ); + } + + /// User liquidates a position + public async liquidationCall( + collateralAsset: AccountAddress, + debtAsset: AccountAddress, + user: AccountAddress, + debtToCover: bigint, + receiveAToken: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.LiquidationCallFuncAddr, + [collateralAsset, debtAsset, user, debtToCover.toString(), receiveAToken], + ); + } + + /// User finalizes the transfer + public async setUserUseReserveAsCollateral( + asset: AccountAddress, + useAsCollateral: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.supplyBorrowContract.SetUserUseReserveAsCollateralFuncAddr, + [asset, useAsCollateral], + ); + } + + /// Returns all user account data + public async getUserAccountData(user: AccountAddress): Promise<{ + totalCollateralBase: bigint; + totalDebtBase: bigint; + availableBorrowsBase: bigint; + currentLiquidationThreshold: bigint; + ltv: bigint; + healthFactor: bigint; + }> { + const [ + totalCollateralBase, + totalDebtBase, + availableBorrowsBase, + currentLiquidationThreshold, + ltv, + healthFactor, + ] = ( + await this.callViewMethod( + this.supplyBorrowContract.GetUserAccountDataFuncAddr, + [user], + ) + ).map(mapToBigInt); + return { + totalCollateralBase, + totalDebtBase, + availableBorrowsBase, + currentLiquidationThreshold, + ltv, + healthFactor, + }; + } +} diff --git a/src/clients/flashloanClient.ts b/src/clients/flashloanClient.ts new file mode 100644 index 0000000..a85325e --- /dev/null +++ b/src/clients/flashloanClient.ts @@ -0,0 +1,51 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { AptosProvider } from "./aptosProvider"; +import { FlashLoanContract } from "../contracts/flashloan"; + +export class FlashloanClient extends AptosContractWrapperBaseClass { + flashloanContract: FlashLoanContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.flashloanContract = new FlashLoanContract(provider); + } + + public async flashloan( + receiverAddress: AccountAddress, + assets: Array, + amounts: Array, + interestRateModes: Array, + onBehalfOf: AccountAddress, + referralCode: number, + ): Promise { + const [resp] = await this.callViewMethod( + this.flashloanContract.FlashLoanFuncAddr, + [ + receiverAddress, + assets, + amounts, + interestRateModes, + onBehalfOf, + referralCode, + ], + ); + return resp as boolean; + } + + public async flashloanSimple( + receiverAddress: AccountAddress, + asset: AccountAddress, + amount: bigint, + referralCode: number, + ): Promise { + return this.sendTxAndAwaitResponse( + this.flashloanContract.FlashLoanSimpleFuncAddr, + [receiverAddress, asset, amount, referralCode], + ); + } +} diff --git a/src/clients/index.ts b/src/clients/index.ts new file mode 100644 index 0000000..a76f1dc --- /dev/null +++ b/src/clients/index.ts @@ -0,0 +1,15 @@ +export { AclClient } from "./aclClient"; +export { AptosProvider, AptosProviderConfig } from "./aptosProvider"; +export { ATokensClient } from "./aTokensClient"; +export { CoreClient } from "./coreClient"; +export { PoolClient } from "./poolClient"; +export { OracleClient } from "./oracleClient"; +export { UnderlyingTokensClient } from "./underlyingTokensClient"; +export { + UiPoolDataProviderClient, + ReservesData, + BaseCurrencyData, + AggregatedReserveData, + UserReserveData, + UserReservesData, +} from "./uiPoolDataProvider"; diff --git a/src/clients/oracleClient.ts b/src/clients/oracleClient.ts new file mode 100644 index 0000000..5b534b7 --- /dev/null +++ b/src/clients/oracleClient.ts @@ -0,0 +1,69 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { OracleContract } from "../contracts/oracle"; +import { AptosProvider } from "./aptosProvider"; +import { mapToBigInt } from "../helpers/common"; + +export class OracleClient extends AptosContractWrapperBaseClass { + oracleContract: OracleContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.oracleContract = new OracleContract(provider); + } + + public async setAssetPrice( + asset: AccountAddress, + price: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.oracleContract.SetAssetPriceFuncAddr, + [asset, price.toString()], + ); + } + + public async getAssetPrice(asset: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod(this.oracleContract.GetAssetPriceFuncAddr, [ + asset, + ]) + ).map(mapToBigInt); + return resp; + } + + public async isBorrowAllowed(): Promise { + const [resp] = await this.callViewMethod( + this.oracleContract.IsBorrowAllowedFuncAddr, + [], + ); + return resp as boolean; + } + + public async isLiquidationAllowed(): Promise { + const [resp] = await this.callViewMethod( + this.oracleContract.IsLiquidationAllowedFuncAddr, + [], + ); + return resp as boolean; + } + + public async setGracePeriod( + newGracePeriod: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.oracleContract.SetGracePeriodFuncAddr, + [newGracePeriod.toString()], + ); + } + + public async getGracePeriod(): Promise { + const [resp] = ( + await this.callViewMethod(this.oracleContract.GetGracePeriodFuncAddr, []) + ).map(mapToBigInt); + return resp; + } +} diff --git a/src/clients/poolAddressesProviderClient.ts b/src/clients/poolAddressesProviderClient.ts new file mode 100644 index 0000000..c51cbc6 --- /dev/null +++ b/src/clients/poolAddressesProviderClient.ts @@ -0,0 +1,193 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { Metadata } from "../helpers/interfaces"; +import { AptosProvider } from "./aptosProvider"; +import { PoolContract } from "../contracts/pool"; + +export class PoolAddressesProviderClient extends AptosContractWrapperBaseClass { + poolContract: PoolContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.poolContract = new PoolContract(provider); + } + + public async hasIdMappedAccount(id: string): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.HasIdMappedAccountFuncAddr, + [id], + ); + return resp as boolean; + } + + public async getMarketId(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetMarketIdFuncAddr, + [], + ); + return resp ? (resp as Metadata).inner : undefined; + } + + public async getAddress(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetAddressFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getPool(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetPoolFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getPoolConfigurator(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetPoolConfiguratorFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getPriceOracle(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetPriceOracleFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getAclManager(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetAclManagerFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getAclAdmin(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetAclAdminFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getPriceOracleSentinel(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetPriceOracleSentinelFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async getPoolDataProvider(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetPoolDataProviderFuncAddr, + [], + ); + return resp + ? AccountAddress.fromString((resp as Metadata).inner) + : undefined; + } + + public async setMarketId( + newMarketId: string, + ): Promise { + return this.sendTxAndAwaitResponse(this.poolContract.SetMarketIdFuncAddr, [ + newMarketId, + ]); + } + + public async setAddress( + id: string, + addr: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse(this.poolContract.SetAddressFuncAddr, [ + id, + addr, + ]); + } + + public async setPoolImpl( + newPoolImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse(this.poolContract.SetPoolImplFuncAddr, [ + newPoolImpl, + ]); + } + + public async setPoolConfigurator( + newPoolConfiguratorImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.SetPoolConfiguratorFuncAddr, + [newPoolConfiguratorImpl], + ); + } + + public async setPriceOracle( + newPriceOracleImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.SetPriceOracleFuncAddr, + [newPriceOracleImpl], + ); + } + + public async setAclManager( + newAclManagerImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.SetAclManagerFuncAddr, + [newAclManagerImpl], + ); + } + + public async setAclAdmin( + newAclAdminImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse(this.poolContract.SetAclAdminFuncAddr, [ + newAclAdminImpl, + ]); + } + + public async setPriceOracleSentinel( + newPriceOracleSentinelImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.SetPriceOracleSentinelFuncAddr, + [newPriceOracleSentinelImpl], + ); + } + + public async setPoolDataProvider( + newPoolDataProviderImpl: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.SetPoolDataProviderFuncAddr, + [newPoolDataProviderImpl], + ); + } +} diff --git a/src/clients/poolClient.ts b/src/clients/poolClient.ts new file mode 100644 index 0000000..bbd7d53 --- /dev/null +++ b/src/clients/poolClient.ts @@ -0,0 +1,1006 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { AptosProvider } from "./aptosProvider"; +import { PoolContract } from "../contracts/pool"; +import { mapToBigInt } from "../helpers/common"; + +export type ReserveConfigurationMap = { + data: number; +}; + +export type UserConfigurationMap = { + data: number; +}; + +export interface TokenData { + symbol: string; + tokenAddress: AccountAddress; +} + +export interface UserReserveData { + currentATokenBalance: bigint; + currentVariableDebt: bigint; + scaledVariableDebt: bigint; + liquidityRate: bigint; + usageAsCollateralEnabled: boolean; +} + +export type ReserveData = { + /// stores the reserve configuration + configuration: { data: number }; + /// the liquidity index. Expressed in ray + liquidity_index: number; + /// the current supply rate. Expressed in ray + current_liquidity_rate: number; + /// variable borrow index. Expressed in ray + variable_borrow_index: number; + /// the current variable borrow rate. Expressed in ray + current_variable_borrow_rate: number; + /// the current stable borrow rate. Expressed in ray + current_stable_borrow_rate: number; + /// timestamp of last update (u40 -> u64) + last_update_timestamp: number; + /// the id of the reserve. Represents the position in the list of the active reserves + id: number; + /// aToken address + a_token_address: string; + /// stableDebtToken address + stable_debt_token_address: string; + /// variableDebtToken address + variable_debt_token_address: string; + /// address of the interest rate strategy + interest_rate_strategy_address: string; + /// the current treasury balance, scaled + accrued_to_treasury: number; + /// the outstanding unbacked aTokens minted through the bridging feature + unbacked: number; + /// the outstanding debt borrowed against this asset in isolation mode + isolation_mode_total_debt: number; +}; + +export type ReserveData2 = { + reserveUnbacked: bigint; + reserveAccruedToTreasury: bigint; + aTokenSupply: bigint; + varTokenSupply: bigint; + reserveCurrentLiquidityRate: bigint; + reserveCurrentVariableBorrowRate: bigint; + reserveLiquidityIndex: bigint; + reserveVarBorrowIndex: bigint; + reserveLastUpdateTimestamp: bigint; +}; + +export type ReserveEmodeCategory = { + decimals: bigint; + ltv: bigint; + liquidationThreshold: bigint; + liquidationBonus: bigint; + reserveFactor: bigint; + usageAsCollateralEnabled: boolean; + borrowingEnabled: boolean; + isActive: boolean; + isFrozen: boolean; +}; + +export class PoolClient extends AptosContractWrapperBaseClass { + poolContract: PoolContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.poolContract = new PoolContract(provider); + } + + public async mintToTreasury( + assets: Array, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolMintToTreasuryFuncAddr, + [assets], + ); + } + + public async resetIsolationModeTotalDebt( + asset: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolResetIsolationModeTotalDebtFuncAddr, + [asset], + ); + } + + public async rescueTokens( + token: AccountAddress, + to: AccountAddress, + amount: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolRescueTokensFuncAddr, + [token, to, amount.toString()], + ); + } + + public async setBridgeProtocolFee( + protocolFee: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolSetBridgeProtocolFeeFuncAddr, + [protocolFee.toString()], + ); + } + + public async setFlashloanPremiums( + flashloanPremiumTotal: bigint, + flashloanPremiumToProtocol: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolSetFlashloanPremiumsFuncAddr, + [flashloanPremiumTotal.toString(), flashloanPremiumToProtocol.toString()], + ); + } + + public async getRevision(): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetRevisionFuncAddr, + [], + ); + return resp as number; + } + + public async getReserveConfiguration( + asset: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetReserveConfigurationFuncAddr, + [asset], + ); + return resp as ReserveConfigurationMap; + } + + public async getReserveData( + asset: AccountAddress, + ): Promise<{ reserveData: ReserveData; count: number }> { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetReserveDataFuncAddr, + [asset], + ); + return { reserveData: resp[0] as ReserveData, count: resp[1] as number }; + } + + public async getReserveDataAndReservesCount( + asset: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.GetReserveDataAndReservesCountFuncAddr, + [asset], + ); + return resp as ReserveData; + } + + public async getReservesCount(): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolGetReservesCountFuncAddr, + [], + ) + ).map(mapToBigInt); + return resp; + } + + public async getReservesList(): Promise> { + const resp = ( + ( + await this.callViewMethod( + this.poolContract.PoolGetReservesListFuncAddr, + [], + ) + ).at(0) as Array + ).map((item) => AccountAddress.fromString(item as string)); + return resp; + } + + public async getReserveAddressById(id: number): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetReserveAddressByIdFuncAddr, + [id], + ); + return AccountAddress.fromString(resp as string); + } + + public async getReserveNormalizedVariableDebt( + asset: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolGetReserveNormalizedVariableDebtFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getReserveNormalizedIncome( + asset: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolGetReserveNormalizedIncomeFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getUserConfiguration( + account: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetUserConfigurationFuncAddr, + [account], + ); + return resp as UserConfigurationMap; + } + + public async getBridgeProtocolFee(): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolGetBridgeProtocolFeeFuncAddr, + [], + ) + ).map(mapToBigInt); + return resp; + } + + public async getFlashloanPremiumTotal(): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolGetFlashloanPremiumTotalFuncAddr, + [], + ) + ).map(mapToBigInt); + return resp; + } + + public async getFlashloanPremiumToProtocol(): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolGetFlashloanPremiumToProtocolFuncAddr, + [], + ) + ).map(mapToBigInt); + return resp; + } + + public async getMaxNumberReserves(): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolMaxNumberReservesFuncAddr, + [], + ) + ).map(mapToBigInt); + return resp; + } + + public async initReserves( + underlyingAsset: Array, + underlyingAssetDecimals: Array, + treasury: Array, + aTokenName: Array, + aTokenSymbol: Array, + variableDebtTokenName: Array, + variableDebtTokenSymbol: Array, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorInitReservesFuncAddr, + [ + underlyingAsset, + underlyingAssetDecimals, + treasury, + aTokenName, + aTokenSymbol, + variableDebtTokenName, + variableDebtTokenSymbol, + ], + ); + } + + public async dropReserve( + asset: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorDropReserveFuncAddr, + [asset], + ); + } + + public async setAssetEmodeCategory( + asset: AccountAddress, + newCategoryId: number, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetAssetEmodeCategoryFuncAddr, + [asset, newCategoryId], + ); + } + + public async setBorrowCap( + asset: AccountAddress, + newBorrowCap: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetBorrowCapFuncAddr, + [asset, newBorrowCap.toString()], + ); + } + + public async setBorrowableInIsolation( + asset: AccountAddress, + borrowable: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetBorrowableInIsolationFuncAddr, + [asset, borrowable], + ); + } + + public async setEmodeCategory( + categoryId: number, + ltv: number, + liquidationThreshold: number, + liquidationBonus: number, + oracle: AccountAddress, + label: string, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetEmodeCategoryFuncAddr, + [categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label], + ); + } + + public async setLiquidationProtocolFee( + asset: AccountAddress, + newFee: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetLiquidationProtocolFeeFuncAddr, + [asset, newFee.toString()], + ); + } + + public async setPoolPause( + paused: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetPoolPauseFuncAddr, + [paused], + ); + } + + public async setReserveActive( + asset: AccountAddress, + active: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetReserveActiveFuncAddr, + [asset, active], + ); + } + + public async setReserveBorrowing( + asset: AccountAddress, + enabled: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetReserveBorrowingFuncAddr, + [asset, enabled], + ); + } + + public async setDebtCeiling( + asset: AccountAddress, + newDebtCeiling: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetDebtCeilingFuncAddr, + [asset, newDebtCeiling.toString()], + ); + } + + public async configureReserveAsCollateral( + asset: AccountAddress, + ltv: bigint, + liquidationThreshold: bigint, + liquidationBonus: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorConfigureReserveAsCollateralFuncAddr, + [ + asset, + ltv.toString(), + liquidationThreshold.toString(), + liquidationBonus.toString(), + ], + ); + } + + public async setReserveFactor( + asset: AccountAddress, + newReserveFactor: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetReserveFactorFuncAddr, + [asset, newReserveFactor.toString()], + ); + } + + public async setReserveFlashLoaning( + asset: AccountAddress, + enabled: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetReserveFlashLoaningFuncAddr, + [asset, enabled], + ); + } + + public async setReserveFreeze( + asset: AccountAddress, + freeze: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetReserveFreezeFuncAddr, + [asset, freeze], + ); + } + + public async setReservePaused( + asset: AccountAddress, + paused: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetReservePauseFuncAddr, + [asset, paused], + ); + } + + public async setSiloedBorrowing( + asset: AccountAddress, + newSiloed: boolean, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetSiloedBorrowingFuncAddr, + [asset, newSiloed], + ); + } + + public async setSupplyCap( + asset: AccountAddress, + newSupplyCap: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetSupplyCapFuncAddr, + [asset, newSupplyCap.toString()], + ); + } + + public async setUnbackedMintCap( + asset: AccountAddress, + newUnbackedMintCap: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorSetUnbackedMintCapFuncAddr, + [asset, newUnbackedMintCap.toString()], + ); + } + + public async updateBridgeProtocolFee( + newBridgeProtocolFee: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorUpdateBridgeProtocolFeeFuncAddr, + [newBridgeProtocolFee.toString()], + ); + } + + public async updateFloashloanPremiumToProtocol( + newFlashloanPremiumToProtocol: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract + .PoolConfiguratorUpdateFlashloanPremiumToProtocolFuncAddr, + [newFlashloanPremiumToProtocol.toString()], + ); + } + + public async configureReserves( + asset: Array, + base_ltv: Array, + liquidationThreshold: Array, + liquidationBonus: Array, + reserveFactor: Array, + borrowCap: Array, + supplyCap: Array, + borrowingEnabled: Array, + flashloanEnabled: Array, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfiguratorReservesFuncAddr, + [ + asset, + base_ltv.map((item) => item.toString()), + liquidationThreshold.map((item) => item.toString()), + liquidationBonus.map((item) => item.toString()), + reserveFactor.map((item) => item.toString()), + borrowCap.map((item) => item.toString()), + supplyCap.map((item) => item.toString()), + borrowingEnabled, + flashloanEnabled, + ], + ); + } + + public async getPoolConfiguratorRevision(): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.PoolConfiguratorGetRevisionFuncAddr, + [], + ) + ).map(mapToBigInt); + return resp; + } + + public async setUserEmode( + categoryId: number, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolSetUserEmodeFuncAddr, + [categoryId], + ); + } + + public async configureEmodeCategory( + ltv: number, + liquidationThreshold: number, + liquidationBonus: number, + priceSource: AccountAddress, + label: string, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.PoolConfigureEmodeCategoryFuncAddr, + [ltv, liquidationThreshold, liquidationBonus, priceSource, label], + ); + } + + public async getEmodeCategoryData(id: number): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetEmodeCategoryDataFuncAddr, + [id], + ); + return resp as number; + } + + public async getUserEmode(user: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.poolContract.PoolGetUserEmodeFuncAddr, + [user], + ); + return resp as number; + } + + public async setReserveInterestRateStrategy( + asset: AccountAddress, + optimalUsageRatio: bigint, + baseVariableBorrowRate: bigint, + variableRateSlope1: bigint, + variableRateSlope2: bigint, + ): Promise { + return this.sendTxAndAwaitResponse( + this.poolContract.SetReserveInterestRateStrategyFuncAddr, + [ + asset, + optimalUsageRatio.toString(), + baseVariableBorrowRate.toString(), + variableRateSlope1.toString(), + variableRateSlope2.toString(), + ], + ); + } + + public async getOptimalUsageRatio(asset: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.GetGetOptimalUsageRatioFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getMaxExcessUsageRatio(asset: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.GetGetMaxExcessUsageRatioFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getVariableRateSlope1(asset: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.GetVariableRateSlope1FuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getVariableRateSlope2(asset: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.GetVariableRateSlope2FuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getBaseVariableBorrowRate( + asset: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.GetBaseVariableBorrowRateFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async getMaxVariableBorrowRate( + asset: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.poolContract.GetMaxVariableBorrowRateFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return resp; + } + + public async calculateInterestRates( + unbacked: bigint, + liquidityAdded: bigint, + liquidityTaken: bigint, + totalVariableDebt: bigint, + reserveFactor: bigint, + reserve: AccountAddress, + atokenAddress: AccountAddress, + ): Promise<{ + currentLiquidityRate: bigint; + currentVariableBorrowRate: bigint; + }> { + const [currentLiquidityRate, currentVariableBorrowRate] = ( + await this.callViewMethod( + this.poolContract.CalculateInterestRatesFuncAddr, + [ + unbacked.toString(), + liquidityAdded.toString(), + liquidityTaken.toString(), + totalVariableDebt.toString(), + reserveFactor.toString(), + reserve, + atokenAddress, + ], + ) + ).map(mapToBigInt); + return { + currentLiquidityRate, + currentVariableBorrowRate, + }; + } + + public async getAllReservesTokens(): Promise> { + const resp = ( + ( + await this.callViewMethod( + this.poolContract.GetAllReservesTokensFuncAddr, + [], + ) + ).at(0) as Array + ).map( + (item) => + ({ + symbol: item.symbol as string, + tokenAddress: AccountAddress.fromString(item.token_address as string), + }) as TokenData, + ); + return resp; + } + + public async getAllATokens(): Promise> { + const resp = ( + ( + await this.callViewMethod(this.poolContract.GetAllATokensFuncAddr, []) + ).at(0) as Array + ).map( + (item) => + ({ + symbol: item.symbol as string, + tokenAddress: AccountAddress.fromString(item.token_address as string), + }) as TokenData, + ); + return resp; + } + + public async getAllVariableTokens(): Promise> { + const resp = ( + ( + await this.callViewMethod( + this.poolContract.GetAllVariableTokensFuncAddr, + [], + ) + ).at(0) as Array + ).map( + (item) => + ({ + symbol: item.symbol as string, + tokenAddress: AccountAddress.fromString(item.token_address as string), + }) as TokenData, + ); + return resp; + } + + public async getReserveEmodeCategory( + asset: AccountAddress, + ): Promise { + const [ + decimals, + ltv, + liquidationThreshold, + liquidationBonus, + reserveFactor, + usageAsCollateralEnabled, + borrowingEnabled, + isActive, + isFrozen, + ] = await this.callViewMethod( + this.poolContract.GetReserveEModeCategoryFuncAddr, + [asset], + ); + return { + decimals: BigInt(decimals.toString()), + ltv: BigInt(ltv.toString()), + liquidationThreshold: BigInt(liquidationThreshold.toString()), + liquidationBonus: BigInt(liquidationBonus.toString()), + reserveFactor: BigInt(reserveFactor.toString()), + usageAsCollateralEnabled: usageAsCollateralEnabled as boolean, + borrowingEnabled: borrowingEnabled as boolean, + isActive: isActive as boolean, + isFrozen: isFrozen as boolean, + }; + } + + public async getReserveCaps(asset: AccountAddress): Promise<{ + borrowCap: bigint; + supplyCap: bigint; + }> { + const [borrowCap, supplyCap] = await this.callViewMethod( + this.poolContract.GetReserveCapsFuncAddr, + [asset], + ); + return { + borrowCap: BigInt(borrowCap.toString()), + supplyCap: BigInt(supplyCap.toString()), + }; + } + + public async getPaused(asset: AccountAddress): Promise { + const [isSiloedBorrowing] = await this.callViewMethod( + this.poolContract.GetPausedFuncAddr, + [asset], + ); + return isSiloedBorrowing as boolean; + } + + public async getSiloedBorrowing(asset: AccountAddress): Promise { + const [isSiloedBorrowing] = await this.callViewMethod( + this.poolContract.GetSiloedBorrowingFuncAddr, + [asset], + ); + return isSiloedBorrowing as boolean; + } + + public async getLiquidationProtocolFee( + asset: AccountAddress, + ): Promise { + const [isSiloedBorrowing] = ( + await this.callViewMethod( + this.poolContract.GetLiquidationProtocolFeeTokensFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return isSiloedBorrowing; + } + + public async getUnbackedMintCap(asset: AccountAddress): Promise { + const [unbackedMintCap] = ( + await this.callViewMethod(this.poolContract.GetUnbackedMintCapFuncAddr, [ + asset, + ]) + ).map(mapToBigInt); + return unbackedMintCap; + } + + public async getDebtCeiling(asset: AccountAddress): Promise { + const [debtCeiling] = ( + await this.callViewMethod(this.poolContract.GetDebtCeilingFuncAddr, [ + asset, + ]) + ).map(mapToBigInt); + return debtCeiling; + } + + public async getDebtCeilingDecimals(asset: AccountAddress): Promise { + const [debtCeiling] = ( + await this.callViewMethod( + this.poolContract.GetDebtCeilingDecimalsFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return debtCeiling; + } + + public async getReserveData2(asset: AccountAddress): Promise { + const [ + reserveUnbacked, + reserveAccruedToTreasury, + aTokenSupply, + varTokenSupply, + reserveCurrentLiquidityRate, + reserveCurrentVariableBorrowRate, + reserveLiquidityIndex, + reserveVarBorrowIndex, + reserveLastUpdateTimestamp, + ] = await this.callViewMethod( + this.poolContract.GetReserveEModeCategoryFuncAddr, + [asset], + ); + return { + reserveUnbacked: BigInt(reserveUnbacked.toString()), + reserveAccruedToTreasury: BigInt(reserveAccruedToTreasury.toString()), + aTokenSupply: BigInt(aTokenSupply.toString()), + varTokenSupply: BigInt(varTokenSupply.toString()), + reserveCurrentLiquidityRate: BigInt( + reserveCurrentLiquidityRate.toString(), + ), + reserveCurrentVariableBorrowRate: BigInt( + reserveCurrentVariableBorrowRate.toString(), + ), + reserveLiquidityIndex: BigInt(reserveLiquidityIndex.toString()), + reserveVarBorrowIndex: BigInt(reserveVarBorrowIndex.toString()), + reserveLastUpdateTimestamp: BigInt(reserveLastUpdateTimestamp.toString()), + } as ReserveData2; + } + + public async getATokenTotalSupply(asset: AccountAddress): Promise { + const [totalSupply] = ( + await this.callViewMethod( + this.poolContract.GetATokenTotalSupplyFuncAddr, + [asset], + ) + ).map(mapToBigInt); + return totalSupply; + } + + public async getTotalDebt(asset: AccountAddress): Promise { + const [totalDebt] = ( + await this.callViewMethod(this.poolContract.GetTotalDebtFuncAddr, [asset]) + ).map(mapToBigInt); + return totalDebt; + } + + public async getUserReserveData( + asset: AccountAddress, + ): Promise { + const [ + currentATokenBalance, + currentVariableDebt, + scaledVariableDebt, + liquidityRate, + usageAsCollateralEnabled, + ] = await this.callViewMethod( + this.poolContract.GetUserReserveDataFuncAddr, + [asset], + ); + return { + currentATokenBalance: BigInt(currentATokenBalance.toString()), + currentVariableDebt: BigInt(currentVariableDebt.toString()), + scaledVariableDebt: BigInt(scaledVariableDebt.toString()), + liquidityRate: BigInt(liquidityRate.toString()), + usageAsCollateralEnabled: usageAsCollateralEnabled as boolean, + } as UserReserveData; + } + + public async getReserveTokensAddresses(asset: AccountAddress): Promise<{ + reserveATokenAddress: AccountAddress; + reserveVariableDebtTokenAddress: AccountAddress; + }> { + const [reserveATokenAddress, reserveVariableDebtTokenAddress] = + await this.callViewMethod( + this.poolContract.GetReserveTokensAddressesFuncAddr, + [asset], + ); + return { + reserveATokenAddress: AccountAddress.fromString( + reserveATokenAddress as string, + ), + reserveVariableDebtTokenAddress: AccountAddress.fromString( + reserveVariableDebtTokenAddress as string, + ), + }; + } + + public async getFlashloanEnabled(asset: AccountAddress): Promise { + const [isFlashloanEnabled] = await this.callViewMethod( + this.poolContract.GetFlashLoanEnabledFuncAddr, + [asset], + ); + return isFlashloanEnabled as boolean; + } + + public async getScaledATokenTotalSupply( + aTokenAddress: AccountAddress, + ): Promise { + const [totalSupply] = ( + await this.callViewMethod( + this.poolContract.PoolScaledATokenTotalSupplyFuncAddr, + [aTokenAddress], + ) + ).map(mapToBigInt); + return totalSupply; + } + + public async getScaledATokenBalanceOf( + owner: AccountAddress, + aTokenAddress: AccountAddress, + ): Promise { + const [balance] = ( + await this.callViewMethod( + this.poolContract.PoolScaledATokenBalanceOfFuncAddr, + [owner, aTokenAddress], + ) + ).map(mapToBigInt); + return balance; + } + + public async getScaledVariableTokenTotalSupply( + aTokenAddress: AccountAddress, + ): Promise { + const [totalSupply] = ( + await this.callViewMethod( + this.poolContract.PoolScaledVariableTokenTotalSupplyFuncAddr, + [aTokenAddress], + ) + ).map(mapToBigInt); + return totalSupply; + } + + public async getScaledVariableTokenBalanceOf( + owner: AccountAddress, + varTokenAddress: AccountAddress, + ): Promise { + const [balance] = ( + await this.callViewMethod( + this.poolContract.PoolScaledVariableTokenBalanceOfFuncAddr, + [owner, varTokenAddress], + ) + ).map(mapToBigInt); + return balance; + } +} diff --git a/src/clients/uiIncentiveDataProvider.ts b/src/clients/uiIncentiveDataProvider.ts new file mode 100644 index 0000000..e1ac555 --- /dev/null +++ b/src/clients/uiIncentiveDataProvider.ts @@ -0,0 +1,253 @@ +import { AccountAddress, Ed25519Account } from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { AptosProvider } from "./aptosProvider"; +import { UiIncentiveDataProviderContract } from "../contracts/uiIncentiveDataProvider"; +import { Metadata } from "../helpers/interfaces"; + +export type AggregatedReserveIncentiveData = { + underlyingAsset: AccountAddress; + aIncentiveData: IncentiveData; + vIncentiveData: IncentiveData; +}; + +export type IncentiveData = { + tokenAddress: AccountAddress; + incentiveControllerAddress: AccountAddress; + rewardsTokenInformation: [RewardInfo]; +}; + +export type RewardInfo = { + rewardTokenSymbol: string; + rewardTokenAddress: AccountAddress; + rewardOracleAddress: AccountAddress; + emissionPerSecond: bigint; + incentivesLastUpdateTimestamp: bigint; + tokenIncentivesIndex: bigint; + emissionEndTimestamp: bigint; + rewardPriceFeed: bigint; + rewardTokenDecimals: number; + precision: number; + priceFeedDecimals: number; +}; + +export type UserReserveIncentiveData = { + underlyingAsset: AccountAddress; + aTokenIncentivesUserData: UserIncentiveData; + vTokenIncentivesUserData: UserIncentiveData; +}; + +export type UserIncentiveData = { + tokenAddress: AccountAddress; + incentiveControllerAddress: AccountAddress; + userRewardsInformation: [UserRewardInfo]; +}; + +export type UserRewardInfo = { + rewardTokenSymbol: string; + rewardOracleAddress: AccountAddress; + rewardTokenAddress: AccountAddress; + userUnclaimedRewards: bigint; + tokenIncentivesUserIndex: bigint; + rewardPriceFeed: bigint; + priceFeedDecimals: number; + rewardTokenDecimals: number; +}; + +const mapIncentiveData = (rewardTokenInfo: any): RewardInfo => + ({ + rewardTokenSymbol: rewardTokenInfo.reward_token_symbol as string, + rewardTokenAddress: AccountAddress.fromString( + rewardTokenInfo.reward_token_address.toString(), + ), + rewardOracleAddress: AccountAddress.fromString( + rewardTokenInfo.reward_oracle_address.toString(), + ), + emissionPerSecond: BigInt(rewardTokenInfo.emission_per_second), + incentivesLastUpdateTimestamp: BigInt( + rewardTokenInfo.incentives_last_update_timestamp, + ), + tokenIncentivesIndex: BigInt(rewardTokenInfo.token_incentives_index), + emissionEndTimestamp: BigInt(rewardTokenInfo.emission_end_timestamp), + rewardPriceFeed: BigInt(rewardTokenInfo.reward_price_feed), + rewardTokenDecimals: rewardTokenInfo.reward_token_decimals as number, + precision: rewardTokenInfo.precision as number, + priceFeedDecimals: rewardTokenInfo.price_feed_decimals as number, + }) as RewardInfo; + +const mapUserIncentiveData = (rewardTokenInfo: any): UserRewardInfo => + ({ + rewardTokenSymbol: rewardTokenInfo.reward_token_symbol as string, + rewardOracleAddress: AccountAddress.fromString( + rewardTokenInfo.reward_oracle_address.toString(), + ), + rewardTokenAddress: AccountAddress.fromString( + rewardTokenInfo.reward_token_address.toString(), + ), + userUnclaimedRewards: BigInt(rewardTokenInfo.user_unclaimed_rewards), + tokenIncentivesUserIndex: BigInt( + rewardTokenInfo.token_incentives_user_index, + ), + rewardPriceFeed: BigInt(rewardTokenInfo.reward_price_feed), + priceFeedDecimals: rewardTokenInfo.price_feed_decimals as number, + rewardTokenDecimals: rewardTokenInfo.reward_token_decimals as number, + }) as UserRewardInfo; + +const getUserReservesIncentivesDataInternal = ( + userReservesIncentivesDataRaw: Array, +): [UserReserveIncentiveData] => { + const userReservesIncentives = userReservesIncentivesDataRaw.map((item) => { + const aIncentiveUserData = item.a_token_incentives_user_data; + const aRewardsTokenInformation = + aIncentiveUserData.user_rewards_information as Array; + const vIncentiveUserData = item.v_token_incentives_user_data; + const vRewardsTokenInformation = + vIncentiveUserData.user_rewards_information as Array; + + return { + underlyingAsset: AccountAddress.fromString( + item.underlying_asset.toString(), + ), + aTokenIncentivesUserData: { + tokenAddress: AccountAddress.fromString( + aIncentiveUserData.token_address.toString(), + ), + incentiveControllerAddress: AccountAddress.fromString( + aIncentiveUserData.incentive_controller_address.toString(), + ), + userRewardsInformation: + aRewardsTokenInformation.map(mapUserIncentiveData), + } as UserIncentiveData, + vTokenIncentivesUserData: { + tokenAddress: AccountAddress.fromString( + vIncentiveUserData.token_address.toString(), + ), + incentiveControllerAddress: AccountAddress.fromString( + vIncentiveUserData.incentive_controller_address.toString(), + ), + userRewardsInformation: + vRewardsTokenInformation.map(mapUserIncentiveData), + } as UserIncentiveData, + } as UserReserveIncentiveData; + }); + + return userReservesIncentives as [UserReserveIncentiveData]; +}; + +const getReservesIncentivesDataInternal = ( + aggregatedIncentivesReserveDataRaw: Array, +): [AggregatedReserveIncentiveData] => { + const reservesIncentivesData = aggregatedIncentivesReserveDataRaw.map( + (item) => { + const aIncentiveData = item.a_incentive_data; + const aRewardsTokenInformation = + aIncentiveData.rewards_token_information as Array; + const vIncentiveData = item.v_incentive_data; + const vRewardsTokenInformation = + vIncentiveData.rewards_token_information as Array; + return { + underlyingAsset: AccountAddress.fromString( + item.underlying_asset.toString(), + ), + aIncentiveData: { + tokenAddress: AccountAddress.fromString( + aIncentiveData.token_address.toString(), + ), + incentiveControllerAddress: AccountAddress.fromString( + aIncentiveData.incentive_controller_address.toString(), + ), + rewardsTokenInformation: + aRewardsTokenInformation.map(mapIncentiveData), + } as IncentiveData, + vIncentiveData: { + tokenAddress: AccountAddress.fromString( + vIncentiveData.token_address.toString(), + ), + incentiveControllerAddress: AccountAddress.fromString( + vIncentiveData.incentive_controller_address.toString(), + ), + rewardsTokenInformation: + vRewardsTokenInformation.map(mapIncentiveData), + } as IncentiveData, + } as AggregatedReserveIncentiveData; + }, + ); + + return reservesIncentivesData as [AggregatedReserveIncentiveData]; +}; + +export class UiIncentiveDataProviderClient extends AptosContractWrapperBaseClass { + uiPoolDataProviderContract: UiIncentiveDataProviderContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.uiPoolDataProviderContract = new UiIncentiveDataProviderContract( + provider, + ); + } + + public async uiPoolDataProviderV3DataAddress(): Promise { + const [resp] = await this.callViewMethod( + this.uiPoolDataProviderContract.uiIncentiveDataProviderV3DataAddress, + [], + ); + return AccountAddress.fromString(resp as string); + } + + public async uiPoolDataProviderV3DataObject(): Promise { + const [resp] = await this.callViewMethod( + this.uiPoolDataProviderContract.uiIncentiveDataProviderV3DataObject, + [], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getFullReservesIncentiveData(): Promise<{ + aggregatedReservesIncentivesData: [AggregatedReserveIncentiveData]; + userReserveIncentiveData: [UserReserveIncentiveData]; + }> { + const resp = await this.callViewMethod( + this.uiPoolDataProviderContract.getFullReservesIncentiveData, + [], + ); + + const reservesIncentivesDataInternal = resp.at(0) as Array; + const aggregatedReservesIncentivesData = getReservesIncentivesDataInternal( + reservesIncentivesDataInternal, + ); + + const userReservesIncentivesDataRaw = resp.at(1) as Array; + const userReserveIncentiveData = getUserReservesIncentivesDataInternal( + userReservesIncentivesDataRaw, + ); + + return { aggregatedReservesIncentivesData, userReserveIncentiveData }; + } + + public async getReservesIncentivesData(): Promise< + [AggregatedReserveIncentiveData] + > { + const resp = await this.callViewMethod( + this.uiPoolDataProviderContract.getReservesIncentivesData, + [], + ); + const reservesIncentivesDataInternal = resp.at(0) as Array; + const aggregatedReservesIncentivesData = getReservesIncentivesDataInternal( + reservesIncentivesDataInternal, + ); + return aggregatedReservesIncentivesData as [AggregatedReserveIncentiveData]; + } + + public async getUserReservesIncentivesData( + user: AccountAddress, + ): Promise<[UserReserveIncentiveData]> { + const resp = await this.callViewMethod( + this.uiPoolDataProviderContract.getUserReservesIncentivesData, + [user], + ); + const userUserReservesIncentivesDataRaw = resp.at(0) as Array; + const userReserveIncentivesData = getUserReservesIncentivesDataInternal( + userUserReservesIncentivesDataRaw, + ); + return userReserveIncentivesData as [UserReserveIncentiveData]; + } +} diff --git a/src/clients/uiPoolDataProvider.ts b/src/clients/uiPoolDataProvider.ts new file mode 100644 index 0000000..196d150 --- /dev/null +++ b/src/clients/uiPoolDataProvider.ts @@ -0,0 +1,221 @@ +import { AccountAddress, Ed25519Account } from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { AptosProvider } from "./aptosProvider"; +import { UiPoolDataProviderContract } from "../contracts/uiPoolDataProvider"; +import { Metadata } from "../helpers/interfaces"; + +export type AggregatedReserveData = { + underlyingAsset: string; + name: string; + symbol: string; + decimals: number; + baseLTVasCollateral: bigint; + reserveLiquidationThreshold: bigint; + reserveLiquidationBonus: bigint; + reserveFactor: bigint; + usageAsCollateralEnabled: boolean; + borrowingEnabled: boolean; + isActive: boolean; + isFrozen: boolean; + // base data + liquidityIndex: bigint; + variableBorrowIndex: bigint; + liquidityRate: bigint; + variableBorrowRate: bigint; + lastUpdateTimestamp: number; + aTokenAddress: string; + variableDebtTokenAddress: string; + // + availableLiquidity: bigint; + totalScaledVariableDebt: bigint; + priceInMarketReferenceCurrency: bigint; + priceOracle: string; + variableRateSlope1: bigint; + variableRateSlope2: bigint; + baseVariableBorrowRate: bigint; + optimalUsageRatio: bigint; + // v3 only + isPaused: boolean; + isSiloedBorrowing: boolean; + accruedToTreasury: bigint; + unbacked: bigint; + isolationModeTotalDebt: bigint; + flashLoanEnabled: boolean; + // + debtCeiling: bigint; + debtCeilingDecimals: number; + eModeCategoryId: number; + borrowCap: bigint; + supplyCap: bigint; + // e_mode + eModeLtv: number; + eModeLiquidationThreshold: number; + eModeLiquidationBonus: number; + eModePriceSource: string; + eModeLabel: string; + borrowableInIsolation: boolean; +}; + +export type BaseCurrencyData = { + marketReferenceCurrencyDecimals: number; + marketReferenceCurrencyPriceInUsd: bigint; + networkBaseTokenPriceInUsd: bigint; + networkBaseTokenPriceDecimals: number; +}; + +export type UserReserveData = { + underlyingAsset: string; + scaledATokenBalance: bigint; + usageAsCollateralEnabledOnUser: boolean; + scaledVariableDebt: bigint; +}; + +export type ReservesData = { + reservesData: AggregatedReserveData[]; + baseCurrencyData: BaseCurrencyData; +}; + +export type UserReservesData = { + userReserves: UserReserveData[]; + userEmodeCategoryId: number; +}; + +export class UiPoolDataProviderClient extends AptosContractWrapperBaseClass { + uiPoolDataProviderContract: UiPoolDataProviderContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.uiPoolDataProviderContract = new UiPoolDataProviderContract(provider); + } + + public async uiPoolDataProviderV32DataAddress(): Promise { + const [resp] = await this.callViewMethod( + this.uiPoolDataProviderContract.uiPoolDataProviderV32DataAddress, + [], + ); + return AccountAddress.fromString(resp as string); + } + + public async uiPoolDataProviderV3DataObject(): Promise { + const [resp] = await this.callViewMethod( + this.uiPoolDataProviderContract.uiPoolDataProviderV3DataObject, + [], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getReservesList(): Promise> { + const resp = ( + ( + await this.callViewMethod( + this.uiPoolDataProviderContract.getReservesList, + [], + ) + ).at(0) as Array + ).map((item) => AccountAddress.fromString(item as string)); + return resp; + } + + public async getReservesData(): Promise { + const resp = await this.callViewMethod( + this.uiPoolDataProviderContract.getReservesData, + [], + ); + const aggregatedReserveDataRaw = resp.at(0) as Array; + const reservesData = aggregatedReserveDataRaw.map((item) => ({ + underlyingAsset: item.underlying_asset.toString(), + name: item.name as string, + symbol: item.symbol as string, + decimals: Number(item.decimals.toString()), + baseLTVasCollateral: BigInt(item.base_lt_vas_collateral), + reserveLiquidationThreshold: BigInt(item.reserve_liquidation_threshold), + reserveLiquidationBonus: BigInt(item.reserve_liquidation_bonus), + reserveFactor: BigInt(item.reserve_factor), + usageAsCollateralEnabled: item.usage_as_collateral_enabled as boolean, + borrowingEnabled: item.borrowing_enabled as boolean, + isActive: item.is_active as boolean, + isFrozen: item.is_frozen as boolean, + // base data + liquidityIndex: BigInt(item.liquidity_index), + variableBorrowIndex: BigInt(item.variable_borrow_index), + liquidityRate: BigInt(item.liquidity_rate), + variableBorrowRate: BigInt(item.variable_borrow_rate), + lastUpdateTimestamp: Number(item.last_update_timestamp.toString()), + aTokenAddress: item.a_token_address.toString(), + variableDebtTokenAddress: item.variable_debt_token_address.toString(), + // + availableLiquidity: BigInt(item.available_liquidity), + totalScaledVariableDebt: BigInt(item.total_scaled_variable_debt), + priceInMarketReferenceCurrency: BigInt( + item.price_in_market_reference_currency, + ), + priceOracle: item.price_oracle.toString(), + variableRateSlope1: BigInt(item.variable_rate_slope1), + variableRateSlope2: BigInt(item.variable_rate_slope2), + baseVariableBorrowRate: BigInt(item.base_variable_borrow_rate), + optimalUsageRatio: BigInt(item.optimal_usage_ratio), + // v3 only + isPaused: item.is_paused as boolean, + isSiloedBorrowing: item.is_siloed_borrowing as boolean, + accruedToTreasury: BigInt(item.accrued_to_treasury), + unbacked: BigInt(item.unbacked), + isolationModeTotalDebt: BigInt(item.isolation_mode_total_debt), + flashLoanEnabled: item.flash_loan_enabled as boolean, + // + debtCeiling: BigInt(item.debt_ceiling), + debtCeilingDecimals: Number(item.debt_ceiling_decimals.toString()), + eModeCategoryId: Number(item.e_mode_category_id.toString()), + borrowCap: BigInt(item.borrow_cap), + supplyCap: BigInt(item.supply_cap), + // e_mode + eModeLtv: Number(item.e_mode_ltv.toString()), + eModeLiquidationThreshold: Number( + item.e_mode_liquidation_threshold.toString(), + ), + eModeLiquidationBonus: Number(item.e_mode_liquidation_bonus.toString()), + eModePriceSource: item.e_mode_price_source.toString(), + eModeLabel: item.e_mode_label as string, + borrowableInIsolation: item.borrowable_in_isolation as boolean, + })); + + const basicCurrencyInfoRaw = resp.at(1) as any; + const baseCurrencyData = { + marketReferenceCurrencyDecimals: Number( + basicCurrencyInfoRaw.market_reference_currency_unit.toString(), + ), + marketReferenceCurrencyPriceInUsd: BigInt( + basicCurrencyInfoRaw.market_reference_currency_price_in_usd, + ), + networkBaseTokenPriceInUsd: BigInt( + basicCurrencyInfoRaw.network_base_token_price_in_usd.toString(), + ), + networkBaseTokenPriceDecimals: Number( + basicCurrencyInfoRaw.network_base_token_price_decimals.toString(), + ), + }; + + return { reservesData, baseCurrencyData }; + } + + public async getUserReserveData(user: string): Promise { + const resp = await this.callViewMethod( + this.uiPoolDataProviderContract.getUserReservesData, + [user], + ); + const userReserveDataRaw = resp.at(0) as Array; + const userReserves = userReserveDataRaw.map( + (item) => + ({ + underlyingAsset: item.underlying_asset.toString(), + scaledATokenBalance: BigInt(item.scaled_a_token_balance), + usageAsCollateralEnabledOnUser: + item.usage_as_collateral_enabled_on_user as boolean, + scaledVariableDebt: BigInt(item.scaled_variable_debt), + }) as UserReserveData, + ); + + const userEmodeCategoryId = resp.at(1) as number; + + return { userReserves, userEmodeCategoryId }; + } +} diff --git a/src/clients/underlyingTokensClient.ts b/src/clients/underlyingTokensClient.ts new file mode 100644 index 0000000..21eb20e --- /dev/null +++ b/src/clients/underlyingTokensClient.ts @@ -0,0 +1,150 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, + MoveFunctionId, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { Metadata } from "../helpers/interfaces"; +import { AptosProvider } from "./aptosProvider"; +import { TokensContract } from "../contracts/tokens"; +import { mapToBigInt } from "../helpers/common"; + +export class UnderlyingTokensClient extends AptosContractWrapperBaseClass { + tokensContract: TokensContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.tokensContract = new TokensContract(provider); + } + + public async createToken( + maximumSupply: bigint, + name: string, + symbol: string, + decimals: number, + iconUri: string, + projectUri: string, + ): Promise { + return this.sendTxAndAwaitResponse( + this.tokensContract.UnderlyingCreateTokenFuncAddr, + [maximumSupply, name, symbol, decimals, iconUri, projectUri], + ); + } + + public async mint( + to: string, + amount: bigint, + metadataAddress: string, + ): Promise { + return this.sendTxAndAwaitResponse( + this.tokensContract.UnderlyingMintFuncAddr, + [to, amount.toString(), metadataAddress], + ); + } + + public async getMetadataBySymbol(symbol: string): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.UnderlyingGetMetadataBySymbolFuncAddr, + [symbol], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getTokenAccountAddress(): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.UnderlyingGetTokenAccountAddressFuncAddr, + [], + ); + return AccountAddress.fromString(resp as string); + } + + public async supply(metadataAddress: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod(this.tokensContract.UnderlyingSupplyFuncAddr, [ + metadataAddress, + ]) + ).map(mapToBigInt); + return resp; + } + + // Get the maximum supply from the metadata object. + public async maximum(metadataAddress: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod(this.tokensContract.UnderlyingMaximumFuncAddr, [ + metadataAddress, + ]) + ).map(mapToBigInt); + return resp; + } + + // Get the name of the fungible asset from the metadata object. + public async name(metadataAddress: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.UnderlyingNameFuncAddr, + [metadataAddress], + ); + return resp as string; + } + + // Get the symbol of the fungible asset from the metadata object. + public async symbol(metadataAddress: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.UnderlyingSymbolFuncAddr, + [metadataAddress], + ); + return resp as string; + } + + // Get the decimals from the metadata object. + public async decimals(metadataAddress: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.UnderlyingDecimalsFuncAddr, + [metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + // get metadata address + public async getMetadataAddress( + funcAddr: MoveFunctionId, + coinName: string, + ): Promise { + const [resp] = await this.callViewMethod(funcAddr, [coinName]); + return AccountAddress.fromString((resp as Metadata).inner); + } + + // get decimals + public async getDecimals( + funcAddr: MoveFunctionId, + metadataAddr: AccountAddress, + ): Promise { + const [res] = (await this.callViewMethod(funcAddr, [metadataAddr])).map( + mapToBigInt, + ); + return res; + } + + public async balanceOf( + owner: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.UnderlyingBalanceOfFuncAddr, + [owner, metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async getTokenAddress(symbol: string): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.UnderlyingTokenAddressFuncAddr, + [symbol], + ); + return AccountAddress.fromString(resp as string); + } +} diff --git a/src/clients/variableTokensClient.ts b/src/clients/variableTokensClient.ts new file mode 100644 index 0000000..eebd65e --- /dev/null +++ b/src/clients/variableTokensClient.ts @@ -0,0 +1,184 @@ +import { + AccountAddress, + CommittedTransactionResponse, + Ed25519Account, + MoveFunctionId, +} from "@aptos-labs/ts-sdk"; +import { AptosContractWrapperBaseClass } from "./baseClass"; +import { Metadata } from "../helpers/interfaces"; +import { AptosProvider } from "./aptosProvider"; +import { TokensContract } from "../contracts/tokens"; +import { mapToBigInt } from "../helpers/common"; + +export class VariableTokensClient extends AptosContractWrapperBaseClass { + tokensContract: TokensContract; + + constructor(provider: AptosProvider, signer?: Ed25519Account) { + super(provider, signer); + this.tokensContract = new TokensContract(provider); + } + + public async createToken( + maximumSupply: bigint, + name: string, + symbol: string, + decimals: number, + iconUri: string, + projectUri: string, + underlyingAsset: AccountAddress, + ): Promise { + return this.sendTxAndAwaitResponse( + this.tokensContract.VariableCreateTokenFuncAddr, + [ + maximumSupply, + name, + symbol, + decimals, + iconUri, + projectUri, + underlyingAsset, + ], + ); + } + + public async getRevision(): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableGetRevisionFuncAddr, + [], + ); + return resp as number; + } + + public async getMetadataBySymbol( + owner: AccountAddress, + symbol: string, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableGetMetadataBySymbolFuncAddr, + [owner, symbol], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getTokenAddress( + owner: AccountAddress, + symbol: string, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableGetTokenAddressFuncAddr, + [owner, symbol], + ); + return AccountAddress.fromString(resp as string); + } + + public async getAssetMetadata( + owner: AccountAddress, + symbol: string, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableGetAssetMetadataFuncAddr, + [owner, symbol], + ); + return AccountAddress.fromString((resp as Metadata).inner); + } + + public async getUnderlyingAssetAddress( + metadataAddress: AccountAddress, + ): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableGetUnderlyingAddressFuncAddr, + [metadataAddress], + ); + return AccountAddress.fromString(resp as string); + } + + public async scaledBalanceOf( + owner: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.VariableScaledBalanceOfFuncAddr, + [owner, metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async scaledTotalSupplyOf( + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.VariableScaledTotalSupplyFuncAddr, + [metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async getScaledUserBalanceAndSupply( + owner: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.VariableGetScaledUserBalanceAndSupplyFuncAddr, + [owner, metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + public async getPreviousIndex( + user: AccountAddress, + metadataAddress: AccountAddress, + ): Promise { + const [resp] = ( + await this.callViewMethod( + this.tokensContract.VariableGetPreviousIndexFuncAddr, + [user, metadataAddress], + ) + ).map(mapToBigInt); + return resp; + } + + // Get the name of the fungible asset from the metadata object. + public async name(metadataAddress: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableNameFuncAddr, + [metadataAddress], + ); + return resp as string; + } + + // Get the symbol of the fungible asset from the metadata object. + public async symbol(metadataAddress: AccountAddress): Promise { + const [resp] = await this.callViewMethod( + this.tokensContract.VariableSymbolFuncAddr, + [metadataAddress], + ); + return resp as string; + } + + // Get the decimals from the metadata object. + public async decimals(metadataAddress: AccountAddress): Promise { + const [resp] = ( + await this.callViewMethod(this.tokensContract.VariableDecimalsFuncAddr, [ + metadataAddress, + ]) + ).map(mapToBigInt); + return resp; + } + + // get decimals + public async getDecimals( + funcAddr: MoveFunctionId, + metadataAddr: AccountAddress, + ): Promise { + const [res] = (await this.callViewMethod(funcAddr, [metadataAddr])).map( + mapToBigInt, + ); + return res; + } +} diff --git a/src/configs/index.ts b/src/configs/index.ts new file mode 100644 index 0000000..bfae6cd --- /dev/null +++ b/src/configs/index.ts @@ -0,0 +1 @@ +export { testnetConfig } from "./testnet"; diff --git a/src/configs/testnet.ts b/src/configs/testnet.ts new file mode 100644 index 0000000..83dfd26 --- /dev/null +++ b/src/configs/testnet.ts @@ -0,0 +1,33 @@ +import { Network } from "@aptos-labs/ts-sdk"; +import { AptosProviderConfig } from "../clients/aptosProvider"; + +export const testnetConfig: AptosProviderConfig = { + network: Network.TESTNET, + addresses: { + A_TOKENS: + "60d4e76f923da245198ab0982df9772b535dc9d30ae0a894deb6c504a2a6e041", + UNDERLYING_TOKENS: + "2339acfaadb5461d9aa2b78c8cb962548299d629534c06aa59d1f2e06c0bb38b", + VARIABLE_TOKENS: + "32e19bb9de60c51a66694073c51ed7503b55367c1bfccf0b6c7fed56c9b32159", + AAVE_ACL: + "2b99bac081161fd3bec36b9cbdc6749ef65494cd47826ba386cfcb63cc62d5d4", + AAVE_CONFIG: + "388a9a3af268fcdd057b4f4421d867c77a37493ea0c80acb5c78e773db821ec4", + AAVE_MOCK_ORACLE: + "ba20379c8378027707c370bd213e886a3c9bfdccb7258586e330974a09011c1e", + AAVE_POOL: + "f62585050b094c363d654a124614cf7975ab582d6849e683ccff6c46e2041ab8", + AAVE_ROLE_SUPER_ADMIN: + "1827bb03b3ced7aebe5a4f446ee9db427edb90638086c46a95663f512ef1d16f", + }, + oracle: { + URL: "https://hermes-beta.pyth.network", + CONTRACT_ACCOUNT: + "0x7e783b349d3e89cf5931af376ebeadbfab855b3fa239b7ada8f5a92fbea6b387", + DEPLOYER_ACCOUNT: + "0xb31e712b26fd295357355f6845e77c888298636609e93bc9b05f0f604049f434", + WORMHOLE: + "0x5bc11445584a763c1fa7ed39081f1b920954da14e04b32440cba863d03e19625", + }, +}; diff --git a/src/contracts/acl_manage.ts b/src/contracts/acl_manage.ts new file mode 100644 index 0000000..eb74a8d --- /dev/null +++ b/src/contracts/acl_manage.ts @@ -0,0 +1,111 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class AclManagerContract { + // Resource Func Addr + hasRoleFuncAddr: MoveFunctionId; + + grantRoleFuncAddr: MoveFunctionId; + + renounceRoleFuncAddr: MoveFunctionId; + + revokeRoleFuncAddr: MoveFunctionId; + + addPoolAdminFuncAddr: MoveFunctionId; + + AddPoolAdminFuncAddr: MoveFunctionId; + + removePoolAdminFuncAddr: MoveFunctionId; + + isPoolAdminFuncAddr: MoveFunctionId; + + addEmergencyAdminFuncAddr: MoveFunctionId; + + removeEmergencyAdminFuncAddr: MoveFunctionId; + + isEmergencyAdminFuncAddr: MoveFunctionId; + + addRiskAdminFuncAddr: MoveFunctionId; + + removeRiskAdminFuncAddr: MoveFunctionId; + + isRiskAdminFuncAddr: MoveFunctionId; + + addFlashBorrowerFuncAddr: MoveFunctionId; + + removeFlashBorrowerFuncAddr: MoveFunctionId; + + isFlashBorrowerFuncAddr: MoveFunctionId; + + addBridgeFuncAddr: MoveFunctionId; + + removeBridgeFuncAddr: MoveFunctionId; + + isBridgeFuncAddr: MoveFunctionId; + + addAssetListingAdminFuncAddr: MoveFunctionId; + + removeAssetListingAdminFuncAddr: MoveFunctionId; + + isAssetListingAdminFuncAddr: MoveFunctionId; + + getPoolAdminRoleFuncAddr: MoveFunctionId; + + getEmergencyAdminRoleFuncAddr: MoveFunctionId; + + getRiskAdminRoleFuncAddr: MoveFunctionId; + + getFlashBorrowerRoleFuncAddr: MoveFunctionId; + + getBridgeRoleFuncAddr: MoveFunctionId; + + getAssetListingAdminRoleFuncAddr: MoveFunctionId; + + grantDefaultAdminRole: MoveFunctionId; + + defaultAdminRole: MoveFunctionId; + + getRoleAdmin: MoveFunctionId; + + setRoleAdmin: MoveFunctionId; + + constructor(provider: AptosProvider) { + const AclManager = provider.getProfileAccountByName("AAVE_ACL_ADDRESS"); + const AclManagerAccountAddress = AclManager.toString(); + this.hasRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::has_role`; + this.grantRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::grant_role`; + this.renounceRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::renounce_role`; + this.revokeRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::revoke_role`; + this.addPoolAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::add_pool_admin`; + this.removePoolAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::remove_pool_admin`; + this.isPoolAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::is_pool_admin`; + this.addEmergencyAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::add_emergency_admin`; + this.removeEmergencyAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::remove_emergency_admin`; + this.isEmergencyAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::is_emergency_admin`; + this.addRiskAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::add_risk_admin`; + this.removeRiskAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::remove_risk_admin`; + this.isRiskAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::is_risk_admin`; + this.addFlashBorrowerFuncAddr = `${AclManagerAccountAddress}::acl_manage::add_flash_borrower`; + this.removeFlashBorrowerFuncAddr = `${AclManagerAccountAddress}::acl_manage::remove_flash_borrower`; + this.isFlashBorrowerFuncAddr = `${AclManagerAccountAddress}::acl_manage::is_flash_borrower`; + this.addBridgeFuncAddr = `${AclManagerAccountAddress}::acl_manage::add_bridge`; + this.removeBridgeFuncAddr = `${AclManagerAccountAddress}::acl_manage::remove_bridge`; + this.isBridgeFuncAddr = `${AclManagerAccountAddress}::acl_manage::is_bridge`; + this.addAssetListingAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::add_asset_listing_admin`; + this.removeAssetListingAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::remove_asset_listing_admin`; + this.isAssetListingAdminFuncAddr = `${AclManagerAccountAddress}::acl_manage::is_asset_listing_admin`; + this.getPoolAdminRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::get_pool_admin_role`; + this.getEmergencyAdminRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::get_emergency_admin_role`; + this.getRiskAdminRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::get_risk_admin_role`; + this.getFlashBorrowerRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::get_flash_borrower_role`; + this.getBridgeRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::get_bridge_role`; + this.getAssetListingAdminRoleFuncAddr = `${AclManagerAccountAddress}::acl_manage::get_asset_listing_admin_role`; + this.grantDefaultAdminRole = `${AclManagerAccountAddress}::acl_manage::grant_default_admin_role`; + this.defaultAdminRole = `${AclManagerAccountAddress}::acl_manage::default_admin_role`; + this.getRoleAdmin = `${AclManagerAccountAddress}::acl_manage::get_role_admin`; + this.setRoleAdmin = `${AclManagerAccountAddress}::acl_manage::set_role_admin`; + } +} + +// Mock Account +export const FLASH_BORROW_ADMIN_ROLE = "FLASH_BORROWER"; diff --git a/src/contracts/bridge.ts b/src/contracts/bridge.ts new file mode 100644 index 0000000..176365a --- /dev/null +++ b/src/contracts/bridge.ts @@ -0,0 +1,16 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class BridgeContract { + // Resource Func Addr + MintUnbackedFuncAddr: MoveFunctionId; + + BackUnbackedFuncAddr: MoveFunctionId; + + constructor(provider: AptosProvider) { + const BridgeManager = provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const BridgeManagerAccountAddress = BridgeManager.toString(); + this.MintUnbackedFuncAddr = `${BridgeManagerAccountAddress}::bridge_logic::mint_unbacked`; + this.BackUnbackedFuncAddr = `${BridgeManagerAccountAddress}::bridge_logic::back_unbacked`; + } +} diff --git a/src/contracts/flashloan.ts b/src/contracts/flashloan.ts new file mode 100644 index 0000000..c6c2796 --- /dev/null +++ b/src/contracts/flashloan.ts @@ -0,0 +1,21 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class FlashLoanContract { + // Resource Func Addr + FlashLoanFuncAddr: MoveFunctionId; + + PayFlashLoanComplexFuncAddr: MoveFunctionId; + + FlashLoanSimpleFuncAddr: MoveFunctionId; + + PayFlashLoanSimpleFuncAddr: MoveFunctionId; + + constructor(provider: AptosProvider) { + const FlashLoanManager = + provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const FlashLoanManagerAccountAddress = FlashLoanManager.toString(); + this.FlashLoanFuncAddr = `${FlashLoanManagerAccountAddress}::flash_loan_logic::flashloan`; + this.FlashLoanSimpleFuncAddr = `${FlashLoanManagerAccountAddress}::flash_loan_logic::flash_loan_simple`; + } +} diff --git a/src/contracts/oracle.ts b/src/contracts/oracle.ts new file mode 100644 index 0000000..6b3c101 --- /dev/null +++ b/src/contracts/oracle.ts @@ -0,0 +1,30 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class OracleContract { + // Resource Func Addr + GetAssetPriceFuncAddr: MoveFunctionId; + + SetAssetPriceFuncAddr: MoveFunctionId; + + IsBorrowAllowedFuncAddr: MoveFunctionId; + + IsLiquidationAllowedFuncAddr: MoveFunctionId; + + SetGracePeriodFuncAddr: MoveFunctionId; + + GetGracePeriodFuncAddr: MoveFunctionId; + + constructor(provider: AptosProvider) { + const OracleManager = provider.getProfileAccountByName( + "AAVE_MOCK_ORACLE_ADDRESS", + ); + const OracleManagerAccountAddress = OracleManager.toString(); + this.GetAssetPriceFuncAddr = `${OracleManagerAccountAddress}::oracle::get_asset_price`; + this.SetAssetPriceFuncAddr = `${OracleManagerAccountAddress}::oracle::set_asset_price`; + this.IsBorrowAllowedFuncAddr = `${OracleManagerAccountAddress}::oracle_sentinel::is_borrow_allowed`; + this.IsLiquidationAllowedFuncAddr = `${OracleManagerAccountAddress}::oracle_sentinel::is_liquidation_allowed`; + this.SetGracePeriodFuncAddr = `${OracleManagerAccountAddress}::oracle_sentinel::set_grace_period`; + this.GetGracePeriodFuncAddr = `${OracleManagerAccountAddress}::oracle_sentinel::get_grace_period`; + } +} diff --git a/src/contracts/pool.ts b/src/contracts/pool.ts new file mode 100644 index 0000000..1f248ca --- /dev/null +++ b/src/contracts/pool.ts @@ -0,0 +1,392 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class PoolContract { + // Resource Func Addr + /** + * ------------------------------------------------------------------------- + * Pool + * -------------------------------------------------------------------------= + */ + // Entry + PoolMintToTreasuryFuncAddr: MoveFunctionId; + + PoolResetIsolationModeTotalDebtFuncAddr: MoveFunctionId; + + PoolRescueTokensFuncAddr: MoveFunctionId; + + PoolSetBridgeProtocolFeeFuncAddr: MoveFunctionId; + + PoolSetFlashloanPremiumsFuncAddr: MoveFunctionId; + + // Pool View + PoolGetRevisionFuncAddr: MoveFunctionId; + + PoolGetReserveConfigurationFuncAddr: MoveFunctionId; + + PoolGetReserveDataFuncAddr: MoveFunctionId; + + GetReserveDataAndReservesCountFuncAddr: MoveFunctionId; + + PoolGetReservesCountFuncAddr: MoveFunctionId; + + PoolGetReservesListFuncAddr: MoveFunctionId; + + PoolGetReserveAddressByIdFuncAddr: MoveFunctionId; + + PoolGetReserveNormalizedVariableDebtFuncAddr: MoveFunctionId; + + PoolGetReserveNormalizedIncomeFuncAddr: MoveFunctionId; + + PoolGetUserConfigurationFuncAddr: MoveFunctionId; + + PoolGetBridgeProtocolFeeFuncAddr: MoveFunctionId; + + PoolGetFlashloanPremiumTotalFuncAddr: MoveFunctionId; + + PoolGetFlashloanPremiumToProtocolFuncAddr: MoveFunctionId; + + PoolMaxNumberReservesFuncAddr: MoveFunctionId; + + PoolScaledATokenTotalSupplyFuncAddr: MoveFunctionId; + + PoolScaledATokenBalanceOfFuncAddr: MoveFunctionId; + + PoolScaledVariableTokenTotalSupplyFuncAddr: MoveFunctionId; + + PoolScaledVariableTokenBalanceOfFuncAddr: MoveFunctionId; + + /** + * ------------------------------------------------------------------------- + * Pool Configurator + * -------------------------------------------------------------------------= + */ + // Entry + PoolConfiguratorInitReservesFuncAddr: MoveFunctionId; + + PoolConfiguratorDropReserveFuncAddr: MoveFunctionId; + + PoolConfiguratorSetAssetEmodeCategoryFuncAddr: MoveFunctionId; + + PoolConfiguratorSetBorrowCapFuncAddr: MoveFunctionId; + + PoolConfiguratorSetBorrowableInIsolationFuncAddr: MoveFunctionId; + + PoolConfiguratorSetDebtCeilingFuncAddr: MoveFunctionId; + + PoolConfiguratorSetEmodeCategoryFuncAddr: MoveFunctionId; + + PoolConfiguratorSetLiquidationProtocolFeeFuncAddr: MoveFunctionId; + + PoolConfiguratorSetPoolPauseFuncAddr: MoveFunctionId; + + PoolConfiguratorSetReserveActiveFuncAddr: MoveFunctionId; + + PoolConfiguratorSetReserveBorrowingFuncAddr: MoveFunctionId; + + PoolConfiguratorConfigureReserveAsCollateralFuncAddr: MoveFunctionId; + + PoolConfiguratorSetReserveFactorFuncAddr: MoveFunctionId; + + PoolConfiguratorSetReserveFlashLoaningFuncAddr: MoveFunctionId; + + PoolConfiguratorSetReserveFreezeFuncAddr: MoveFunctionId; + + PoolConfiguratorSetReservePauseFuncAddr: MoveFunctionId; + + PoolConfiguratorSetSiloedBorrowingFuncAddr: MoveFunctionId; + + PoolConfiguratorSetSupplyCapFuncAddr: MoveFunctionId; + + PoolConfiguratorSetUnbackedMintCapFuncAddr: MoveFunctionId; + + PoolConfiguratorUpdateBridgeProtocolFeeFuncAddr: MoveFunctionId; + + PoolConfiguratorUpdateFlashloanPremiumToProtocolFuncAddr: MoveFunctionId; + + PoolConfiguratorUpdateFlashloanPremiumTotalFuncAddr: MoveFunctionId; + + PoolConfiguratorReservesFuncAddr: MoveFunctionId; + + // View + PoolConfiguratorGetRevisionFuncAddr: MoveFunctionId; + + /** + * ------------------------------------------------------------------------- + * Isolation E Mode + * @notice Internal methods are tested in other modules + * -------------------------------------------------------------------------= + */ + + /** + * ------------------------------------------------------------------------- + * E Mode Logic + * -------------------------------------------------------------------------= + */ + // Entry + PoolSetUserEmodeFuncAddr: MoveFunctionId; + + PoolConfigureEmodeCategoryFuncAddr: MoveFunctionId; + + // View + PoolGetEmodeCategoryDataFuncAddr: MoveFunctionId; + + PoolGetUserEmodeFuncAddr: MoveFunctionId; + + // Generic Logic + // Internal methods are tested in other modules + + /** + * ------------------------------------------------------------------------- + * default_reserve_interest_rate_strategy + * -------------------------------------------------------------------------= + */ + // Entry + SetReserveInterestRateStrategyFuncAddr: MoveFunctionId; + + // View + GetGetOptimalUsageRatioFuncAddr: MoveFunctionId; + + GetGetMaxExcessUsageRatioFuncAddr: MoveFunctionId; + + GetVariableRateSlope1FuncAddr: MoveFunctionId; + + GetVariableRateSlope2FuncAddr: MoveFunctionId; + + GetBaseVariableBorrowRateFuncAddr: MoveFunctionId; + + GetMaxVariableBorrowRateFuncAddr: MoveFunctionId; + + CalculateInterestRatesFuncAddr: MoveFunctionId; + + /** + * ------------------------------------------------------------------------- + * pool data provider + * -------------------------------------------------------------------------= + */ + // View + GetAllReservesTokensFuncAddr: MoveFunctionId; + + GetAllATokensFuncAddr: MoveFunctionId; + + GetAllVariableTokensFuncAddr: MoveFunctionId; + + GetReserveConfigurationDataFuncAddr: MoveFunctionId; + + GetReserveEModeCategoryFuncAddr: MoveFunctionId; + + GetReserveCapsFuncAddr: MoveFunctionId; + + GetPausedFuncAddr: MoveFunctionId; + + GetSiloedBorrowingFuncAddr: MoveFunctionId; + + GetLiquidationProtocolFeeTokensFuncAddr: MoveFunctionId; + + GetUnbackedMintCapFuncAddr: MoveFunctionId; + + GetDebtCeilingFuncAddr: MoveFunctionId; + + GetDebtCeilingDecimalsFuncAddr: MoveFunctionId; + + GetReserveDataFuncAddr: MoveFunctionId; + + GetATokenTotalSupplyFuncAddr: MoveFunctionId; + + GetTotalDebtFuncAddr: MoveFunctionId; + + GetUserReserveDataFuncAddr: MoveFunctionId; + + GetReserveTokensAddressesFuncAddr: MoveFunctionId; + + GetFlashLoanEnabledFuncAddr: MoveFunctionId; + + /** + * ------------------------------------------------------------------------- + * pool addresses provider + * -------------------------------------------------------------------------= + */ + // View + HasIdMappedAccountFuncAddr: MoveFunctionId; + + GetMarketIdFuncAddr: MoveFunctionId; + + GetAddressFuncAddr: MoveFunctionId; + + GetPoolFuncAddr: MoveFunctionId; + + GetPoolConfiguratorFuncAddr: MoveFunctionId; + + GetPriceOracleFuncAddr: MoveFunctionId; + + GetAclManagerFuncAddr: MoveFunctionId; + + GetAclAdminFuncAddr: MoveFunctionId; + + GetPriceOracleSentinelFuncAddr: MoveFunctionId; + + GetPoolDataProviderFuncAddr: MoveFunctionId; + + // Entry + SetMarketIdFuncAddr: MoveFunctionId; + + SetAddressFuncAddr: MoveFunctionId; + + SetPoolImplFuncAddr: MoveFunctionId; + + SetPoolConfiguratorFuncAddr: MoveFunctionId; + + SetPriceOracleFuncAddr: MoveFunctionId; + + SetAclManagerFuncAddr: MoveFunctionId; + + SetAclAdminFuncAddr: MoveFunctionId; + + SetPriceOracleSentinelFuncAddr: MoveFunctionId; + + SetPoolDataProviderFuncAddr: MoveFunctionId; + + constructor(provider: AptosProvider) { + const PoolManager = provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const PoolManagerAccountAddress = PoolManager.toString(); + + /** + * ------------------------------------------------------------------------- + * Pool + * -------------------------------------------------------------------------= + */ + this.PoolMintToTreasuryFuncAddr = `${PoolManagerAccountAddress}::pool::mint_to_treasury`; + this.PoolResetIsolationModeTotalDebtFuncAddr = `${PoolManagerAccountAddress}::pool::reset_isolation_mode_total_debt`; + this.PoolRescueTokensFuncAddr = `${PoolManagerAccountAddress}::pool::rescue_tokens`; + this.PoolSetBridgeProtocolFeeFuncAddr = `${PoolManagerAccountAddress}::pool::set_bridge_protocol_fee`; + this.PoolSetFlashloanPremiumsFuncAddr = `${PoolManagerAccountAddress}::pool::set_flashloan_premiums`; + + /** + * ------------------------------------------------------------------------- + * pool + * ------------------------------------------------------------------------- + */ + this.PoolGetRevisionFuncAddr = `${PoolManagerAccountAddress}::pool::get_revision`; + this.PoolGetReserveConfigurationFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserve_configuration`; + this.PoolGetReserveDataFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserve_data`; + this.GetReserveDataAndReservesCountFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_reserve_data_and_reserves_count`; + this.PoolGetReservesCountFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserves_count`; + this.PoolGetReservesListFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserves_list`; + this.PoolGetReserveAddressByIdFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserve_address_by_id`; + this.PoolGetReserveNormalizedVariableDebtFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserve_normalized_variable_debt`; + this.PoolGetReserveNormalizedIncomeFuncAddr = `${PoolManagerAccountAddress}::pool::get_reserve_normalized_income`; + this.PoolGetUserConfigurationFuncAddr = `${PoolManagerAccountAddress}::pool::get_user_configuration`; + this.PoolGetBridgeProtocolFeeFuncAddr = `${PoolManagerAccountAddress}::pool::get_bridge_protocol_fee`; + this.PoolGetFlashloanPremiumTotalFuncAddr = `${PoolManagerAccountAddress}::pool::get_flashloan_premium_total`; + this.PoolGetFlashloanPremiumToProtocolFuncAddr = `${PoolManagerAccountAddress}::pool::get_flashloan_premium_to_protocol`; + this.PoolMaxNumberReservesFuncAddr = `${PoolManagerAccountAddress}::pool::max_number_reserves`; + this.PoolScaledATokenTotalSupplyFuncAddr = `${PoolManagerAccountAddress}::pool::scaled_a_token_total_supply`; + this.PoolScaledATokenBalanceOfFuncAddr = `${PoolManagerAccountAddress}::pool::scaled_a_token_balance_of`; + this.PoolScaledVariableTokenTotalSupplyFuncAddr = `${PoolManagerAccountAddress}::pool::scaled_variable_token_total_supply`; + this.PoolScaledVariableTokenBalanceOfFuncAddr = `${PoolManagerAccountAddress}::pool::scaled_variable_token_balance_of`; + + /** + * ------------------------------------------------------------------------- + * Pool Configurator + * -------------------------------------------------------------------------= + */ + this.PoolConfiguratorInitReservesFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::init_reserves`; + this.PoolConfiguratorDropReserveFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::drop_reserve`; + this.PoolConfiguratorSetAssetEmodeCategoryFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_asset_emode_category`; + this.PoolConfiguratorSetBorrowCapFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_borrow_cap`; + this.PoolConfiguratorSetBorrowableInIsolationFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_borrowable_in_isolation`; + this.PoolConfiguratorSetDebtCeilingFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_debt_ceiling`; + this.PoolConfiguratorSetEmodeCategoryFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_emode_category`; + this.PoolConfiguratorSetLiquidationProtocolFeeFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_liquidation_protocol_fee`; + this.PoolConfiguratorSetPoolPauseFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_pool_pause`; + this.PoolConfiguratorSetReserveActiveFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_reserve_active`; + this.PoolConfiguratorSetReserveBorrowingFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_reserve_borrowing`; + this.PoolConfiguratorConfigureReserveAsCollateralFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::configure_reserve_as_collateral`; + this.PoolConfiguratorSetReserveFactorFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_reserve_factor`; + this.PoolConfiguratorSetReserveFlashLoaningFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_reserve_flash_loaning`; + this.PoolConfiguratorSetReserveFreezeFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_reserve_freeze`; + this.PoolConfiguratorSetReservePauseFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_reserve_pause`; + this.PoolConfiguratorSetSiloedBorrowingFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_siloed_borrowing`; + this.PoolConfiguratorSetSupplyCapFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_supply_cap`; + this.PoolConfiguratorSetUnbackedMintCapFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::set_unbacked_mint_cap`; + this.PoolConfiguratorUpdateBridgeProtocolFeeFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::update_bridge_protocol_fee`; + this.PoolConfiguratorUpdateFlashloanPremiumToProtocolFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::update_flashloan_premium_to_protocol`; + this.PoolConfiguratorUpdateFlashloanPremiumTotalFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::update_flashloan_premium_total`; + this.PoolConfiguratorReservesFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::configure_reserves`; + + /** + * ------------------------------------------------------------------------- + * E Mode Logic + * -------------------------------------------------------------------------= + */ + this.PoolConfiguratorGetRevisionFuncAddr = `${PoolManagerAccountAddress}::pool_configurator::get_revision`; + this.PoolSetUserEmodeFuncAddr = `${PoolManagerAccountAddress}::emode_logic::set_user_emode`; + this.PoolConfigureEmodeCategoryFuncAddr = `${PoolManagerAccountAddress}::emode_logic::configure_emode_category`; + this.PoolGetEmodeCategoryDataFuncAddr = `${PoolManagerAccountAddress}::emode_logic::get_emode_category_data`; + this.PoolGetUserEmodeFuncAddr = `${PoolManagerAccountAddress}::emode_logic::get_user_emode`; + + /** + * ------------------------------------------------------------------------- + * default_reserve_interest_rate_strategy + * ------------------------------------------------------------------------- + */ + this.SetReserveInterestRateStrategyFuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::set_reserve_interest_rate_strategy`; + this.GetGetOptimalUsageRatioFuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::get_optimal_usage_ratio`; + this.GetGetMaxExcessUsageRatioFuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::get_max_excess_usage_ratio`; + this.GetVariableRateSlope1FuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::get_variable_rate_slope1`; + this.GetVariableRateSlope2FuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::get_variable_rate_slope2`; + this.GetBaseVariableBorrowRateFuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::get_base_variable_borrow_rate`; + this.GetMaxVariableBorrowRateFuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::get_max_variable_borrow_rate`; + this.CalculateInterestRatesFuncAddr = `${PoolManagerAccountAddress}::default_reserve_interest_rate_strategy::calculate_interest_rates`; + + /** + * ------------------------------------------------------------------------- + * pool data provider + * -------------------------------------------------------------------------= + */ + this.GetAllReservesTokensFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_all_reserves_tokens`; + this.GetAllATokensFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_all_a_tokens`; + this.GetAllVariableTokensFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_all_var_tokens`; + this.GetReserveConfigurationDataFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_reserve_configuration_data`; + this.GetReserveEModeCategoryFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_reserve_emode_category`; + this.GetReserveCapsFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_reserve_caps`; + this.GetPausedFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_paused`; + this.GetSiloedBorrowingFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_siloed_borrowing`; + this.GetLiquidationProtocolFeeTokensFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_liquidation_protocol_fee`; + this.GetUnbackedMintCapFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_unbacked_mint_cap`; + this.GetDebtCeilingFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_debt_ceiling`; + this.GetDebtCeilingDecimalsFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_debt_ceiling_decimals`; + this.GetReserveDataFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_reserve_data`; + this.GetATokenTotalSupplyFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_a_token_total_supply`; + this.GetTotalDebtFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_total_debt`; + this.GetUserReserveDataFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_user_reserve_data`; + this.GetReserveTokensAddressesFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_reserve_tokens_addresses`; + this.GetFlashLoanEnabledFuncAddr = `${PoolManagerAccountAddress}::pool_data_provider::get_flash_loan_enabled`; + + /** + * ------------------------------------------------------------------------- + * pool addresses provider + * ------------------------------------------------------------------------- + */ + this.HasIdMappedAccountFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::has_id_mapped_account`; + this.GetMarketIdFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_market_id`; + this.GetAddressFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_address`; + this.GetPoolFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_pool`; + this.GetPoolConfiguratorFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_pool_configurator`; + this.GetPriceOracleFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_price_oracle`; + this.GetAclManagerFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_acl_manager`; + this.GetAclAdminFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_acl_admin`; + this.GetPriceOracleSentinelFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_price_oracle_sentinel`; + this.GetPoolDataProviderFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::get_pool_data_provider`; + + this.SetMarketIdFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_market_id`; + this.SetAddressFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_address`; + this.SetPoolImplFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_pool_impl`; + this.SetPoolConfiguratorFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_pool_configurator`; + this.SetPriceOracleFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_price_oracle`; + this.SetAclManagerFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_acl_manager`; + this.SetAclAdminFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_acl_admin`; + this.SetPriceOracleSentinelFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_price_oracle_sentinel`; + this.SetPoolDataProviderFuncAddr = `${PoolManagerAccountAddress}::pool_addresses_provider::set_pool_data_provider`; + } +} diff --git a/src/contracts/supply_borrow.ts b/src/contracts/supply_borrow.ts new file mode 100644 index 0000000..a4d2fbc --- /dev/null +++ b/src/contracts/supply_borrow.ts @@ -0,0 +1,48 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class SupplyBorrowContract { + // Resource Func Addr + // Supply + /// Entry + SupplyFuncAddr: MoveFunctionId; + + WithdrawFuncAddr: MoveFunctionId; + + FinalizeTransferFuncAddr: MoveFunctionId; + + SetUserUseReserveAsCollateralFuncAddr: MoveFunctionId; + + DepositFuncAddr: MoveFunctionId; + + // Borrow + /// Entry + BorrowFuncAddr: MoveFunctionId; + + RepayFuncAddr: MoveFunctionId; + + RepayWithATokensFuncAddr: MoveFunctionId; + + // Liquidation + /// Entry + LiquidationCallFuncAddr: MoveFunctionId; + + // User Logic + /// View + GetUserAccountDataFuncAddr: MoveFunctionId; + + constructor(provider: AptosProvider) { + const SupplyBorrowManager = + provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const SupplyBorrowManagerAccountAddress = SupplyBorrowManager.toString(); + this.SupplyFuncAddr = `${SupplyBorrowManagerAccountAddress}::supply_logic::supply`; + this.WithdrawFuncAddr = `${SupplyBorrowManagerAccountAddress}::supply_logic::withdraw`; + this.FinalizeTransferFuncAddr = `${SupplyBorrowManagerAccountAddress}::supply_logic::finalize_transfer`; + this.SetUserUseReserveAsCollateralFuncAddr = `${SupplyBorrowManagerAccountAddress}::supply_logic::set_user_use_reserve_as_collateral`; + this.BorrowFuncAddr = `${SupplyBorrowManagerAccountAddress}::borrow_logic::borrow`; + this.RepayFuncAddr = `${SupplyBorrowManagerAccountAddress}::borrow_logic::repay`; + this.RepayWithATokensFuncAddr = `${SupplyBorrowManagerAccountAddress}::borrow_logic::repay_with_a_tokens`; + this.LiquidationCallFuncAddr = `${SupplyBorrowManagerAccountAddress}::liquidation_logic::liquidation_call`; + this.GetUserAccountDataFuncAddr = `${SupplyBorrowManagerAccountAddress}::user_logic::get_user_account_data`; + } +} diff --git a/src/contracts/tokens.ts b/src/contracts/tokens.ts new file mode 100644 index 0000000..978a93e --- /dev/null +++ b/src/contracts/tokens.ts @@ -0,0 +1,144 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class TokensContract { + // Resource Func Addr + // Underlying Token + UnderlyingCreateTokenFuncAddr: MoveFunctionId; + + UnderlyingGetMetadataBySymbolFuncAddr: MoveFunctionId; + + UnderlyingGetTokenAccountAddressFuncAddr: MoveFunctionId; + + UnderlyingMintFuncAddr: MoveFunctionId; + + UnderlyingSupplyFuncAddr: MoveFunctionId; + + UnderlyingMaximumFuncAddr: MoveFunctionId; + + UnderlyingNameFuncAddr: MoveFunctionId; + + UnderlyingSymbolFuncAddr: MoveFunctionId; + + UnderlyingDecimalsFuncAddr: MoveFunctionId; + + UnderlyingBalanceOfFuncAddr: MoveFunctionId; + + UnderlyingTokenAddressFuncAddr: MoveFunctionId; + + // A Token + ATokenCreateTokenFuncAddr: MoveFunctionId; + + ATokenGetMetadataBySymbolFuncAddr: MoveFunctionId; + + ATokenGetTokenAccountAddressFuncAddr: MoveFunctionId; + + ATokenGetReserveTreasuryAddressFuncAddr: MoveFunctionId; + + ATokenGetUnderlyingAssetAddressFuncAddr: MoveFunctionId; + + ATokenScaledTotalSupplyFuncAddr: MoveFunctionId; + + ATokenNameFuncAddr: MoveFunctionId; + + ATokenSymbolFuncAddr: MoveFunctionId; + + ATokenDecimalsFuncAddr: MoveFunctionId; + + ATokenBalanceOfFuncAddr: MoveFunctionId; + + ATokenScaledBalanceOfFuncAddr: MoveFunctionId; + + ATokenRescueTokensFuncAddr: MoveFunctionId; + + ATokenGetScaledUserBalanceAndSupplyFuncAddr: MoveFunctionId; + + ATokenGetGetPreviousIndexFuncAddr: MoveFunctionId; + + ATokenGetRevisionFuncAddr: MoveFunctionId; + + ATokenTokenAddressFuncAddr: MoveFunctionId; + + ATokenAssetMetadataFuncAddr: MoveFunctionId; + + // Variable Token + VariableCreateTokenFuncAddr: MoveFunctionId; + + VariableGetMetadataBySymbolFuncAddr: MoveFunctionId; + + VariableGetTokenAddressFuncAddr: MoveFunctionId; + + VariableGetAssetMetadataFuncAddr: MoveFunctionId; + + VariableGetUnderlyingAddressFuncAddr: MoveFunctionId; + + VariableNameFuncAddr: MoveFunctionId; + + VariableSymbolFuncAddr: MoveFunctionId; + + VariableDecimalsFuncAddr: MoveFunctionId; + + VariableScaledBalanceOfFuncAddr: MoveFunctionId; + + VariableScaledTotalSupplyFuncAddr: MoveFunctionId; + + VariableGetScaledUserBalanceAndSupplyFuncAddr: MoveFunctionId; + + VariableGetPreviousIndexFuncAddr: MoveFunctionId; + + VariableGetRevisionFuncAddr: MoveFunctionId; + + constructor(provider: AptosProvider) { + // Underlying Token + const AaveTokensManager = + provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const AaveTokensManagerAccountAddress = AaveTokensManager.toString(); + // Resource Func Addr + // Underlying Token + this.UnderlyingCreateTokenFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::create_token`; + this.UnderlyingGetMetadataBySymbolFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::get_metadata_by_symbol`; + this.UnderlyingGetTokenAccountAddressFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::get_token_account_address`; + this.UnderlyingMintFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::mint`; + this.UnderlyingSupplyFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::supply`; + this.UnderlyingMaximumFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::maximum`; + this.UnderlyingNameFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::name`; + this.UnderlyingSymbolFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::symbol`; + this.UnderlyingDecimalsFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::decimals`; + this.UnderlyingBalanceOfFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::balance_of`; + this.UnderlyingTokenAddressFuncAddr = `${AaveTokensManagerAccountAddress}::mock_underlying_token_factory::token_address`; + + // A Token + this.ATokenCreateTokenFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::create_token`; + this.ATokenGetMetadataBySymbolFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_metadata_by_symbol`; + this.ATokenGetTokenAccountAddressFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_token_account_address`; + this.ATokenGetReserveTreasuryAddressFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_reserve_treasury_address`; + this.ATokenGetUnderlyingAssetAddressFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_underlying_asset_address`; + this.ATokenScaledTotalSupplyFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::scaled_total_supply`; + this.ATokenNameFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::name`; + this.ATokenSymbolFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::symbol`; + this.ATokenDecimalsFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::decimals`; + this.ATokenBalanceOfFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::balance_of`; + this.ATokenScaledBalanceOfFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::scaled_balance_of`; + this.ATokenRescueTokensFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::rescue_tokens`; + this.ATokenGetScaledUserBalanceAndSupplyFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_scaled_user_balance_and_supply`; + this.ATokenGetGetPreviousIndexFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_previous_index`; + this.ATokenGetRevisionFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::get_revision`; + this.ATokenTokenAddressFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::token_address`; + this.ATokenAssetMetadataFuncAddr = `${AaveTokensManagerAccountAddress}::a_token_factory::asset_metadata`; + + // Variable Token + this.VariableCreateTokenFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::create_token`; + this.VariableGetMetadataBySymbolFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::get_metadata_by_symbol`; + this.VariableGetTokenAddressFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::token_address`; + this.VariableGetAssetMetadataFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::asset_metadata`; + this.VariableGetUnderlyingAddressFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::get_underlying_asset_address`; + this.VariableNameFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::name`; + this.VariableSymbolFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::symbol`; + this.VariableDecimalsFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::decimals`; + this.VariableScaledBalanceOfFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::scaled_balance_of`; + this.VariableScaledTotalSupplyFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::scaled_total_supply`; + this.VariableGetScaledUserBalanceAndSupplyFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::get_scaled_user_balance_and_supply`; + this.VariableGetPreviousIndexFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::get_previous_index`; + this.VariableGetRevisionFuncAddr = `${AaveTokensManagerAccountAddress}::variable_debt_token_factory::get_revision`; + } +} diff --git a/src/contracts/uiIncentiveDataProvider.ts b/src/contracts/uiIncentiveDataProvider.ts new file mode 100644 index 0000000..18f9cf6 --- /dev/null +++ b/src/contracts/uiIncentiveDataProvider.ts @@ -0,0 +1,34 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class UiIncentiveDataProviderContract { + // Resource Func Addr + /** + * ------------------------------------------------------------------------- + * UI Incentive Data Provider + * -------------------------------------------------------------------------= + */ + + // View + uiIncentiveDataProviderV3DataAddress: MoveFunctionId; + + uiIncentiveDataProviderV3DataObject: MoveFunctionId; + + getFullReservesIncentiveData: MoveFunctionId; + + getReservesIncentivesData: MoveFunctionId; + + getUserReservesIncentivesData: MoveFunctionId; + + constructor(provider: AptosProvider) { + const PeripheryManager = + provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const PeripheryManagerAccountAddress = PeripheryManager.toString(); + + this.uiIncentiveDataProviderV3DataAddress = `${PeripheryManagerAccountAddress}::ui_incentive_data_provider_v3::ui_incentive_data_provider_v3_data_address`; + this.uiIncentiveDataProviderV3DataObject = `${PeripheryManagerAccountAddress}::ui_incentive_data_provider_v3::ui_incentive_data_provider_v3_data_object`; + this.getFullReservesIncentiveData = `${PeripheryManagerAccountAddress}::ui_incentive_data_provider_v3::get_full_reserves_incentive_data`; + this.getReservesIncentivesData = `${PeripheryManagerAccountAddress}::ui_incentive_data_provider_v3::get_reserves_incentives_data`; + this.getUserReservesIncentivesData = `${PeripheryManagerAccountAddress}::ui_incentive_data_provider_v3::get_user_reserves_incentives_data`; + } +} diff --git a/src/contracts/uiPoolDataProvider.ts b/src/contracts/uiPoolDataProvider.ts new file mode 100644 index 0000000..f0bd79c --- /dev/null +++ b/src/contracts/uiPoolDataProvider.ts @@ -0,0 +1,34 @@ +import { MoveFunctionId } from "@aptos-labs/ts-sdk"; +import { AptosProvider } from "../clients/aptosProvider"; + +export class UiPoolDataProviderContract { + // Resource Func Addr + /** + * ------------------------------------------------------------------------- + * UI Pool Data Provider + * -------------------------------------------------------------------------= + */ + + // View + uiPoolDataProviderV32DataAddress: MoveFunctionId; + + uiPoolDataProviderV3DataObject: MoveFunctionId; + + getReservesList: MoveFunctionId; + + getReservesData: MoveFunctionId; + + getUserReservesData: MoveFunctionId; + + constructor(provider: AptosProvider) { + const PeripheryManager = + provider.getProfileAccountByName("AAVE_POOL_ADDRESS"); + const PeripheryManagerAccountAddress = PeripheryManager.toString(); + + this.uiPoolDataProviderV32DataAddress = `${PeripheryManagerAccountAddress}::ui_pool_data_provider_v3::ui_pool_data_provider_v3_data_address`; + this.uiPoolDataProviderV3DataObject = `${PeripheryManagerAccountAddress}::ui_pool_data_provider_v3::ui_pool_data_provider_v3_data_object`; + this.getReservesList = `${PeripheryManagerAccountAddress}::ui_pool_data_provider_v3::get_reserves_list`; + this.getReservesData = `${PeripheryManagerAccountAddress}::ui_pool_data_provider_v3::get_reserves_data`; + this.getUserReservesData = `${PeripheryManagerAccountAddress}::ui_pool_data_provider_v3::get_user_reserves_data`; + } +} diff --git a/src/helpers/common.ts b/src/helpers/common.ts new file mode 100644 index 0000000..c0c092e --- /dev/null +++ b/src/helpers/common.ts @@ -0,0 +1,24 @@ +import { MoveValue } from "@aptos-labs/ts-sdk"; + +export const stringToUint8Array = (data: string): Uint8Array => + new Uint8Array(Buffer.from(data, "utf8")); + +export const stringToHex = (data: string): string => + Buffer.from(data).toString("hex"); + +export const uint8ArrayToString = (data: Uint8Array): string => + Buffer.from(data).toString("utf8"); + +export function StringToHex(str: string): string { + let hexResult = "0x"; + // eslint-disable-next-line no-plusplus + for (let i = 0; i < str.length; i++) { + const hexValue: string = str.charCodeAt(i).toString(16); // .toUpperCase(); // Get the hexadecimal representation of a character + hexResult += hexValue.padStart(2, "0"); // Ensure that each character has two hexadecimal digits,If there are any deficiencies, add 0 in front. + } + return hexResult; +} + +export function mapToBigInt(value: MoveValue): bigint { + return BigInt(value.toString()); +} diff --git a/src/helpers/constants.ts b/src/helpers/constants.ts new file mode 100644 index 0000000..ca10906 --- /dev/null +++ b/src/helpers/constants.ts @@ -0,0 +1,31 @@ +// ---------------- +// MATH +// ---------------- + +export const PERCENTAGE_FACTOR = "10000"; +export const HALF_PERCENTAGE = (BigInt(PERCENTAGE_FACTOR) / 2n).toString(); +export const WAD = (BigInt(10) ** 18n).toString(); +export const HALF_WAD = (BigInt(WAD) / 2n).toString(); +export const RAY = (BigInt(10) ** 27n).toString(); +export const HALF_RAY = (BigInt(RAY) / 2n).toString(); +export const WAD_RAY_RATIO = (10e8).toString(); +export const oneEther = (10e17).toString(); +export const oneRay = (10e26).toString(); +export const MAX_UINT_AMOUNT = + "115792089237316195423570985008687907853269984665640564039457584007913129639935"; +export const MAX_BORROW_CAP = "68719476735"; +export const MAX_SUPPLY_CAP = "68719476735"; +export const MAX_UNBACKED_MINT_CAP = "68719476735"; +export const ONE_YEAR = "31536000"; +export const ZERO_ADDRESS = "0x0"; +export const ONE_ADDRESS = "0x1"; +// ---------------- +// PROTOCOL GLOBAL PARAMS +// ---------------- +export const MOCK_USD_PRICE_IN_WEI = "5848466240000000"; +export const USD_ADDRESS = "0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96"; +export const AAVE_REFERRAL = 0; +export const INTEREST_RATE_MODES = { + NONE: 0, + VARIABLE: 2, +}; diff --git a/src/helpers/interfaces.ts b/src/helpers/interfaces.ts new file mode 100644 index 0000000..6af8709 --- /dev/null +++ b/src/helpers/interfaces.ts @@ -0,0 +1,39 @@ +import "./wadraymath"; + +// Common Interfaces +export interface Metadata { + inner: string; +} + +export interface UserReserveData { + scaledATokenBalance: bigint; + currentATokenBalance: bigint; + currentVariableDebt: bigint; + scaledVariableDebt: bigint; + liquidityRate: bigint; + usageAsCollateralEnabled: boolean; + walletBalance: bigint; + [key: string]: bigint | string | boolean; +} + +export interface ReserveData { + address: string; + symbol: string; + decimals: bigint; + reserveFactor: bigint; + availableLiquidity: bigint; + totalLiquidity: bigint; + totalVariableDebt: bigint; + scaledVariableDebt: bigint; + variableBorrowRate: bigint; + supplyUsageRatio: bigint; + borrowUsageRatio: bigint; + liquidityIndex: bigint; + variableBorrowIndex: bigint; + aTokenAddress: string; + lastUpdateTimestamp: bigint; + liquidityRate: bigint; + unbacked: bigint; + accruedToTreasuryScaled: bigint; + [key: string]: bigint | string; +} diff --git a/src/helpers/wadraymath.ts b/src/helpers/wadraymath.ts new file mode 100644 index 0000000..0e4ce9f --- /dev/null +++ b/src/helpers/wadraymath.ts @@ -0,0 +1,82 @@ +import { + HALF_PERCENTAGE, + HALF_RAY, + HALF_WAD, + PERCENTAGE_FACTOR, + RAY, + WAD, + WAD_RAY_RATIO, +} from "./constants"; + +export abstract class WayRadMath { + static ray(): bigint { + return BigInt(RAY); + } + + static wad(): bigint { + return BigInt(WAD); + } + + static halfRay(): bigint { + return BigInt(HALF_RAY); + } + + static halfWad(): bigint { + return BigInt(HALF_WAD); + } + + static halfPercentage(): bigint { + return BigInt(HALF_PERCENTAGE); + } + + static percentageFactor(): bigint { + return BigInt(PERCENTAGE_FACTOR); + } + + static wadRayRatio(): bigint { + return BigInt(WAD_RAY_RATIO); + } + + static wadMul(a: bigint, b: bigint): bigint { + const numerator = this.halfWad() + a * b; + return numerator / this.wad(); + } + + static wadDiv(a: bigint, b: bigint): bigint { + const numerator = b / 2n + a * this.wad(); + return numerator / b; + } + + static rayMul(a: bigint, b: bigint): bigint { + const numerator = this.halfRay() + a * b; + return numerator / this.ray(); + } + + static rayDiv(a: bigint, b: bigint): bigint { + const numerator = b / 2n + a * this.ray(); + return numerator / b; + } + + static percentMul = (a: bigint, bps: bigint): bigint => { + const numerator = this.halfPercentage() + a * bps; + return numerator / this.percentageFactor(); + }; + + static percentDiv = (a: bigint, bps: bigint): bigint => { + const numerator = bps / 2n + a * this.percentageFactor(); + return numerator / bps; + }; + + static rayToWad(a: bigint): bigint { + const numerator = this.wad() / 2n + a; + return numerator / this.wadRayRatio(); + } + + static wadToRay(a: bigint): bigint { + return a * this.wadRayRatio(); + } + + static negated(a: bigint): bigint { + return -a; + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..ac30922 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,20 @@ +/** Polyfills */ +import { Buffer } from "buffer"; +import EventEmitter from "events"; + +declare global { + interface Window { + Buffer: typeof Buffer; + EventEmitter: typeof EventEmitter; + } +} + +// Check if we are on browser +if (typeof window !== "undefined") { + window.Buffer = Buffer; + window.EventEmitter = EventEmitter; +} + +/** Exports */ +export * from "./clients"; +export * from "./configs"; diff --git a/test/example.spec.ts b/test/example.spec.ts new file mode 100644 index 0000000..4dcc051 --- /dev/null +++ b/test/example.spec.ts @@ -0,0 +1,7 @@ +describe("Test", () => { + describe("test", () => { + test("test", () => { + expect([1]).toHaveLength(1); + }); + }); +}); diff --git a/tsconfig.commonjs.json b/tsconfig.commonjs.json new file mode 100644 index 0000000..695ccb0 --- /dev/null +++ b/tsconfig.commonjs.json @@ -0,0 +1,21 @@ +{ + // Extends base TypeScript configuration from 'tsconfig.json' + "extends": "./tsconfig.json", + "compilerOptions": { + // If enabled (true), generates corresponding '.d.ts' file alongside the output file. + "declaration": true, + // Specifies the module system for the output bundle. "commonjs" is a standard for structuring and organizing JavaScript code. + "module": "commonjs", + // The location where the output files will be placed. + "outDir": "./dist/cmd/", + // Source map options + "sourceMap": true, + "inlineSources": true + }, + // A list of glob patterns that exclude certain files from the compilation. + // Here, it's set to exclude all the files in 'node_modules' and any file ending in '.spec.ts'. + "exclude": [ + "node_modules", + "**/*.spec.ts" + ] +} \ No newline at end of file diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..fb60be3 --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,26 @@ +{ + // Extends base TypeScript configuration from 'tsconfig.json' + "extends": "./tsconfig.json", + "compilerOptions": { + // Specifies the module system for the output bundle. "ESNext" refers to the latest version of ECMAScript (JavaScript). + "module": "ESNext", + // The version of JavaScript that the compiler will output. "ESNext" means the latest version. + "target": "ESNext", + // The location where the output files will be placed. + "outDir": "./dist/esm/", + // If enabled (true), generates corresponding '.d.ts' file alongside the output file. + "declaration": true, + // Source map options + "sourceMap": true, + "inlineSources": true + // If enabled, only declaration files will be emitted and no JavaScript files will be output. + // Currently commented out, so JavaScript files are being output as well. + // "emitDeclarationOnly": true + }, + // A list of glob patterns that exclude certain files from the compilation. + // Here, it's set to exclude all the files in 'node_modules' and any file ending in '.spec.ts'. + "exclude": [ + "node_modules", + "**/*.spec.ts" + ] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b073640 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,70 @@ +{ + "ts-node": { + "experimentalResolver": true + }, + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "declaration": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "jsx": "preserve", + "allowJs": true, + "importHelpers": true, + "alwaysStrict": true, + "sourceMap": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitAny": false, + "noImplicitThis": false, + "skipLibCheck": true, + "strictNullChecks": false, + "downlevelIteration": true, + "esModuleInterop": true, + "outDir": "dist", + "types": ["node", "jest"], + "typeRoots": ["node_modules/@types"], + "lib": [ + "es7", + "es6", + "dom", + "es2015", + "es2017", + "es2018", + "es2019", + "es2020", + "es2021", + "esnext", + "esnext.asynciterable" + ] + }, + "lib": [ + "es7", + "es6", + "dom", + "es2015", + "es2017", + "es2018", + "es2019", + "es2020", + "es2021", + "esnext", + "esnext.asynciterable" + ], + "files": ["./node_modules/@types/node/index.d.ts"], + "include": ["./src/**/*.ts"], + "exclude": [ + "./node_modules/**/*", + "typings/browser.d.ts", + "typings/browser", + "node_modules", + "typings/main", + "typings/main.d.ts", + "typings/index.d.ts", + "typings", + "./dist/**/*" + ] +} diff --git a/tsdoc.json b/tsdoc.json new file mode 100644 index 0000000..c30991c --- /dev/null +++ b/tsdoc.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "tagDefinitions": [ + { + "tagName": "@module", + "syntaxKind": "block" + }, + { + "tagName": "@warning", + "syntaxKind": "block" + } + ] + } \ No newline at end of file diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..777c69a --- /dev/null +++ b/typedoc.json @@ -0,0 +1,9 @@ +{ + "sidebarLinks": { + "Core clients": "clients/aclClient.html", + "Configurations": "configs/index.html", + }, + "navigationLinks": { + "Main documentation": "https://docs.aave.net/" + } +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..c745e67 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,90 @@ +// Require the path module from Node.js +const path = require("path"); + +// Base configuration +const baseConfig = { + // The entry point of the package + entry: "./src/index.ts", + + // Configuration for module resolution + resolve: { + // Configure fallbacks for Node.js built-in modules + fallback: { + // Fallback for the buffer module, using the buffer module + buffer: require.resolve("buffer/"), + fs: false, + path: false, + }, + // Extensions that are used to resolve modules + extensions: [".ts", ".js"], + }, + + // Configuration for source maps + devtool: "source-map", + + // The mode to use for the webpack build + mode: "development", +}; + +// Base configuration +const baseConfigUmd = { + ...baseConfig, + + // Configuration for the output file + output: { + // The filename of the output file will be specified in each config + // The path to the output directory, __dirname is the directory of the current module + path: path.resolve(__dirname, "."), + // The type of the exported library + libraryTarget: "window", // for UMD we use window + // The name of the library as it should be exposed in the global scope + library: "aaveAptos", + // The global object in which the library will be assigned to + globalObject: "this", + }, + + // Configuration for modules + module: { + // Array of rules that are used to find and load modules + rules: [ + { + // Regular expression that matches the file extensions that this rule applies to + test: /\.ts$/, + // The loader that should be used for the files that match the test regular expression + loader: "ts-loader", + // A condition that must not be met to use this rule + exclude: /node_modules/, + options: { + configFile: "tsconfig.commonjs.json", + }, + }, + ], + }, +}; + +// Export the webpack configuration object +module.exports = [ + // UMD minified + { + ...baseConfigUmd, + output: { + ...baseConfigUmd.output, + filename: "bundle.min.js", + }, + optimization: { + minimize: true, + }, + }, + + // UMD - non-minified + { + ...baseConfigUmd, + output: { + ...baseConfigUmd.output, + filename: "bundle.js", + }, + optimization: { + minimize: false, + }, + }, +];