├── src ├── TxnExecutor │ ├── index.ts │ ├── utils.ts │ ├── functions │ │ ├── index.ts │ │ ├── sendTransactionBanx.ts │ │ ├── signAndSendTransactions.ts │ │ ├── makeTransaction.ts │ │ ├── sendTransactions.ts │ │ └── confirmTransactions.ts │ ├── constants.ts │ ├── types.ts │ └── TxnExecutor.ts ├── base │ ├── index.ts │ ├── errors.ts │ ├── lookupTables.ts │ ├── confirm.ts │ ├── send.ts │ └── transaction.ts ├── index.ts └── utils.ts ├── .prettierignore ├── tsconfig.json ├── tsconfig-cjs.json ├── .eslintignore ├── .prettierrc ├── .gitignore ├── tsconfig-base.json ├── .eslintrc ├── package.json ├── .husky └── pre-commit ├── README.md └── yarn.lock /src/TxnExecutor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TxnExecutor' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | scripts/ 3 | package-lock.json 4 | yarn.lock 5 | package.json 6 | build 7 | libs 8 | public/ 9 | README.md 10 | -------------------------------------------------------------------------------- /src/base/index.ts: -------------------------------------------------------------------------------- 1 | export * from './confirm' 2 | export * from './send' 3 | export * from './errors' 4 | export * from './lookupTables' 5 | export * from './transaction' 6 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * as utils from './utils' 2 | export * as base from './base' 3 | export * from './TxnExecutor' 4 | export * from './base' 5 | export * from './utils' 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig-base.json", 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "outDir": "dist/esm", 6 | "target": "esnext" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig-cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig-base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "outDir": "dist/cjs", 6 | "target": "es2015" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.sh 2 | coverage/** 3 | dist/* 4 | node_modules/* 5 | node_modules*/* 6 | docs/* 7 | **/*.config.js 8 | **/*.bundle.js 9 | **/*.spec.js 10 | deploy.js 11 | build 12 | libs 13 | -------------------------------------------------------------------------------- /src/TxnExecutor/utils.ts: -------------------------------------------------------------------------------- 1 | import { USER_REJECTED_TXN_ERR_MESSAGES } from './constants' 2 | import { TxnError } from './types' 3 | 4 | export const didUserRejectTxnSigning = (error: TxnError) => { 5 | const { message } = error 6 | return USER_REJECTED_TXN_ERR_MESSAGES.includes(message) 7 | } 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": false, 6 | "singleQuote": true, 7 | "trailingComma": "all", 8 | "plugins": ["@trivago/prettier-plugin-sort-imports"], 9 | "importOrder": [""], 10 | "importOrderSeparation": true, 11 | "importOrderSortSpecifiers": true 12 | } 13 | -------------------------------------------------------------------------------- /src/base/errors.ts: -------------------------------------------------------------------------------- 1 | export class ConfirmTransactionError extends Error { 2 | constructor(message: string) { 3 | super(message) 4 | } 5 | } 6 | 7 | export class TransactionError extends Error { 8 | logs: string[] | null 9 | 10 | constructor(message: string, logs: string[] | null) { 11 | super(message) 12 | this.logs = logs 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/TxnExecutor/functions/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | confirmTransactions, 3 | ConfirmTransactionsProps, 4 | ConfirmTransactionsResult, 5 | } from './confirmTransactions' 6 | 7 | export { sendTransactions } from './sendTransactions' 8 | 9 | export { signAndSendTransactions } from './signAndSendTransactions' 10 | 11 | export { makeTransaction } from './makeTransaction' 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /dist 13 | 14 | # misc 15 | .DS_Store 16 | 17 | *.env 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | 23 | .idea 24 | 25 | /test-ledger -------------------------------------------------------------------------------- /src/TxnExecutor/constants.ts: -------------------------------------------------------------------------------- 1 | import { GetPriorityFee } from './types' 2 | 3 | //? To define that user has rejected txn (check error.message). 0 -- phantom error message, 1 -- solflare error message 4 | export const USER_REJECTED_TXN_ERR_MESSAGES = ['User rejected the request.', 'Transaction rejected'] 5 | 6 | export const GET_PRIORITY_FEE_PLACEHOLDER: GetPriorityFee = () => Promise.resolve(0) 7 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { chain } from 'lodash' 2 | 3 | export const filterFulfilledResultsValues = (results: PromiseSettledResult[]): T[] => 4 | chain(results) 5 | .map((result) => (result.status === 'fulfilled' ? result.value : null)) 6 | .compact() 7 | .value() 8 | 9 | export const filterRejectedResultsReasons = (results: PromiseSettledResult[]): T[] => 10 | chain(results) 11 | .map((result) => (result.status === 'rejected' ? result.reason : null)) 12 | .compact() 13 | .value() 14 | 15 | export const wait = (time: number) => new Promise((resolve) => setTimeout(resolve, time)) 16 | -------------------------------------------------------------------------------- /tsconfig-base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "allowSyntheticDefaultImports": true, 5 | "baseUrl": "src", 6 | "declaration": true, 7 | "esModuleInterop": true, 8 | "inlineSourceMap": false, 9 | "lib": ["esnext"], 10 | "listEmittedFiles": false, 11 | "listFiles": false, 12 | "moduleResolution": "node", 13 | "noFallthroughCasesInSwitch": true, 14 | "pretty": true, 15 | "resolveJsonModule": true, 16 | "rootDir": "src", 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "traceResolution": false, 20 | "types": ["node"], 21 | "removeComments": false 22 | }, 23 | "compileOnSave": false, 24 | "exclude": ["node_modules", "dist"], 25 | "include": ["src"] 26 | } 27 | -------------------------------------------------------------------------------- /src/base/lookupTables.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AddressLookupTableAccount, 3 | Connection, 4 | PublicKey, 5 | RpcResponseAndContext, 6 | } from '@solana/web3.js' 7 | 8 | //? Map is used for caching 9 | const lookupTablesCache = new Map< 10 | string, 11 | Promise> 12 | >() 13 | 14 | export function getLookupTableAccount( 15 | lookupTableAddress: PublicKey, 16 | connection: Connection, 17 | ): Promise> { 18 | const lookupTableAddressStr = lookupTableAddress.toBase58() 19 | 20 | if (!lookupTablesCache.has(lookupTableAddressStr)) { 21 | const lookupTableAccountPromise = connection.getAddressLookupTable(lookupTableAddress) 22 | 23 | lookupTablesCache.set(lookupTableAddressStr, lookupTableAccountPromise) 24 | } 25 | 26 | return lookupTablesCache.get(lookupTableAddressStr)! 27 | } 28 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint:recommended", 4 | "plugin:@typescript-eslint/eslint-recommended", 5 | "plugin:@typescript-eslint/recommended" 6 | ], 7 | "rules": { 8 | "eqeqeq": 1, 9 | "no-console": ["warn", { "allow": ["error", "warn"] }], 10 | "no-debugger": "warn", 11 | "require-await": "error", 12 | "no-undef": "error", 13 | "no-param-reassign": "error", 14 | "prefer-const": "error", 15 | "no-duplicate-imports": "error", 16 | "@typescript-eslint/no-unused-vars": [ 17 | "warn", 18 | { 19 | "args": "after-used", 20 | "ignoreRestSiblings": true 21 | } 22 | ], 23 | "@typescript-eslint/no-explicit-any": "warn", 24 | "@typescript-eslint/no-empty-function": "warn" 25 | }, 26 | "globals": { 27 | "setTimeout": false, 28 | "AbortController": false, 29 | "AbortSignal": false 30 | }, 31 | "parser": "@typescript-eslint/parser", 32 | "parserOptions": { 33 | "ecmaFeatures": { 34 | "experimentalObjectRestSpread": true, 35 | "jsx": false 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/TxnExecutor/functions/sendTransactionBanx.ts: -------------------------------------------------------------------------------- 1 | import { Commitment, VersionedTransaction } from '@solana/web3.js' 2 | import axios from 'axios' 3 | import bs58 from 'bs58' 4 | 5 | type SendTransactionBanx = (params: { 6 | transaction: VersionedTransaction 7 | blockhash: string 8 | lastValidBlockHeight: number 9 | preflightCommitment?: Commitment 10 | commitment?: Commitment 11 | minContextSlot?: number 12 | skipPreflight?: boolean 13 | }) => Promise 14 | 15 | const BACKEND_BASE_URL = 'https://api.banx.gg' 16 | 17 | export const sendTransactionBanx: SendTransactionBanx = async ({ 18 | transaction, 19 | blockhash, 20 | lastValidBlockHeight, 21 | preflightCommitment, 22 | commitment, 23 | minContextSlot, 24 | skipPreflight, 25 | }): Promise => { 26 | try { 27 | await axios.post(`${BACKEND_BASE_URL}/activity/tx`, { 28 | transaction: bs58.encode(transaction.serialize()), 29 | blockhash, 30 | lastValidBlockHeight, 31 | preflightCommitment, 32 | commitment, 33 | minContextSlot, 34 | skipPreflight, 35 | }) 36 | } catch (error) { 37 | return 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/base/confirm.ts: -------------------------------------------------------------------------------- 1 | import { wait } from '../utils' 2 | import { ConfirmTransactionError } from './errors' 3 | import { Connection } from '@solana/web3.js' 4 | 5 | type ConfirmTransactionByPollingSignatureStatusParams = { 6 | signature: string 7 | connection: Connection 8 | /** 9 | * Required because it is the only way to stop the loop if there were no errors 10 | */ 11 | abortSignal: AbortSignal 12 | /** 13 | * Polling interval in seconds 14 | */ 15 | refetchInterval: number 16 | } 17 | /** 18 | * Can be used as fallback when websocket died (in connection.confirmTransaction) or RPC doen't support websockets at all 19 | * Throws ConfirmTransactionError if something goes wrong 20 | */ 21 | export async function confirmTransactionByPollingSignatureStatus({ 22 | signature, 23 | connection, 24 | abortSignal, 25 | refetchInterval, 26 | }: ConfirmTransactionByPollingSignatureStatusParams): Promise { 27 | try { 28 | while (!abortSignal.aborted) { 29 | await wait(refetchInterval * 1000) 30 | const { value: signatureValues } = await connection.getSignatureStatuses([signature], { 31 | searchTransactionHistory: false, 32 | }) 33 | 34 | if (signatureValues?.[0]?.confirmationStatus === 'confirmed') { 35 | return signature 36 | } 37 | } 38 | } catch (error) { 39 | throw new ConfirmTransactionError('ConfirmTransactionError') 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/TxnExecutor/functions/signAndSendTransactions.ts: -------------------------------------------------------------------------------- 1 | import { ExecutorOptionsBase, WalletAndConnection } from '../types' 2 | import { sendTransactions } from './sendTransactions' 3 | import { VersionedTransaction } from '@solana/web3.js' 4 | 5 | export type SignAndSendTransactions = (params: { 6 | transactions: VersionedTransaction[] 7 | walletAndConnection: WalletAndConnection 8 | minContextSlot: number 9 | options: ExecutorOptionsBase 10 | }) => Promise<{ signature: string; resendAbortController?: AbortController }[]> 11 | 12 | export const signAndSendTransactions: SignAndSendTransactions = async ({ 13 | transactions, 14 | walletAndConnection, 15 | minContextSlot, 16 | options, 17 | }) => { 18 | const { connection, wallet } = walletAndConnection 19 | 20 | //? Use signTransaction method if signAllTransactions not supported or chunk size is 1 21 | if (!wallet.signAllTransactions || transactions.length === 1) { 22 | const signedTransaction = await wallet.signTransaction(transactions[0]) 23 | return await sendTransactions({ 24 | transactions: [signedTransaction], 25 | connection: connection, 26 | minContextSlot, 27 | options, 28 | }) 29 | } 30 | 31 | const signedTxns = await wallet.signAllTransactions(transactions) 32 | const signatureAndResendAbortController = await sendTransactions({ 33 | transactions: signedTxns, 34 | connection: connection, 35 | minContextSlot, 36 | options, 37 | }) 38 | 39 | return signatureAndResendAbortController 40 | } 41 | -------------------------------------------------------------------------------- /src/TxnExecutor/functions/makeTransaction.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CreateTransactionParams, 3 | SimulatedAccountInfoByPubkey, 4 | createTransaction, 5 | getComputeUnitLimitInstruction, 6 | getComputeUnitPriceInstruction, 7 | simulateTransaction, 8 | } from '../../base' 9 | import { GetPriorityFee } from '../types' 10 | import { VersionedTransaction } from '@solana/web3.js' 11 | 12 | type MakeTransactionParams = CreateTransactionParams & { 13 | getPriorityFee: GetPriorityFee 14 | } 15 | 16 | type MakeTransactionResult = { 17 | transaction: VersionedTransaction 18 | accountInfoByPubkey?: SimulatedAccountInfoByPubkey 19 | params: Params 20 | } 21 | 22 | export async function makeTransaction({ 23 | createTxnData, 24 | blockhash, 25 | payerKey, 26 | connection, 27 | getPriorityFee, 28 | }: MakeTransactionParams): Promise> { 29 | const { instructions, signers, lookupTables, accounts, params } = createTxnData 30 | 31 | const simulationResult = await simulateTransaction({ 32 | connection, 33 | instructions, 34 | lookupTables, 35 | payerKey, 36 | accounts, 37 | params, 38 | }) 39 | 40 | const computeUnitLimitIxn = getComputeUnitLimitInstruction(simulationResult.unitsConsumed) 41 | 42 | const priorityFee = await getPriorityFee({ txnParams: createTxnData, connection }) 43 | 44 | const computeUnitPriceIxn = getComputeUnitPriceInstruction(priorityFee) 45 | 46 | const transaction = await createTransaction({ 47 | createTxnData: { 48 | instructions: [computeUnitLimitIxn, computeUnitPriceIxn, ...instructions], 49 | lookupTables, 50 | signers, 51 | accounts, 52 | params, 53 | }, 54 | blockhash, 55 | payerKey, 56 | connection, 57 | }) 58 | 59 | return { transaction, accountInfoByPubkey: simulationResult.accountInfoByPubkey, params } 60 | } 61 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solana-transactions-executor", 3 | "version": "6.0.1", 4 | "description": "A small solution to operate solana transactions: create, sign, send, chunk, support ledger etc.", 5 | "module": "dist/esm/index.js", 6 | "main": "dist/cjs/index.js", 7 | "scripts": { 8 | "publish:major": "yarn build && npm version major && yarn build && npm publish", 9 | "publish:minor": "yarn build && npm version minor && npm publish", 10 | "publish:patch": "yarn build && npm version patch && npm publish", 11 | "build": "yarn clear-dist && yarn build-esm && yarn build-cjs", 12 | "clear-dist": "rm -fr dist/*", 13 | "build-esm": "tsc -p tsconfig.json", 14 | "build-cjs": "tsc -p tsconfig-cjs.json", 15 | "format": "prettier --write \"src/**/*.ts\"", 16 | "predeploy": "eslint . --max-warnings=0", 17 | "prepare": "husky install ./.husky && chmod ug+x .husky/* && chmod ug+x .git/hooks/*" 18 | }, 19 | "dependencies": { 20 | "@solana/web3.js": "1.91.1", 21 | "axios": "^1.6.8", 22 | "bs58": "^5.0.0", 23 | "lodash": "^4.17.21" 24 | }, 25 | "devDependencies": { 26 | "@trivago/prettier-plugin-sort-imports": "^4.2.0", 27 | "@types/lodash": "^4.14.196", 28 | "@typescript-eslint/eslint-plugin": "^6.2.0", 29 | "@typescript-eslint/parser": "^6.2.0", 30 | "eslint": "^8.45.0", 31 | "eslint-config-prettier": "^8.9.0", 32 | "husky": "^8.0.1", 33 | "prettier": "^3.0.0", 34 | "prettier-eslint": "^15.0.1", 35 | "prettier-eslint-cli": "^7.1.0", 36 | "rollup": "^4.3.0", 37 | "rollup-plugin-dts": "^6.1.0", 38 | "typescript": "^4.6.3" 39 | }, 40 | "repository": { 41 | "type": "git", 42 | "url": "git+https://github.com/sablevsky/solana-txn-executor.git" 43 | }, 44 | "keywords": [ 45 | "solana", 46 | "transactions", 47 | "web3" 48 | ], 49 | "author": "Vladislav Sablevsky ", 50 | "license": "MIT", 51 | "bugs": { 52 | "url": "https://github.com/sablevsky/solana-txn-executor/issues" 53 | }, 54 | "homepage": "https://github.com/sablevsky/solana-txn-executor#readme" 55 | } 56 | -------------------------------------------------------------------------------- /src/base/send.ts: -------------------------------------------------------------------------------- 1 | import { wait } from '../utils' 2 | import { 3 | Connection, 4 | SendOptions, 5 | SendTransactionError, 6 | VersionedTransaction, 7 | } from '@solana/web3.js' 8 | 9 | /** 10 | * Used to resend transactions repeatedly at a specified interval 11 | * Throws SendTransactionError if something goes wrong 12 | */ 13 | type ResendTransactionWithIntervalParams = { 14 | transaction: VersionedTransaction 15 | connection: Connection 16 | /** 17 | * Required because it is the only way to stop the loop if there were no errors 18 | */ 19 | abortSignal: AbortSignal 20 | /** 21 | * Resend interval in seconds 22 | */ 23 | resendInterval: number 24 | sendOptions?: SendOptions 25 | } 26 | export async function resendTransactionWithInterval({ 27 | transaction, 28 | resendInterval, 29 | connection, 30 | abortSignal, 31 | sendOptions, 32 | }: ResendTransactionWithIntervalParams): Promise { 33 | while (!abortSignal.aborted) { 34 | await wait(resendInterval * 1000) 35 | try { 36 | await connection.sendTransaction(transaction, sendOptions) 37 | } catch (error) { 38 | throw new SendTransactionError('ResendTransactionError') 39 | } 40 | } 41 | } 42 | 43 | /** 44 | * Send transaction with resend functionality 45 | * Throws SendTransactionError if something goes wrong 46 | */ 47 | type SendTransactionWithResendIntervalParams = { 48 | transaction: VersionedTransaction 49 | connection: Connection 50 | sendOptions?: SendOptions 51 | /** 52 | * Resend params 53 | * If undefined send transaction only once 54 | */ 55 | resendOptions?: { 56 | /** 57 | * Required because it is the only way to stop the resend loop 58 | */ 59 | abortSignal: AbortSignal 60 | /** 61 | * Resend transactions interval in seconds 62 | */ 63 | interval: number 64 | } 65 | } 66 | export async function sendTransactionWithResendInterval({ 67 | transaction, 68 | connection, 69 | sendOptions, 70 | resendOptions, 71 | }: SendTransactionWithResendIntervalParams): Promise { 72 | const signature = await connection.sendTransaction(transaction, sendOptions) 73 | 74 | //? Prevent using resendTransactionWithInterval if resendOptions is undefined 75 | if (resendOptions) { 76 | resendTransactionWithInterval({ 77 | transaction, 78 | connection, 79 | abortSignal: resendOptions.abortSignal, 80 | sendOptions, 81 | resendInterval: resendOptions.interval, 82 | }) 83 | } 84 | 85 | return signature 86 | } 87 | -------------------------------------------------------------------------------- /src/TxnExecutor/functions/sendTransactions.ts: -------------------------------------------------------------------------------- 1 | import { sendTransactionWithResendInterval } from '../../base' 2 | import { wait } from '../../utils' 3 | import { ExecutorOptionsBase } from '../types' 4 | import { Connection, SendOptions, VersionedTransaction } from '@solana/web3.js' 5 | import { uniqueId } from 'lodash' 6 | 7 | export type SendTransactions = (params: { 8 | transactions: VersionedTransaction[] 9 | connection: Connection 10 | minContextSlot: number 11 | options: ExecutorOptionsBase 12 | }) => Promise<{ signature: string; resendAbortController?: AbortController }[]> 13 | 14 | export const sendTransactions: SendTransactions = async ({ 15 | transactions, 16 | connection, 17 | options, 18 | minContextSlot, 19 | }) => { 20 | return await (options.debug?.preventSending ? sendTransactionsMock : sendTransactionsParallel)({ 21 | transactions, 22 | connection, 23 | minContextSlot, 24 | options, 25 | }) 26 | } 27 | 28 | const sendTransactionsParallel: SendTransactions = async ({ 29 | transactions, 30 | connection, 31 | minContextSlot, 32 | options, 33 | }) => { 34 | const { sendOptions } = options 35 | 36 | const resendOptions = 37 | sendOptions.resendInterval && sendOptions.resendTimeout 38 | ? { 39 | timeout: sendOptions.resendTimeout, 40 | interval: sendOptions.resendInterval, 41 | } 42 | : undefined 43 | 44 | const sendTxnOptions: SendOptions = { 45 | maxRetries: sendOptions.maxRetries, 46 | minContextSlot, 47 | preflightCommitment: sendOptions.preflightCommitment, 48 | skipPreflight: sendOptions.skipPreflight, 49 | } 50 | 51 | const signaturesAndAbortContollers = await Promise.all( 52 | transactions.map(async (txn) => { 53 | const resendAbortController = new AbortController() 54 | 55 | if (resendOptions) { 56 | //? Use promise because setTimeout are executed in the main loop, outside the body of code that originated them. 57 | wait(resendOptions.timeout * 1000).then(() => { 58 | if (!resendAbortController.signal.aborted) { 59 | resendAbortController.abort() 60 | } 61 | }) 62 | } 63 | 64 | const signature = await sendTransactionWithResendInterval({ 65 | transaction: txn, 66 | connection, 67 | resendOptions: resendOptions 68 | ? { 69 | abortSignal: resendAbortController.signal, 70 | interval: resendOptions.interval, 71 | } 72 | : undefined, 73 | sendOptions: sendTxnOptions, 74 | }) 75 | 76 | return { signature, resendAbortController: resendOptions ? resendAbortController : undefined } 77 | }), 78 | ) 79 | return signaturesAndAbortContollers 80 | } 81 | 82 | const sendTransactionsMock: SendTransactions = async ({ transactions }) => { 83 | return await Promise.resolve( 84 | transactions.map(() => ({ 85 | signature: uniqueId('mockTxnSignature_'), 86 | resendAbortController: new AbortController(), 87 | })), 88 | ) 89 | } 90 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | # Execute Husky hooks 3 | . "$(dirname -- "$0")/_/husky.sh" 4 | 5 | yarn format 6 | 7 | lint_output=$(yarn eslint . 2>&1) 8 | 9 | # Print the contents of lint_output for debugging 10 | echo "lint_output: >>>$lint_output<<<" 11 | 12 | # Check if there are any lint warnings or errors 13 | if echo "$lint_output" | grep -q "warning\|error"; then 14 | # Print the lint warnings and errors 15 | echo " 16 | 🎨 Your code is almost perfect! Just a few brushstrokes needed. 🎨 17 | 18 | ██╗██╗██████╗░██████╗░░█████╗░░░░  ██╗░░░██╗░█████╗░██╗░░░██╗██╗██████╗░███████╗ 19 | ╚█║╚█║██╔══██╗██╔══██╗██╔══██╗░░░  ╚██╗░██╔╝██╔══██╗██║░░░██║╚█║██╔══██╗██╔════╝ 20 | ░╚╝░╚╝██████╦╝██████╔╝██║░░██║░░░  ░╚████╔╝░██║░░██║██║░░░██║░╚╝██████╔╝█████╗░░ 21 | ░░░░░░██╔══██╗██╔══██╗██║░░██║██╗  ░░╚██╔╝░░██║░░██║██║░░░██║░░░██╔══██╗██╔══╝░░ 22 | ░░░░░░██████╦╝██║░░██║╚█████╔╝╚█║  ░░░██║░░░╚█████╔╝╚██████╔╝░░░██║░░██║███████╗ 23 | ░░░░░░╚═════╝░╚═╝░░╚═╝░╚════╝░░╚╝  ░░░╚═╝░░░░╚════╝░░╚═════╝░░░░╚═╝░░╚═╝╚══════╝ 24 | 25 | ░█████╗░███████╗██████╗░████████╗░█████╗░██╗███╗░░██╗██╗░░░░░██╗░░░██╗ 26 | ██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔══██╗██║████╗░██║██║░░░░░╚██╗░██╔╝ 27 | ██║░░╚═╝█████╗░░██████╔╝░░░██║░░░███████║██║██╔██╗██║██║░░░░░░╚████╔╝░ 28 | ██║░░██╗██╔══╝░░██╔══██╗░░░██║░░░██╔══██║██║██║╚████║██║░░░░░░░╚██╔╝░░ 29 | ╚█████╔╝███████╗██║░░██║░░░██║░░░██║░░██║██║██║░╚███║███████╗░░░██║░░░ 30 | ░╚════╝░╚══════╝╚═╝░░╚═╝░░░╚═╝░░░╚═╝░░╚═╝╚═╝╚═╝░░╚══╝╚══════╝░░░╚═╝░░░ 31 | 32 | ░██████╗░██████╗░███████╗░█████╗░████████╗░░░  ██████╗░██╗░░░██╗████████╗  ██╗░░░██╗░█████╗░██╗░░░██╗██████╗░ 33 | ██╔════╝░██╔══██╗██╔════╝██╔══██╗╚══██╔══╝░░░  ██╔══██╗██║░░░██║╚══██╔══╝  ╚██╗░██╔╝██╔══██╗██║░░░██║██╔══██╗ 34 | ██║░░██╗░██████╔╝█████╗░░███████║░░░██║░░░░░░  ██████╦╝██║░░░██║░░░██║░░░  ░╚████╔╝░██║░░██║██║░░░██║██████╔╝ 35 | ██║░░╚██╗██╔══██╗██╔══╝░░██╔══██║░░░██║░░░██╗  ██╔══██╗██║░░░██║░░░██║░░░  ░░╚██╔╝░░██║░░██║██║░░░██║██╔══██╗ 36 | ╚██████╔╝██║░░██║███████╗██║░░██║░░░██║░░░╚█║  ██████╦╝╚██████╔╝░░░██║░░░  ░░░██║░░░╚█████╔╝╚██████╔╝██║░░██║ 37 | ░╚═════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝░░░╚═╝░░░░╚╝  ╚═════╝░░╚═════╝░░░░╚═╝░░░  ░░░╚═╝░░░░╚════╝░░╚═════╝░╚═╝░░╚═╝ 38 | 39 | ░██████╗██╗░░██╗██╗████████╗  ░██╗░░░░░░░██╗██╗██╗░░░░░██╗░░░░░  ███╗░░██╗░█████╗░████████╗ 40 | ██╔════╝██║░░██║██║╚══██╔══╝  ░██║░░██╗░░██║██║██║░░░░░██║░░░░░  ████╗░██║██╔══██╗╚══██╔══╝ 41 | ╚█████╗░███████║██║░░░██║░░░  ░╚██╗████╗██╔╝██║██║░░░░░██║░░░░░  ██╔██╗██║██║░░██║░░░██║░░░ 42 | ░╚═══██╗██╔══██║██║░░░██║░░░  ░░████╔═████║░██║██║░░░░░██║░░░░░  ██║╚████║██║░░██║░░░██║░░░ 43 | ██████╔╝██║░░██║██║░░░██║░░░  ░░╚██╔╝░╚██╔╝░██║███████╗███████╗  ██║░╚███║╚█████╔╝░░░██║░░░ 44 | ╚═════╝░╚═╝░░╚═╝╚═╝░░░╚═╝░░░  ░░░╚═╝░░░╚═╝░░╚═╝╚══════╝╚══════╝  ╚═╝░░╚══╝░╚════╝░░░░╚═╝░░░ 45 | 46 | ██████╗░███████╗  ██████╗░███████╗██████╗░██╗░░░░░░█████╗░██╗░░░██╗███████╗██████╗░██╗██╗ 47 | ██╔══██╗██╔════╝  ██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗╚██╗░██╔╝██╔════╝██╔══██╗╚█║╚█║ 48 | ██████╦╝█████╗░░  ██║░░██║█████╗░░██████╔╝██║░░░░░██║░░██║░╚████╔╝░█████╗░░██║░░██║░╚╝░╚╝ 49 | ██╔══██╗██╔══╝░░  ██║░░██║██╔══╝░░██╔═══╝░██║░░░░░██║░░██║░░╚██╔╝░░██╔══╝░░██║░░██║░░░░░░ 50 | ██████╦╝███████╗  ██████╔╝███████╗██║░░░░░███████╗╚█████╔╝░░░██║░░░███████╗██████╔╝░░░░░░ 51 | ╚═════╝░╚══════╝  ╚═════╝░╚══════╝╚═╝░░░░░╚══════╝░╚════╝░░░░╚═╝░░░╚══════╝╚═════╝░░░░░░░" 52 | echo "$lint_output" 53 | else 54 | # No lint warnings or errors found 55 | echo "🎉 Your code is a work of art! No lint warnings found." 56 | fi -------------------------------------------------------------------------------- /src/TxnExecutor/functions/confirmTransactions.ts: -------------------------------------------------------------------------------- 1 | import { confirmTransactionByPollingSignatureStatus } from '../../base' 2 | import { wait } from '../../utils' 3 | import { ConfirmTransactionErrorReason, ExecutorOptionsBase } from '../types' 4 | import { Connection } from '@solana/web3.js' 5 | 6 | export type ConfirmTransactionsProps = { 7 | signatures: string[] 8 | resendAbortControllerBySignature: Map 9 | connection: Connection 10 | options: ExecutorOptionsBase 11 | } 12 | 13 | export type ConfirmTransactionsResult = { 14 | confirmed: string[] 15 | failed: { signature: string; reason: ConfirmTransactionErrorReason }[] 16 | } 17 | 18 | export const confirmTransactions = async ({ 19 | signatures, 20 | resendAbortControllerBySignature, 21 | connection, 22 | options, 23 | }: ConfirmTransactionsProps) => { 24 | const results = await Promise.allSettled( 25 | signatures.map(async (signature) => { 26 | const abortConfirmationController = new AbortController() 27 | try { 28 | await confirmSingleTransaction({ 29 | signature, 30 | connection, 31 | options, 32 | abortConfirmationController, 33 | }) 34 | } finally { 35 | const resendTransactionAbortController = resendAbortControllerBySignature?.get(signature) 36 | resendTransactionAbortController?.abort() 37 | abortConfirmationController.abort() 38 | } 39 | }), 40 | ) 41 | 42 | return results.reduce( 43 | (acc: ConfirmTransactionsResult, result, idx) => { 44 | const signature = signatures[idx] 45 | 46 | if (result.status === 'rejected') { 47 | const { reason } = result 48 | 49 | if (reason instanceof Error) { 50 | const errorName = getConfirmationErrorReason(reason) 51 | acc.failed.push({ signature, reason: errorName }) 52 | } else { 53 | acc.failed.push({ signature, reason: ConfirmTransactionErrorReason.ConfirmationFailed }) 54 | } 55 | 56 | return acc 57 | } 58 | 59 | acc.confirmed.push(signature) 60 | return acc 61 | }, 62 | { 63 | confirmed: [], 64 | failed: [], 65 | }, 66 | ) 67 | } 68 | 69 | type ConfirmTransactionProps = { 70 | signature: string 71 | connection: Connection 72 | options: ExecutorOptionsBase 73 | abortConfirmationController: AbortController 74 | } 75 | const confirmSingleTransaction = async ({ 76 | signature, 77 | connection, 78 | options, 79 | abortConfirmationController, 80 | }: ConfirmTransactionProps) => { 81 | const { confirmationTimeout, pollingSignatureInterval } = options.confirmOptions 82 | 83 | //? Use promise because setTimeout are executed in the main loop, outside the body of code that originated them. 84 | //? It is impossible to handle an error using setTimeout 85 | const abortOnTimeout = async (timeout: number) => { 86 | await wait(timeout * 1000) 87 | if (!abortConfirmationController.signal.aborted) { 88 | abortConfirmationController.abort() 89 | throw new Error(ConfirmTransactionErrorReason.TimeoutError) 90 | } 91 | } 92 | 93 | const confirmTransactionPromise = confirmTransactionByPollingSignatureStatus({ 94 | signature, 95 | connection, 96 | abortSignal: abortConfirmationController.signal, 97 | refetchInterval: pollingSignatureInterval ?? 2, 98 | }) 99 | 100 | await (confirmationTimeout 101 | ? Promise.race([confirmTransactionPromise, abortOnTimeout(confirmationTimeout)]) 102 | : confirmTransactionPromise) 103 | } 104 | 105 | const getConfirmationErrorReason = (reason: Error) => { 106 | const message = reason.message 107 | return ( 108 | Object.values(ConfirmTransactionErrorReason).find((error) => error === message) ?? 109 | ConfirmTransactionErrorReason.ConfirmationFailed 110 | ) 111 | } 112 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > IMPORTANT! The documentation is not up to date. We use this toolkit for banx.gg. I'm contributing very active and don't have time to update the documentation. I hope you understand. It's better to look into the code itself. 2 | 3 | # solana-transactions-executor 4 | > A small solution to operate solana transactions: create, sign, send, chunk, support ledger etc. 5 | 6 | ```bash 7 | yarn add solana-transactions-executor # npm install solana-transactions-executor or pnpm add solana-transactions-executor 8 | ``` 9 | 10 | ## 11 | This package is designed to be used on the frontend of your React web3 application to simplify complex transactional interactions. It assumes that you are already using [@solana/web3.js](https://solana-labs.github.io/solana-web3.js/) and [@solana/wallet-adapter-react](https://github.com/solana-labs/wallet-adapter) 12 | 13 | 14 | ## Usage example 15 | ```typescript 16 | const { connection } = useConnection() 17 | const wallet = useWallet() 18 | const isLedger = false 19 | 20 | const txnsResults = await new TxnExecutor( 21 | makeBorrowAction, 22 | { wallet, connection }, 23 | { signAllChunks: isLedger ? 1 : 40, rejectQueueOnFirstPfError: false }, 24 | ) 25 | .addTxnParams(txnParams) 26 | .on('pfSuccessEach', (results) => { 27 | //? Some action if the transction is successfull. Triggered after each successfull preflight 28 | }) 29 | .on('pfSuccessAll', (results) => { 30 | //? Some action if all transactions are successfull. Triggers after all successfull preflights 31 | }) 32 | .on('pfError', (error) => { 33 | //? Some action on a failed transaction. Triggers for each transaction error 34 | }) 35 | .execute() 36 | 37 | const makeBorrowAction: MakeBorrowAction = async (ixnParams, walletAndConnection) => { 38 | const { instructions, signers, additionalResult } = await getIxnsAndSignersByBorrowType({ 39 | ixnParams, 40 | type: borrowType, 41 | walletAndConnection, 42 | }) 43 | 44 | return { 45 | instructions, 46 | signers, 47 | additionalResult, 48 | lookupTables: [new web3.PublicKey(LOOKUP_TABLE)], 49 | } 50 | } 51 | ``` 52 | 53 | ## Execution process 54 | * Create new instance of `TxnExecutor` 55 | * Add params for your transaction(s) 56 | * Add event handlers if needed 57 | * Execute transaction(s) 58 | ### Contructor params: 59 | * `makeActionFn: MakeActionFn` - function that accepts params `` to build your transaction results `` 60 | * `walletAndConnection: WalletAndConnection` - Wallet and Connection objects: `{wallet, connection}` 61 | * `options?: Partial` - Additional contructor options 62 | 63 | Additional contructor options: 64 | ```typescript 65 | export type ExecutorOptions = { 66 | commitment: Commitment 67 | signAllChunks: number //? Specify how many trasactions you want to sign per chunk using signAllTransactions method (use 1 for ledger because it doesn't support signAllTransactions method) 68 | skipPreflight: boolean //? if you want to skipPreflight on sendTransaction 69 | preflightCommitment: Commitment 70 | rejectQueueOnFirstPfError: boolean //? Stop sending other txns after first preflight error. Mostly relevant for the ledger 71 | chunkCallOfActionFn: boolean //? If true -- call makeActionFn for each chunk (between wallet approve). If false -- call makeActionFn for all txnsParams at once 72 | } 73 | 74 | ``` 75 | 76 | ### Transaction(s) params 77 | To pass parameters to `MakeActionFn` to create a transaction, use the `addTxnParam` or `addTxnParams` methods. You may chain `addTxnParam` calls or pass txn params via array into `addTxnParams`. The number of sent transactions will depend on the number of parameters `TParams`. 78 | 79 | ### Event hanlders 80 | * `beforeFirstApprove: () => void` - Triggers before first chunk approve 81 | * `beforeApproveEveryChunk: () => void` - Triggers after beforeFirstApprove and before each chunk approve 82 | * `pfSuccessAll: (result: SendTxnsResult) => void` - Triggers if all chunks were successfully sent 83 | * `pfSuccessSome: (result: SendTxnsResult) => void` - Triggers if at least one chunk was successfully sent 84 | * `pfSuccessEach: (result: SendTxnsResult) => void` - Triggers after successfull send of each chunk 85 | * `pfError: (error: TxnError) => void` - Triggers on any error 86 | 87 | -------------------------------------------------------------------------------- /src/base/transaction.ts: -------------------------------------------------------------------------------- 1 | import { TransactionError } from './errors' 2 | import { getLookupTableAccount } from './lookupTables' 3 | import { 4 | ComputeBudgetProgram, 5 | Connection, 6 | PublicKey, 7 | Signer, 8 | SimulatedTransactionAccountInfo, 9 | TransactionInstruction, 10 | TransactionMessage, 11 | VersionedTransaction, 12 | } from '@solana/web3.js' 13 | import { chain, concat, flatMap, map } from 'lodash' 14 | 15 | /** 16 | * Data needed to create a transaction 17 | * Consists of params (that used to create TxnData), 18 | * instructions, signers (optional), 19 | * lookup tables (optional) 20 | */ 21 | export type CreateTxnData = { 22 | params: Params 23 | instructions: TransactionInstruction[] 24 | signers?: Signer[] 25 | accounts?: PublicKey[] 26 | lookupTables?: PublicKey[] 27 | } 28 | 29 | export type CreateTransactionParams = { 30 | createTxnData: CreateTxnData 31 | blockhash: string 32 | payerKey: PublicKey 33 | connection: Connection 34 | } 35 | export async function createTransaction({ 36 | createTxnData, 37 | blockhash, 38 | payerKey, 39 | connection, 40 | }: CreateTransactionParams): Promise { 41 | const { instructions, signers, lookupTables } = createTxnData 42 | 43 | const lookupTableAccountsResponses = await Promise.all( 44 | (lookupTables ?? []).map((lt) => getLookupTableAccount(lt, connection)), 45 | ) 46 | 47 | const lookupTableAccounts = chain(lookupTableAccountsResponses) 48 | .map(({ value }) => value) 49 | .compact() 50 | .value() 51 | 52 | const transaction = new VersionedTransaction( 53 | new TransactionMessage({ 54 | payerKey, 55 | recentBlockhash: blockhash, 56 | instructions: instructions, 57 | }).compileToV0Message(lookupTableAccounts), 58 | ) 59 | 60 | if (signers?.length) { 61 | transaction.sign(signers) 62 | } 63 | 64 | return transaction 65 | } 66 | 67 | type SimulateTransactionParams = CreateTxnData & { 68 | connection: Connection 69 | payerKey: PublicKey 70 | } 71 | export type SimulatedAccountInfoByPubkey = Record 72 | type SimulateTransactionResult = { 73 | accountInfoByPubkey?: SimulatedAccountInfoByPubkey 74 | unitsConsumed: number 75 | } 76 | export async function simulateTransaction({ 77 | connection, 78 | instructions, 79 | lookupTables, 80 | payerKey, 81 | accounts, 82 | }: SimulateTransactionParams): Promise { 83 | const SIMULATION_CU_LIMIT = 1_400_000 84 | const FALLBACK_COMPUTE_UNITS_AMOUNT = 400_000 85 | 86 | const simulationInstructions = [ 87 | ComputeBudgetProgram.setComputeUnitLimit({ units: SIMULATION_CU_LIMIT }), 88 | getComputeUnitPriceInstruction(1), //? to match ixns amount with the real txn 89 | ...instructions, 90 | ] 91 | 92 | const lookupTableAccountsResponses = await Promise.all( 93 | (lookupTables ?? []).map((lt) => getLookupTableAccount(lt, connection)), 94 | ) 95 | 96 | const lookupTableAccounts = chain(lookupTableAccountsResponses) 97 | .map(({ value }) => value) 98 | .compact() 99 | .value() 100 | 101 | const transaction = new VersionedTransaction( 102 | new TransactionMessage({ 103 | instructions: simulationInstructions, 104 | payerKey: payerKey, 105 | recentBlockhash: PublicKey.default.toString(), 106 | }).compileToV0Message(lookupTableAccounts), 107 | ) 108 | 109 | const { value: simulationValue } = await connection.simulateTransaction(transaction, { 110 | replaceRecentBlockhash: true, 111 | sigVerify: false, 112 | accounts: accounts 113 | ? { addresses: accounts?.map((acc) => acc.toBase58()), encoding: 'base64' } 114 | : undefined, 115 | }) 116 | 117 | if (simulationValue.err) { 118 | throw new TransactionError('Transaction simualation failed', simulationValue.logs) 119 | } 120 | 121 | const accountInfoByPubkey: SimulatedAccountInfoByPubkey | undefined = 122 | accounts && 123 | chain(accounts) 124 | .map((account, idx) => [account, simulationValue.accounts?.[idx] ?? null]) 125 | .fromPairs() 126 | .value() 127 | 128 | return { 129 | accountInfoByPubkey, 130 | unitsConsumed: simulationValue.unitsConsumed ?? FALLBACK_COMPUTE_UNITS_AMOUNT, 131 | } 132 | } 133 | 134 | export function getComputeUnitLimitInstruction(unitsConsumed: number): TransactionInstruction { 135 | //? Increase CU by 10% to have a small extra 136 | const CU_AMOUNT_INCREASE = 1.1 137 | 138 | return ComputeBudgetProgram.setComputeUnitLimit({ 139 | units: Math.round(unitsConsumed * CU_AMOUNT_INCREASE), 140 | }) 141 | } 142 | 143 | export function getComputeUnitPriceInstruction(priorityFee: number): TransactionInstruction { 144 | return ComputeBudgetProgram.setComputeUnitPrice({ 145 | microLamports: priorityFee, 146 | }) 147 | } 148 | 149 | export function extractAccountKeysFromInstructions( 150 | instructions: TransactionInstruction[], 151 | ): PublicKey[] { 152 | const accountsKeys = flatMap(instructions, (ixn) => map(ixn.keys, (key) => key.pubkey)) 153 | const programIds = map(instructions, (i) => i.programId) 154 | 155 | return concat(accountsKeys, programIds) 156 | } 157 | -------------------------------------------------------------------------------- /src/TxnExecutor/types.ts: -------------------------------------------------------------------------------- 1 | import { CreateTxnData, SimulatedAccountInfoByPubkey } from '../base' 2 | import { Commitment, Connection, PublicKey, VersionedTransaction } from '@solana/web3.js' 3 | 4 | /** 5 | * The wallet must contain a publicKey and support at least signTransaction method 6 | */ 7 | export type Wallet = { 8 | publicKey: PublicKey 9 | signTransaction: (transaction: VersionedTransaction) => Promise 10 | signAllTransactions: 11 | | ((transactions: VersionedTransaction[]) => Promise) 12 | | undefined 13 | } 14 | 15 | export type WalletAndConnection = { 16 | wallet: Wallet 17 | connection: Connection 18 | } 19 | 20 | export type TxnError = { 21 | logs?: Array 22 | } & Error 23 | 24 | export type GetPriorityFeeParams = { 25 | txnParams: Omit, 'params'> 26 | connection: Connection 27 | } 28 | export type GetPriorityFee = (params: GetPriorityFeeParams) => Promise 29 | 30 | export type ExecutorOptionsBase = { 31 | /** 32 | * Options for sending transactions 33 | */ 34 | sendOptions: { 35 | /** disable transaction verification step */ 36 | skipPreflight?: boolean 37 | /** preflight commitment level */ 38 | preflightCommitment?: Commitment 39 | /** Maximum number of times for the RPC node to retry sending the transaction to the leader. */ 40 | maxRetries?: number 41 | 42 | resendTimeout?: number 43 | resendInterval?: number 44 | } 45 | confirmOptions: { 46 | /** Transaction confirmation tracking forced termination timeout */ 47 | confirmationTimeout?: number 48 | 49 | pollingSignatureInterval: number 50 | } 51 | /** 52 | * async function that returns priority fee (microlamports) 53 | * If was not passed, the priority fee will be 0 54 | * Priority fee value is the concern of the class user. It is up to you to determine how it should be calculated 55 | * The function is called on EACH transaction creation. So, caching (if needed) needs to be implemented on your own 56 | */ 57 | transactionOptions: { 58 | getPriorityFee?: GetPriorityFee 59 | } 60 | /** 61 | * Amount of transactions passed to the signAllTransactions function 62 | * Default value: 10 63 | * Works only if signAllTransactions is supported! 64 | * Max amount of transactions processed in signAllTransactions is limited by wallet provider implementation 65 | * Use 1 for ledger of SquadsX 66 | */ 67 | chunkSize: number 68 | /** 69 | * Stop sending other txns(chunks) after first preflight error. Mostly relevant for small values of signAllChunkSize (E.g. ledger cases) 70 | * Default value: false 71 | */ 72 | abortOnFirstError: boolean 73 | /** 74 | * Parameters for debug 75 | */ 76 | debug: { 77 | /** 78 | * Prevent sending transactions via RPC 79 | * F.e. Can be used to test optimistics responses without sending transactions into blockchain 80 | * Default value: undefined 81 | */ 82 | preventSending?: boolean 83 | } 84 | } 85 | 86 | export type ExecutorOptions = Partial 87 | 88 | type SentTransactionResult = { 89 | signature: string 90 | accountInfoByPubkey?: SimulatedAccountInfoByPubkey 91 | params: Params 92 | } 93 | 94 | export type SentTransactionsResult = Array> 95 | 96 | export type ConfirmationFailedResult = SentTransactionResult & { 97 | reason: ConfirmTransactionErrorReason 98 | } 99 | 100 | export type ConfirmationFailedResults = Array> 101 | 102 | export type ConfirmedTransactionsResult = { 103 | confirmed: SentTransactionsResult 104 | failed: ConfirmationFailedResults 105 | } 106 | 107 | export enum ConfirmTransactionErrorReason { 108 | ConfirmationFailed = 'ConfirmationFailed', 109 | TimeoutError = 'TimeoutError', 110 | AbortError = 'AbortError', 111 | } 112 | 113 | /** 114 | * Supported event handlers 115 | */ 116 | export type EventHanlders = Partial<{ 117 | /** 118 | * Triggers before every chunk approve 119 | */ 120 | beforeChunkApprove: () => void 121 | /** 122 | * Triggers every time after each chunk is successfully sent (no errors on preflight) 123 | */ 124 | chunkSent: (txnsResults: SentTransactionsResult) => void 125 | /** 126 | * Triggers on every preflight error 127 | */ 128 | error: (txnError: TxnError) => void 129 | /** 130 | * Triggers if all chunks were successfully sent (no errors on preflight) 131 | * Triggers when all chunks were sent 132 | */ 133 | sentAll: (txnsResults: SentTransactionsResult) => void 134 | /** 135 | * Triggers if at least one chunk was successfully sent (no errors on preflight) 136 | * Triggers when all chunks were sent 137 | */ 138 | sentSome: (txnsResults: SentTransactionsResult) => void 139 | /** 140 | * Triggers on the result of each chunk confirmation. 141 | * Contains both confirmed and failed results. 142 | * Triggers when the result of all transactions confirmations in the chunk is known, 143 | * regardless of the success of the confirmation 144 | */ 145 | chunkConfirmed: ({ confirmed, failed }: ConfirmedTransactionsResult) => void 146 | /** 147 | * Triggers on the result of all chunks confirmation. 148 | * Contains both confirmed and failed results. 149 | * Will never execute if there is an error in the sending/preflight step 150 | */ 151 | confirmedAll: ({ confirmed, failed }: ConfirmedTransactionsResult) => void 152 | }> 153 | -------------------------------------------------------------------------------- /src/TxnExecutor/TxnExecutor.ts: -------------------------------------------------------------------------------- 1 | import { CreateTxnData } from '../base' 2 | import { GET_PRIORITY_FEE_PLACEHOLDER } from './constants' 3 | import { confirmTransactions, makeTransaction, signAndSendTransactions } from './functions' 4 | import { 5 | ConfirmationFailedResult, 6 | ConfirmedTransactionsResult, 7 | EventHanlders, 8 | ExecutorOptions, 9 | ExecutorOptionsBase, 10 | SentTransactionsResult, 11 | TxnError, 12 | WalletAndConnection, 13 | } from './types' 14 | import { didUserRejectTxnSigning } from './utils' 15 | import { chain, chunk, map, merge } from 'lodash' 16 | 17 | export const DEFAULT_EXECUTOR_OPTIONS: ExecutorOptionsBase = { 18 | confirmOptions: { 19 | confirmationTimeout: 60, 20 | pollingSignatureInterval: 2, 21 | }, 22 | transactionOptions: { 23 | getPriorityFee: undefined, 24 | }, 25 | sendOptions: { 26 | skipPreflight: undefined, 27 | maxRetries: undefined, 28 | preflightCommitment: undefined, 29 | resendInterval: undefined, 30 | resendTimeout: undefined, 31 | }, 32 | chunkSize: 10, 33 | abortOnFirstError: false, 34 | debug: { 35 | preventSending: undefined, 36 | }, 37 | } 38 | 39 | export class TxnExecutor { 40 | private txnsParams: ReadonlyArray> = [] 41 | private options: ExecutorOptionsBase = DEFAULT_EXECUTOR_OPTIONS 42 | private walletAndConnection: WalletAndConnection 43 | private eventHandlers: EventHanlders = {} 44 | constructor(walletAndConnection: WalletAndConnection, options?: ExecutorOptions) { 45 | this.walletAndConnection = walletAndConnection 46 | this.options = merge(this.options, options) 47 | } 48 | 49 | public addTxnData(param: Readonly>) { 50 | this.txnsParams = [...this.txnsParams, param] 51 | return this 52 | } 53 | 54 | public addTxnsData(params: ReadonlyArray>) { 55 | this.txnsParams = [...this.txnsParams, ...params] 56 | return this 57 | } 58 | 59 | public on>(type: K, handler: EventHanlders[K]) { 60 | this.eventHandlers = { 61 | ...this.eventHandlers, 62 | [type]: handler, 63 | } 64 | return this 65 | } 66 | 67 | private signAndSendTxnsResults: SentTransactionsResult = [] 68 | private confirmedTxnsResults: ConfirmedTransactionsResult = { 69 | confirmed: [], 70 | failed: [], 71 | } 72 | 73 | public async execute() { 74 | if (!this.txnsParams.length) { 75 | throw new Error('No transaction params provided') 76 | } 77 | 78 | const signAllSupported = !!this.walletAndConnection.wallet?.signAllTransactions 79 | const chunkSize = !signAllSupported || this.options.chunkSize === 1 ? 1 : this.options.chunkSize 80 | const txnsDataChunks = chunk(this.txnsParams, chunkSize) 81 | 82 | for (const chunk of txnsDataChunks) { 83 | await this.executeChunk(chunk) 84 | } 85 | 86 | if (this.signAndSendTxnsResults.length === txnsDataChunks.flat().length) { 87 | this.eventHandlers?.sentAll?.(this.signAndSendTxnsResults) 88 | } 89 | if (this.signAndSendTxnsResults.length) { 90 | this.eventHandlers?.sentSome?.(this.signAndSendTxnsResults) 91 | } 92 | 93 | return this.signAndSendTxnsResults 94 | } 95 | 96 | private async executeChunk(txnsParams: ReadonlyArray>) { 97 | const resendAbortControllerBySignature = new Map() 98 | 99 | try { 100 | const { 101 | value: { blockhash }, 102 | context: { slot: minContextSlot }, 103 | } = await this.walletAndConnection.connection.getLatestBlockhashAndContext( 104 | this.options.sendOptions.preflightCommitment, 105 | ) 106 | 107 | const transactionsAndAccounts = await Promise.all( 108 | txnsParams.map((txnParams) => 109 | makeTransaction({ 110 | createTxnData: txnParams, 111 | blockhash: blockhash, 112 | connection: this.walletAndConnection.connection, 113 | payerKey: this.walletAndConnection.wallet.publicKey, 114 | getPriorityFee: 115 | this.options.transactionOptions?.getPriorityFee ?? GET_PRIORITY_FEE_PLACEHOLDER, 116 | }), 117 | ), 118 | ) 119 | 120 | this.eventHandlers?.beforeChunkApprove?.() 121 | 122 | const signAndSendTransactionsResults = await signAndSendTransactions({ 123 | transactions: map(transactionsAndAccounts, ({ transaction }) => transaction), 124 | walletAndConnection: this.walletAndConnection, 125 | options: this.options, 126 | minContextSlot, 127 | }) 128 | 129 | //? setting abortController map 130 | signAndSendTransactionsResults.forEach(({ signature, resendAbortController }) => 131 | resendAbortControllerBySignature.set(signature, resendAbortController), 132 | ) 133 | 134 | const results: SentTransactionsResult = Array.from( 135 | resendAbortControllerBySignature, 136 | ).map(([signature], idx) => ({ 137 | signature, 138 | accountInfoByPubkey: transactionsAndAccounts?.[idx]?.accountInfoByPubkey, 139 | params: transactionsAndAccounts?.[idx]?.params, 140 | })) 141 | this.signAndSendTxnsResults.push(...results) 142 | 143 | this.eventHandlers?.chunkSent?.(results) 144 | 145 | //? Track the confirmation of transactions in chunks only if specific handlers exist 146 | if (this.eventHandlers.confirmedAll || this.eventHandlers.chunkConfirmed) { 147 | confirmTransactions({ 148 | signatures: Array.from(resendAbortControllerBySignature).map(([signature]) => signature), 149 | resendAbortControllerBySignature, 150 | connection: this.walletAndConnection.connection, 151 | options: this.options, 152 | }) 153 | .then(({ confirmed: confirmedSignatures, failed: confirmationFailedResults }) => { 154 | const confirmedResults = results.filter(({ signature }) => 155 | confirmedSignatures.includes(signature), 156 | ) 157 | this.confirmedTxnsResults.confirmed.push(...confirmedResults) 158 | 159 | const failedResults = chain(confirmationFailedResults) 160 | .map(({ reason, signature }) => { 161 | const result = results.find( 162 | ({ signature: resSignature }) => signature === resSignature, 163 | ) 164 | if (!result) return null 165 | const value: ConfirmationFailedResult = { 166 | reason, 167 | signature: result.signature, 168 | accountInfoByPubkey: result.accountInfoByPubkey, 169 | params: result.params, 170 | } 171 | return value 172 | }) 173 | .compact() 174 | .value() 175 | 176 | this.confirmedTxnsResults.failed.push(...failedResults) 177 | 178 | this.eventHandlers?.chunkConfirmed?.({ 179 | confirmed: confirmedResults, 180 | failed: failedResults, 181 | }) 182 | 183 | if ( 184 | this.confirmedTxnsResults.confirmed.length + 185 | this.confirmedTxnsResults.failed.length === 186 | this.txnsParams.length 187 | ) { 188 | this.eventHandlers?.confirmedAll?.({ 189 | confirmed: confirmedResults, 190 | failed: failedResults, 191 | }) 192 | } 193 | }) 194 | .finally(() => { 195 | //? Abort each resend 196 | resendAbortControllerBySignature.forEach((abortController) => { 197 | if (!abortController?.signal.aborted) { 198 | abortController?.abort() 199 | } 200 | }) 201 | }) 202 | } 203 | } catch (error) { 204 | this.eventHandlers?.error?.(error as TxnError) 205 | const userRejectedTxn = didUserRejectTxnSigning(error as TxnError) 206 | //? If chunk error -- abort each resend 207 | resendAbortControllerBySignature.forEach((abortController) => { 208 | if (!abortController?.signal.aborted) { 209 | abortController?.abort() 210 | } 211 | }) 212 | if (userRejectedTxn) return 213 | if (!userRejectedTxn && this.options.abortOnFirstError) return 214 | } 215 | } 216 | } 217 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@babel/code-frame@^7.22.13": 11 | version "7.22.13" 12 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" 13 | integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== 14 | dependencies: 15 | "@babel/highlight" "^7.22.13" 16 | chalk "^2.4.2" 17 | 18 | "@babel/generator@7.17.7": 19 | version "7.17.7" 20 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" 21 | integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== 22 | dependencies: 23 | "@babel/types" "^7.17.0" 24 | jsesc "^2.5.1" 25 | source-map "^0.5.0" 26 | 27 | "@babel/generator@^7.23.0": 28 | version "7.23.3" 29 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" 30 | integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== 31 | dependencies: 32 | "@babel/types" "^7.23.3" 33 | "@jridgewell/gen-mapping" "^0.3.2" 34 | "@jridgewell/trace-mapping" "^0.3.17" 35 | jsesc "^2.5.1" 36 | 37 | "@babel/helper-environment-visitor@^7.22.20": 38 | version "7.22.20" 39 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" 40 | integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== 41 | 42 | "@babel/helper-function-name@^7.23.0": 43 | version "7.23.0" 44 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" 45 | integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== 46 | dependencies: 47 | "@babel/template" "^7.22.15" 48 | "@babel/types" "^7.23.0" 49 | 50 | "@babel/helper-hoist-variables@^7.22.5": 51 | version "7.22.5" 52 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" 53 | integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== 54 | dependencies: 55 | "@babel/types" "^7.22.5" 56 | 57 | "@babel/helper-split-export-declaration@^7.22.6": 58 | version "7.22.6" 59 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" 60 | integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== 61 | dependencies: 62 | "@babel/types" "^7.22.5" 63 | 64 | "@babel/helper-string-parser@^7.22.5": 65 | version "7.22.5" 66 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" 67 | integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== 68 | 69 | "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.22.20": 70 | version "7.22.20" 71 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" 72 | integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== 73 | 74 | "@babel/highlight@^7.22.13": 75 | version "7.22.20" 76 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" 77 | integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== 78 | dependencies: 79 | "@babel/helper-validator-identifier" "^7.22.20" 80 | chalk "^2.4.2" 81 | js-tokens "^4.0.0" 82 | 83 | "@babel/parser@^7.20.5", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": 84 | version "7.23.3" 85 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" 86 | integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== 87 | 88 | "@babel/runtime@^7.17.2": 89 | version "7.23.2" 90 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" 91 | integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== 92 | dependencies: 93 | regenerator-runtime "^0.14.0" 94 | 95 | "@babel/runtime@^7.23.4": 96 | version "7.24.4" 97 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" 98 | integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== 99 | dependencies: 100 | regenerator-runtime "^0.14.0" 101 | 102 | "@babel/template@^7.22.15": 103 | version "7.22.15" 104 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" 105 | integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== 106 | dependencies: 107 | "@babel/code-frame" "^7.22.13" 108 | "@babel/parser" "^7.22.15" 109 | "@babel/types" "^7.22.15" 110 | 111 | "@babel/traverse@7.23.2": 112 | version "7.23.2" 113 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" 114 | integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== 115 | dependencies: 116 | "@babel/code-frame" "^7.22.13" 117 | "@babel/generator" "^7.23.0" 118 | "@babel/helper-environment-visitor" "^7.22.20" 119 | "@babel/helper-function-name" "^7.23.0" 120 | "@babel/helper-hoist-variables" "^7.22.5" 121 | "@babel/helper-split-export-declaration" "^7.22.6" 122 | "@babel/parser" "^7.23.0" 123 | "@babel/types" "^7.23.0" 124 | debug "^4.1.0" 125 | globals "^11.1.0" 126 | 127 | "@babel/types@7.17.0": 128 | version "7.17.0" 129 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" 130 | integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== 131 | dependencies: 132 | "@babel/helper-validator-identifier" "^7.16.7" 133 | to-fast-properties "^2.0.0" 134 | 135 | "@babel/types@^7.17.0", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3": 136 | version "7.23.3" 137 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" 138 | integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== 139 | dependencies: 140 | "@babel/helper-string-parser" "^7.22.5" 141 | "@babel/helper-validator-identifier" "^7.22.20" 142 | to-fast-properties "^2.0.0" 143 | 144 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 145 | version "4.4.0" 146 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 147 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 148 | dependencies: 149 | eslint-visitor-keys "^3.3.0" 150 | 151 | "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": 152 | version "4.10.0" 153 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" 154 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== 155 | 156 | "@eslint/eslintrc@^2.1.3": 157 | version "2.1.3" 158 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" 159 | integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== 160 | dependencies: 161 | ajv "^6.12.4" 162 | debug "^4.3.2" 163 | espree "^9.6.0" 164 | globals "^13.19.0" 165 | ignore "^5.2.0" 166 | import-fresh "^3.2.1" 167 | js-yaml "^4.1.0" 168 | minimatch "^3.1.2" 169 | strip-json-comments "^3.1.1" 170 | 171 | "@eslint/js@8.53.0": 172 | version "8.53.0" 173 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" 174 | integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== 175 | 176 | "@humanwhocodes/config-array@^0.11.13": 177 | version "0.11.13" 178 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" 179 | integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== 180 | dependencies: 181 | "@humanwhocodes/object-schema" "^2.0.1" 182 | debug "^4.1.1" 183 | minimatch "^3.0.5" 184 | 185 | "@humanwhocodes/module-importer@^1.0.1": 186 | version "1.0.1" 187 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 188 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 189 | 190 | "@humanwhocodes/object-schema@^2.0.1": 191 | version "2.0.1" 192 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" 193 | integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== 194 | 195 | "@jridgewell/gen-mapping@^0.3.2": 196 | version "0.3.3" 197 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 198 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 199 | dependencies: 200 | "@jridgewell/set-array" "^1.0.1" 201 | "@jridgewell/sourcemap-codec" "^1.4.10" 202 | "@jridgewell/trace-mapping" "^0.3.9" 203 | 204 | "@jridgewell/resolve-uri@^3.1.0": 205 | version "3.1.1" 206 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 207 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 208 | 209 | "@jridgewell/set-array@^1.0.1": 210 | version "1.1.2" 211 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 212 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 213 | 214 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": 215 | version "1.4.15" 216 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 217 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 218 | 219 | "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": 220 | version "0.3.20" 221 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" 222 | integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== 223 | dependencies: 224 | "@jridgewell/resolve-uri" "^3.1.0" 225 | "@jridgewell/sourcemap-codec" "^1.4.14" 226 | 227 | "@messageformat/core@^3.0.1": 228 | version "3.2.0" 229 | resolved "https://registry.yarnpkg.com/@messageformat/core/-/core-3.2.0.tgz#fcb1e530f4ae4ed61c9c7a0b49cc119a79468da1" 230 | integrity sha512-ppbb/7OYqg/t4WdFk8VAfZEV2sNUq3+7VeBAo5sKFhmF786sh6gB7fUeXa2qLTDIcTHS49HivTBN7QNOU5OFTg== 231 | dependencies: 232 | "@messageformat/date-skeleton" "^1.0.0" 233 | "@messageformat/number-skeleton" "^1.0.0" 234 | "@messageformat/parser" "^5.1.0" 235 | "@messageformat/runtime" "^3.0.1" 236 | make-plural "^7.0.0" 237 | safe-identifier "^0.4.1" 238 | 239 | "@messageformat/date-skeleton@^1.0.0": 240 | version "1.0.1" 241 | resolved "https://registry.yarnpkg.com/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz#980b8babe21a11433b6e1e8f6dc8c4cae4f5f56b" 242 | integrity sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg== 243 | 244 | "@messageformat/number-skeleton@^1.0.0": 245 | version "1.2.0" 246 | resolved "https://registry.yarnpkg.com/@messageformat/number-skeleton/-/number-skeleton-1.2.0.tgz#e7c245c41a1b2722bc59dad68f4d454f761bc9b4" 247 | integrity sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg== 248 | 249 | "@messageformat/parser@^5.1.0": 250 | version "5.1.0" 251 | resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.1.0.tgz#05e4851c782d633ad735791dd0a68ee65d2a7201" 252 | integrity sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ== 253 | dependencies: 254 | moo "^0.5.1" 255 | 256 | "@messageformat/runtime@^3.0.1": 257 | version "3.0.1" 258 | resolved "https://registry.yarnpkg.com/@messageformat/runtime/-/runtime-3.0.1.tgz#94d1f6c43265c28ef7aed98ecfcc0968c6c849ac" 259 | integrity sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg== 260 | dependencies: 261 | make-plural "^7.0.0" 262 | 263 | "@noble/curves@^1.2.0": 264 | version "1.2.0" 265 | resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" 266 | integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== 267 | dependencies: 268 | "@noble/hashes" "1.3.2" 269 | 270 | "@noble/hashes@1.3.2": 271 | version "1.3.2" 272 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" 273 | integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== 274 | 275 | "@noble/hashes@^1.3.3": 276 | version "1.4.0" 277 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" 278 | integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== 279 | 280 | "@nodelib/fs.scandir@2.1.5": 281 | version "2.1.5" 282 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 283 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 284 | dependencies: 285 | "@nodelib/fs.stat" "2.0.5" 286 | run-parallel "^1.1.9" 287 | 288 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 289 | version "2.0.5" 290 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 291 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 292 | 293 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 294 | version "1.2.8" 295 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 296 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 297 | dependencies: 298 | "@nodelib/fs.scandir" "2.1.5" 299 | fastq "^1.6.0" 300 | 301 | "@prettier/eslint@npm:prettier-eslint@^15.0.1", prettier-eslint@^15.0.1: 302 | version "15.0.1" 303 | resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-15.0.1.tgz#2543a43e9acec2a9767ad6458165ce81f353db9c" 304 | integrity sha512-mGOWVHixSvpZWARqSDXbdtTL54mMBxc5oQYQ6RAqy8jecuNJBgN3t9E5a81G66F8x8fsKNiR1HWaBV66MJDOpg== 305 | dependencies: 306 | "@types/eslint" "^8.4.2" 307 | "@types/prettier" "^2.6.0" 308 | "@typescript-eslint/parser" "^5.10.0" 309 | common-tags "^1.4.0" 310 | dlv "^1.1.0" 311 | eslint "^8.7.0" 312 | indent-string "^4.0.0" 313 | lodash.merge "^4.6.0" 314 | loglevel-colored-level-prefix "^1.0.0" 315 | prettier "^2.5.1" 316 | pretty-format "^23.0.1" 317 | require-relative "^0.8.7" 318 | typescript "^4.5.4" 319 | vue-eslint-parser "^8.0.1" 320 | 321 | "@rollup/rollup-android-arm-eabi@4.3.0": 322 | version "4.3.0" 323 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.3.0.tgz#8ad8a660b18f1a24ad4a272738a65ac4788a8811" 324 | integrity sha512-/4pns6BYi8MXdwnXM44yoGAcFYVHL/BYlB2q1HXZ6AzH++LaiEVWFpBWQ/glXhbMbv3E3o09igrHFbP/snhAvA== 325 | 326 | "@rollup/rollup-android-arm64@4.3.0": 327 | version "4.3.0" 328 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.3.0.tgz#17b0f412034d14668c8acc8b7cbd8b1c76279599" 329 | integrity sha512-nLO/JsL9idr416vzi3lHm3Xm+QZh4qHij8k3Er13kZr5YhL7/+kBAx84kDmPc7HMexLmwisjDCeDIKNFp8mDlQ== 330 | 331 | "@rollup/rollup-darwin-arm64@4.3.0": 332 | version "4.3.0" 333 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.3.0.tgz#80c4a4dd7b120906d4e655808fb9005784a8bf35" 334 | integrity sha512-dGhVBlllt4iHwTGy21IEoMOTN5wZoid19zEIxsdY29xcEiOEHqzDa7Sqrkh5OE7LKCowL61eFJXxYe/+pYa7ZQ== 335 | 336 | "@rollup/rollup-darwin-x64@4.3.0": 337 | version "4.3.0" 338 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.3.0.tgz#52ad0db40d9b5ae047dfc08e54e4b3f42feaef82" 339 | integrity sha512-h8wRfHeLEbU3NzaP1Oku7BYXCJQiTRr+8U0lklyOQXxXiEpHLL8tk1hFl+tezoRKLcPJD7joKaK74ASsqt3Ekg== 340 | 341 | "@rollup/rollup-linux-arm-gnueabihf@4.3.0": 342 | version "4.3.0" 343 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.3.0.tgz#2ad3d190af01d7fc8704e8e782c4a24006a9f21a" 344 | integrity sha512-wP4VgR/gfV18sylTuym3sxRTkAgUR2vh6YLeX/GEznk5jCYcYSlx585XlcUcl0c8UffIZlRJ09raWSX3JDb4GA== 345 | 346 | "@rollup/rollup-linux-arm64-gnu@4.3.0": 347 | version "4.3.0" 348 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.3.0.tgz#4f7ba42f779f06e93876755b7393c61676e2958a" 349 | integrity sha512-v/14JCYVkqRSJeQbxFx4oUkwVQQw6lFMN7bd4vuARBc3X2lmomkxBsc+BFiIDL/BK+CTx5AOh/k9XmqDnKWRVg== 350 | 351 | "@rollup/rollup-linux-arm64-musl@4.3.0": 352 | version "4.3.0" 353 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.3.0.tgz#64795a09dac02b4d779819509a793b93ba7e4c0d" 354 | integrity sha512-tNhfYqFH5OxtRzfkTOKdgFYlPSZnlDLNW4+leNEvQZhwTJxoTwsZAAhR97l3qVry/kkLyJPBK+Q8EAJLPinDIg== 355 | 356 | "@rollup/rollup-linux-x64-gnu@4.3.0": 357 | version "4.3.0" 358 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.3.0.tgz#00c1ff131ba16881eb1a0ad46b0aa10dcacb010e" 359 | integrity sha512-pw77m8QywdsoFdFOgmc8roF1inBI0rciqzO8ffRUgLoq7+ee9o5eFqtEcS6hHOOplgifAUUisP8cAnwl9nUYPw== 360 | 361 | "@rollup/rollup-linux-x64-musl@4.3.0": 362 | version "4.3.0" 363 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.3.0.tgz#89479dce5e5bf6850fbca92fa7f1637ddd70c9ef" 364 | integrity sha512-tJs7v2MnV2F8w6X1UpPHl/43OfxjUy9SuJ2ZPoxn79v9vYteChVYO/ueLHCpRMmyTUIVML3N9z4azl9ENH8Xxg== 365 | 366 | "@rollup/rollup-win32-arm64-msvc@4.3.0": 367 | version "4.3.0" 368 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.3.0.tgz#1a36aba17c7efe6d61e98b8049e70b40e33b1f45" 369 | integrity sha512-OKGxp6kATQdTyI2DF+e9s+hB3/QZB45b6e+dzcfW1SUqiF6CviWyevhmT4USsMEdP3mlpC9zxLz3Oh+WaTMOSw== 370 | 371 | "@rollup/rollup-win32-ia32-msvc@4.3.0": 372 | version "4.3.0" 373 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.3.0.tgz#a0b1f79afde51e390a7725b7c15ab4e0df780aea" 374 | integrity sha512-DDZ5AH68JJ2ClQFEA1aNnfA7Ybqyeh0644rGbrLOdNehTmzfICHiWSn0OprzYi9HAshTPQvlwrM+bi2kuaIOjQ== 375 | 376 | "@rollup/rollup-win32-x64-msvc@4.3.0": 377 | version "4.3.0" 378 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.3.0.tgz#0b9bcc159b93c911efb5a2c39ec5d70dd0a589dc" 379 | integrity sha512-dMvGV8p92GQ8jhNlGIKpyhVZPzJlT258pPrM5q2F8lKcc9Iv9BbfdnhX1OfinYWnb9ms5zLw6MlaMnqLfUkKnQ== 380 | 381 | "@solana/buffer-layout@^4.0.1": 382 | version "4.0.1" 383 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" 384 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== 385 | dependencies: 386 | buffer "~6.0.3" 387 | 388 | "@solana/web3.js@1.91.1": 389 | version "1.91.1" 390 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.91.1.tgz#d49d2f982b52070be3b987fd8d892fcbddd064b5" 391 | integrity sha512-cPgjZXm688oM9cULvJ8u2VH6Qp5rvptE1N1VODVxn2mAbpZsWrvWNPjmASkMYT/HzyrtqFkPvFdSHg8Xjt7aQA== 392 | dependencies: 393 | "@babel/runtime" "^7.23.4" 394 | "@noble/curves" "^1.2.0" 395 | "@noble/hashes" "^1.3.3" 396 | "@solana/buffer-layout" "^4.0.1" 397 | agentkeepalive "^4.5.0" 398 | bigint-buffer "^1.1.5" 399 | bn.js "^5.2.1" 400 | borsh "^0.7.0" 401 | bs58 "^4.0.1" 402 | buffer "6.0.3" 403 | fast-stable-stringify "^1.0.0" 404 | jayson "^4.1.0" 405 | node-fetch "^2.7.0" 406 | rpc-websockets "^7.5.1" 407 | superstruct "^0.14.2" 408 | 409 | "@trivago/prettier-plugin-sort-imports@^4.2.0": 410 | version "4.2.1" 411 | resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.1.tgz#a4f57df41a46803a75bd8e8ce371b29e78a27eb4" 412 | integrity sha512-iuy2MPVURGdxILTchHr15VAioItuYBejKfcTmQFlxIuqA7jeaT6ngr5aUIG6S6U096d6a6lJCgaOwlRrPLlOPg== 413 | dependencies: 414 | "@babel/generator" "7.17.7" 415 | "@babel/parser" "^7.20.5" 416 | "@babel/traverse" "7.23.2" 417 | "@babel/types" "7.17.0" 418 | javascript-natural-sort "0.7.1" 419 | lodash "^4.17.21" 420 | 421 | "@types/connect@^3.4.33": 422 | version "3.4.38" 423 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" 424 | integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== 425 | dependencies: 426 | "@types/node" "*" 427 | 428 | "@types/eslint@^8.4.2": 429 | version "8.44.7" 430 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.7.tgz#430b3cc96db70c81f405e6a08aebdb13869198f5" 431 | integrity sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ== 432 | dependencies: 433 | "@types/estree" "*" 434 | "@types/json-schema" "*" 435 | 436 | "@types/estree@*": 437 | version "1.0.5" 438 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" 439 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== 440 | 441 | "@types/json-schema@*", "@types/json-schema@^7.0.12": 442 | version "7.0.15" 443 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" 444 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 445 | 446 | "@types/lodash@^4.14.196": 447 | version "4.14.201" 448 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" 449 | integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== 450 | 451 | "@types/node@*": 452 | version "20.9.0" 453 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" 454 | integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== 455 | dependencies: 456 | undici-types "~5.26.4" 457 | 458 | "@types/node@^12.12.54": 459 | version "12.20.55" 460 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" 461 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 462 | 463 | "@types/prettier@^2.6.0": 464 | version "2.7.3" 465 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" 466 | integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== 467 | 468 | "@types/semver@^7.5.0": 469 | version "7.5.5" 470 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" 471 | integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== 472 | 473 | "@types/ws@^7.4.4": 474 | version "7.4.7" 475 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 476 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 477 | dependencies: 478 | "@types/node" "*" 479 | 480 | "@typescript-eslint/eslint-plugin@^6.2.0": 481 | version "6.10.0" 482 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz#cfe2bd34e26d2289212946b96ab19dcad64b661a" 483 | integrity sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg== 484 | dependencies: 485 | "@eslint-community/regexpp" "^4.5.1" 486 | "@typescript-eslint/scope-manager" "6.10.0" 487 | "@typescript-eslint/type-utils" "6.10.0" 488 | "@typescript-eslint/utils" "6.10.0" 489 | "@typescript-eslint/visitor-keys" "6.10.0" 490 | debug "^4.3.4" 491 | graphemer "^1.4.0" 492 | ignore "^5.2.4" 493 | natural-compare "^1.4.0" 494 | semver "^7.5.4" 495 | ts-api-utils "^1.0.1" 496 | 497 | "@typescript-eslint/parser@^5.10.0": 498 | version "5.62.0" 499 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" 500 | integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== 501 | dependencies: 502 | "@typescript-eslint/scope-manager" "5.62.0" 503 | "@typescript-eslint/types" "5.62.0" 504 | "@typescript-eslint/typescript-estree" "5.62.0" 505 | debug "^4.3.4" 506 | 507 | "@typescript-eslint/parser@^6.2.0": 508 | version "6.10.0" 509 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.10.0.tgz#578af79ae7273193b0b6b61a742a2bc8e02f875a" 510 | integrity sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog== 511 | dependencies: 512 | "@typescript-eslint/scope-manager" "6.10.0" 513 | "@typescript-eslint/types" "6.10.0" 514 | "@typescript-eslint/typescript-estree" "6.10.0" 515 | "@typescript-eslint/visitor-keys" "6.10.0" 516 | debug "^4.3.4" 517 | 518 | "@typescript-eslint/scope-manager@5.62.0": 519 | version "5.62.0" 520 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" 521 | integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== 522 | dependencies: 523 | "@typescript-eslint/types" "5.62.0" 524 | "@typescript-eslint/visitor-keys" "5.62.0" 525 | 526 | "@typescript-eslint/scope-manager@6.10.0": 527 | version "6.10.0" 528 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz#b0276118b13d16f72809e3cecc86a72c93708540" 529 | integrity sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg== 530 | dependencies: 531 | "@typescript-eslint/types" "6.10.0" 532 | "@typescript-eslint/visitor-keys" "6.10.0" 533 | 534 | "@typescript-eslint/type-utils@6.10.0": 535 | version "6.10.0" 536 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz#1007faede067c78bdbcef2e8abb31437e163e2e1" 537 | integrity sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg== 538 | dependencies: 539 | "@typescript-eslint/typescript-estree" "6.10.0" 540 | "@typescript-eslint/utils" "6.10.0" 541 | debug "^4.3.4" 542 | ts-api-utils "^1.0.1" 543 | 544 | "@typescript-eslint/types@5.62.0": 545 | version "5.62.0" 546 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" 547 | integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== 548 | 549 | "@typescript-eslint/types@6.10.0": 550 | version "6.10.0" 551 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.10.0.tgz#f4f0a84aeb2ac546f21a66c6e0da92420e921367" 552 | integrity sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg== 553 | 554 | "@typescript-eslint/typescript-estree@5.62.0": 555 | version "5.62.0" 556 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" 557 | integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== 558 | dependencies: 559 | "@typescript-eslint/types" "5.62.0" 560 | "@typescript-eslint/visitor-keys" "5.62.0" 561 | debug "^4.3.4" 562 | globby "^11.1.0" 563 | is-glob "^4.0.3" 564 | semver "^7.3.7" 565 | tsutils "^3.21.0" 566 | 567 | "@typescript-eslint/typescript-estree@6.10.0": 568 | version "6.10.0" 569 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz#667381eed6f723a1a8ad7590a31f312e31e07697" 570 | integrity sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg== 571 | dependencies: 572 | "@typescript-eslint/types" "6.10.0" 573 | "@typescript-eslint/visitor-keys" "6.10.0" 574 | debug "^4.3.4" 575 | globby "^11.1.0" 576 | is-glob "^4.0.3" 577 | semver "^7.5.4" 578 | ts-api-utils "^1.0.1" 579 | 580 | "@typescript-eslint/utils@6.10.0": 581 | version "6.10.0" 582 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.10.0.tgz#4d76062d94413c30e402c9b0df8c14aef8d77336" 583 | integrity sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg== 584 | dependencies: 585 | "@eslint-community/eslint-utils" "^4.4.0" 586 | "@types/json-schema" "^7.0.12" 587 | "@types/semver" "^7.5.0" 588 | "@typescript-eslint/scope-manager" "6.10.0" 589 | "@typescript-eslint/types" "6.10.0" 590 | "@typescript-eslint/typescript-estree" "6.10.0" 591 | semver "^7.5.4" 592 | 593 | "@typescript-eslint/visitor-keys@5.62.0": 594 | version "5.62.0" 595 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" 596 | integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== 597 | dependencies: 598 | "@typescript-eslint/types" "5.62.0" 599 | eslint-visitor-keys "^3.3.0" 600 | 601 | "@typescript-eslint/visitor-keys@6.10.0": 602 | version "6.10.0" 603 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz#b9eaf855a1ac7e95633ae1073af43d451e8f84e3" 604 | integrity sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg== 605 | dependencies: 606 | "@typescript-eslint/types" "6.10.0" 607 | eslint-visitor-keys "^3.4.1" 608 | 609 | "@ungap/structured-clone@^1.2.0": 610 | version "1.2.0" 611 | resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" 612 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 613 | 614 | JSONStream@^1.3.5: 615 | version "1.3.5" 616 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 617 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 618 | dependencies: 619 | jsonparse "^1.2.0" 620 | through ">=2.2.7 <3" 621 | 622 | acorn-jsx@^5.3.2: 623 | version "5.3.2" 624 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 625 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 626 | 627 | acorn@^8.9.0: 628 | version "8.11.2" 629 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" 630 | integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== 631 | 632 | agentkeepalive@^4.5.0: 633 | version "4.5.0" 634 | resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" 635 | integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== 636 | dependencies: 637 | humanize-ms "^1.2.1" 638 | 639 | ajv@^6.12.4: 640 | version "6.12.6" 641 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 642 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 643 | dependencies: 644 | fast-deep-equal "^3.1.1" 645 | fast-json-stable-stringify "^2.0.0" 646 | json-schema-traverse "^0.4.1" 647 | uri-js "^4.2.2" 648 | 649 | ansi-regex@^2.0.0: 650 | version "2.1.1" 651 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 652 | integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== 653 | 654 | ansi-regex@^3.0.0: 655 | version "3.0.1" 656 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" 657 | integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== 658 | 659 | ansi-regex@^4.1.0: 660 | version "4.1.1" 661 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" 662 | integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== 663 | 664 | ansi-regex@^5.0.1: 665 | version "5.0.1" 666 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 667 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 668 | 669 | ansi-styles@^2.2.1: 670 | version "2.2.1" 671 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 672 | integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== 673 | 674 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 675 | version "3.2.1" 676 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 677 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 678 | dependencies: 679 | color-convert "^1.9.0" 680 | 681 | ansi-styles@^4.1.0: 682 | version "4.3.0" 683 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 684 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 685 | dependencies: 686 | color-convert "^2.0.1" 687 | 688 | argparse@^2.0.1: 689 | version "2.0.1" 690 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 691 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 692 | 693 | array-union@^2.1.0: 694 | version "2.1.0" 695 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 696 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 697 | 698 | arrify@^2.0.1: 699 | version "2.0.1" 700 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" 701 | integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== 702 | 703 | asynckit@^0.4.0: 704 | version "0.4.0" 705 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 706 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 707 | 708 | axios@^1.6.8: 709 | version "1.6.8" 710 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" 711 | integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== 712 | dependencies: 713 | follow-redirects "^1.15.6" 714 | form-data "^4.0.0" 715 | proxy-from-env "^1.1.0" 716 | 717 | balanced-match@^1.0.0: 718 | version "1.0.2" 719 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 720 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 721 | 722 | base-x@^3.0.2: 723 | version "3.0.9" 724 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 725 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 726 | dependencies: 727 | safe-buffer "^5.0.1" 728 | 729 | base-x@^4.0.0: 730 | version "4.0.0" 731 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" 732 | integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== 733 | 734 | base64-js@^1.3.1: 735 | version "1.5.1" 736 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 737 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 738 | 739 | bigint-buffer@^1.1.5: 740 | version "1.1.5" 741 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" 742 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 743 | dependencies: 744 | bindings "^1.3.0" 745 | 746 | bindings@^1.3.0: 747 | version "1.5.0" 748 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 749 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 750 | dependencies: 751 | file-uri-to-path "1.0.0" 752 | 753 | bn.js@^5.2.0, bn.js@^5.2.1: 754 | version "5.2.1" 755 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" 756 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 757 | 758 | boolify@^1.0.1: 759 | version "1.0.1" 760 | resolved "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz#b5c09e17cacd113d11b7bb3ed384cc012994d86b" 761 | integrity sha512-ma2q0Tc760dW54CdOyJjhrg/a54317o1zYADQJFgperNGKIKgAUGIcKnuMiff8z57+yGlrGNEt4lPgZfCgTJgA== 762 | 763 | borsh@^0.7.0: 764 | version "0.7.0" 765 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" 766 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 767 | dependencies: 768 | bn.js "^5.2.0" 769 | bs58 "^4.0.0" 770 | text-encoding-utf-8 "^1.0.2" 771 | 772 | brace-expansion@^1.1.7: 773 | version "1.1.11" 774 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 775 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 776 | dependencies: 777 | balanced-match "^1.0.0" 778 | concat-map "0.0.1" 779 | 780 | braces@^3.0.2: 781 | version "3.0.2" 782 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 783 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 784 | dependencies: 785 | fill-range "^7.0.1" 786 | 787 | bs58@^4.0.0, bs58@^4.0.1: 788 | version "4.0.1" 789 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 790 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 791 | dependencies: 792 | base-x "^3.0.2" 793 | 794 | bs58@^5.0.0: 795 | version "5.0.0" 796 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" 797 | integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== 798 | dependencies: 799 | base-x "^4.0.0" 800 | 801 | buffer@6.0.3, buffer@~6.0.3: 802 | version "6.0.3" 803 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 804 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 805 | dependencies: 806 | base64-js "^1.3.1" 807 | ieee754 "^1.2.1" 808 | 809 | bufferutil@^4.0.1: 810 | version "4.0.8" 811 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" 812 | integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== 813 | dependencies: 814 | node-gyp-build "^4.3.0" 815 | 816 | callsites@^3.0.0: 817 | version "3.1.0" 818 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 819 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 820 | 821 | camelcase-keys@^7.0.2: 822 | version "7.0.2" 823 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252" 824 | integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg== 825 | dependencies: 826 | camelcase "^6.3.0" 827 | map-obj "^4.1.0" 828 | quick-lru "^5.1.1" 829 | type-fest "^1.2.1" 830 | 831 | camelcase@^5.0.0: 832 | version "5.3.1" 833 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 834 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 835 | 836 | camelcase@^6.3.0: 837 | version "6.3.0" 838 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 839 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 840 | 841 | chalk@^1.1.3: 842 | version "1.1.3" 843 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 844 | integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== 845 | dependencies: 846 | ansi-styles "^2.2.1" 847 | escape-string-regexp "^1.0.2" 848 | has-ansi "^2.0.0" 849 | strip-ansi "^3.0.0" 850 | supports-color "^2.0.0" 851 | 852 | chalk@^2.4.2: 853 | version "2.4.2" 854 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 855 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 856 | dependencies: 857 | ansi-styles "^3.2.1" 858 | escape-string-regexp "^1.0.5" 859 | supports-color "^5.3.0" 860 | 861 | chalk@^4.0.0, chalk@^4.1.2: 862 | version "4.1.2" 863 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 864 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 865 | dependencies: 866 | ansi-styles "^4.1.0" 867 | supports-color "^7.1.0" 868 | 869 | cliui@^5.0.0: 870 | version "5.0.0" 871 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 872 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 873 | dependencies: 874 | string-width "^3.1.0" 875 | strip-ansi "^5.2.0" 876 | wrap-ansi "^5.1.0" 877 | 878 | color-convert@^1.9.0: 879 | version "1.9.3" 880 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 881 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 882 | dependencies: 883 | color-name "1.1.3" 884 | 885 | color-convert@^2.0.1: 886 | version "2.0.1" 887 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 888 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 889 | dependencies: 890 | color-name "~1.1.4" 891 | 892 | color-name@1.1.3: 893 | version "1.1.3" 894 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 895 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 896 | 897 | color-name@~1.1.4: 898 | version "1.1.4" 899 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 900 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 901 | 902 | combined-stream@^1.0.8: 903 | version "1.0.8" 904 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 905 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 906 | dependencies: 907 | delayed-stream "~1.0.0" 908 | 909 | commander@^2.20.3: 910 | version "2.20.3" 911 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 912 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 913 | 914 | common-tags@^1.4.0, common-tags@^1.8.2: 915 | version "1.8.2" 916 | resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" 917 | integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== 918 | 919 | concat-map@0.0.1: 920 | version "0.0.1" 921 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 922 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 923 | 924 | core-js@^3.24.1: 925 | version "3.33.2" 926 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.2.tgz#312bbf6996a3a517c04c99b9909cdd27138d1ceb" 927 | integrity sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ== 928 | 929 | cross-spawn@^7.0.2: 930 | version "7.0.3" 931 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 932 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 933 | dependencies: 934 | path-key "^3.1.0" 935 | shebang-command "^2.0.0" 936 | which "^2.0.1" 937 | 938 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 939 | version "4.3.4" 940 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 941 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 942 | dependencies: 943 | ms "2.1.2" 944 | 945 | decamelize@^1.2.0: 946 | version "1.2.0" 947 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 948 | integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== 949 | 950 | deep-is@^0.1.3: 951 | version "0.1.4" 952 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 953 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 954 | 955 | delay@^5.0.0: 956 | version "5.0.0" 957 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 958 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 959 | 960 | delayed-stream@~1.0.0: 961 | version "1.0.0" 962 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 963 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 964 | 965 | dir-glob@^3.0.1: 966 | version "3.0.1" 967 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 968 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 969 | dependencies: 970 | path-type "^4.0.0" 971 | 972 | dlv@^1.1.0: 973 | version "1.1.3" 974 | resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" 975 | integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 976 | 977 | doctrine@^3.0.0: 978 | version "3.0.0" 979 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 980 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 981 | dependencies: 982 | esutils "^2.0.2" 983 | 984 | emoji-regex@^7.0.1: 985 | version "7.0.3" 986 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 987 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 988 | 989 | es6-promise@^4.0.3: 990 | version "4.2.8" 991 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 992 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 993 | 994 | es6-promisify@^5.0.0: 995 | version "5.0.0" 996 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 997 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 998 | dependencies: 999 | es6-promise "^4.0.3" 1000 | 1001 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1002 | version "1.0.5" 1003 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1004 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1005 | 1006 | escape-string-regexp@^4.0.0: 1007 | version "4.0.0" 1008 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 1009 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1010 | 1011 | eslint-config-prettier@^8.9.0: 1012 | version "8.10.0" 1013 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" 1014 | integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== 1015 | 1016 | eslint-scope@^7.0.0, eslint-scope@^7.2.2: 1017 | version "7.2.2" 1018 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" 1019 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 1020 | dependencies: 1021 | esrecurse "^4.3.0" 1022 | estraverse "^5.2.0" 1023 | 1024 | eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 1025 | version "3.4.3" 1026 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 1027 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 1028 | 1029 | eslint@^8.21.0, eslint@^8.45.0, eslint@^8.7.0: 1030 | version "8.53.0" 1031 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" 1032 | integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== 1033 | dependencies: 1034 | "@eslint-community/eslint-utils" "^4.2.0" 1035 | "@eslint-community/regexpp" "^4.6.1" 1036 | "@eslint/eslintrc" "^2.1.3" 1037 | "@eslint/js" "8.53.0" 1038 | "@humanwhocodes/config-array" "^0.11.13" 1039 | "@humanwhocodes/module-importer" "^1.0.1" 1040 | "@nodelib/fs.walk" "^1.2.8" 1041 | "@ungap/structured-clone" "^1.2.0" 1042 | ajv "^6.12.4" 1043 | chalk "^4.0.0" 1044 | cross-spawn "^7.0.2" 1045 | debug "^4.3.2" 1046 | doctrine "^3.0.0" 1047 | escape-string-regexp "^4.0.0" 1048 | eslint-scope "^7.2.2" 1049 | eslint-visitor-keys "^3.4.3" 1050 | espree "^9.6.1" 1051 | esquery "^1.4.2" 1052 | esutils "^2.0.2" 1053 | fast-deep-equal "^3.1.3" 1054 | file-entry-cache "^6.0.1" 1055 | find-up "^5.0.0" 1056 | glob-parent "^6.0.2" 1057 | globals "^13.19.0" 1058 | graphemer "^1.4.0" 1059 | ignore "^5.2.0" 1060 | imurmurhash "^0.1.4" 1061 | is-glob "^4.0.0" 1062 | is-path-inside "^3.0.3" 1063 | js-yaml "^4.1.0" 1064 | json-stable-stringify-without-jsonify "^1.0.1" 1065 | levn "^0.4.1" 1066 | lodash.merge "^4.6.2" 1067 | minimatch "^3.1.2" 1068 | natural-compare "^1.4.0" 1069 | optionator "^0.9.3" 1070 | strip-ansi "^6.0.1" 1071 | text-table "^0.2.0" 1072 | 1073 | espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: 1074 | version "9.6.1" 1075 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" 1076 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 1077 | dependencies: 1078 | acorn "^8.9.0" 1079 | acorn-jsx "^5.3.2" 1080 | eslint-visitor-keys "^3.4.1" 1081 | 1082 | esquery@^1.4.0, esquery@^1.4.2: 1083 | version "1.5.0" 1084 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 1085 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 1086 | dependencies: 1087 | estraverse "^5.1.0" 1088 | 1089 | esrecurse@^4.3.0: 1090 | version "4.3.0" 1091 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1092 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1093 | dependencies: 1094 | estraverse "^5.2.0" 1095 | 1096 | estraverse@^5.1.0, estraverse@^5.2.0: 1097 | version "5.3.0" 1098 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1099 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1100 | 1101 | esutils@^2.0.2: 1102 | version "2.0.3" 1103 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1104 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1105 | 1106 | eventemitter3@^4.0.7: 1107 | version "4.0.7" 1108 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 1109 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 1110 | 1111 | eyes@^0.1.8: 1112 | version "0.1.8" 1113 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 1114 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 1115 | 1116 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1117 | version "3.1.3" 1118 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1119 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1120 | 1121 | fast-glob@^3.2.9: 1122 | version "3.3.2" 1123 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" 1124 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 1125 | dependencies: 1126 | "@nodelib/fs.stat" "^2.0.2" 1127 | "@nodelib/fs.walk" "^1.2.3" 1128 | glob-parent "^5.1.2" 1129 | merge2 "^1.3.0" 1130 | micromatch "^4.0.4" 1131 | 1132 | fast-json-stable-stringify@^2.0.0: 1133 | version "2.1.0" 1134 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1135 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1136 | 1137 | fast-levenshtein@^2.0.6: 1138 | version "2.0.6" 1139 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1140 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1141 | 1142 | fast-stable-stringify@^1.0.0: 1143 | version "1.0.0" 1144 | resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" 1145 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 1146 | 1147 | fastq@^1.6.0: 1148 | version "1.15.0" 1149 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 1150 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 1151 | dependencies: 1152 | reusify "^1.0.4" 1153 | 1154 | file-entry-cache@^6.0.1: 1155 | version "6.0.1" 1156 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1157 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1158 | dependencies: 1159 | flat-cache "^3.0.4" 1160 | 1161 | file-uri-to-path@1.0.0: 1162 | version "1.0.0" 1163 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1164 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1165 | 1166 | fill-range@^7.0.1: 1167 | version "7.0.1" 1168 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1169 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1170 | dependencies: 1171 | to-regex-range "^5.0.1" 1172 | 1173 | find-up@^3.0.0: 1174 | version "3.0.0" 1175 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1176 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 1177 | dependencies: 1178 | locate-path "^3.0.0" 1179 | 1180 | find-up@^5.0.0: 1181 | version "5.0.0" 1182 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1183 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1184 | dependencies: 1185 | locate-path "^6.0.0" 1186 | path-exists "^4.0.0" 1187 | 1188 | flat-cache@^3.0.4: 1189 | version "3.1.1" 1190 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" 1191 | integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== 1192 | dependencies: 1193 | flatted "^3.2.9" 1194 | keyv "^4.5.3" 1195 | rimraf "^3.0.2" 1196 | 1197 | flatted@^3.2.9: 1198 | version "3.2.9" 1199 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" 1200 | integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== 1201 | 1202 | follow-redirects@^1.15.6: 1203 | version "1.15.6" 1204 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" 1205 | integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== 1206 | 1207 | form-data@^4.0.0: 1208 | version "4.0.0" 1209 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 1210 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 1211 | dependencies: 1212 | asynckit "^0.4.0" 1213 | combined-stream "^1.0.8" 1214 | mime-types "^2.1.12" 1215 | 1216 | fs.realpath@^1.0.0: 1217 | version "1.0.0" 1218 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1219 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1220 | 1221 | fsevents@~2.3.2: 1222 | version "2.3.3" 1223 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1224 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1225 | 1226 | get-caller-file@^2.0.1: 1227 | version "2.0.5" 1228 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1229 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1230 | 1231 | get-stdin@^8.0.0: 1232 | version "8.0.0" 1233 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" 1234 | integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== 1235 | 1236 | glob-parent@^5.1.2: 1237 | version "5.1.2" 1238 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1239 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1240 | dependencies: 1241 | is-glob "^4.0.1" 1242 | 1243 | glob-parent@^6.0.2: 1244 | version "6.0.2" 1245 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1246 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1247 | dependencies: 1248 | is-glob "^4.0.3" 1249 | 1250 | glob@^7.1.3, glob@^7.2.3: 1251 | version "7.2.3" 1252 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1253 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1254 | dependencies: 1255 | fs.realpath "^1.0.0" 1256 | inflight "^1.0.4" 1257 | inherits "2" 1258 | minimatch "^3.1.1" 1259 | once "^1.3.0" 1260 | path-is-absolute "^1.0.0" 1261 | 1262 | globals@^11.1.0: 1263 | version "11.12.0" 1264 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1265 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1266 | 1267 | globals@^13.19.0: 1268 | version "13.23.0" 1269 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" 1270 | integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== 1271 | dependencies: 1272 | type-fest "^0.20.2" 1273 | 1274 | globby@^11.1.0: 1275 | version "11.1.0" 1276 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1277 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1278 | dependencies: 1279 | array-union "^2.1.0" 1280 | dir-glob "^3.0.1" 1281 | fast-glob "^3.2.9" 1282 | ignore "^5.2.0" 1283 | merge2 "^1.4.1" 1284 | slash "^3.0.0" 1285 | 1286 | graphemer@^1.4.0: 1287 | version "1.4.0" 1288 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1289 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1290 | 1291 | has-ansi@^2.0.0: 1292 | version "2.0.0" 1293 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1294 | integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== 1295 | dependencies: 1296 | ansi-regex "^2.0.0" 1297 | 1298 | has-flag@^3.0.0: 1299 | version "3.0.0" 1300 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1301 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1302 | 1303 | has-flag@^4.0.0: 1304 | version "4.0.0" 1305 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1306 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1307 | 1308 | humanize-ms@^1.2.1: 1309 | version "1.2.1" 1310 | resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" 1311 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== 1312 | dependencies: 1313 | ms "^2.0.0" 1314 | 1315 | husky@^8.0.1: 1316 | version "8.0.3" 1317 | resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" 1318 | integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== 1319 | 1320 | ieee754@^1.2.1: 1321 | version "1.2.1" 1322 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1323 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1324 | 1325 | ignore@^5.2.0, ignore@^5.2.4: 1326 | version "5.2.4" 1327 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1328 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1329 | 1330 | import-fresh@^3.2.1: 1331 | version "3.3.0" 1332 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1333 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1334 | dependencies: 1335 | parent-module "^1.0.0" 1336 | resolve-from "^4.0.0" 1337 | 1338 | imurmurhash@^0.1.4: 1339 | version "0.1.4" 1340 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1341 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1342 | 1343 | indent-string@^4.0.0: 1344 | version "4.0.0" 1345 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1346 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1347 | 1348 | inflight@^1.0.4: 1349 | version "1.0.6" 1350 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1351 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1352 | dependencies: 1353 | once "^1.3.0" 1354 | wrappy "1" 1355 | 1356 | inherits@2: 1357 | version "2.0.4" 1358 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1359 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1360 | 1361 | is-extglob@^2.1.1: 1362 | version "2.1.1" 1363 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1364 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1365 | 1366 | is-fullwidth-code-point@^2.0.0: 1367 | version "2.0.0" 1368 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1369 | integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== 1370 | 1371 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1372 | version "4.0.3" 1373 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1374 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1375 | dependencies: 1376 | is-extglob "^2.1.1" 1377 | 1378 | is-number@^7.0.0: 1379 | version "7.0.0" 1380 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1381 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1382 | 1383 | is-path-inside@^3.0.3: 1384 | version "3.0.3" 1385 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1386 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1387 | 1388 | isexe@^2.0.0: 1389 | version "2.0.0" 1390 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1391 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1392 | 1393 | isomorphic-ws@^4.0.1: 1394 | version "4.0.1" 1395 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 1396 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 1397 | 1398 | javascript-natural-sort@0.7.1: 1399 | version "0.7.1" 1400 | resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" 1401 | integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== 1402 | 1403 | jayson@^4.1.0: 1404 | version "4.1.0" 1405 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.0.tgz#60dc946a85197317f2b1439d672a8b0a99cea2f9" 1406 | integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== 1407 | dependencies: 1408 | "@types/connect" "^3.4.33" 1409 | "@types/node" "^12.12.54" 1410 | "@types/ws" "^7.4.4" 1411 | JSONStream "^1.3.5" 1412 | commander "^2.20.3" 1413 | delay "^5.0.0" 1414 | es6-promisify "^5.0.0" 1415 | eyes "^0.1.8" 1416 | isomorphic-ws "^4.0.1" 1417 | json-stringify-safe "^5.0.1" 1418 | uuid "^8.3.2" 1419 | ws "^7.4.5" 1420 | 1421 | js-tokens@^4.0.0: 1422 | version "4.0.0" 1423 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1424 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1425 | 1426 | js-yaml@^4.1.0: 1427 | version "4.1.0" 1428 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1429 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1430 | dependencies: 1431 | argparse "^2.0.1" 1432 | 1433 | jsesc@^2.5.1: 1434 | version "2.5.2" 1435 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1436 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1437 | 1438 | json-buffer@3.0.1: 1439 | version "3.0.1" 1440 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 1441 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1442 | 1443 | json-schema-traverse@^0.4.1: 1444 | version "0.4.1" 1445 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1446 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1447 | 1448 | json-stable-stringify-without-jsonify@^1.0.1: 1449 | version "1.0.1" 1450 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1451 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1452 | 1453 | json-stringify-safe@^5.0.1: 1454 | version "5.0.1" 1455 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1456 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 1457 | 1458 | jsonparse@^1.2.0: 1459 | version "1.3.1" 1460 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1461 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 1462 | 1463 | keyv@^4.5.3: 1464 | version "4.5.4" 1465 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" 1466 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1467 | dependencies: 1468 | json-buffer "3.0.1" 1469 | 1470 | levn@^0.4.1: 1471 | version "0.4.1" 1472 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1473 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1474 | dependencies: 1475 | prelude-ls "^1.2.1" 1476 | type-check "~0.4.0" 1477 | 1478 | locate-path@^3.0.0: 1479 | version "3.0.0" 1480 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1481 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1482 | dependencies: 1483 | p-locate "^3.0.0" 1484 | path-exists "^3.0.0" 1485 | 1486 | locate-path@^6.0.0: 1487 | version "6.0.0" 1488 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1489 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1490 | dependencies: 1491 | p-locate "^5.0.0" 1492 | 1493 | lodash.memoize@^4.1.2: 1494 | version "4.1.2" 1495 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 1496 | integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 1497 | 1498 | lodash.merge@^4.6.0, lodash.merge@^4.6.2: 1499 | version "4.6.2" 1500 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1501 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1502 | 1503 | lodash@^4.17.21: 1504 | version "4.17.21" 1505 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1506 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1507 | 1508 | loglevel-colored-level-prefix@^1.0.0: 1509 | version "1.0.0" 1510 | resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e" 1511 | integrity sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA== 1512 | dependencies: 1513 | chalk "^1.1.3" 1514 | loglevel "^1.4.1" 1515 | 1516 | loglevel@^1.4.1: 1517 | version "1.8.1" 1518 | resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" 1519 | integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== 1520 | 1521 | lru-cache@^6.0.0: 1522 | version "6.0.0" 1523 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1524 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1525 | dependencies: 1526 | yallist "^4.0.0" 1527 | 1528 | magic-string@^0.30.4: 1529 | version "0.30.5" 1530 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" 1531 | integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== 1532 | dependencies: 1533 | "@jridgewell/sourcemap-codec" "^1.4.15" 1534 | 1535 | make-plural@^7.0.0: 1536 | version "7.3.0" 1537 | resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-7.3.0.tgz#2889dbafca2fb097037c47967d3e3afa7e48a52c" 1538 | integrity sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw== 1539 | 1540 | map-obj@^4.1.0: 1541 | version "4.3.0" 1542 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" 1543 | integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== 1544 | 1545 | merge2@^1.3.0, merge2@^1.4.1: 1546 | version "1.4.1" 1547 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1548 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1549 | 1550 | micromatch@^4.0.4: 1551 | version "4.0.5" 1552 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1553 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1554 | dependencies: 1555 | braces "^3.0.2" 1556 | picomatch "^2.3.1" 1557 | 1558 | mime-db@1.52.0: 1559 | version "1.52.0" 1560 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1561 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1562 | 1563 | mime-types@^2.1.12: 1564 | version "2.1.35" 1565 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1566 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1567 | dependencies: 1568 | mime-db "1.52.0" 1569 | 1570 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1571 | version "3.1.2" 1572 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1573 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1574 | dependencies: 1575 | brace-expansion "^1.1.7" 1576 | 1577 | moo@^0.5.1: 1578 | version "0.5.2" 1579 | resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" 1580 | integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== 1581 | 1582 | ms@2.1.2: 1583 | version "2.1.2" 1584 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1585 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1586 | 1587 | ms@^2.0.0: 1588 | version "2.1.3" 1589 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1590 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1591 | 1592 | natural-compare@^1.4.0: 1593 | version "1.4.0" 1594 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1595 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1596 | 1597 | node-fetch@^2.7.0: 1598 | version "2.7.0" 1599 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" 1600 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 1601 | dependencies: 1602 | whatwg-url "^5.0.0" 1603 | 1604 | node-gyp-build@^4.3.0: 1605 | version "4.6.1" 1606 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" 1607 | integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== 1608 | 1609 | once@^1.3.0: 1610 | version "1.4.0" 1611 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1612 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1613 | dependencies: 1614 | wrappy "1" 1615 | 1616 | optionator@^0.9.3: 1617 | version "0.9.3" 1618 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1619 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1620 | dependencies: 1621 | "@aashutoshrathi/word-wrap" "^1.2.3" 1622 | deep-is "^0.1.3" 1623 | fast-levenshtein "^2.0.6" 1624 | levn "^0.4.1" 1625 | prelude-ls "^1.2.1" 1626 | type-check "^0.4.0" 1627 | 1628 | p-limit@^2.0.0: 1629 | version "2.3.0" 1630 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1631 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1632 | dependencies: 1633 | p-try "^2.0.0" 1634 | 1635 | p-limit@^3.0.2: 1636 | version "3.1.0" 1637 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1638 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1639 | dependencies: 1640 | yocto-queue "^0.1.0" 1641 | 1642 | p-locate@^3.0.0: 1643 | version "3.0.0" 1644 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1645 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1646 | dependencies: 1647 | p-limit "^2.0.0" 1648 | 1649 | p-locate@^5.0.0: 1650 | version "5.0.0" 1651 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1652 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1653 | dependencies: 1654 | p-limit "^3.0.2" 1655 | 1656 | p-try@^2.0.0: 1657 | version "2.2.0" 1658 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1659 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1660 | 1661 | parent-module@^1.0.0: 1662 | version "1.0.1" 1663 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1664 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1665 | dependencies: 1666 | callsites "^3.0.0" 1667 | 1668 | path-exists@^3.0.0: 1669 | version "3.0.0" 1670 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1671 | integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== 1672 | 1673 | path-exists@^4.0.0: 1674 | version "4.0.0" 1675 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1676 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1677 | 1678 | path-is-absolute@^1.0.0: 1679 | version "1.0.1" 1680 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1681 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1682 | 1683 | path-key@^3.1.0: 1684 | version "3.1.1" 1685 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1686 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1687 | 1688 | path-type@^4.0.0: 1689 | version "4.0.0" 1690 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1691 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1692 | 1693 | picomatch@^2.3.1: 1694 | version "2.3.1" 1695 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1696 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1697 | 1698 | prelude-ls@^1.2.1: 1699 | version "1.2.1" 1700 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1701 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1702 | 1703 | prettier-eslint-cli@^7.1.0: 1704 | version "7.1.0" 1705 | resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-7.1.0.tgz#617c0b597e10dd5008b0e23aee4172c507d484ba" 1706 | integrity sha512-kMMvV7Mt6VqdJSb25aCkOA7HTIxy5mii2tzBb1vCSmzlIECOzTP2wRPIeAtBky6WdpfN0n1Zxa4E37Atp1IksA== 1707 | dependencies: 1708 | "@messageformat/core" "^3.0.1" 1709 | "@prettier/eslint" "npm:prettier-eslint@^15.0.1" 1710 | arrify "^2.0.1" 1711 | boolify "^1.0.1" 1712 | camelcase-keys "^7.0.2" 1713 | chalk "^4.1.2" 1714 | common-tags "^1.8.2" 1715 | core-js "^3.24.1" 1716 | eslint "^8.21.0" 1717 | find-up "^5.0.0" 1718 | get-stdin "^8.0.0" 1719 | glob "^7.2.3" 1720 | ignore "^5.2.0" 1721 | indent-string "^4.0.0" 1722 | lodash.memoize "^4.1.2" 1723 | loglevel-colored-level-prefix "^1.0.0" 1724 | rxjs "^7.5.6" 1725 | yargs "^13.1.1" 1726 | 1727 | prettier@^2.5.1: 1728 | version "2.8.8" 1729 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 1730 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 1731 | 1732 | prettier@^3.0.0: 1733 | version "3.0.3" 1734 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" 1735 | integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== 1736 | 1737 | pretty-format@^23.0.1: 1738 | version "23.6.0" 1739 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" 1740 | integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== 1741 | dependencies: 1742 | ansi-regex "^3.0.0" 1743 | ansi-styles "^3.2.0" 1744 | 1745 | proxy-from-env@^1.1.0: 1746 | version "1.1.0" 1747 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 1748 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 1749 | 1750 | punycode@^2.1.0: 1751 | version "2.3.1" 1752 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 1753 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1754 | 1755 | queue-microtask@^1.2.2: 1756 | version "1.2.3" 1757 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1758 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1759 | 1760 | quick-lru@^5.1.1: 1761 | version "5.1.1" 1762 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 1763 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1764 | 1765 | regenerator-runtime@^0.14.0: 1766 | version "0.14.0" 1767 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" 1768 | integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== 1769 | 1770 | require-directory@^2.1.1: 1771 | version "2.1.1" 1772 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1773 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1774 | 1775 | require-main-filename@^2.0.0: 1776 | version "2.0.0" 1777 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1778 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1779 | 1780 | require-relative@^0.8.7: 1781 | version "0.8.7" 1782 | resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" 1783 | integrity sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg== 1784 | 1785 | resolve-from@^4.0.0: 1786 | version "4.0.0" 1787 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1788 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1789 | 1790 | reusify@^1.0.4: 1791 | version "1.0.4" 1792 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1793 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1794 | 1795 | rimraf@^3.0.2: 1796 | version "3.0.2" 1797 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1798 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1799 | dependencies: 1800 | glob "^7.1.3" 1801 | 1802 | rollup-plugin-dts@^6.1.0: 1803 | version "6.1.0" 1804 | resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-6.1.0.tgz#56e9c5548dac717213c6a4aa9df523faf04f75ae" 1805 | integrity sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw== 1806 | dependencies: 1807 | magic-string "^0.30.4" 1808 | optionalDependencies: 1809 | "@babel/code-frame" "^7.22.13" 1810 | 1811 | rollup@^4.3.0: 1812 | version "4.3.0" 1813 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.3.0.tgz#198e6ae4355899db630d75bc0e17b53f5d0fc20e" 1814 | integrity sha512-scIi1NrKLDIYSPK66jjECtII7vIgdAMFmFo8h6qm++I6nN9qDSV35Ku6erzGVqYjx+lj+j5wkusRMr++8SyDZg== 1815 | optionalDependencies: 1816 | "@rollup/rollup-android-arm-eabi" "4.3.0" 1817 | "@rollup/rollup-android-arm64" "4.3.0" 1818 | "@rollup/rollup-darwin-arm64" "4.3.0" 1819 | "@rollup/rollup-darwin-x64" "4.3.0" 1820 | "@rollup/rollup-linux-arm-gnueabihf" "4.3.0" 1821 | "@rollup/rollup-linux-arm64-gnu" "4.3.0" 1822 | "@rollup/rollup-linux-arm64-musl" "4.3.0" 1823 | "@rollup/rollup-linux-x64-gnu" "4.3.0" 1824 | "@rollup/rollup-linux-x64-musl" "4.3.0" 1825 | "@rollup/rollup-win32-arm64-msvc" "4.3.0" 1826 | "@rollup/rollup-win32-ia32-msvc" "4.3.0" 1827 | "@rollup/rollup-win32-x64-msvc" "4.3.0" 1828 | fsevents "~2.3.2" 1829 | 1830 | rpc-websockets@^7.5.1: 1831 | version "7.6.2" 1832 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.6.2.tgz#ed82f21ea8290f26d73f10d0dc0f9425dc364b81" 1833 | integrity sha512-+M1fOYMPxvOQDHbSItkD/an4fRwPZ1Nft1zv48G84S0TyChG2A1GXmjWkbs3o2NxW+q36H9nM2uLo5yojTrPaA== 1834 | dependencies: 1835 | "@babel/runtime" "^7.17.2" 1836 | eventemitter3 "^4.0.7" 1837 | uuid "^8.3.2" 1838 | ws "^8.5.0" 1839 | optionalDependencies: 1840 | bufferutil "^4.0.1" 1841 | utf-8-validate "^5.0.2" 1842 | 1843 | run-parallel@^1.1.9: 1844 | version "1.2.0" 1845 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1846 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1847 | dependencies: 1848 | queue-microtask "^1.2.2" 1849 | 1850 | rxjs@^7.5.6: 1851 | version "7.8.1" 1852 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" 1853 | integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== 1854 | dependencies: 1855 | tslib "^2.1.0" 1856 | 1857 | safe-buffer@^5.0.1: 1858 | version "5.2.1" 1859 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1860 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1861 | 1862 | safe-identifier@^0.4.1: 1863 | version "0.4.2" 1864 | resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" 1865 | integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== 1866 | 1867 | semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: 1868 | version "7.5.4" 1869 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 1870 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1871 | dependencies: 1872 | lru-cache "^6.0.0" 1873 | 1874 | set-blocking@^2.0.0: 1875 | version "2.0.0" 1876 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1877 | integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== 1878 | 1879 | shebang-command@^2.0.0: 1880 | version "2.0.0" 1881 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1882 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1883 | dependencies: 1884 | shebang-regex "^3.0.0" 1885 | 1886 | shebang-regex@^3.0.0: 1887 | version "3.0.0" 1888 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1889 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1890 | 1891 | slash@^3.0.0: 1892 | version "3.0.0" 1893 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1894 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1895 | 1896 | source-map@^0.5.0: 1897 | version "0.5.7" 1898 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1899 | integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 1900 | 1901 | string-width@^3.0.0, string-width@^3.1.0: 1902 | version "3.1.0" 1903 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1904 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1905 | dependencies: 1906 | emoji-regex "^7.0.1" 1907 | is-fullwidth-code-point "^2.0.0" 1908 | strip-ansi "^5.1.0" 1909 | 1910 | strip-ansi@^3.0.0: 1911 | version "3.0.1" 1912 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1913 | integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== 1914 | dependencies: 1915 | ansi-regex "^2.0.0" 1916 | 1917 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1918 | version "5.2.0" 1919 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1920 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1921 | dependencies: 1922 | ansi-regex "^4.1.0" 1923 | 1924 | strip-ansi@^6.0.1: 1925 | version "6.0.1" 1926 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1927 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1928 | dependencies: 1929 | ansi-regex "^5.0.1" 1930 | 1931 | strip-json-comments@^3.1.1: 1932 | version "3.1.1" 1933 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1934 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1935 | 1936 | superstruct@^0.14.2: 1937 | version "0.14.2" 1938 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 1939 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1940 | 1941 | supports-color@^2.0.0: 1942 | version "2.0.0" 1943 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1944 | integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== 1945 | 1946 | supports-color@^5.3.0: 1947 | version "5.5.0" 1948 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1949 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1950 | dependencies: 1951 | has-flag "^3.0.0" 1952 | 1953 | supports-color@^7.1.0: 1954 | version "7.2.0" 1955 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1956 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1957 | dependencies: 1958 | has-flag "^4.0.0" 1959 | 1960 | text-encoding-utf-8@^1.0.2: 1961 | version "1.0.2" 1962 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 1963 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1964 | 1965 | text-table@^0.2.0: 1966 | version "0.2.0" 1967 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1968 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1969 | 1970 | "through@>=2.2.7 <3": 1971 | version "2.3.8" 1972 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1973 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1974 | 1975 | to-fast-properties@^2.0.0: 1976 | version "2.0.0" 1977 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1978 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1979 | 1980 | to-regex-range@^5.0.1: 1981 | version "5.0.1" 1982 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1983 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1984 | dependencies: 1985 | is-number "^7.0.0" 1986 | 1987 | tr46@~0.0.3: 1988 | version "0.0.3" 1989 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1990 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1991 | 1992 | ts-api-utils@^1.0.1: 1993 | version "1.0.3" 1994 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" 1995 | integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== 1996 | 1997 | tslib@^1.8.1: 1998 | version "1.14.1" 1999 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2000 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2001 | 2002 | tslib@^2.1.0: 2003 | version "2.6.2" 2004 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" 2005 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== 2006 | 2007 | tsutils@^3.21.0: 2008 | version "3.21.0" 2009 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 2010 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 2011 | dependencies: 2012 | tslib "^1.8.1" 2013 | 2014 | type-check@^0.4.0, type-check@~0.4.0: 2015 | version "0.4.0" 2016 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2017 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2018 | dependencies: 2019 | prelude-ls "^1.2.1" 2020 | 2021 | type-fest@^0.20.2: 2022 | version "0.20.2" 2023 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2024 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2025 | 2026 | type-fest@^1.2.1: 2027 | version "1.4.0" 2028 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" 2029 | integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== 2030 | 2031 | typescript@^4.5.4, typescript@^4.6.3: 2032 | version "4.9.5" 2033 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 2034 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 2035 | 2036 | undici-types@~5.26.4: 2037 | version "5.26.5" 2038 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 2039 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 2040 | 2041 | uri-js@^4.2.2: 2042 | version "4.4.1" 2043 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2044 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2045 | dependencies: 2046 | punycode "^2.1.0" 2047 | 2048 | utf-8-validate@^5.0.2: 2049 | version "5.0.10" 2050 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" 2051 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== 2052 | dependencies: 2053 | node-gyp-build "^4.3.0" 2054 | 2055 | uuid@^8.3.2: 2056 | version "8.3.2" 2057 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2058 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2059 | 2060 | vue-eslint-parser@^8.0.1: 2061 | version "8.3.0" 2062 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d" 2063 | integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g== 2064 | dependencies: 2065 | debug "^4.3.2" 2066 | eslint-scope "^7.0.0" 2067 | eslint-visitor-keys "^3.1.0" 2068 | espree "^9.0.0" 2069 | esquery "^1.4.0" 2070 | lodash "^4.17.21" 2071 | semver "^7.3.5" 2072 | 2073 | webidl-conversions@^3.0.0: 2074 | version "3.0.1" 2075 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2076 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 2077 | 2078 | whatwg-url@^5.0.0: 2079 | version "5.0.0" 2080 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2081 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 2082 | dependencies: 2083 | tr46 "~0.0.3" 2084 | webidl-conversions "^3.0.0" 2085 | 2086 | which-module@^2.0.0: 2087 | version "2.0.1" 2088 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" 2089 | integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== 2090 | 2091 | which@^2.0.1: 2092 | version "2.0.2" 2093 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2094 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2095 | dependencies: 2096 | isexe "^2.0.0" 2097 | 2098 | wrap-ansi@^5.1.0: 2099 | version "5.1.0" 2100 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 2101 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 2102 | dependencies: 2103 | ansi-styles "^3.2.0" 2104 | string-width "^3.0.0" 2105 | strip-ansi "^5.0.0" 2106 | 2107 | wrappy@1: 2108 | version "1.0.2" 2109 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2110 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2111 | 2112 | ws@^7.4.5: 2113 | version "7.5.9" 2114 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 2115 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 2116 | 2117 | ws@^8.5.0: 2118 | version "8.14.2" 2119 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" 2120 | integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== 2121 | 2122 | y18n@^4.0.0: 2123 | version "4.0.3" 2124 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 2125 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 2126 | 2127 | yallist@^4.0.0: 2128 | version "4.0.0" 2129 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2130 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2131 | 2132 | yargs-parser@^13.1.2: 2133 | version "13.1.2" 2134 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 2135 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 2136 | dependencies: 2137 | camelcase "^5.0.0" 2138 | decamelize "^1.2.0" 2139 | 2140 | yargs@^13.1.1: 2141 | version "13.3.2" 2142 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 2143 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 2144 | dependencies: 2145 | cliui "^5.0.0" 2146 | find-up "^3.0.0" 2147 | get-caller-file "^2.0.1" 2148 | require-directory "^2.1.1" 2149 | require-main-filename "^2.0.0" 2150 | set-blocking "^2.0.0" 2151 | string-width "^3.0.0" 2152 | which-module "^2.0.0" 2153 | y18n "^4.0.0" 2154 | yargs-parser "^13.1.2" 2155 | 2156 | yocto-queue@^0.1.0: 2157 | version "0.1.0" 2158 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2159 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2160 | --------------------------------------------------------------------------------