diff --git a/.changeset/four-swans-wait.md b/.changeset/four-swans-wait.md new file mode 100644 index 0000000000..9dd2149944 --- /dev/null +++ b/.changeset/four-swans-wait.md @@ -0,0 +1,6 @@ +--- +"@near-js/client": minor +"@near-js/cookbook": minor +--- + +Introduce interfaces for interacting with contracts which implement certain NEP standards diff --git a/packages/client/package.json b/packages/client/package.json index 2ff4232665..4f12f00017 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -20,7 +20,9 @@ "@near-js/types": "workspace:*", "@near-js/utils": "workspace:*", "@noble/hashes": "1.3.3", - "isomorphic-fetch": "3.0.0" + "isomorphic-fetch": "3.0.0", + "near-contract-standards": "^2.0.0", + "near-sdk-js": "^2.0.0" }, "keywords": [], "author": "", diff --git a/packages/client/src/contract-standards/fungible-token.ts b/packages/client/src/contract-standards/fungible-token.ts new file mode 100644 index 0000000000..8161c42f71 --- /dev/null +++ b/packages/client/src/contract-standards/fungible-token.ts @@ -0,0 +1,122 @@ +/** + * Interface for Fungible Token contracts covering the following standards: + * - Fungible Token Standard: https://github.com/near/NEPs/blob/master/neps/nep-0141.md + * - Fungible Token Metadata: https://github.com/near/NEPs/blob/master/neps/nep-0148.md + */ +import { functionCall } from "../transactions/actions"; +import type { + FungibleTokenMetadata, + FungibleTokenMetadataProvider, + FungibleTokenCore, +} from "near-contract-standards/lib"; +import type { FunctionCallParams, ViewParams } from "../interfaces"; +import type { FinalExecutionOutcome } from "@near-js/types"; +import { view } from "../view"; + +type FungibleTokenParams = Omit< + FunctionCallParams, + "method" | "args" +> & { + args: Parameters<(FungibleTokenCore)[T]>[0]; +}; + +type FungibleTokenViewParams = Omit< + ViewParams, + "method" | "args" +> & { + args: Parameters<(FungibleTokenCore & FungibleTokenMetadataProvider)[T]>[0]; +}; + +type FungibleTokenReturn = { + outcome: FinalExecutionOutcome; + result: ReturnType<(FungibleTokenCore)[T]>; +}; + +type FungibleTokenViewReturn = + ReturnType<(FungibleTokenCore & FungibleTokenMetadataProvider)[T]>; + +export async function ftTransfer( + params: FungibleTokenParams<"ft_transfer"> +): Promise> { + // bigints go over the wire as strings + const {args, ...otherParams} = params; + const convertedArgs = { + ...args, + amount: args.amount ? args.amount.toString() : undefined, + }; + const { outcome } = await functionCall({ + args: convertedArgs, + ...otherParams, + method: "ft_transfer", + deposit: 1n, + }); + + return { + outcome, + result: undefined, + }; +} + +/** + * TODO This function is untested + */ +export async function ftTransferCall( + params: FungibleTokenParams<"ft_transfer_call"> +): Promise> { + // bigints go over the wire as strings + const {args, ...otherParams} = params; + const convertedArgs = { + ...args, + amount: args.amount ? args.amount.toString() : undefined, + }; + const { outcome, result } = await functionCall({ + args: convertedArgs, + ...otherParams, + method: "ft_transfer_call", + deposit: 1n, + }); + + return { + outcome, + // result: result as string, + result: BigInt(result as string), + }; +} + +export async function ftTotalSupply( + params: FungibleTokenViewParams<"ft_total_supply"> +): Promise> { + const result = await view({ + ...params, + method: "ft_total_supply", + }); + + return BigInt(result as string); +} + +export async function ftBalanceOf( + params: FungibleTokenViewParams<"ft_balance_of"> +): Promise> { + const result = await view({ + ...params, + method: "ft_balance_of", + }); + + return BigInt(result as string); +} + +/** + * Fungible Token Metadata is techically a separate NEP standard, but it's + * included here for convenience + * NEP: https://github.com/near/NEPs/blob/master/neps/nep-0148.md + */ +export async function ftMetadata( + params: FungibleTokenViewParams<"ft_metadata"> +): Promise> { + const result = await view({ + ...params, + method: "ft_metadata", + }); + + return result as FungibleTokenMetadata; +} \ No newline at end of file diff --git a/packages/client/src/contract-standards/index.ts b/packages/client/src/contract-standards/index.ts new file mode 100644 index 0000000000..0fcf0ca361 --- /dev/null +++ b/packages/client/src/contract-standards/index.ts @@ -0,0 +1,3 @@ +export * from './storage-management'; +export * from './fungible-token'; +export * from './non-fungible-token'; \ No newline at end of file diff --git a/packages/client/src/contract-standards/non-fungible-token.ts b/packages/client/src/contract-standards/non-fungible-token.ts new file mode 100644 index 0000000000..50a4d39780 --- /dev/null +++ b/packages/client/src/contract-standards/non-fungible-token.ts @@ -0,0 +1,194 @@ +/** + * Interface for Non-Fungible Token contracts covering the following standards: + * - Non Fungible Token Standard: https://github.com/near/NEPs/blob/master/neps/nep-0171.md + * - Non Fungible Token Metadata: https://github.com/near/NEPs/blob/master/neps/nep-0177.md + * - Non Fungible Token Enumeration: https://github.com/near/NEPs/blob/master/neps/nep-0181.md + */ +import { functionCall } from "../transactions/actions"; +import type { + NonFungibleTokenCore, + NonFungibleTokenEnumeration, + NonFungibleTokenMetadataProvider, + NFTContractMetadata, + // TokenMetadata, + Token +} from "near-contract-standards/lib"; +import type { + FunctionCallParams, + ViewParams +} from "../interfaces"; +import type { FinalExecutionOutcome } from "@near-js/types"; +import { view } from "../view"; + +type NFTParams = Omit< + FunctionCallParams, + "method" | "args" +> & { + args: Parameters<(NonFungibleTokenCore)[T]>[0]; +}; + +type NFTViewParams = Omit< + ViewParams, + "method" | "args" +> & { + args: Parameters<(NonFungibleTokenCore & NonFungibleTokenEnumeration & NonFungibleTokenMetadataProvider)[T]>[0]; +}; + +type NFTReturn = { + outcome: FinalExecutionOutcome; + result: ReturnType<(NonFungibleTokenCore)[T]>; +}; + +type NFTViewReturn = + ReturnType<(NonFungibleTokenCore & NonFungibleTokenEnumeration & NonFungibleTokenMetadataProvider)[T]>; + +export async function nftTransfer( + params: NFTParams<"nft_transfer"> +): Promise> { + const { outcome } = await functionCall({ + ...params, + method: "nft_transfer", + deposit: 1n, + }); + + return { + outcome, + result: undefined, + }; +} + +export async function nftTransferCall( + params: NFTParams<"nft_transfer_call"> +): Promise> { + const { outcome, result } = await functionCall({ + ...params, + method: "nft_transfer_call", + deposit: 1n, + }); + + return { + outcome, + result: result as string, + }; +} + +export async function nftToken( + params: NFTViewParams<"nft_token"> +): Promise> { + const result = await view({ + ...params, + method: "nft_token", + }); + + return result as Token; +} + +// ! NOTE: according to the NEP, this function should return a string but +// ! the contract standards lib incorrectly implements it as a number, therefore +// ! we break from usage of the lib and implement our own return type. We expect +// ! a string then cast to bigint for convenience +export async function nftTotalSupply( + params: NFTViewParams<"nft_total_supply"> +): Promise { + const result = await view({ + ...params, + method: "nft_total_supply", + }); + + if (typeof result === "string" || typeof result === "number") { + // technically we shouldn't allow number, but we will allow it in case + // the contract is built against the incorrect near-sdk-js spec + try { + const bi = BigInt(result); + return bi; + } catch (e) { + throw new Error("nft_total_supply result could not be converted to bigint"); + } + } + throw new Error("nft_total_supply did not return a string or number"); +} + +// ! NOTE: according to the NEP, this function should return a string but +// ! the contract standards lib incorrectly implements it as a number, therefore +// ! we break from usage of the lib and implement our own return type. We expect +// ! a string then cast to bigint for convenience +export async function nftSupplyForOwner( + params: NFTViewParams<"nft_supply_for_owner"> +): Promise { + const result = await view({ + ...params, + method: "nft_supply_for_owner", + }); + + if (typeof result === "string" || typeof result === "number") { + // technically we shouldn't allow number, but we will allow it in case + // the contract is built against the incorrect near-sdk-js spec + try { + const bi = BigInt(result); + return bi; + } catch (e) { + throw new Error("nft_supply_for_owner result could not be converted to bigint"); + } + } + throw new Error("nft_supply_for_owner did not return a string or number"); +} + +// ! Convert `from_index` to bigint | null to match the NEP +type NFTTokensParams = Omit, "args"> & { + args: Omit["args"], "from_index"> & { + from_index: bigint | null; + }; +}; +export async function nftTokens( + params: NFTTokensParams +): Promise> { + // bigints go over the wire as strings + const {args, ...otherParams} = params; + const convertedArgs = { + ...args, + from_index: args.from_index ? args.from_index.toString() : null, + }; + const result = await view({ + args: convertedArgs, + ...otherParams, + method: "nft_tokens", + }); + + return result as Token[]; +} + +// ! Convert `from_index` to bigint | null to match the NEP +type NFTTokensForOwnerParams = Omit, "args"> & { + args: Omit["args"], "from_index"> & { + from_index: bigint | null; + }; +}; + +export async function nftTokensForOwner( + params: NFTTokensForOwnerParams +): Promise> { + // bigints go over the wire as strings + const {args, ...otherParams} = params; + const convertedArgs = { + ...args, + from_index: args.from_index ? args.from_index.toString() : null, + }; + const result = await view({ + args: convertedArgs, + ...otherParams, + method: "nft_tokens_for_owner", + }); + + return result as Token[]; +} + +export async function nftMetadata( + params: NFTViewParams<"nft_metadata"> +): Promise> { + const result = await view({ + ...params, + method: "nft_metadata", + }); + + return result as NFTContractMetadata; +} \ No newline at end of file diff --git a/packages/client/src/contract-standards/storage-management.ts b/packages/client/src/contract-standards/storage-management.ts new file mode 100644 index 0000000000..3ac494eeec --- /dev/null +++ b/packages/client/src/contract-standards/storage-management.ts @@ -0,0 +1,178 @@ +/** + * Interface for Storage Management contracts covering the following standards: + * - Storage Management: https://github.com/near/NEPs/blob/master/neps/nep-0145.md + */ + +import { functionCall } from "../transactions/actions"; +import type { + StorageBalance, + StorageManagement, + StorageBalanceBounds, +} from "near-contract-standards/lib"; +import type { FunctionCallParams, ViewParams } from "../interfaces"; +import type { FinalExecutionOutcome } from "@near-js/types"; +import { view } from "../view"; + +type StorageManagementParams = Omit< + FunctionCallParams, + "method" | "args" +> & { + args: Parameters[0]; +}; + +type StorageManagementViewParams = Omit< + ViewParams, + "method" | "args" +> & { + args: Parameters[0]; +}; + +type StorageManagementReturn = { + outcome: FinalExecutionOutcome; + result: ReturnType; +}; +type StorageManagementViewReturn = + ReturnType; + +export async function storageDeposit( + params: StorageManagementParams<"storage_deposit"> +): Promise> { + const { outcome, result } = await functionCall({ + ...params, + method: "storage_deposit", + }); + + // Ensure the result matches the StorageBalance structure + if ( + typeof result === "object" && + typeof result?.["total"] === "string" && + typeof result?.["available"] === "string" + ) { + const storageBalance = result as StorageBalance; + + // cast string bigints to bigint literals + Object.assign(storageBalance, { + total: BigInt(storageBalance.total), + available: BigInt(storageBalance.available), + }); + + return { + outcome, + result: storageBalance, + }; + } + + throw new Error("Unexpected result format from storage_deposit"); +} + +export async function storageUnregister( + params: StorageManagementParams<"storage_unregister"> +): Promise> { + const { outcome, result } = await functionCall({ + ...params, + method: "storage_unregister", + }); + + return { + outcome, + result: Boolean(result), + }; +} + +export async function storageWithdraw( + params: StorageManagementParams<"storage_withdraw"> +): Promise> { + + // bigints go over the wire as strings + const {args, ...otherParams} = params; + const convertedArgs = { + ...args, + amount: args.amount ? args.amount.toString() : undefined, + }; + + const { outcome, result } = await functionCall({ + args: convertedArgs, + ...otherParams, + method: "storage_withdraw", + deposit: 1n, + }); + + console.log("result", result); + console.log("outcome", outcome); + if ( + typeof result === "object" && + typeof result?.["total"] === "string" && + typeof result?.["available"] === "string" + ) { + const storageBalance = result as StorageBalance; + + // cast string bigints to bigint literals + Object.assign(storageBalance, { + total: BigInt(storageBalance.total), + available: BigInt(storageBalance.available), + }); + + return { + outcome, + result: storageBalance, + }; + } else { + throw new Error("Unexpected result format from storage_withdraw"); + } +} + +export async function storageBalanceBounds( + params: StorageManagementViewParams<"storage_balance_bounds"> +): Promise> { + const result = await view({ + ...params, + method: "storage_balance_bounds", + }); + + if ( + typeof result === "object" && + typeof result?.["min"] === "string" && + typeof result?.["max"] === "string" + ) { + const storageBalanceBounds = result as StorageBalanceBounds; + + // cast string bigints to bigint literals + Object.assign(storageBalanceBounds, { + min: BigInt(storageBalanceBounds.min), + max: BigInt(storageBalanceBounds.max), + }); + + return storageBalanceBounds; + } else { + throw new Error("Unexpected result format from storage_balance_bounds"); + } +} + +export async function storageBalanceOf( + params: StorageManagementViewParams<"storage_balance_of"> +): Promise> { + const result = await view({ + ...params, + method: "storage_balance_of", + }); + + if ( + typeof result === "object" && + typeof result?.["total"] === "string" && + typeof result?.["available"] === "string" + ) { + const storageBalance = result as StorageBalance; + + // cast string bigints to bigint literals + Object.assign(storageBalance, { + total: BigInt(storageBalance.total), + available: BigInt(storageBalance.available), + }); + + return storageBalance; + } else if (result === null) { + return null; + } else { + throw new Error("Unexpected result format from storage_balance_of"); + } +} diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index eb2f5f5621..776a0c4ee8 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -8,3 +8,4 @@ export * from './providers'; export * from './signing'; export * from './transactions'; export * from './view'; +export * from './contract-standards'; diff --git a/packages/client/src/transactions/actions.ts b/packages/client/src/transactions/actions.ts index 04357a44ad..2e180249e3 100644 --- a/packages/client/src/transactions/actions.ts +++ b/packages/client/src/transactions/actions.ts @@ -20,10 +20,18 @@ import { SignedTransactionComposer } from './composers'; * @param blockReference block ID/finality * @param deps sign-and-send dependencies */ -export function functionCall({ sender, receiver, method, args, gas, deposit, blockReference, deps }: FunctionCallParams) { - return SignedTransactionComposer.init({ sender, receiver, deps }) +export async function functionCall({ sender, receiver, method, args, gas, deposit, blockReference, deps }: FunctionCallParams) { + const {outcome, result} = await SignedTransactionComposer.init({ sender, receiver, deps }) .functionCall(method, args, gas, deposit) .signAndSend(blockReference); + + // the typing of failures is significantly different from the true failure + // object, so we can throw an error but the format will not be ideal + if (typeof outcome.status === 'object' && 'Failure' in outcome.status) { + throw new Error(JSON.stringify(outcome.status.Failure)); + } + + return {outcome, result}; } /** diff --git a/packages/cookbook/README.md b/packages/cookbook/README.md index 8d844d9405..0c0b6d8912 100644 --- a/packages/cookbook/README.md +++ b/packages/cookbook/README.md @@ -2,21 +2,25 @@ Collection of common use cases for [`near-api-js`](https://github.com/near/near-api-js). -| | | -|-----------------------------------------------------------------| ---------------------------------------------------------------------------------------------------------------- | -| **ACCOUNTS** | | -| [Create Account](./accounts/create-testnet-account.js) | Create [NEAR accounts](https://docs.near.org/concepts/basics/account) without using NEAR Wallet. | -| [Access Key Rotation](./accounts/access-keys/README.md) | Create and delete [access keys](https://docs.near.org/concepts/basics/account#access-keys) for added security. | -| **TRANSACTIONS** | | -| [Get Transaction Status](./transactions/get-tx-status.js) | Gets transaction status using a tx hash and associated account/contract ID. | -| [Recent Transaction Details](./transactions/get-tx-detail.js) | Get recent transaction details without using an [indexing](https://docs.near.org/docs/concepts/indexer) service. | -| [Batch Transactions](./transactions/batch-transactions.js) | Sign and send multiple [transactions](https://docs.near.org/docs/concepts/transaction). | -| **UTILS** | | -| [Deploy Contract](./utils/deploy-contract.js) | Deploys a contract using a pre-compiled .wasm file | -| [Calculate Gas](./utils/calculate-gas.js) | Calculate [gas burnt](https://docs.near.org/docs/concepts/gas) from any contract call. | -| [Read State w/o Account](./utils/get-state.js) | Read state of a contract without instantiating an account. | -| [Wrap](./utils/wrap-near.js) & [Unwrap](./utils/unwrap-near.js) NEAR | Wrap and unwrap NEAR using the `wrap.near` smart contract. | -| [Verify Signature](./utils/verify-signature.js) | Verify a key pair signature. | +| | | +| ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| **ACCOUNTS** | | +| [Create Account](./accounts/create-testnet-account.js) | Create [NEAR accounts](https://docs.near.org/concepts/basics/account) without using NEAR Wallet. | +| [Access Key Rotation](./accounts/access-keys/README.md) | Create and delete [access keys](https://docs.near.org/concepts/basics/account#access-keys) for added security. | +| **TRANSACTIONS** | | +| [Get Transaction Status](./transactions/get-tx-status.js) | Gets transaction status using a tx hash and associated account/contract ID. | +| [Recent Transaction Details](./transactions/get-tx-detail.js) | Get recent transaction details without using an [indexing](https://docs.near.org/docs/concepts/indexer) service. | +| [Batch Transactions](./transactions/batch-transactions.js) | Sign and send multiple [transactions](https://docs.near.org/docs/concepts/transaction). | +| **UTILS** | | +| [Deploy Contract](./utils/deploy-contract.js) | Deploys a contract using a pre-compiled .wasm file | +| [Calculate Gas](./utils/calculate-gas.js) | Calculate [gas burnt](https://docs.near.org/docs/concepts/gas) from any contract call. | +| [Read State w/o Account](./utils/get-state.js) | Read state of a contract without instantiating an account. | +| [Wrap](./utils/wrap-near.js) & [Unwrap](./utils/unwrap-near.js) NEAR | Wrap and unwrap NEAR using the `wrap.near` smart contract. | +| [Verify Signature](./utils/verify-signature.js) | Verify a key pair signature. | +| **CONTRACT STANDARDS** | | +| [Fungible Token Standard](./contract-standards/fungible-token.js) | Interact with Fungible Token Standard contracts | +| [Storage Management](./contract-standards/storage-management.js) | Interact with Storage Management Standard contracts | +| [Non-Fungible Token Standard](./contract-standards/non-fungible-token.js) | Interact with Non-Fungible Token Standard contracts | ## Requirements diff --git a/packages/cookbook/contract-standards/fungible-token.ts b/packages/cookbook/contract-standards/fungible-token.ts new file mode 100644 index 0000000000..beb9fee2b4 --- /dev/null +++ b/packages/cookbook/contract-standards/fungible-token.ts @@ -0,0 +1,241 @@ +/** + * This serves both as a demo of interfacing with a Fungible Token Standard + * contract and a basic test of the client library + * + * ! NOTE: These examples may not work with a JS/TS contract since near-sdk-js + * ! has some type differences from the NEP standards, see comments in + * ! @near-js/client/src/contract-standards/fungible-token.ts + * + * Tested against near-sdk-rs example FT contract: + * https://github.com/near/near-sdk-rs/tree/master/examples/fungible-token + * + * Reproduction steps: + * - create three test accounts: hereafter referred to as CONTRACT_ID, ACCOUNT_ID, RECEIVER_ID + * - clone and build contract + * - deploy with init call + * - `near contract deploy use-file res/fungible_token.wasm with-init-call new_default_meta json-args '{"owner_id":"","total_supply":"10000"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' network-config testnet sign-with-keychain send` + * - register RECEIVER_ID with the contract + * - `near contract call-function as-transaction storage_deposit json-args '{"account_id":""}' prepaid-gas '100.0 Tgas' attached-deposit '0.5 NEAR' sign-as network-config testnet sign-with-keychain send` + * - run this script + * - `pnpm fungibleTokenStandard -- ` + * + * In order to test ftTransferCall, you will need to deploy a contract that + * implements the receiving function. One is provided by `near-sdk-rs` and is built + * alongside the FT contract: + * https://github.com/near/near-sdk-rs/tree/master/examples/fungible-token/test-contract-defi + * + * - create a new test account for the receiver contract: hereafter referred to as TRANSFER_CONTRACT_ID + * - deploy with init call + * - `near contract deploy use-file res/defi.wasm with-init-call new json-args '{"fungible_token_account_id":""}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' network-config testnet sign-with-keychain send` + * - register TRANSFER_CONTRACT_ID with the FT contract + * - `near contract call-function as-transaction storage_deposit json-args '{"account_id":""}' prepaid-gas '100.0 Tgas' attached-deposit '0.5 NEAR' sign-as network-config testnet sign-with-keychain send` + * - run this script with an additional argument for the transfer contract address: + * - `pnpm fungibleTokenStandard -- ` + */ + +import { + getSignerFromKeystore, + getTestnetRpcProvider, + ftTransfer, + ftTransferCall, + ftTotalSupply, + ftBalanceOf, + ftMetadata, +} from "@near-js/client"; +import { UnencryptedFileSystemKeyStore } from "@near-js/keystores-node"; +import chalk from "chalk"; +import { join } from "node:path"; +import { homedir } from "node:os"; + +export default async function fungibleTokenStandard( + contractAddress: string, + accountId: string, + receiverId: string, + transferContractAddress?: string +) { + if (!contractAddress || !accountId || !receiverId) { + console.log( + chalk`{red pnpm fungibleTokenStandard -- CONTRACT_ADDRESS ACCOUNT_ID RECEIVER_ID}` + ); + return; +} + + // assumptions: + // -accountId is the owner in the ft contract, meaning token supply has been allocated to it + // -receiverId is registered in the ft contract + + + // run serially since calls may rely on previous calls + await ftTotalSupplyInvoke(contractAddress); + await ftMetadataInvoke(contractAddress); + + // check balances before transfer + await ftBalanceOfInvoke(contractAddress, accountId); + await ftBalanceOfInvoke(contractAddress, receiverId); + + // transfer + await ftTransferInvoke(contractAddress, accountId, receiverId); + + // check balances after transfer + await ftBalanceOfInvoke(contractAddress, accountId); + await ftBalanceOfInvoke(contractAddress, receiverId); + + if (transferContractAddress) { + await ftBalanceOfInvoke(contractAddress, transferContractAddress); + await ftTransferCallInvoke(contractAddress, accountId, transferContractAddress); + await ftBalanceOfInvoke(contractAddress, transferContractAddress); + } else { + console.log(chalk`{white skipping ftTransferCallInvoke since no transfer contract address was provided}`); + } +} + +export async function ftTotalSupplyInvoke(contractAddress: string) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await ftTotalSupply({ + args: undefined, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white ft_total_supply} +{white ------------------------------------------------------------------------ } +{bold.white Total Supply} {white |} {bold.yellow ${result}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function ftBalanceOfInvoke( + contractAddress: string, + accountId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await ftBalanceOf({ + args: { + account_id: accountId, + }, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white ft_balance_of} +{white ------------------------------------------------------------------------ } +{bold.white Balance of ${accountId}} {white |} {bold.yellow ${result}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function ftMetadataInvoke(contractAddress: string) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await ftMetadata({ + args: undefined, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white ft_metadata} +{white ------------------------------------------------------------------------ } +{bold.white Metadata} {white |} {bold.yellow ${JSON.stringify(result)}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function ftTransferInvoke( + contractAddress: string, + accountId: string, + receiverId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { outcome } = await ftTransfer({ + receiver: contractAddress, + sender: accountId, + args: { + receiver_id: receiverId, + amount: 100n, + }, + deps: { + rpcProvider, + signer, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white ft_transfer} +{white ------------------------------------------------------------------------ } +{bold.white Transaction Hash} {white |} {bold.yellow ${outcome.transaction.hash}} +{bold.white Gas Burnt} {white |} {bold.yellow ${outcome.transaction_outcome.outcome.gas_burnt}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function ftTransferCallInvoke( + contractAddress: string, + accountId: string, + receiverId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { outcome, result } = await ftTransferCall({ + receiver: contractAddress, + sender: accountId, + args: { + receiver_id: receiverId, + amount: 5n, + msg: "take-my-money", // defined in the receiver contract, keeps the tokens + memo: null, + + }, + deps: { + rpcProvider, + signer, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white ft_transfer_call} +{white ------------------------------------------------------------------------ } +{bold.white Transaction Hash} {white |} {bold.yellow ${outcome.transaction.hash}} +{bold.white Gas Burnt} {white |} {bold.yellow ${outcome.transaction_outcome.outcome.gas_burnt}} +{bold.white Result} {white |} {bold.yellow ${result}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} \ No newline at end of file diff --git a/packages/cookbook/contract-standards/non-fungible-token.ts b/packages/cookbook/contract-standards/non-fungible-token.ts new file mode 100644 index 0000000000..9834dc9993 --- /dev/null +++ b/packages/cookbook/contract-standards/non-fungible-token.ts @@ -0,0 +1,347 @@ +/** + * This serves both as a demo of interfacing with a Non-Fungible Token Standard + * contract and a basic test of the client library + * + * ! NOTE: These examples may not work with a JS/TS contract since near-sdk-js + * ! has some type differences from the NEP standards, see comments in + * ! @near-js/client/src/contract-standards/non-fungible-token.ts + * + * Tested against near-sdk-rs example NFT contract: + * https://github.com/near/near-sdk-rs/tree/master/examples/non-fungible-token + * + * Reproduction steps: + * - create three test accounts: hereafter referred to as CONTRACT_ID, ACCOUNT_ID, RECEIVER_ID + * - clone and build contract + * - deploy with init call + * - `near contract deploy use-file res/non_fungible_token.wasm with-init-call new_default_meta json-args '{"owner_id":"","total_supply":"10000"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' network-config testnet sign-with-keychain send` + * - mint two tokens to ACCOUNT_ID (note that ACCOUNT_ID must be the owner of the contract set during the init call in order to mint tokens) + * - `near contract call-function as-transaction nft_mint json-args '{"token_id": "1","token_owner_id": "","token_metadata": {"title":"One","description":"One"}}' prepaid-gas '100.0 Tgas' attached-deposit '0.5 NEAR' sign-as network-config testnet sign-with-keychain send` + * - `near contract call-function as-transaction nft_mint json-args '{"token_id": "2","token_owner_id": "","token_metadata": {"title":"Two","description":"Two"}}' prepaid-gas '100.0 Tgas' attached-deposit '0.5 NEAR' sign-as network-config testnet sign-with-keychain send` + * - run this script + * - `pnpm nonFungibleTokenStandard -- ` + * + * In order to test nftTransferCall, you will need to deploy a contract that + * implements the receiving function. One is provided by `near-sdk-rs` and is built + * alongside the NFT contract: + * https://github.com/near/near-sdk-rs/tree/master/examples/non-fungible-token/test-token-receiver + * + * - create a new test account for the receiver contract: hereafter referred to as TRANSFER_CONTRACT_ID + * - deploy with init call + * - `near contract deploy use-file res/token_receiver.wasm with-init-call new json-args '{"non_fungible_token_account_id":""}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' network-config testnet sign-with-keychain send` + * - run this script with an additional argument for the transfer contract address: + * - `pnpm nonFungibleTokenStandard -- ` + */ + +import { + getSignerFromKeystore, + getTestnetRpcProvider, + nftTransfer, + nftTransferCall, + nftToken, + nftTotalSupply, + nftSupplyForOwner, + nftTokens, + nftTokensForOwner, + nftMetadata, +} from "@near-js/client"; +import { UnencryptedFileSystemKeyStore } from "@near-js/keystores-node"; +import chalk from "chalk"; +import { join } from "node:path"; +import { homedir } from "node:os"; + +export default async function nonFungibleTokenStandard( + contractAddress: string, + accountId: string, + receiverId: string, + transferContractAddress?: string +) { + if (!contractAddress || !accountId || !receiverId) { + console.log( + chalk`{red pnpm nonFungibleTokenStandard -- CONTRACT_ADDRESS ACCOUNT_ID RECEIVER_ID}` + ); + return; +} + + // assumptions + // - token ID "1" exists + // - token ID "1" is owned by accountId + // - both accountId and receiverId are registered with the contract + // - token ID "2" exists + // - token ID "2" is owned by accountId + // run serially since calls may rely on previous calls + await nftTotalSupplyInvoke(contractAddress); + await nftMetadataInvoke(contractAddress); + await nftTokensInvoke(contractAddress); + + // check token ownership before transfer + await nftTokenInvoke(contractAddress, "1"); // Assuming token ID "1" exists + await nftSupplyForOwnerInvoke(contractAddress, accountId); + await nftTokensForOwnerInvoke(contractAddress, accountId); + + // transfer + await nftTransferInvoke(contractAddress, accountId, receiverId, "1"); + + // check token ownership after transfer + await nftTokenInvoke(contractAddress, "1"); + await nftSupplyForOwnerInvoke(contractAddress, receiverId); + await nftTokensForOwnerInvoke(contractAddress, receiverId); + + // transfer back to original owner + await nftTransferInvoke(contractAddress, receiverId, accountId, "1"); + await nftTokenInvoke(contractAddress, "1"); + + // from_index examples, skips first token and returns only one token + await nftTokensForOwnerInvoke(contractAddress, accountId, 1n, 1); + await nftTokensInvoke(contractAddress, 1n, 1); + + if (transferContractAddress) { + await nftTransferCallInvoke(contractAddress, accountId, receiverId, "1"); + } else { + console.log(chalk`{white skipping nftTransferCallInvoke since no transfer contract address was provided}`); + } +} + +export async function nftTotalSupplyInvoke(contractAddress: string) { + if (!contractAddress) { + console.log( + chalk`{red pnpm nonFungibleTokenStandard -- CONTRACT_ADDRESS ACCOUNT_ID RECEIVER_ID}` + ); + return; + } + + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await nftTotalSupply({ + args: undefined, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_total_supply} +{white ------------------------------------------------------------------------ } +{bold.white Total Supply} {white |} {bold.yellow ${result}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftTokenInvoke( + contractAddress: string, + tokenId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await nftToken({ + args: { + token_id: tokenId, + }, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_token} +{white ------------------------------------------------------------------------ } +{bold.white Token ID} {white |} {bold.yellow ${result.token_id}} +{bold.white Owner ID} {white |} {bold.yellow ${result.owner_id}} +{bold.white Metadata} {white |} {bold.yellow ${JSON.stringify(result.metadata)}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftMetadataInvoke(contractAddress: string) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await nftMetadata({ + args: undefined, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_metadata} +{white ------------------------------------------------------------------------ } +{bold.white Metadata} {white |} {bold.yellow ${JSON.stringify(result)}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftTransferInvoke( + contractAddress: string, + accountId: string, + receiverId: string, + tokenId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { outcome } = await nftTransfer({ + receiver: contractAddress, + sender: accountId, + args: { + receiver_id: receiverId, + token_id: tokenId, + }, + deps: { + rpcProvider, + signer, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_transfer} +{white ------------------------------------------------------------------------ } +{bold.white Transaction Hash} {white |} {bold.yellow ${outcome.transaction.hash}} +{bold.white Gas Burnt} {white |} {bold.yellow ${outcome.transaction_outcome.outcome.gas_burnt}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftSupplyForOwnerInvoke( + contractAddress: string, + accountId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await nftSupplyForOwner({ + args: { + account_id: accountId, + }, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_supply_for_owner} +{white ------------------------------------------------------------------------ } +{bold.white Supply for ${accountId}} {white |} {bold.yellow ${result}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftTokensInvoke( + contractAddress: string, + fromIndex?: bigint, + limit?: number +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await nftTokens({ + args: { + from_index: fromIndex ?? null, + limit: limit, + }, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_tokens} +{white ------------------------------------------------------------------------ } +{bold.white Tokens} {white |} {bold.yellow ${JSON.stringify(result, null, 2)}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftTokensForOwnerInvoke( + contractAddress: string, + accountId: string, + fromIndex?: bigint, + limit?: number +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await nftTokensForOwner({ + args: { + account_id: accountId, + from_index: fromIndex ?? null, + limit: limit, + }, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_tokens_for_owner} +{white ------------------------------------------------------------------------ } +{bold.white Tokens for ${accountId}} {white |} {bold.yellow ${JSON.stringify(result, null, 2)}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function nftTransferCallInvoke( + contractAddress: string, + accountId: string, + receiverAddress: string, + tokenId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { outcome } = await nftTransferCall({ + receiver: contractAddress, + sender: accountId, + args: { + receiver_id: receiverAddress, + token_id: tokenId, + msg: "return-it-now", // defined in the receiver contract, returns the token immediately + }, + deps: { + rpcProvider, + signer, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white nft_transfer_call} +{white ------------------------------------------------------------------------ } +{bold.white Transaction Hash} {white |} {bold.yellow ${outcome.transaction.hash}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} \ No newline at end of file diff --git a/packages/cookbook/contract-standards/storage-management.ts b/packages/cookbook/contract-standards/storage-management.ts new file mode 100644 index 0000000000..c6b95df720 --- /dev/null +++ b/packages/cookbook/contract-standards/storage-management.ts @@ -0,0 +1,232 @@ +/** + * This serves both as a demo of interfacing with a Storage Management Standard + * contract and a basic test of the client library + * + * Tested against near-sdk-rs example FT contract: + * https://github.com/near/near-sdk-rs/tree/master/examples/fungible-token + * + * Reproduction steps: + * - create two test accounts: hereafter referred to as CONTRACT_ID, ACCOUNT_ID + * - clone and build contract +* - deploy with init call + * - `near contract deploy use-file res/fungible_token.wasm with-init-call new_default_meta json-args '{"owner_id":"","total_supply":"10000"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' network-config testnet sign-with-keychain send` + * - run this script + * - `pnpm storageManagementStandard -- ` + */ + +import { + getSignerFromKeystore, + getTestnetRpcProvider, + storageDeposit, + storageWithdraw, + storageUnregister, + storageBalanceBounds, + storageBalanceOf, +} from "@near-js/client"; +import { UnencryptedFileSystemKeyStore } from "@near-js/keystores-node"; +import chalk from "chalk"; +import { join } from "node:path"; +import { homedir } from "node:os"; + +export default async function storageManagementStandard( + contractAddress: string, + accountId: string +) { + if (!contractAddress || !accountId) { + console.log( + chalk`{red pnpm storageManagementStandard -- CONTRACT_ADDRESS ACCOUNT_ID}` + ); + return; + } + + // run serially since calls may rely on previous calls + await storageBalanceBoundsCall(contractAddress); + await storageDepositCall(contractAddress, accountId); + // check balance after deposit, should exist + await storageBalanceOfCall(contractAddress, accountId); + try { + await storageWithdrawCall(contractAddress, accountId); + } catch (e) { + if (e.message.includes("amount is greater than the available storage balance")) { + console.log("EXPECTED FAILURE during storage_withdraw since testing against a contract with fixed storage amount:", e); + } else { + console.log("Unexpected error during storage_withdraw:", e); + } + } + await storageUnregisterCall(contractAddress, accountId); + // check balance after unregister, should not exist + await storageBalanceOfCall(contractAddress, accountId); +} + +export async function storageDepositCall( + contractAddress: string, + accountId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { result } = await storageDeposit({ + receiver: contractAddress, + sender: accountId, + args: { + account_id: accountId, + registration_only: false, + }, + deps: { + rpcProvider, + signer, + }, + deposit: 1000000000000000000000000n, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white storage_deposit} +{white ------------------------------------------------------------------------ } +{bold.white Total} {white |} {bold.yellow ${result.total}} +{bold.white Available} {white |} {bold.yellow ${result.available}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function storageWithdrawCall( + contractAddress: string, + accountId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { result } = await storageWithdraw({ + receiver: contractAddress, + sender: accountId, + args: { + amount: 1000000000000000000000000n, + }, + deps: { + rpcProvider, + signer, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white storage_withdraw} +{white ------------------------------------------------------------------------ } +{bold.white Total} {white |} {bold.yellow ${result.total}} +{bold.white Available} {white |} {bold.yellow ${result.available}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function storageUnregisterCall( + contractAddress: string, + accountId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + // initialize the transaction signer using a pre-existing key for ACCOUNT_ID + const signer = getSignerFromKeystore( + accountId, + "testnet", + new UnencryptedFileSystemKeyStore(join(homedir(), ".near-credentials")) + ); + + const { result } = await storageUnregister({ + receiver: contractAddress, + sender: accountId, + args: { + force: true, + }, + deps: { + rpcProvider, + signer, + }, + deposit: 1n, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white storage_unregister} +{white ------------------------------------------------------------------------ } +{bold.white Result} {white |} {bold.yellow ${result}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function storageBalanceBoundsCall(contractAddress: string) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await storageBalanceBounds({ + args: undefined, // TODO: figure out how to pass in empty object + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + const output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white storage_balance_bounds} +{white ------------------------------------------------------------------------ } +{bold.white Min} {white |} {bold.yellow ${result.min}} +{bold.white Max} {white |} {bold.yellow ${result.max}} +{white ------------------------------------------------------------------------ } + `; + console.log(output); +} + +export async function storageBalanceOfCall( + contractAddress: string, + accountId: string +) { + // initialize testnet RPC provider + const rpcProvider = getTestnetRpcProvider(); + + const result = await storageBalanceOf({ + args: { + account_id: accountId, + }, + account: contractAddress, + deps: { + rpcProvider, + }, + }); + + let output; + if (result === null) { + output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white storage_balance_of} +{white ------------------------------------------------------------------------ } +{bold.white Result} {white |} {bold.yellow ${null}} +{white ------------------------------------------------------------------------ } + `; + } else { + output = chalk` +{white ------------------------------------------------------------------------ } +{bold.green RESULTS} {white storage_balance_of} +{white ------------------------------------------------------------------------ } +{bold.white Total} {white |} {bold.yellow ${result.total}} +{bold.white Available} {white |} {bold.yellow ${result.available}} +{white ------------------------------------------------------------------------ } + `; + } + + console.log(output); +} diff --git a/packages/cookbook/package.json b/packages/cookbook/package.json index 9c6efaf28a..0c40beef3e 100644 --- a/packages/cookbook/package.json +++ b/packages/cookbook/package.json @@ -23,6 +23,9 @@ "getTransactionStatus": "tsx -e \"import f from './transactions/get-tx-status.ts'; f(...process.argv.slice(1));\"", "metaTransaction": "tsx -e \"import f from './transactions/meta-transaction.ts'; f(...process.argv.slice(1));\"", "metaTransactionRelayer": "tsx -e \"import f from './transactions/meta-transaction-relayer.ts'; f(...process.argv.slice(1));\"", + "storageManagementStandard": "tsx -e \"import f from './contract-standards/storage-management.ts'; f(...process.argv.slice(1));\"", + "fungibleTokenStandard": "tsx -e \"import f from './contract-standards/fungible-token.ts'; f(...process.argv.slice(1));\"", + "nonFungibleTokenStandard": "tsx -e \"import f from './contract-standards/non-fungible-token.ts'; f(...process.argv.slice(1));\"", "traverseBlocks": "tsx -e \"import f from './transactions/traverse-blocks.ts'; f(...process.argv.slice(1));\"", "unwrapNear": "tsx -e \"import f from './utils/unwrap-near.ts'; f(...process.argv.slice(1));\"", "verifySignature": "tsx -e \"import f from './utils/verify-signature.ts'; f(...process.argv.slice(1));\"", @@ -40,6 +43,7 @@ "near-api-js": "workspace:*", "ts-node": "^10.9.2", "tsconfig": "workspace:*", + "tsx": "^4.19.1", "typescript": "5.4.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fafe83ccdb..9696e4a095 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -220,6 +220,12 @@ importers: isomorphic-fetch: specifier: 3.0.0 version: 3.0.0(encoding@0.1.13) + near-contract-standards: + specifier: ^2.0.0 + version: 2.0.0(@types/babel__core@7.20.5)(@types/node@20.0.0) + near-sdk-js: + specifier: ^2.0.0 + version: 2.0.0(@types/babel__core@7.20.5)(@types/node@20.0.0) devDependencies: '@types/node': specifier: 20.0.0 @@ -269,6 +275,9 @@ importers: tsconfig: specifier: workspace:* version: link:../tsconfig + tsx: + specifier: ^4.19.1 + version: 4.19.1 typescript: specifier: 5.4.5 version: 5.4.5 @@ -783,10 +792,24 @@ packages: resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.24.7': resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.4': + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-environment-visitor@7.24.7': resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} @@ -799,6 +822,10 @@ packages: resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} @@ -809,14 +836,38 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.24.7': resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.24.7': resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} @@ -825,6 +876,10 @@ packages: resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} @@ -846,6 +901,17 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.24.7': + resolution: {integrity: sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -861,6 +927,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.24.7': + resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -919,6 +991,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.24.7': + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.24.7': resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} @@ -927,14 +1017,26 @@ packages: resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.7': resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.7': resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1102,6 +1204,150 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1308,6 +1554,38 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-commonjs@21.1.0': + resolution: {integrity: sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + + '@rollup/plugin-node-resolve@13.3.0': + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -1325,6 +1603,9 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} + '@ts-morph/common@0.17.0': + resolution: {integrity: sha512-RMSSvSfs9kb0VzkvQ2NWobwnj7TxCA9vI/IjR9bDHqgAyVbu2T0DN4wiKVqomyDWqO7dPr/tErSfq7urQ1Q37g==} + '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -1355,6 +1636,12 @@ packages: '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1388,6 +1675,9 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@16.18.108': + resolution: {integrity: sha512-fj42LD82fSv6yN9C6Q4dzS+hujHj+pTv0IpRR3kI20fnYeS0ytBpjFO9OjmDowSPPt4lNKN46JLaKbCyP+BW2A==} + '@types/node@18.11.18': resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} @@ -1400,6 +1690,9 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -1418,6 +1711,17 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1429,6 +1733,16 @@ packages: typescript: optional: true + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1439,10 +1753,24 @@ packages: typescript: optional: true + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/type-utils@6.21.0': resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1453,10 +1781,23 @@ packages: typescript: optional: true + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1466,12 +1807,22 @@ packages: typescript: optional: true + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.21.0': resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1578,6 +1929,11 @@ packages: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1681,6 +2037,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + bytestreamjs@2.0.1: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} @@ -1782,6 +2142,9 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + code-block-writer@11.0.3: + resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==} + collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -1798,11 +2161,18 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + commitlint@19.3.0: resolution: {integrity: sha512-B8eUVQCjz+1ZAjR3LC3+vzKg7c4/qN4QhSxkjp0u0v7Pi79t9CsnGAluvveKmFh56e885zgToPL5ax+l8BHTPg==} engines: {node: '>=v18'} hasBin: true + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -1915,6 +2285,10 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -2056,6 +2430,11 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2072,6 +2451,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2112,10 +2495,20 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2173,6 +2566,10 @@ packages: resolution: {integrity: sha512-efNrRbckp48AW7Q43o6gcp8/wnoBM7hwKikQntdiR2/NqVMPaCXFQs8kJ9wQqfv5V3PxZdg4kD9DpxdqYl6jxQ==} engines: {node: '>=10'} + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2181,6 +2578,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2285,6 +2686,9 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} engines: {node: '>=16'} @@ -2493,6 +2897,10 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -2533,6 +2941,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-my-ip-valid@1.0.1: resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==} @@ -2562,6 +2973,9 @@ packages: is-property@1.0.2: resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -2807,6 +3221,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -2816,6 +3233,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2867,6 +3287,10 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} @@ -2874,6 +3298,10 @@ packages: localstorage-memory@1.0.3: resolution: {integrity: sha512-t9P8WB6DcVttbw/W4PIE8HOqum8Qlvx5SjR6oInwR9Uia0EEmyUeBh7S+weKByW+l/f45Bj4L/dgZikGFDM6ng==} + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -2886,6 +3314,9 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -2939,6 +3370,9 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -3014,6 +3448,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -3062,6 +3500,9 @@ packages: engines: {npm: '>=1.4.0'} hasBin: true + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3071,6 +3512,9 @@ packages: near-api-js@4.0.0: resolution: {integrity: sha512-Gh4Lq9LXFDNtEHGXeqYFjbvS9lodX34srmFAxhOgGqjklK5QArrT7bTifWA9mi3QGe3MqwwwfAIVONbeZ0qSpg==} + near-contract-standards@2.0.0: + resolution: {integrity: sha512-eVlrie5nVGwXb4+XZD9PEHjc+c2x0xTzQq8xDnr0TPruby7bA3g3mTEedxYfHNpFgXATO7IfJQegFfWMV96Rbw==} + near-hello@0.5.1: resolution: {integrity: sha512-k7S8VFyESWgkKYDso99B4XbxAdo0VX9b3+GAaO5PvMgQjNr/6o09PHRywg/NkBQpf+ZYj7nNpJcyrNJGQsvA3w==} @@ -3078,6 +3522,14 @@ packages: resolution: {integrity: sha512-6/AjLOzGLQsSzTHavrRe7CVMU5+CUnTg/7g66a7+jkP22ff5CupnwXrUE14iJ2QyyhRZr7VuQQj/G+glUmaNQg==} hasBin: true + near-sdk-js@2.0.0: + resolution: {integrity: sha512-mE+FAUI5uXJafdtWjHcar8ow7EAUcAK0WH+kuaxbN8KitbuCMVdY4b1GQT48p3qhg7EUYbFy6x+7+Sf6vNitMw==} + hasBin: true + + near-typescript-json-schema@0.55.0: + resolution: {integrity: sha512-3AFYm89FHB3Bn3+Usow5iP7avF9QIkxh6PP5qCgr66/IT9SIQSG0PGPBtNDcj+WLZCL4yHzLmW7TkdK7nDzy1A==} + hasBin: true + near-units@0.1.9: resolution: {integrity: sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA==} hasBin: true @@ -3178,6 +3630,10 @@ packages: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3190,6 +3646,10 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -3206,6 +3666,10 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -3217,10 +3681,24 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-equal@1.2.5: + resolution: {integrity: sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3259,6 +3737,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -3267,6 +3749,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -3401,6 +3887,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -3430,6 +3919,21 @@ packages: engines: {node: 20 || >=22} hasBin: true + rollup-plugin-sourcemaps@0.6.3: + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3447,6 +3951,10 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3522,6 +4030,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -3534,6 +4046,10 @@ packages: engines: {node: '>=6'} hasBin: true + source-map-resolve@0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -3541,6 +4057,10 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} @@ -3744,6 +4264,9 @@ packages: esbuild: optional: true + ts-morph@16.0.0: + resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==} + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -3758,9 +4281,23 @@ packages: '@swc/wasm': optional: true + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + tty-table@4.2.3: resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} engines: {node: '>=8.0.0'} @@ -3891,6 +4428,11 @@ packages: peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + typescript@4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -4102,6 +4644,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.25.6 + '@babel/helper-compilation-targets@7.24.7': dependencies: '@babel/compat-data': 7.24.7 @@ -4110,6 +4663,19 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.24.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-environment-visitor@7.24.7': dependencies: '@babel/types': 7.24.7 @@ -4123,6 +4689,13 @@ snapshots: dependencies: '@babel/types': 7.24.7 + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.24.7 @@ -4141,8 +4714,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.25.2(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.25.6 + '@babel/helper-plugin-utils@7.24.7': {} + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-replace-supers@7.25.0(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.24.7 @@ -4150,12 +4748,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + '@babel/helper-split-export-declaration@7.24.7': dependencies: '@babel/types': 7.24.7 '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-option@7.24.7': {} @@ -4176,6 +4783,19 @@ snapshots: dependencies: '@babel/types': 7.24.7 + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -4191,6 +4811,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -4246,6 +4871,37 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.24.7': dependencies: regenerator-runtime: 0.14.1 @@ -4256,6 +4912,12 @@ snapshots: '@babel/parser': 7.24.7 '@babel/types': 7.24.7 + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + '@babel/traverse@7.24.7': dependencies: '@babel/code-frame': 7.24.7 @@ -4271,12 +4933,30 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.7': dependencies: '@babel/helper-string-parser': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + '@bcoe/v8-coverage@0.2.3': {} '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': @@ -4545,45 +5225,117 @@ snapshots: conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.2.1': - dependencies: - '@commitlint/top-level': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - git-raw-commits: 4.0.0 - minimist: 1.2.8 + '@commitlint/read@19.2.1': + dependencies: + '@commitlint/top-level': 19.0.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + + '@commitlint/resolve-extends@19.1.0': + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/types': 19.0.3 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.0.3': + dependencies: + '@commitlint/ensure': 19.0.3 + '@commitlint/message': 19.0.0 + '@commitlint/to-lines': 19.0.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + + '@commitlint/to-lines@19.0.0': {} + + '@commitlint/top-level@19.0.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.0.3': + dependencies: + '@types/conventional-commits-parser': 5.0.0 + chalk: 5.3.0 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true - '@commitlint/resolve-extends@19.1.0': - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 - global-directory: 4.0.1 - import-meta-resolve: 4.1.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 + '@esbuild/openbsd-arm64@0.23.1': + optional: true - '@commitlint/rules@19.0.3': - dependencies: - '@commitlint/ensure': 19.0.3 - '@commitlint/message': 19.0.0 - '@commitlint/to-lines': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@esbuild/openbsd-x64@0.23.1': + optional: true - '@commitlint/to-lines@19.0.0': {} + '@esbuild/sunos-x64@0.23.1': + optional: true - '@commitlint/top-level@19.0.0': - dependencies: - find-up: 7.0.0 + '@esbuild/win32-arm64@0.23.1': + optional: true - '@commitlint/types@19.0.3': - dependencies: - '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 + '@esbuild/win32-ia32@0.23.1': + optional: true - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@esbuild/win32-x64@0.23.1': + optional: true '@eslint-community/eslint-utils@4.4.0(eslint@8.20.0)': dependencies: @@ -5047,6 +5799,47 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-commonjs@21.1.0(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.8 + rollup: 2.79.1 + + '@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 + + '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + + '@scure/base@1.1.9': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@4.6.0': {} @@ -5063,6 +5856,13 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@ts-morph/common@0.17.0': + dependencies: + fast-glob: 3.3.2 + minimatch: 5.1.6 + mkdirp: 1.0.4 + path-browserify: 1.0.1 + '@tsconfig/node10@1.0.11': {} '@tsconfig/node12@1.0.11': {} @@ -5103,6 +5903,10 @@ snapshots: dependencies: '@types/node': 20.0.0 + '@types/estree@0.0.39': {} + + '@types/estree@1.0.6': {} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.0.0 @@ -5135,6 +5939,8 @@ snapshots: '@types/node@12.20.55': {} + '@types/node@16.18.108': {} + '@types/node@18.11.18': {} '@types/node@20.0.0': {} @@ -5145,6 +5951,10 @@ snapshots: '@types/normalize-package-data@2.4.4': {} + '@types/resolve@1.17.1': + dependencies: + '@types/node': 20.0.0 + '@types/responselike@1.0.3': dependencies: '@types/node': 20.0.0 @@ -5161,6 +5971,25 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@5.4.5))(eslint@8.20.0)(typescript@4.7.4)': + dependencies: + '@eslint-community/regexpp': 4.10.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.20.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.20.0)(typescript@4.7.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.20.0)(typescript@4.7.4) + debug: 4.3.5 + eslint: 8.20.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare-lite: 1.4.0 + semver: 7.6.2 + tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.20.0)(typescript@5.4.5))(eslint@8.20.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.1 @@ -5181,6 +6010,30 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@4.7.4)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) + debug: 4.3.5 + eslint: 8.20.0 + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + debug: 4.3.5 + eslint: 8.20.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@6.21.0(eslint@8.20.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 @@ -5194,11 +6047,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/type-utils@5.62.0(eslint@8.20.0)(typescript@4.7.4)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.20.0)(typescript@4.7.4) + debug: 4.3.5 + eslint: 8.20.0 + tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@6.21.0(eslint@8.20.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) @@ -5211,8 +6081,38 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/types@6.21.0': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@4.7.4)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.2 + tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.2 + tsutils: 3.21.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 6.21.0 @@ -5228,6 +6128,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@5.62.0(eslint@8.20.0)(typescript@4.7.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.20.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) + eslint: 8.20.0 + eslint-scope: 5.1.1 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/utils@6.21.0(eslint@8.20.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.20.0) @@ -5242,6 +6157,11 @@ snapshots: - supports-color - typescript + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -5350,6 +6270,8 @@ snapshots: pvutils: 1.1.3 tslib: 2.6.3 + atob@2.1.2: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -5485,6 +6407,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builtin-modules@3.3.0: {} + bytestreamjs@2.0.1: {} cacheable-lookup@5.0.4: {} @@ -5589,6 +6513,8 @@ snapshots: co@4.6.0: {} + code-block-writer@11.0.3: {} + collect-v8-coverage@1.0.2: {} color-convert@1.9.3: @@ -5603,6 +6529,8 @@ snapshots: color-name@1.1.4: {} + commander@9.5.0: {} + commitlint@19.3.0(@types/node@22.5.5)(typescript@5.4.5): dependencies: '@commitlint/cli': 19.3.0(@types/node@22.5.5)(typescript@5.4.5) @@ -5611,6 +6539,8 @@ snapshots: - '@types/node' - typescript + commondir@1.0.1: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -5772,6 +6702,8 @@ snapshots: decamelize@1.2.0: {} + decode-uri-component@0.2.2: {} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -5944,6 +6876,33 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + escalade@3.1.2: {} escape-string-regexp@1.0.5: {} @@ -5952,6 +6911,11 @@ snapshots: escape-string-regexp@4.0.0: {} + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 @@ -6022,8 +6986,14 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + esutils@2.0.3: {} events@3.3.0: {} @@ -6104,6 +7074,10 @@ snapshots: pkijs: 3.0.16 tldts: 6.0.23 + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -6112,6 +7086,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -6226,6 +7204,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + git-raw-commits@4.0.0: dependencies: dargs: 8.1.0 @@ -6437,6 +7419,10 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + is-callable@1.2.7: {} is-ci@3.0.1: @@ -6468,6 +7454,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-module@1.0.0: {} + is-my-ip-valid@1.0.1: {} is-my-json-valid@2.20.6: @@ -6492,6 +7480,10 @@ snapshots: is-property@1.0.2: {} + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.6 + is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -7129,12 +8121,16 @@ snapshots: json-buffer@3.0.1: {} + json-parse-better-errors@1.0.2: {} + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} + json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} @@ -7174,6 +8170,13 @@ snapshots: lines-and-columns@1.2.4: {} + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.11 @@ -7183,6 +8186,11 @@ snapshots: localstorage-memory@1.0.3: {} + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -7195,6 +8203,8 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} lodash.isplainobject@4.0.6: {} @@ -7234,6 +8244,10 @@ snapshots: lunr@2.3.9: {} + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + make-dir@4.0.0: dependencies: semver: 7.6.2 @@ -7297,6 +8311,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 @@ -7334,6 +8352,8 @@ snapshots: mustache@4.0.0: {} + natural-compare-lite@1.4.0: {} + natural-compare@1.4.0: {} near-abi@0.1.1: @@ -7362,6 +8382,17 @@ snapshots: transitivePeerDependencies: - encoding + near-contract-standards@2.0.0(@types/babel__core@7.20.5)(@types/node@20.0.0): + dependencies: + lodash-es: 4.17.21 + near-sdk-js: 2.0.0(@types/babel__core@7.20.5)(@types/node@20.0.0) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/babel__core' + - '@types/node' + - supports-color + near-hello@0.5.1: {} near-sandbox@0.0.18: @@ -7369,6 +8400,51 @@ snapshots: got: 11.8.6 tar: 6.2.1 + near-sdk-js@2.0.0(@types/babel__core@7.20.5)(@types/node@20.0.0): + dependencies: + '@babel/core': 7.24.7 + '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.24.7) + '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/types': 7.25.6 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(@types/babel__core@7.20.5)(rollup@2.79.1) + '@rollup/plugin-commonjs': 21.1.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) + '@scure/base': 1.1.9 + '@types/estree': 1.0.6 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.20.0)(typescript@5.4.5))(eslint@8.20.0)(typescript@4.7.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.20.0)(typescript@4.7.4) + commander: 9.5.0 + eslint: 8.20.0 + json-schema: 0.4.0 + lodash-es: 4.17.21 + near-abi: 0.1.1 + near-typescript-json-schema: 0.55.0 + rollup: 2.79.1 + rollup-plugin-sourcemaps: 0.6.3(@types/node@20.0.0)(rollup@2.79.1) + signale: 1.4.0 + ts-morph: 16.0.0 + typescript: 4.7.4 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/babel__core' + - '@types/node' + - supports-color + + near-typescript-json-schema@0.55.0: + dependencies: + '@types/json-schema': 7.0.15 + '@types/node': 16.18.108 + glob: 7.2.3 + path-equal: 1.2.5 + safe-stable-stringify: 2.5.0 + ts-node: 10.9.2(@types/node@16.18.108)(typescript@4.7.4) + typescript: 4.7.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + near-units@0.1.9: dependencies: bn.js: 5.2.1 @@ -7486,6 +8562,10 @@ snapshots: dependencies: p-map: 2.1.0 + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7498,6 +8578,10 @@ snapshots: dependencies: yocto-queue: 1.0.0 + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -7512,6 +8596,8 @@ snapshots: p-map@2.1.0: {} + p-try@1.0.0: {} + p-try@2.2.0: {} package-json-from-dist@1.0.0: {} @@ -7520,6 +8606,11 @@ snapshots: dependencies: callsites: 3.1.0 + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.7 @@ -7527,6 +8618,12 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + path-browserify@1.0.1: {} + + path-equal@1.2.5: {} + + path-exists@3.0.0: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -7550,10 +8647,17 @@ snapshots: picomatch@2.3.1: {} + pify@3.0.0: {} + pify@4.0.1: {} pirates@4.0.6: {} + pkg-conf@2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -7681,6 +8785,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve.exports@2.0.2: {} resolve@1.22.8: @@ -7706,6 +8812,18 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.0 + rollup-plugin-sourcemaps@0.6.3(@types/node@20.0.0)(rollup@2.79.1): + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + source-map-resolve: 0.6.0 + optionalDependencies: + '@types/node': 20.0.0 + + rollup@2.79.1: + optionalDependencies: + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -7729,6 +8847,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} secp256k1@5.0.0: @@ -7800,6 +8920,12 @@ snapshots: signal-exit@4.1.0: {} + signale@1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -7813,6 +8939,11 @@ snapshots: wcwidth: 1.0.1 yargs: 15.4.1 + source-map-resolve@0.6.0: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 @@ -7820,6 +8951,8 @@ snapshots: source-map@0.6.1: {} + sourcemap-codec@1.4.8: {} + spawn-command@0.0.2-1: {} spawndamnit@2.0.0: @@ -8038,6 +9171,29 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.7) + ts-morph@16.0.0: + dependencies: + '@ts-morph/common': 0.17.0 + code-block-writer: 11.0.3 + + ts-node@10.9.2(@types/node@16.18.108)(typescript@4.7.4): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.108 + acorn: 8.12.0 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.7.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + ts-node@10.9.2(@types/node@18.11.18)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -8094,8 +9250,27 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + tslib@1.14.1: {} + tslib@2.6.3: {} + tsutils@3.21.0(typescript@4.7.4): + dependencies: + tslib: 1.14.1 + typescript: 4.7.4 + + tsutils@3.21.0(typescript@5.4.5): + dependencies: + tslib: 1.14.1 + typescript: 5.4.5 + + tsx@4.19.1: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + tty-table@4.2.3: dependencies: chalk: 4.1.2 @@ -8221,6 +9396,8 @@ snapshots: shiki: 0.14.7 typescript: 5.4.5 + typescript@4.7.4: {} + typescript@5.4.5: {} unbox-primitive@1.0.2: