diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..24ddada --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: 'npm' + directory: '/' + schedule: + interval: 'daily' \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index e28e0d3..21d16ae 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1,3 @@ -npm run generate -git add data.json \ No newline at end of file +bun run generate +npm run generate_v1 +git add . \ No newline at end of file diff --git a/README.md b/README.md index 1e1d658..b25cafb 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,53 @@ # Pinax Chains -This repository is the single-source-of-truth for the metadata of chains supported by Pinax. To make it more accessible, we've published it as a private npm package ([See below](#install_from_npm)) and created a public endpoint to fetch publicly available chains metadata ([See below](#public_endpoint)). +Welcome to the Pinax Chains repository. This is the definitive source for the metadata of chains supported by Pinax **_products_**. Note that we maintain a separate, private list for internal operations. -You can have a look at the [Chain Type](/types/chain.types.ts) and at our [list of supported, to-be-supported, or once-supported chains](/data/chains). +To enhance accessibility, we offer the metadata as an [npm package](#install_from_npm) and provide a [public API endpoint](#public_endpoint) for fetching the data. -**Note**: Some chains may be listed but won't have any service supported or may have been deprecated, see each chain's metadata to ensure the chain is truly supported. +You can view details about the [Chain Type](/types/chain.types.ts) and explore our [list of supported, to-be-supported, or deprecated chains](/types/pinax.types.ts). -## Install from npm +> **Note**: Some chains may be listed without supported services or may have been deprecated. Always check the chain's metadata to confirm its current support status. -```bash -npm install @pinax/chains -``` +## What's New -## Public Endpoint +With the 2.0 release, we’ve made significant improvements to enhance developer and maintainer experience. Key updates include: -You can fetch the publicly available chains metadata from the following endpoint: - -```bash -curl https://pinax.network/api/chains -``` - -## Contributing +- ✅ Support for EVM chains +- ✅ Reintroduced TypeScript support +- ✅ Improved management of chain indexes (priority order) +- ✅ Consolidated chain utilities and service configurations across projects +- ✅ Automated checks for missing chain icons +- ✅ Simplified data model reflecting better relationships between chains, services, and networks +- ✅ Inclusion of beta chains +- ✅ Support for `unreleased` and `beta` services +- ✅ Eliminated redundant flags and information +- ✅ Integrated chains website into metadata +- And more... -If you want to contribute to the metadata of chains, please open a PR with the changes you want to make. We'll review it and merge it if it's correct. +## Installation -### Adding a new chain +You first need to install [bun](https://bun.sh/). -Adding a new chain is as simple as adding a new file to the `data/chains` directory. The file should be named after the chain's official Pinax ID and should contain the metadata of the chain. Also make sure to run the `npm run generate:type_pinaxid` and `npm run generate:data_json` commands to update the related types and index. +### From npm -If you're unsure about the fields you need to fill, you can have a look at the [Chain Type](/types/chain.types.ts) to learn more about the fields you need to fill. +To install the package, run: -### Updating an existing chain - -To update an existing chain, you can simply open a PR with the changes you want to make to the chain's metadata. +```bash +npm install @pinax/chains +``` -### Adding / Validating Graph IDs +### Public Endpoint -We use the `graph_id` field to match our chains to The Graph's. You can check the available graph IDs in the [Graphs](/types/graph.types.ts) file, which is [generated automatically](/scripts/generate/graphid_type.js) by fetching supported chains from The Graph's API. You can run `npm run generate:type_graphid` to update the graph IDs. +Access the chains metadata via the public API endpoint: -### Updating the Chain Type +```bash +curl https://pinax.network/api/chains +``` -If you want to add a new field to the chain type, you can simply open a PR with the changes you want to make to the chain type and make sure every chain's metadata is updated to include the new field if required. +### How to use -Removing a field from the chain type is not recommended, as it may break the metadata of the chains. If you want to remove a field, please open an issue to discuss it first. +Please see [How to use](/docs/how_to_use.md) documentation for more information. -### Removing a chain +## Contributing -If a chain is no longer supported, simply set the `deprecated_at` field as the date of the deprecation. This allows the different services to know when to stop supporting the chain, and enables us to keep track of the chains we've supported in the past for proper redirects and such. +If you wish to contribute to the chain metadata, please open a pull request (PR) with your proposed changes. We will review and merge it if accurate. Be sure to consult the [documentation](/docs) before contributing. \ No newline at end of file diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000..de523b5 Binary files /dev/null and b/bun.lockb differ diff --git a/configs.ts b/configs.ts deleted file mode 100644 index 8bb0e9f..0000000 --- a/configs.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const DEFAULT_SERVICE_PORT = 443; -export const DOMAIN = 'pinax.network'; -export const DEFAULT_IMG_BASE_URL = `https://${DOMAIN}/vector/chain`; diff --git a/data.d.ts b/data.d.ts deleted file mode 100644 index 4728d88..0000000 --- a/data.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { BlockType } from './types/block.types'; -import { Chain } from './types/chain.types'; -import { GraphId } from './types/graph.types'; -import { Mainnet } from './types/mainnet.types'; -import { PinaxId } from './types/pinax.types'; -import { SupportedServices } from './types/service.types'; -import { Standard } from './types/standard.types'; - -export { - BlockType, - Chain, - GraphId, - Mainnet, - PinaxId, - SupportedServices, - Standard, -}; diff --git a/data/chains/alfajores.json b/data/chains/V1/alfajores.json similarity index 96% rename from data/chains/alfajores.json rename to data/chains/V1/alfajores.json index 4d7d155..ef0a4ca 100644 --- a/data/chains/alfajores.json +++ b/data/chains/V1/alfajores.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "celo", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/amoy.json b/data/chains/V1/amoy.json similarity index 96% rename from data/chains/amoy.json rename to data/chains/V1/amoy.json index 6a49256..fbfb342 100644 --- a/data/chains/amoy.json +++ b/data/chains/V1/amoy.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "polygon", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/arbgoerli.json b/data/chains/V1/arbgoerli.json similarity index 74% rename from data/chains/arbgoerli.json rename to data/chains/V1/arbgoerli.json index 1f24aa1..8e64fab 100644 --- a/data/chains/arbgoerli.json +++ b/data/chains/V1/arbgoerli.json @@ -4,8 +4,9 @@ "graph_id": "arbitrum-goerli", "name": "Arbitrum Goerli", "alt_names": [], - "mainnet": "arbitrum", + "mainnet": "arbone", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -15,15 +16,15 @@ "is_testnet": true, "supported_services": { "firehose": { - "released_at": null, + "released_at": "2024-05-03T00:00:00.000Z", "deprecated_at": null }, "substreams": { - "released_at": null, + "released_at": "2024-05-03T00:00:00.000Z", "deprecated_at": null }, "rpc": { - "released_at": null, + "released_at": "2024-05-03T00:00:00.000Z", "deprecated_at": null } } diff --git a/data/chains/arbone.json b/data/chains/V1/arbone.json similarity index 95% rename from data/chains/arbone.json rename to data/chains/V1/arbone.json index efaf9e0..8be6947 100644 --- a/data/chains/arbone.json +++ b/data/chains/V1/arbone.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "arbone", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/arbsepolia.json b/data/chains/V1/arbsepolia.json similarity index 93% rename from data/chains/arbsepolia.json rename to data/chains/V1/arbsepolia.json index da4c7b6..6b4db7d 100644 --- a/data/chains/arbsepolia.json +++ b/data/chains/V1/arbsepolia.json @@ -4,8 +4,9 @@ "graph_id": "arbitrum-sepolia", "name": "Arbitrum Sepolia", "alt_names": [], - "mainnet": "arbone", + "mainnet": "arbitrum", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/arweave.json b/data/chains/V1/arweave.json similarity index 96% rename from data/chains/arweave.json rename to data/chains/V1/arweave.json index 0fa46ce..b6c5d31 100644 --- a/data/chains/arweave.json +++ b/data/chains/V1/arweave.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "arweave", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.arweave.type.v1.Block", "url": "https://buf.build/pinax/firehose-arweave/docs/main:sf.arweave.type.v1" diff --git a/data/chains/avalanche.json b/data/chains/V1/avalanche.json similarity index 96% rename from data/chains/avalanche.json rename to data/chains/V1/avalanche.json index fb6b4ad..98e9902 100644 --- a/data/chains/avalanche.json +++ b/data/chains/V1/avalanche.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "avalanche", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/base.json b/data/chains/V1/base.json similarity index 96% rename from data/chains/base.json rename to data/chains/V1/base.json index 9b23a2c..ead419e 100644 --- a/data/chains/base.json +++ b/data/chains/V1/base.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "base", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/bitcoin.json b/data/chains/V1/bitcoin.json similarity index 95% rename from data/chains/bitcoin.json rename to data/chains/V1/bitcoin.json index dbb7514..b842225 100644 --- a/data/chains/bitcoin.json +++ b/data/chains/V1/bitcoin.json @@ -6,6 +6,7 @@ "alt_names": ["btc"], "mainnet": "bitcoin", "standard": "brc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.bitcoin.type.v1.Block", "url": "https://buf.build/streamingfast/firehose-bitcoin/docs/main:sf.bitcoin.type.v1" diff --git a/data/chains/bsc.json b/data/chains/V1/bsc.json similarity index 96% rename from data/chains/bsc.json rename to data/chains/V1/bsc.json index 29da2d2..9a09ece 100644 --- a/data/chains/bsc.json +++ b/data/chains/V1/bsc.json @@ -6,6 +6,7 @@ "alt_names": ["bsc", "binance"], "mainnet": "bsc", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/celo.json b/data/chains/V1/celo.json similarity index 96% rename from data/chains/celo.json rename to data/chains/V1/celo.json index 33cba65..cd2ff34 100644 --- a/data/chains/celo.json +++ b/data/chains/V1/celo.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "celo", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data.json b/data/chains/V1/chains.json similarity index 95% rename from data.json rename to data/chains/V1/chains.json index 57f5281..00e41ce 100644 --- a/data.json +++ b/data/chains/V1/chains.json @@ -7,6 +7,7 @@ "alt_names": [], "mainnet": "celo", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -38,6 +39,7 @@ "alt_names": [], "mainnet": "polygon", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -66,8 +68,9 @@ "graph_id": "arbitrum-goerli", "name": "Arbitrum Goerli", "alt_names": [], - "mainnet": "arbitrum", + "mainnet": "arbone", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -77,15 +80,15 @@ "is_testnet": true, "supported_services": { "firehose": { - "released_at": null, + "released_at": "2024-05-03T00:00:00.000Z", "deprecated_at": null }, "substreams": { - "released_at": null, + "released_at": "2024-05-03T00:00:00.000Z", "deprecated_at": null }, "rpc": { - "released_at": null, + "released_at": "2024-05-03T00:00:00.000Z", "deprecated_at": null } } @@ -98,6 +101,7 @@ "alt_names": [], "mainnet": "arbone", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -126,8 +130,9 @@ "graph_id": "arbitrum-sepolia", "name": "Arbitrum Sepolia", "alt_names": [], - "mainnet": "arbone", + "mainnet": "arbitrum", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -158,6 +163,7 @@ "alt_names": [], "mainnet": "arweave", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.arweave.type.v1.Block", "url": "https://buf.build/pinax/firehose-arweave/docs/main:sf.arweave.type.v1" @@ -189,6 +195,7 @@ "alt_names": [], "mainnet": "avalanche", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -220,6 +227,7 @@ "alt_names": [], "mainnet": "base", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -253,6 +261,7 @@ ], "mainnet": "bitcoin", "standard": "brc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.bitcoin.type.v1.Block", "url": "https://buf.build/streamingfast/firehose-bitcoin/docs/main:sf.bitcoin.type.v1" @@ -286,6 +295,7 @@ ], "mainnet": "bsc", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -316,6 +326,7 @@ "alt_names": [], "mainnet": "celo", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -347,6 +358,7 @@ "alt_names": [], "mainnet": "bsc", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -377,6 +389,7 @@ "alt_names": [], "mainnet": "arbitrum", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -407,6 +420,7 @@ "alt_names": [], "mainnet": "arbitrum", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -437,6 +451,7 @@ "alt_names": [], "mainnet": "cosmoshub", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" @@ -467,6 +482,7 @@ "alt_names": [], "mainnet": "decimal", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -497,6 +513,7 @@ "alt_names": [], "mainnet": "eos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -528,6 +545,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -559,6 +577,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -590,6 +609,7 @@ "alt_names": [], "mainnet": "fantom", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -621,6 +641,7 @@ "alt_names": [], "mainnet": "gnosis", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -652,6 +673,7 @@ "alt_names": [], "mainnet": "gnosis", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -683,6 +705,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -714,6 +737,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -745,6 +769,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -776,6 +801,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -807,6 +833,7 @@ "alt_names": [], "mainnet": "eos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -837,6 +864,7 @@ "alt_names": [], "mainnet": "juno", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" @@ -868,6 +896,7 @@ "alt_names": [], "mainnet": "kava", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -898,6 +927,7 @@ "alt_names": [], "mainnet": "eos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -928,6 +958,7 @@ "alt_names": [], "mainnet": "mode", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -958,6 +989,7 @@ "alt_names": [], "mainnet": "moonbeam", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -988,6 +1020,7 @@ "alt_names": [], "mainnet": "polygon", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1018,6 +1051,7 @@ "alt_names": [], "mainnet": "near", "standard": "near", + "is_detailed_blocks": true, "block_type": { "label": "sf.near.type.v1.Block", "url": "https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1" @@ -1049,6 +1083,7 @@ "alt_names": [], "mainnet": "near", "standard": "near", + "is_detailed_blocks": true, "block_type": { "label": "sf.near.type.v1.Block", "url": "https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1" @@ -1080,6 +1115,7 @@ "alt_names": [], "mainnet": "optimism", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1110,6 +1146,7 @@ "alt_names": [], "mainnet": "ore", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1140,6 +1177,7 @@ "alt_names": [], "mainnet": "ore", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1170,6 +1208,7 @@ "alt_names": [], "mainnet": "osmosis", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" @@ -1202,6 +1241,7 @@ ], "mainnet": "polygon", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1232,6 +1272,7 @@ "alt_names": [], "mainnet": "scroll", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1263,6 +1304,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1294,6 +1336,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1325,6 +1368,7 @@ "alt_names": [], "mainnet": "starknet", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" @@ -1355,6 +1399,7 @@ "alt_names": [], "mainnet": "telos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1385,6 +1430,7 @@ "alt_names": [], "mainnet": "telos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1415,6 +1461,7 @@ "alt_names": [], "mainnet": "cosmoshub", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" @@ -1445,6 +1492,7 @@ "alt_names": [], "mainnet": "ux", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1475,6 +1523,7 @@ "alt_names": [], "mainnet": "wax", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1505,6 +1554,7 @@ "alt_names": [], "mainnet": "wax", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" @@ -1535,6 +1585,7 @@ "alt_names": [], "mainnet": "zkatana", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/chapel.json b/data/chains/V1/chapel.json similarity index 96% rename from data/chains/chapel.json rename to data/chains/V1/chapel.json index ae9e352..ade809d 100644 --- a/data/chains/chapel.json +++ b/data/chains/V1/chapel.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "bsc", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/chiado-cl.json b/data/chains/V1/chiado-cl.json similarity index 96% rename from data/chains/chiado-cl.json rename to data/chains/V1/chiado-cl.json index 68ed350..40ab010 100644 --- a/data/chains/chiado-cl.json +++ b/data/chains/V1/chiado-cl.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "arbitrum", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/chiado.json b/data/chains/V1/chiado.json similarity index 95% rename from data/chains/chiado.json rename to data/chains/V1/chiado.json index 5166256..cbbc358 100644 --- a/data/chains/chiado.json +++ b/data/chains/V1/chiado.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "arbitrum", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/cosmoshub.json b/data/chains/V1/cosmoshub.json similarity index 96% rename from data/chains/cosmoshub.json rename to data/chains/V1/cosmoshub.json index 810f921..016c1d5 100644 --- a/data/chains/cosmoshub.json +++ b/data/chains/V1/cosmoshub.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "cosmoshub", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" diff --git a/data/chains/decimal.json b/data/chains/V1/decimal.json similarity index 95% rename from data/chains/decimal.json rename to data/chains/V1/decimal.json index 2aa25e4..98d0656 100644 --- a/data/chains/decimal.json +++ b/data/chains/V1/decimal.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "decimal", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/eos.json b/data/chains/V1/eos.json similarity index 96% rename from data/chains/eos.json rename to data/chains/V1/eos.json index 3e1ac0f..30eac2d 100644 --- a/data/chains/eos.json +++ b/data/chains/V1/eos.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/eth-cl.json b/data/chains/V1/eth-cl.json similarity index 96% rename from data/chains/eth-cl.json rename to data/chains/V1/eth-cl.json index 8bd94e8..2a8bfbd 100644 --- a/data/chains/eth-cl.json +++ b/data/chains/V1/eth-cl.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/eth.json b/data/chains/V1/eth.json similarity index 96% rename from data/chains/eth.json rename to data/chains/V1/eth.json index 8851205..1528338 100644 --- a/data/chains/eth.json +++ b/data/chains/V1/eth.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/fantom.json b/data/chains/V1/fantom.json similarity index 96% rename from data/chains/fantom.json rename to data/chains/V1/fantom.json index 78087c9..3bba80f 100644 --- a/data/chains/fantom.json +++ b/data/chains/V1/fantom.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "fantom", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/gnosis-cl.json b/data/chains/V1/gnosis-cl.json similarity index 96% rename from data/chains/gnosis-cl.json rename to data/chains/V1/gnosis-cl.json index c524750..951f2e5 100644 --- a/data/chains/gnosis-cl.json +++ b/data/chains/V1/gnosis-cl.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "gnosis", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/gnosis.json b/data/chains/V1/gnosis.json similarity index 96% rename from data/chains/gnosis.json rename to data/chains/V1/gnosis.json index ed5c220..f34e2c1 100644 --- a/data/chains/gnosis.json +++ b/data/chains/V1/gnosis.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "gnosis", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/goerli-cl.json b/data/chains/V1/goerli-cl.json similarity index 96% rename from data/chains/goerli-cl.json rename to data/chains/V1/goerli-cl.json index cddd318..acddfed 100644 --- a/data/chains/goerli-cl.json +++ b/data/chains/V1/goerli-cl.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/goerli.json b/data/chains/V1/goerli.json similarity index 96% rename from data/chains/goerli.json rename to data/chains/V1/goerli.json index 1234949..9b5fc69 100644 --- a/data/chains/goerli.json +++ b/data/chains/V1/goerli.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/holesky-cl.json b/data/chains/V1/holesky-cl.json similarity index 96% rename from data/chains/holesky-cl.json rename to data/chains/V1/holesky-cl.json index b247870..78b6f71 100644 --- a/data/chains/holesky-cl.json +++ b/data/chains/V1/holesky-cl.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/holesky.json b/data/chains/V1/holesky.json similarity index 96% rename from data/chains/holesky.json rename to data/chains/V1/holesky.json index 0535a78..062544a 100644 --- a/data/chains/holesky.json +++ b/data/chains/V1/holesky.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/jungle4.json b/data/chains/V1/jungle4.json similarity index 95% rename from data/chains/jungle4.json rename to data/chains/V1/jungle4.json index 8665590..3aae677 100644 --- a/data/chains/jungle4.json +++ b/data/chains/V1/jungle4.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/juno.json b/data/chains/V1/juno.json similarity index 96% rename from data/chains/juno.json rename to data/chains/V1/juno.json index e43258e..d131282 100644 --- a/data/chains/juno.json +++ b/data/chains/V1/juno.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "juno", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" diff --git a/data/chains/kava.json b/data/chains/V1/kava.json similarity index 95% rename from data/chains/kava.json rename to data/chains/V1/kava.json index a97157a..e01e5c6 100644 --- a/data/chains/kava.json +++ b/data/chains/V1/kava.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "kava", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/kylin.json b/data/chains/V1/kylin.json similarity index 95% rename from data/chains/kylin.json rename to data/chains/V1/kylin.json index 011f912..a687306 100644 --- a/data/chains/kylin.json +++ b/data/chains/V1/kylin.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/mode.json b/data/chains/V1/mode.json similarity index 96% rename from data/chains/mode.json rename to data/chains/V1/mode.json index d7d7968..cf9451e 100644 --- a/data/chains/mode.json +++ b/data/chains/V1/mode.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "mode", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/moonbeam.json b/data/chains/V1/moonbeam.json similarity index 95% rename from data/chains/moonbeam.json rename to data/chains/V1/moonbeam.json index 503ddf1..ee925f0 100644 --- a/data/chains/moonbeam.json +++ b/data/chains/V1/moonbeam.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "moonbeam", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/mumbai.json b/data/chains/V1/mumbai.json similarity index 96% rename from data/chains/mumbai.json rename to data/chains/V1/mumbai.json index 4cc6621..74035a0 100644 --- a/data/chains/mumbai.json +++ b/data/chains/V1/mumbai.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "polygon", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/near.json b/data/chains/V1/near.json similarity index 96% rename from data/chains/near.json rename to data/chains/V1/near.json index 5d32731..8f0a025 100644 --- a/data/chains/near.json +++ b/data/chains/V1/near.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "near", "standard": "near", + "is_detailed_blocks": true, "block_type": { "label": "sf.near.type.v1.Block", "url": "https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1" diff --git a/data/chains/neartest.json b/data/chains/V1/neartest.json similarity index 96% rename from data/chains/neartest.json rename to data/chains/V1/neartest.json index e58146d..5e756e7 100644 --- a/data/chains/neartest.json +++ b/data/chains/V1/neartest.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "near", "standard": "near", + "is_detailed_blocks": true, "block_type": { "label": "sf.near.type.v1.Block", "url": "https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1" diff --git a/data/chains/optimism.json b/data/chains/V1/optimism.json similarity index 95% rename from data/chains/optimism.json rename to data/chains/V1/optimism.json index f04de2a..6386513 100644 --- a/data/chains/optimism.json +++ b/data/chains/V1/optimism.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "optimism", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/ore.json b/data/chains/V1/ore.json similarity index 96% rename from data/chains/ore.json rename to data/chains/V1/ore.json index 434d98a..1ba2639 100644 --- a/data/chains/ore.json +++ b/data/chains/V1/ore.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "ore", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/orestage.json b/data/chains/V1/orestage.json similarity index 96% rename from data/chains/orestage.json rename to data/chains/V1/orestage.json index ab0cca6..e11c5d7 100644 --- a/data/chains/orestage.json +++ b/data/chains/V1/orestage.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "ore", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/osmosis.json b/data/chains/V1/osmosis.json similarity index 95% rename from data/chains/osmosis.json rename to data/chains/V1/osmosis.json index a46a773..6a4c064 100644 --- a/data/chains/osmosis.json +++ b/data/chains/V1/osmosis.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "osmosis", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" diff --git a/data/chains/polygon.json b/data/chains/V1/polygon.json similarity index 96% rename from data/chains/polygon.json rename to data/chains/V1/polygon.json index 9bdef19..505ad07 100644 --- a/data/chains/polygon.json +++ b/data/chains/V1/polygon.json @@ -6,6 +6,7 @@ "alt_names": ["matic"], "mainnet": "polygon", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/scroll.json b/data/chains/V1/scroll.json similarity index 96% rename from data/chains/scroll.json rename to data/chains/V1/scroll.json index 6cb1bf9..6d91625 100644 --- a/data/chains/scroll.json +++ b/data/chains/V1/scroll.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "scroll", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/sepolia-cl.json b/data/chains/V1/sepolia-cl.json similarity index 96% rename from data/chains/sepolia-cl.json rename to data/chains/V1/sepolia-cl.json index 4a1d8fa..66b9b9a 100644 --- a/data/chains/sepolia-cl.json +++ b/data/chains/V1/sepolia-cl.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/sepolia.json b/data/chains/V1/sepolia.json similarity index 96% rename from data/chains/sepolia.json rename to data/chains/V1/sepolia.json index f8375e2..4f30302 100644 --- a/data/chains/sepolia.json +++ b/data/chains/V1/sepolia.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "eth", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/starknet.json b/data/chains/V1/starknet.json similarity index 95% rename from data/chains/starknet.json rename to data/chains/V1/starknet.json index 2975585..51b69c6 100644 --- a/data/chains/starknet.json +++ b/data/chains/V1/starknet.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "starknet", "standard": "erc20", + "is_detailed_blocks": true, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/telos.json b/data/chains/V1/telos.json similarity index 95% rename from data/chains/telos.json rename to data/chains/V1/telos.json index 100ad33..26228a1 100644 --- a/data/chains/telos.json +++ b/data/chains/V1/telos.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "telos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/telostest.json b/data/chains/V1/telostest.json similarity index 95% rename from data/chains/telostest.json rename to data/chains/V1/telostest.json index f928e92..8fff68d 100644 --- a/data/chains/telostest.json +++ b/data/chains/V1/telostest.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "telos", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/theta.json b/data/chains/V1/theta.json similarity index 96% rename from data/chains/theta.json rename to data/chains/V1/theta.json index 0b3cbb4..57d573d 100644 --- a/data/chains/theta.json +++ b/data/chains/V1/theta.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "cosmoshub", "standard": "cosmos", + "is_detailed_blocks": true, "block_type": { "label": "sf.cosmos.type.v1.Block", "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" diff --git a/data/chains/ux.json b/data/chains/V1/ux.json similarity index 96% rename from data/chains/ux.json rename to data/chains/V1/ux.json index 8a320c8..6085f94 100644 --- a/data/chains/ux.json +++ b/data/chains/V1/ux.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "ux", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/wax.json b/data/chains/V1/wax.json similarity index 95% rename from data/chains/wax.json rename to data/chains/V1/wax.json index 93660ec..183f73b 100644 --- a/data/chains/wax.json +++ b/data/chains/V1/wax.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "wax", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/waxtest.json b/data/chains/V1/waxtest.json similarity index 95% rename from data/chains/waxtest.json rename to data/chains/V1/waxtest.json index b69441b..1152b73 100644 --- a/data/chains/waxtest.json +++ b/data/chains/V1/waxtest.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "wax", "standard": "antelope", + "is_detailed_blocks": true, "block_type": { "label": "sf.antelope.type.v1.Block", "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" diff --git a/data/chains/zkatana.json b/data/chains/V1/zkatana.json similarity index 95% rename from data/chains/zkatana.json rename to data/chains/V1/zkatana.json index 8e416bf..53c8abc 100644 --- a/data/chains/zkatana.json +++ b/data/chains/V1/zkatana.json @@ -6,6 +6,7 @@ "alt_names": [], "mainnet": "zkatana", "standard": "erc20", + "is_detailed_blocks": false, "block_type": { "label": "sf.ethereum.type.v2.Block", "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" diff --git a/data/chains/V2/arbone/arbone.branded.svg b/data/chains/V2/arbone/arbone.branded.svg new file mode 100644 index 0000000..360279a --- /dev/null +++ b/data/chains/V2/arbone/arbone.branded.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/arbone/arbone.dark.svg b/data/chains/V2/arbone/arbone.dark.svg new file mode 100644 index 0000000..09bd877 --- /dev/null +++ b/data/chains/V2/arbone/arbone.dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/arbone/arbone.light.svg b/data/chains/V2/arbone/arbone.light.svg new file mode 100644 index 0000000..3e47213 --- /dev/null +++ b/data/chains/V2/arbone/arbone.light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/arbone/meta.ts b/data/chains/V2/arbone/meta.ts new file mode 100644 index 0000000..243cc14 --- /dev/null +++ b/data/chains/V2/arbone/meta.ts @@ -0,0 +1,40 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'arbone', + graph_id: 'arbitrum-one', + name: 'Arbitrum One', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/arbi', + brand_theme: 'both', + }, + supported_services: { + firehose: { + beta_released_at: '2024-06-10T00:00:00.000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-06-10T00:00:00.000Z', + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-06-10T00:00:00.000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://arbitrum.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/arbone/testnets/arbgoerli/meta.ts b/data/chains/V2/arbone/testnets/arbgoerli/meta.ts new file mode 100644 index 0000000..8111b42 --- /dev/null +++ b/data/chains/V2/arbone/testnets/arbgoerli/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'arbgoerli', + graph_id: null, + name: 'Arbitrum Goerli', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2024-05-03T00:00:00.000Z', + full_released_at: '2024-05-03T00:00:00.000Z', + deprecated_at: '2024-05-03T00:00:00.000Z', + }, + substreams: { + beta_released_at: '2024-05-03T00:00:00.000Z', + full_released_at: '2024-05-03T00:00:00.000Z', + deprecated_at: '2024-05-03T00:00:00.000Z', + }, + rpc: { + beta_released_at: '2024-05-03T00:00:00.000Z', + full_released_at: '2024-05-03T00:00:00.000Z', + deprecated_at: '2024-05-03T00:00:00.000Z', + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/arbone/testnets/arbsepolia/meta.ts b/data/chains/V2/arbone/testnets/arbsepolia/meta.ts new file mode 100644 index 0000000..4c66859 --- /dev/null +++ b/data/chains/V2/arbone/testnets/arbsepolia/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'arbsepolia', + graph_id: 'arbitrum-sepolia', + name: 'Arbitrum Sepolia', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2024-05-03T00:00:00.000Z', + full_released_at: '2024-05-03T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-05-03T00:00:00.000Z', + full_released_at: '2024-05-03T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-05-03T00:00:00.000Z', + full_released_at: '2024-05-03T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/arweave/arweave.branded.svg b/data/chains/V2/arweave/arweave.branded.svg new file mode 100644 index 0000000..2612559 --- /dev/null +++ b/data/chains/V2/arweave/arweave.branded.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/arweave/arweave.dark.svg b/data/chains/V2/arweave/arweave.dark.svg new file mode 100644 index 0000000..03bce8a --- /dev/null +++ b/data/chains/V2/arweave/arweave.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/arweave/arweave.light.svg b/data/chains/V2/arweave/arweave.light.svg new file mode 100644 index 0000000..2da0ee1 --- /dev/null +++ b/data/chains/V2/arweave/arweave.light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/arweave/meta.ts b/data/chains/V2/arweave/meta.ts new file mode 100644 index 0000000..0b3a034 --- /dev/null +++ b/data/chains/V2/arweave/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'arweave', + graph_id: 'arweave-mainnet', + name: 'Arweave', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.arweave.type.v1.Block', + url: 'https://buf.build/pinax/firehose-arweave/docs/main:sf.arweave.type.v1', + }, + icon: { + id: 'tokens/ar', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2024-03-03T00:00:00.000Z', + full_released_at: '2024-03-03T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-03-03T00:00:00.000Z', + full_released_at: '2024-03-03T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://arweave.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/avalanche/avalanche.branded.svg b/data/chains/V2/avalanche/avalanche.branded.svg new file mode 100644 index 0000000..8bd623e --- /dev/null +++ b/data/chains/V2/avalanche/avalanche.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/avalanche/avalanche.dark.svg b/data/chains/V2/avalanche/avalanche.dark.svg new file mode 100644 index 0000000..054f391 --- /dev/null +++ b/data/chains/V2/avalanche/avalanche.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/avalanche/avalanche.light.svg b/data/chains/V2/avalanche/avalanche.light.svg new file mode 100644 index 0000000..21423e7 --- /dev/null +++ b/data/chains/V2/avalanche/avalanche.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/avalanche/meta.ts b/data/chains/V2/avalanche/meta.ts new file mode 100644 index 0000000..9ce83b3 --- /dev/null +++ b/data/chains/V2/avalanche/meta.ts @@ -0,0 +1,40 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'avalanche', + graph_id: 'avalanche', + name: 'Avalanche', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/avalanche', + brand_theme: 'both', + }, + supported_services: { + firehose: { + beta_released_at: '2024-08-01T00:00:00.000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:00.000Z', + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:00.000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.avax.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/base/base.branded.svg b/data/chains/V2/base/base.branded.svg new file mode 100644 index 0000000..0da53fa --- /dev/null +++ b/data/chains/V2/base/base.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/base/base.dark.svg b/data/chains/V2/base/base.dark.svg new file mode 100644 index 0000000..a5161a5 --- /dev/null +++ b/data/chains/V2/base/base.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/base/base.light.svg b/data/chains/V2/base/base.light.svg new file mode 100644 index 0000000..3e6c6ea --- /dev/null +++ b/data/chains/V2/base/base.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/base/meta.ts b/data/chains/V2/base/meta.ts new file mode 100644 index 0000000..b2c65ab --- /dev/null +++ b/data/chains/V2/base/meta.ts @@ -0,0 +1,40 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'base', + graph_id: 'base', + name: 'Base', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/base', + brand_theme: 'both', + }, + supported_services: { + firehose: { + beta_released_at: '2024-03-06T00:00:00.000Z', + full_released_at: '2024-03-06T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-03-06T00:00:00.000Z', + full_released_at: '2024-03-06T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.base.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/bitcoin/bitcoin.branded.svg b/data/chains/V2/bitcoin/bitcoin.branded.svg new file mode 100644 index 0000000..1482f66 --- /dev/null +++ b/data/chains/V2/bitcoin/bitcoin.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/bitcoin/bitcoin.dark.svg b/data/chains/V2/bitcoin/bitcoin.dark.svg new file mode 100644 index 0000000..f15fbd1 --- /dev/null +++ b/data/chains/V2/bitcoin/bitcoin.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/bitcoin/bitcoin.light.svg b/data/chains/V2/bitcoin/bitcoin.light.svg new file mode 100644 index 0000000..96bfca6 --- /dev/null +++ b/data/chains/V2/bitcoin/bitcoin.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/bitcoin/meta.ts b/data/chains/V2/bitcoin/meta.ts new file mode 100644 index 0000000..386188a --- /dev/null +++ b/data/chains/V2/bitcoin/meta.ts @@ -0,0 +1,40 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'bitcoin', + graph_id: null, + name: 'Bitcoin', + alt_names: ['btc'], + standard: 'brc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.bitcoin.type.v1.Block', + url: 'https://buf.build/streamingfast/firehose-bitcoin/docs/main:sf.bitcoin.type.v1', + }, + icon: { + id: 'tokens/btc', + brand_theme: 'both', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-21T00:00:00.000Z', + full_released_at: '2023-03-21T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-03-21T00:00:00.000Z', + full_released_at: '2023-03-21T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://bitcoin.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/blast/blast.branded.svg b/data/chains/V2/blast/blast.branded.svg new file mode 100644 index 0000000..6bf9065 --- /dev/null +++ b/data/chains/V2/blast/blast.branded.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/blast/blast.dark.svg b/data/chains/V2/blast/blast.dark.svg new file mode 100644 index 0000000..a15e308 --- /dev/null +++ b/data/chains/V2/blast/blast.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/blast/blast.light.svg b/data/chains/V2/blast/blast.light.svg new file mode 100644 index 0000000..611035c --- /dev/null +++ b/data/chains/V2/blast/blast.light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/blast/meta.ts b/data/chains/V2/blast/meta.ts new file mode 100644 index 0000000..2e42352 --- /dev/null +++ b/data/chains/V2/blast/meta.ts @@ -0,0 +1,46 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'blast', + name: 'Blast Network', + alt_names: [], + graph_id: 'blast-mainnet', + index: 0, + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/blast', + brand_theme: 'light', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L2', + website: 'https://blast.io/en', + }, +}; + +export default meta; diff --git a/data/chains/V2/blast/testnets/blastsepolia/meta.ts b/data/chains/V2/blast/testnets/blastsepolia/meta.ts new file mode 100644 index 0000000..2fb96f9 --- /dev/null +++ b/data/chains/V2/blast/testnets/blastsepolia/meta.ts @@ -0,0 +1,34 @@ +import { ___InternalTestnet } from '../../../../../../types'; + +const meta: ___InternalTestnet = { + id: 'blastsepolia', + name: 'Blast Network Sepolia', + alt_names: [], + graph_id: 'blast-testnet', + index: 0, + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/boba/boba.branded.svg b/data/chains/V2/boba/boba.branded.svg new file mode 100644 index 0000000..34cdfb1 --- /dev/null +++ b/data/chains/V2/boba/boba.branded.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/boba/boba.dark.svg b/data/chains/V2/boba/boba.dark.svg new file mode 100644 index 0000000..c0ffaa5 --- /dev/null +++ b/data/chains/V2/boba/boba.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/boba/boba.light.svg b/data/chains/V2/boba/boba.light.svg new file mode 100644 index 0000000..5f2dfdd --- /dev/null +++ b/data/chains/V2/boba/boba.light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/boba/meta.ts b/data/chains/V2/boba/meta.ts new file mode 100644 index 0000000..1c3e1ef --- /dev/null +++ b/data/chains/V2/boba/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'boba', + name: 'Boba Network', + alt_names: [], + graph_id: 'boba', + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/boba', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L2', + website: 'https://boba.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/boba/testnets/bobasepolia/meta.ts b/data/chains/V2/boba/testnets/bobasepolia/meta.ts new file mode 100644 index 0000000..e7aa446 --- /dev/null +++ b/data/chains/V2/boba/testnets/bobasepolia/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'bobasepolia', + graph_id: null, + name: 'Boba Sepolia', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/bsc/bsc.branded.svg b/data/chains/V2/bsc/bsc.branded.svg new file mode 100644 index 0000000..13c355c --- /dev/null +++ b/data/chains/V2/bsc/bsc.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/bsc/bsc.dark.svg b/data/chains/V2/bsc/bsc.dark.svg new file mode 100644 index 0000000..220e4e3 --- /dev/null +++ b/data/chains/V2/bsc/bsc.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/bsc/bsc.light.svg b/data/chains/V2/bsc/bsc.light.svg new file mode 100644 index 0000000..f8c0b79 --- /dev/null +++ b/data/chains/V2/bsc/bsc.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/bsc/meta.ts b/data/chains/V2/bsc/meta.ts new file mode 100644 index 0000000..cf1442f --- /dev/null +++ b/data/chains/V2/bsc/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'bsc', + graph_id: 'bsc', + name: 'BNB', + alt_names: ['bsc', 'binance'], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/binance-smart-chain', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.bnbchain.org/en/bnb-smart-chain', + }, +}; + +export default meta; diff --git a/data/chains/V2/bsc/testnets/chapel/meta.ts b/data/chains/V2/bsc/testnets/chapel/meta.ts new file mode 100644 index 0000000..0539432 --- /dev/null +++ b/data/chains/V2/bsc/testnets/chapel/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'chapel', + graph_id: 'chapel', + name: 'Chapel', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/cardano/cardano.branded.svg b/data/chains/V2/cardano/cardano.branded.svg new file mode 100644 index 0000000..2482c08 --- /dev/null +++ b/data/chains/V2/cardano/cardano.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/cardano/cardano.dark.svg b/data/chains/V2/cardano/cardano.dark.svg new file mode 100644 index 0000000..84da2b8 --- /dev/null +++ b/data/chains/V2/cardano/cardano.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/cardano/cardano.light.svg b/data/chains/V2/cardano/cardano.light.svg new file mode 100644 index 0000000..3026e45 --- /dev/null +++ b/data/chains/V2/cardano/cardano.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/cardano/meta.ts b/data/chains/V2/cardano/meta.ts new file mode 100644 index 0000000..29b8197 --- /dev/null +++ b/data/chains/V2/cardano/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'cardano', + graph_id: null, + name: 'Cardano', + alt_names: [], + standard: 'cardano', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/cardano', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://cardano.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/celo/celo.branded.svg b/data/chains/V2/celo/celo.branded.svg new file mode 100644 index 0000000..b985af8 --- /dev/null +++ b/data/chains/V2/celo/celo.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/celo/celo.dark.svg b/data/chains/V2/celo/celo.dark.svg new file mode 100644 index 0000000..2b01dc8 --- /dev/null +++ b/data/chains/V2/celo/celo.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/celo/celo.light.svg b/data/chains/V2/celo/celo.light.svg new file mode 100644 index 0000000..b03cddc --- /dev/null +++ b/data/chains/V2/celo/celo.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/celo/meta.ts b/data/chains/V2/celo/meta.ts new file mode 100644 index 0000000..ddcec23 --- /dev/null +++ b/data/chains/V2/celo/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'celo', + graph_id: 'celo', + name: 'Celo', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/celo', + brand_theme: 'light', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://celo.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/celo/testnets/alfajores/meta.ts b/data/chains/V2/celo/testnets/alfajores/meta.ts new file mode 100644 index 0000000..1bd4cc3 --- /dev/null +++ b/data/chains/V2/celo/testnets/alfajores/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'alfajores', + graph_id: null, + name: 'Alfajores', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/chains.json b/data/chains/V2/chains.json new file mode 100644 index 0000000..016f8ce --- /dev/null +++ b/data/chains/V2/chains.json @@ -0,0 +1,2506 @@ +[ + { + "id": "eth", + "graph_id": "mainnet", + "name": "Ethereum", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/ethereum", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "metadata": { + "website": "https://ethereum.org/" + }, + "index": 0, + "testnets": [ + { + "id": "holesky", + "graph_id": null, + "name": "Holesky", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 1 + }, + { + "id": "sepolia", + "graph_id": "sepolia", + "name": "Sepolia", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 2 + }, + { + "id": "goerli", + "graph_id": null, + "name": "Goerli", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "rpc": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + } + }, + "index": 6 + } + ], + "consensus": [ + { + "id": "eth-cl", + "graph_id": null, + "name": "Ethereum Consensus Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 3 + }, + { + "id": "holesky-cl", + "graph_id": null, + "name": "Holesky Consensus Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 4 + }, + { + "id": "sepolia-cl", + "graph_id": null, + "name": "Sepolia Consensus Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 5 + }, + { + "id": "goerli-cl", + "graph_id": null, + "name": "Goerli Consensus Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + } + }, + "index": 7 + } + ] + }, + { + "id": "bitcoin", + "graph_id": null, + "name": "Bitcoin", + "alt_names": [ + "btc" + ], + "standard": "brc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.bitcoin.type.v1.Block", + "url": "https://buf.build/streamingfast/firehose-bitcoin/docs/main:sf.bitcoin.type.v1" + }, + "icon": { + "id": "tokens/btc", + "brand_theme": "both" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-21T00:00:00.000Z", + "full_released_at": "2023-03-21T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-03-21T00:00:00.000Z", + "full_released_at": "2023-03-21T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://bitcoin.org/" + }, + "index": 8 + }, + { + "id": "polygon", + "graph_id": "matic", + "name": "Polygon", + "alt_names": [ + "matic" + ], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/polygon-pos", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "metadata": { + "website": "https://polygon.technology/" + }, + "index": 9, + "testnets": [ + { + "id": "amoy", + "graph_id": "polygon-amoy", + "name": "Amoy", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-04-12T00:00:00.000Z", + "full_released_at": "2024-04-12T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-04-12T00:00:00.000Z", + "full_released_at": "2024-04-12T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-04-12T00:00:00.000Z", + "full_released_at": "2024-04-12T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 10 + }, + { + "id": "mumbai", + "graph_id": null, + "name": "Mumbai", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": "2024-04-12T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": "2024-04-12T00:00:00.000Z" + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": "2024-04-12T00:00:00.000Z" + } + }, + "index": 11 + } + ] + }, + { + "id": "bsc", + "graph_id": "bsc", + "name": "BNB", + "alt_names": [ + "bsc", + "binance" + ], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/binance-smart-chain", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.bnbchain.org/en/bnb-smart-chain" + }, + "index": 12, + "testnets": [ + { + "id": "chapel", + "graph_id": "chapel", + "name": "Chapel", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 13 + } + ] + }, + { + "id": "arbone", + "graph_id": "arbitrum-one", + "name": "Arbitrum One", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/arbi", + "brand_theme": "both" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-06-10T00:00:00.000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-06-10T00:00:00.000Z", + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-06-10T00:00:00.000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://arbitrum.io/" + }, + "index": 14, + "testnets": [ + { + "id": "arbgoerli", + "graph_id": null, + "name": "Arbitrum Goerli", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-05-03T00:00:00.000Z", + "full_released_at": "2024-05-03T00:00:00.000Z", + "deprecated_at": "2024-05-03T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": "2024-05-03T00:00:00.000Z", + "full_released_at": "2024-05-03T00:00:00.000Z", + "deprecated_at": "2024-05-03T00:00:00.000Z" + }, + "rpc": { + "beta_released_at": "2024-05-03T00:00:00.000Z", + "full_released_at": "2024-05-03T00:00:00.000Z", + "deprecated_at": "2024-05-03T00:00:00.000Z" + } + }, + "index": 15 + }, + { + "id": "arbsepolia", + "graph_id": "arbitrum-sepolia", + "name": "Arbitrum Sepolia", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-05-03T00:00:00.000Z", + "full_released_at": "2024-05-03T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-05-03T00:00:00.000Z", + "full_released_at": "2024-05-03T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-05-03T00:00:00.000Z", + "full_released_at": "2024-05-03T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 16 + }, + { + "id": "chiado", + "graph_id": null, + "name": "Chiado", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 18 + } + ], + "consensus": [ + { + "id": "chiado-cl", + "graph_id": null, + "name": "Chiado Consensus Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 17 + } + ] + }, + { + "id": "avalanche", + "graph_id": "avalanche", + "name": "Avalanche", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/avalanche", + "brand_theme": "both" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-08-01T00:00:00.000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:00.000Z", + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:00.000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.avax.network/" + }, + "index": 19 + }, + { + "id": "optimism", + "graph_id": "optimism", + "name": "Optimism", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/optimistic-ethereum", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-01-01T00:00:00.000Z", + "full_released_at": "2024-01-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-01-01T00:00:00.000Z", + "full_released_at": "2024-01-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://optimism.io/" + }, + "index": 20 + }, + { + "id": "base", + "graph_id": "base", + "name": "Base", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/base", + "brand_theme": "both" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-03-06T00:00:00.000Z", + "full_released_at": "2024-03-06T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-03-06T00:00:00.000Z", + "full_released_at": "2024-03-06T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.base.org/" + }, + "index": 21 + }, + { + "id": "near", + "graph_id": "near-mainnet", + "name": "Near", + "alt_names": [], + "standard": "near", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.near.type.v1.Block", + "url": "https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1" + }, + "icon": { + "id": "tokens/near", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://near.org/" + }, + "index": 22, + "testnets": [ + { + "id": "neartest", + "graph_id": "near-testnet", + "name": "Near-testnet", + "alt_names": [], + "standard": "near", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.near.type.v1.Block", + "url": "https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 23 + } + ] + }, + { + "id": "cardano", + "graph_id": null, + "name": "Cardano", + "alt_names": [], + "standard": "cardano", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/cardano", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://cardano.org/" + }, + "index": 24 + }, + { + "id": "decimal", + "graph_id": null, + "name": "Decimal", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/del", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.decimalchain.com/" + }, + "index": 25 + }, + { + "id": "gnosis", + "graph_id": "gnosis", + "name": "Gnosis", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/gno", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://gnosis.io/" + }, + "index": 26, + "consensus": [ + { + "id": "gnosis-cl", + "graph_id": null, + "name": "Gnosis Consensus Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-03-08T00:00:00.000Z", + "full_released_at": "2023-03-08T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 27 + } + ] + }, + { + "id": "fantom", + "graph_id": "fantom", + "name": "Fantom", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/fantom", + "brand_theme": "light", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://fantom.foundation/" + }, + "index": 28 + }, + { + "id": "celo", + "graph_id": "celo", + "name": "Celo", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/celo", + "brand_theme": "light", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://celo.org/" + }, + "index": 29, + "testnets": [ + { + "id": "alfajores", + "graph_id": null, + "name": "Alfajores", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 30 + } + ] + }, + { + "id": "arweave", + "graph_id": "arweave-mainnet", + "name": "Arweave", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.arweave.type.v1.Block", + "url": "https://buf.build/pinax/firehose-arweave/docs/main:sf.arweave.type.v1" + }, + "icon": { + "id": "tokens/ar", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-03-03T00:00:00.000Z", + "full_released_at": "2024-03-03T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-03-03T00:00:00.000Z", + "full_released_at": "2024-03-03T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://arweave.org/" + }, + "index": 31 + }, + { + "id": "cosmoshub", + "graph_id": "cosmoshub-4", + "name": "Cosmos Hub", + "alt_names": [], + "standard": "cosmos", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.cosmos.type.v1.Block", + "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" + }, + "icon": { + "id": "networks/cosmos", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://cosmos.network/" + }, + "index": 32, + "testnets": [ + { + "id": "theta", + "graph_id": "theta-testnet-001", + "name": "Theta", + "alt_names": [], + "standard": "cosmos", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.cosmos.type.v1.Block", + "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 33 + }, + { + "id": "juno", + "graph_id": null, + "name": "Juno", + "alt_names": [], + "standard": "cosmos", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.cosmos.type.v1.Block", + "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": "2024-01-15T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 34 + } + ] + }, + { + "id": "osmosis", + "graph_id": "osmosis-1", + "name": "Osmosis", + "alt_names": [], + "standard": "cosmos", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.cosmos.type.v1.Block", + "url": "https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto" + }, + "icon": { + "id": "networks/osmosis", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-01-01T00:00:00.000Z", + "full_released_at": "2024-01-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://osmosis.zone/" + }, + "index": 35 + }, + { + "id": "moonbeam", + "graph_id": "moonbeam", + "name": "Moonbeam", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/moonbeam", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://moonbeam.network/" + }, + "index": 36 + }, + { + "id": "scroll", + "graph_id": "scroll", + "name": "Scroll", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/scroll", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://scroll.io/" + }, + "index": 37 + }, + { + "id": "starknet", + "graph_id": null, + "name": "Starknet", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/starknet", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.starknet.io/" + }, + "index": 38 + }, + { + "id": "eos", + "graph_id": null, + "name": "EOS", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "icon": { + "id": "tokens/eos", + "brand_theme": "light", + "variants": [ + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://eosnetwork.com/" + }, + "index": 39, + "evms": [ + { + "id": "eosevm", + "graph_id": null, + "name": "EOS EVM", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 40 + } + ], + "testnets": [ + { + "id": "jungle4", + "graph_id": null, + "name": "Jungle4", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "index": 41 + }, + { + "id": "kylin", + "graph_id": null, + "name": "Kylin", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 42 + } + ] + }, + { + "id": "wax", + "graph_id": null, + "name": "WAX", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "icon": { + "id": "tokens/waxp", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://wax.io/" + }, + "index": 43, + "testnets": [ + { + "id": "waxtest", + "graph_id": null, + "name": "WAX Test", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 44 + } + ] + }, + { + "id": "telos", + "graph_id": null, + "name": "Telos", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "icon": { + "id": "networks/telos", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://telos.net/" + }, + "index": 45, + "testnets": [ + { + "id": "telostest", + "graph_id": null, + "name": "Telos Test", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "supported_services": { + "firehose": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2023-12-01T00:00:00.000Z", + "full_released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 46 + } + ] + }, + { + "id": "kava", + "graph_id": null, + "name": "Kava", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/kava", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.kava.io/" + }, + "index": 47 + }, + { + "id": "blast", + "name": "Blast Network", + "alt_names": [], + "graph_id": "blast-mainnet", + "index": 48, + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/blast", + "brand_theme": "light", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [ + { + "id": "blastsepolia", + "name": "Blast Network Sepolia", + "alt_names": [], + "graph_id": "blast-testnet", + "index": 49, + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + } + } + ], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L2", + "website": "https://blast.io/en" + } + }, + { + "id": "boba", + "name": "Boba Network", + "alt_names": [], + "graph_id": "boba", + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/boba", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [ + { + "id": "bobasepolia", + "graph_id": null, + "name": "Boba Sepolia", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 51 + } + ], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L2", + "website": "https://boba.network/" + }, + "index": 50 + }, + { + "id": "cronos", + "name": "Cronos", + "alt_names": [], + "graph_id": null, + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/cronos", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "website": "https://cronos.org/" + }, + "index": 52 + }, + { + "id": "fuse", + "name": "Fuse", + "alt_names": [], + "graph_id": "fuse", + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/fuse", + "brand_theme": "light", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L1", + "website": "https://fuse.io/" + }, + "index": 53 + }, + { + "id": "linea", + "name": "Linea", + "alt_names": [], + "graph_id": "linea", + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/linea", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:00Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:00Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:00Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "website": "https://linea.build/" + }, + "index": 54 + }, + { + "id": "litecoin", + "name": "Litecoin", + "alt_names": [ + "LTC" + ], + "graph_id": null, + "standard": "ltc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.litecoin.type.v1.Block", + "url": "https://buf.build/streamingfast/firehose-litecoin/docs/main:sf.litecoin.type.v1" + }, + "icon": { + "id": "tokens/ltc", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L1", + "website": "https://litecoin.org/" + }, + "index": 55 + }, + { + "id": "mode", + "name": "Mode Network", + "alt_names": [], + "graph_id": "mode-mainnet", + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/mode", + "brand_theme": "light", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-05-14T00:00:00Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-05-14T00:00:00Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-05-14T00:00:00Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L2", + "website": "https://www.mode.network/" + }, + "index": 56 + }, + { + "id": "ronin", + "graph_id": null, + "name": "Ronin", + "alt_names": [], + "standard": "rrc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/ronin", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://roninchain.com/" + }, + "index": 57 + }, + { + "id": "sei", + "graph_id": null, + "name": "Sei", + "alt_names": [], + "standard": "sei", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "tokens/sei", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.sei.io/" + }, + "index": 58 + }, + { + "id": "xai", + "name": "XAI", + "alt_names": [], + "graph_id": null, + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/xai", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L3", + "website": "https://xai.games/" + }, + "index": 59 + }, + { + "id": "zkastar", + "name": "Astar zkEVM", + "alt_names": [], + "graph_id": null, + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.zkevm.type.v1.Block", + "url": "https://buf.build/pinax/firehose-zkevm/docs/main:sf.zkevm.type.v1" + }, + "icon": { + "id": "networks/astar", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [ + { + "id": "zkatana", + "name": "Astar zKatana", + "alt_names": [], + "graph_id": null, + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.zkevm.type.v1.Block", + "url": "https://buf.build/pinax/firehose-zkevm/docs/main:sf.zkevm.type.v1" + }, + "supported_services": { + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 61 + }, + { + "id": "zkyoto", + "name": "Astar zKyoto", + "alt_names": [], + "graph_id": "zkyoto-testnet", + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.zkevm.type.v1.Block", + "url": "https://buf.build/pinax/firehose-zkevm/docs/main:sf.zkevm.type.v1" + }, + "supported_services": { + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "index": 62 + } + ], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L2", + "website": "https://astar.network/" + }, + "index": 60 + }, + { + "id": "x-layer", + "graph_id": null, + "name": "X-Layer", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": false, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/x-layer", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://www.okx.com/fr/xlayer" + }, + "index": 63 + }, + { + "id": "zksync", + "graph_id": "zksync-era", + "name": "zkSync Era", + "alt_names": [], + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/zksync", + "brand_theme": "dark", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": null, + "full_released_at": null, + "deprecated_at": null + } + }, + "metadata": { + "website": "https://zksync.io/", + "tags": [ + "zk" + ] + }, + "index": 64 + }, + { + "id": "zora", + "name": "Zora Network", + "alt_names": [], + "graph_id": null, + "standard": "erc20", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/zora-network", + "brand_theme": "both", + "variants": [ + "branded" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "firehose": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + }, + "substreams": { + "beta_released_at": "2024-08-01T00:00:000Z", + "full_released_at": null, + "deprecated_at": null + } + }, + "testnets": [], + "consensus": [], + "evms": [], + "metadata": { + "layer": "L2", + "website": "https://zora.co/" + }, + "index": 65 + }, + { + "id": "ore", + "graph_id": null, + "name": "Ore", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "icon": { + "id": "networks/ore", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "rpc": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "firehose": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + } + }, + "metadata": { + "website": "https://ore.network/" + }, + "index": 66, + "testnets": [ + { + "id": "orestage", + "graph_id": null, + "name": "Ore Stage", + "alt_names": [], + "standard": "antelope", + "is_detailed_blocks": true, + "block_type": { + "label": "sf.antelope.type.v1.Block", + "url": "https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1" + }, + "supported_services": { + "rpc": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "firehose": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + }, + "substreams": { + "beta_released_at": "2023-03-01T00:00:00.000Z", + "full_released_at": "2023-03-01T00:00:00.000Z", + "deprecated_at": "2023-03-21T00:00:00.000Z" + } + }, + "index": 67 + } + ] + } +] \ No newline at end of file diff --git a/data/chains/V2/cosmoshub/cosmoshub.branded.svg b/data/chains/V2/cosmoshub/cosmoshub.branded.svg new file mode 100644 index 0000000..a373532 --- /dev/null +++ b/data/chains/V2/cosmoshub/cosmoshub.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/cosmoshub/cosmoshub.dark.svg b/data/chains/V2/cosmoshub/cosmoshub.dark.svg new file mode 100644 index 0000000..250f661 --- /dev/null +++ b/data/chains/V2/cosmoshub/cosmoshub.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/cosmoshub/cosmoshub.light.svg b/data/chains/V2/cosmoshub/cosmoshub.light.svg new file mode 100644 index 0000000..4945283 --- /dev/null +++ b/data/chains/V2/cosmoshub/cosmoshub.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/cosmoshub/meta.ts b/data/chains/V2/cosmoshub/meta.ts new file mode 100644 index 0000000..f00031b --- /dev/null +++ b/data/chains/V2/cosmoshub/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'cosmoshub', + graph_id: 'cosmoshub-4', + name: 'Cosmos Hub', + alt_names: [], + standard: 'cosmos', + is_detailed_blocks: true, + block_type: { + label: 'sf.cosmos.type.v1.Block', + url: 'https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto', + }, + icon: { + id: 'networks/cosmos', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://cosmos.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/cosmoshub/testnets/juno/meta.ts b/data/chains/V2/cosmoshub/testnets/juno/meta.ts new file mode 100644 index 0000000..58fe073 --- /dev/null +++ b/data/chains/V2/cosmoshub/testnets/juno/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'juno', + graph_id: null, + name: 'Juno', + alt_names: [], + standard: 'cosmos', + is_detailed_blocks: true, + block_type: { + label: 'sf.cosmos.type.v1.Block', + url: 'https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: '2024-01-15T00:00:00.000Z', + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/cosmoshub/testnets/theta/meta.ts b/data/chains/V2/cosmoshub/testnets/theta/meta.ts new file mode 100644 index 0000000..68c8956 --- /dev/null +++ b/data/chains/V2/cosmoshub/testnets/theta/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'theta', + graph_id: 'theta-testnet-001', + name: 'Theta', + alt_names: [], + standard: 'cosmos', + is_detailed_blocks: true, + block_type: { + label: 'sf.cosmos.type.v1.Block', + url: 'https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/cronos/cronos.branded.svg b/data/chains/V2/cronos/cronos.branded.svg new file mode 100644 index 0000000..3e465d2 --- /dev/null +++ b/data/chains/V2/cronos/cronos.branded.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/cronos/cronos.dark.svg b/data/chains/V2/cronos/cronos.dark.svg new file mode 100644 index 0000000..8276f3f --- /dev/null +++ b/data/chains/V2/cronos/cronos.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/cronos/cronos.light.svg b/data/chains/V2/cronos/cronos.light.svg new file mode 100644 index 0000000..7374bc5 --- /dev/null +++ b/data/chains/V2/cronos/cronos.light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/cronos/meta.ts b/data/chains/V2/cronos/meta.ts new file mode 100644 index 0000000..b549cf1 --- /dev/null +++ b/data/chains/V2/cronos/meta.ts @@ -0,0 +1,44 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'cronos', + name: 'Cronos', + alt_names: [], + graph_id: null, + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/cronos', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + website: 'https://cronos.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/decimal/decimal.branded.svg b/data/chains/V2/decimal/decimal.branded.svg new file mode 100644 index 0000000..5195000 --- /dev/null +++ b/data/chains/V2/decimal/decimal.branded.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/data/chains/V2/decimal/decimal.dark.svg b/data/chains/V2/decimal/decimal.dark.svg new file mode 100644 index 0000000..ff1e411 --- /dev/null +++ b/data/chains/V2/decimal/decimal.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/decimal/decimal.light.svg b/data/chains/V2/decimal/decimal.light.svg new file mode 100644 index 0000000..f274534 --- /dev/null +++ b/data/chains/V2/decimal/decimal.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/decimal/meta.ts b/data/chains/V2/decimal/meta.ts new file mode 100644 index 0000000..5d6201d --- /dev/null +++ b/data/chains/V2/decimal/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'decimal', + graph_id: null, + name: 'Decimal', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/del', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.decimalchain.com/', + }, +}; + +export default meta; diff --git a/data/chains/V2/eos/eos.dark.svg b/data/chains/V2/eos/eos.dark.svg new file mode 100644 index 0000000..52d7f85 --- /dev/null +++ b/data/chains/V2/eos/eos.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/eos/eos.light.svg b/data/chains/V2/eos/eos.light.svg new file mode 100644 index 0000000..6f047b1 --- /dev/null +++ b/data/chains/V2/eos/eos.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/eos/evms/eosevm/meta.ts b/data/chains/V2/eos/evms/eosevm/meta.ts new file mode 100644 index 0000000..abd4f24 --- /dev/null +++ b/data/chains/V2/eos/evms/eosevm/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalEVM } from '../../../../../../types/chain.types'; + +const meta: ___InternalEVM = { + id: 'eosevm', + graph_id: null, + name: 'EOS EVM', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eos/meta.ts b/data/chains/V2/eos/meta.ts new file mode 100644 index 0000000..6d74b69 --- /dev/null +++ b/data/chains/V2/eos/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'eos', + graph_id: null, + name: 'EOS', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + icon: { + id: 'tokens/eos', + brand_theme: 'light', + variants: ['mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://eosnetwork.com/', + }, +}; + +export default meta; diff --git a/data/chains/V2/eos/testnets/jungle4/meta.ts b/data/chains/V2/eos/testnets/jungle4/meta.ts new file mode 100644 index 0000000..1109834 --- /dev/null +++ b/data/chains/V2/eos/testnets/jungle4/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'jungle4', + graph_id: null, + name: 'Jungle4', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eos/testnets/kylin/meta.ts b/data/chains/V2/eos/testnets/kylin/meta.ts new file mode 100644 index 0000000..28d21ad --- /dev/null +++ b/data/chains/V2/eos/testnets/kylin/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'kylin', + graph_id: null, + name: 'Kylin', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/consensus/eth-cl/meta.ts b/data/chains/V2/eth/consensus/eth-cl/meta.ts new file mode 100644 index 0000000..5531389 --- /dev/null +++ b/data/chains/V2/eth/consensus/eth-cl/meta.ts @@ -0,0 +1,28 @@ +import { ___InternalConsensusLayer } from '../../../../../../types/chain.types'; + +const meta: ___InternalConsensusLayer = { + id: 'eth-cl', + graph_id: null, + name: 'Ethereum Consensus Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/consensus/goerli-cl/meta.ts b/data/chains/V2/eth/consensus/goerli-cl/meta.ts new file mode 100644 index 0000000..e923dca --- /dev/null +++ b/data/chains/V2/eth/consensus/goerli-cl/meta.ts @@ -0,0 +1,28 @@ +import { ___InternalConsensusLayer } from '../../../../../../types/chain.types'; + +const meta: ___InternalConsensusLayer = { + id: 'goerli-cl', + graph_id: null, + name: 'Goerli Consensus Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + substreams: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/consensus/holesky-cl/meta.ts b/data/chains/V2/eth/consensus/holesky-cl/meta.ts new file mode 100644 index 0000000..4ad3b23 --- /dev/null +++ b/data/chains/V2/eth/consensus/holesky-cl/meta.ts @@ -0,0 +1,28 @@ +import { ___InternalConsensusLayer } from '../../../../../../types/chain.types'; + +const meta: ___InternalConsensusLayer = { + id: 'holesky-cl', + graph_id: null, + name: 'Holesky Consensus Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/consensus/sepolia-cl/meta.ts b/data/chains/V2/eth/consensus/sepolia-cl/meta.ts new file mode 100644 index 0000000..8916e55 --- /dev/null +++ b/data/chains/V2/eth/consensus/sepolia-cl/meta.ts @@ -0,0 +1,28 @@ +import { ___InternalConsensusLayer } from '../../../../../../types/chain.types'; + +const meta: ___InternalConsensusLayer = { + id: 'sepolia-cl', + graph_id: null, + name: 'Sepolia Consensus Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/eth.branded.svg b/data/chains/V2/eth/eth.branded.svg new file mode 100644 index 0000000..88766bd --- /dev/null +++ b/data/chains/V2/eth/eth.branded.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/data/chains/V2/eth/eth.dark.svg b/data/chains/V2/eth/eth.dark.svg new file mode 100644 index 0000000..2b0e08b --- /dev/null +++ b/data/chains/V2/eth/eth.dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/eth/eth.light.svg b/data/chains/V2/eth/eth.light.svg new file mode 100644 index 0000000..6a5e837 --- /dev/null +++ b/data/chains/V2/eth/eth.light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/eth/meta.ts b/data/chains/V2/eth/meta.ts new file mode 100644 index 0000000..f48bb4a --- /dev/null +++ b/data/chains/V2/eth/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'eth', + graph_id: 'mainnet', + name: 'Ethereum', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/ethereum', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, + metadata: { + website: 'https://ethereum.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/testnets/goerli/meta.ts b/data/chains/V2/eth/testnets/goerli/meta.ts new file mode 100644 index 0000000..afe926c --- /dev/null +++ b/data/chains/V2/eth/testnets/goerli/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'goerli', + graph_id: null, + name: 'Goerli', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + substreams: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + rpc: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/testnets/holesky/meta.ts b/data/chains/V2/eth/testnets/holesky/meta.ts new file mode 100644 index 0000000..1560b8d --- /dev/null +++ b/data/chains/V2/eth/testnets/holesky/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'holesky', + graph_id: null, + name: 'Holesky', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/eth/testnets/sepolia/meta.ts b/data/chains/V2/eth/testnets/sepolia/meta.ts new file mode 100644 index 0000000..ac88f13 --- /dev/null +++ b/data/chains/V2/eth/testnets/sepolia/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'sepolia', + graph_id: 'sepolia', + name: 'Sepolia', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/fantom/fantom.branded.svg b/data/chains/V2/fantom/fantom.branded.svg new file mode 100644 index 0000000..c48ac21 --- /dev/null +++ b/data/chains/V2/fantom/fantom.branded.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/fantom/fantom.dark.svg b/data/chains/V2/fantom/fantom.dark.svg new file mode 100644 index 0000000..4659047 --- /dev/null +++ b/data/chains/V2/fantom/fantom.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/fantom/fantom.light.svg b/data/chains/V2/fantom/fantom.light.svg new file mode 100644 index 0000000..155591d --- /dev/null +++ b/data/chains/V2/fantom/fantom.light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/fantom/meta.ts b/data/chains/V2/fantom/meta.ts new file mode 100644 index 0000000..66cb6b4 --- /dev/null +++ b/data/chains/V2/fantom/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'fantom', + graph_id: 'fantom', + name: 'Fantom', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/fantom', + brand_theme: 'light', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://fantom.foundation/', + }, +}; + +export default meta; diff --git a/data/chains/V2/fuse/fuse.branded.svg b/data/chains/V2/fuse/fuse.branded.svg new file mode 100644 index 0000000..91884b7 --- /dev/null +++ b/data/chains/V2/fuse/fuse.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/fuse/fuse.dark.svg b/data/chains/V2/fuse/fuse.dark.svg new file mode 100644 index 0000000..e046980 --- /dev/null +++ b/data/chains/V2/fuse/fuse.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/fuse/fuse.light.svg b/data/chains/V2/fuse/fuse.light.svg new file mode 100644 index 0000000..9e41934 --- /dev/null +++ b/data/chains/V2/fuse/fuse.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/fuse/meta.ts b/data/chains/V2/fuse/meta.ts new file mode 100644 index 0000000..e38c356 --- /dev/null +++ b/data/chains/V2/fuse/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'fuse', + name: 'Fuse', + alt_names: [], + graph_id: 'fuse', + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/fuse', + brand_theme: 'light', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L1', + website: 'https://fuse.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/gnosis/consensus/chiado-cl/meta.ts b/data/chains/V2/gnosis/consensus/chiado-cl/meta.ts new file mode 100644 index 0000000..51da450 --- /dev/null +++ b/data/chains/V2/gnosis/consensus/chiado-cl/meta.ts @@ -0,0 +1,28 @@ +import { ___InternalConsensusLayer } from '../../../../../../types/chain.types'; + +const meta: ___InternalConsensusLayer = { + id: 'chiado-cl', + graph_id: null, + name: 'Chiado Consensus Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/gnosis/consensus/gnosis-cl/meta.ts b/data/chains/V2/gnosis/consensus/gnosis-cl/meta.ts new file mode 100644 index 0000000..cfd099a --- /dev/null +++ b/data/chains/V2/gnosis/consensus/gnosis-cl/meta.ts @@ -0,0 +1,28 @@ +import { ___InternalConsensusLayer } from '../../../../../../types/chain.types'; + +const meta: ___InternalConsensusLayer = { + id: 'gnosis-cl', + graph_id: null, + name: 'Gnosis Consensus Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-03-08T00:00:00.000Z', + full_released_at: '2023-03-08T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/gnosis/gnosis.branded.svg b/data/chains/V2/gnosis/gnosis.branded.svg new file mode 100644 index 0000000..5271f3e --- /dev/null +++ b/data/chains/V2/gnosis/gnosis.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/gnosis/gnosis.dark.svg b/data/chains/V2/gnosis/gnosis.dark.svg new file mode 100644 index 0000000..68d09cc --- /dev/null +++ b/data/chains/V2/gnosis/gnosis.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/gnosis/gnosis.light.svg b/data/chains/V2/gnosis/gnosis.light.svg new file mode 100644 index 0000000..2a92e2c --- /dev/null +++ b/data/chains/V2/gnosis/gnosis.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/gnosis/meta.ts b/data/chains/V2/gnosis/meta.ts new file mode 100644 index 0000000..722e4dc --- /dev/null +++ b/data/chains/V2/gnosis/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'gnosis', + graph_id: 'gnosis', + name: 'Gnosis', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/gno', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://gnosis.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/gnosis/testnets/chiado/meta.ts b/data/chains/V2/gnosis/testnets/chiado/meta.ts new file mode 100644 index 0000000..83e5430 --- /dev/null +++ b/data/chains/V2/gnosis/testnets/chiado/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'chiado', + graph_id: null, + name: 'Chiado', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/index.ts b/data/chains/V2/index.ts new file mode 100644 index 0000000..9342a2a --- /dev/null +++ b/data/chains/V2/index.ts @@ -0,0 +1,72 @@ +// This file is auto-generated on pre-commit to avoid maintaining it. +// Do not modify manually as it will be overwritten. +// Last generation on 8/2/2024, 12:13:17 PM. + +export { default as arbone } from './arbone/meta'; +export { default as arbgoerli } from './arbone/testnets/arbgoerli/meta'; +export { default as arbsepolia } from './arbone/testnets/arbsepolia/meta'; +export { default as arweave } from './arweave/meta'; +export { default as avalanche } from './avalanche/meta'; +export { default as base } from './base/meta'; +export { default as bitcoin } from './bitcoin/meta'; +export { default as blast } from './blast/meta'; +export { default as blastsepolia } from './blast/testnets/blastsepolia/meta'; +export { default as boba } from './boba/meta'; +export { default as bobasepolia } from './boba/testnets/bobasepolia/meta'; +export { default as bsc } from './bsc/meta'; +export { default as chapel } from './bsc/testnets/chapel/meta'; +export { default as cardano } from './cardano/meta'; +export { default as celo } from './celo/meta'; +export { default as alfajores } from './celo/testnets/alfajores/meta'; +export { default as cosmoshub } from './cosmoshub/meta'; +export { default as juno } from './cosmoshub/testnets/juno/meta'; +export { default as theta } from './cosmoshub/testnets/theta/meta'; +export { default as cronos } from './cronos/meta'; +export { default as decimal } from './decimal/meta'; +export { default as eos } from './eos/meta'; +export { default as jungle4 } from './eos/testnets/jungle4/meta'; +export { default as kylin } from './eos/testnets/kylin/meta'; +export { default as eosevm } from './eos/evms/eosevm/meta'; +export { default as eth } from './eth/meta'; +export { default as goerli } from './eth/testnets/goerli/meta'; +export { default as holesky } from './eth/testnets/holesky/meta'; +export { default as sepolia } from './eth/testnets/sepolia/meta'; +export { default as ethCl } from './eth/consensus/eth-cl/meta'; +export { default as goerliCl } from './eth/consensus/goerli-cl/meta'; +export { default as holeskyCl } from './eth/consensus/holesky-cl/meta'; +export { default as sepoliaCl } from './eth/consensus/sepolia-cl/meta'; +export { default as fantom } from './fantom/meta'; +export { default as fuse } from './fuse/meta'; +export { default as gnosis } from './gnosis/meta'; +export { default as chiado } from './gnosis/testnets/chiado/meta'; +export { default as chiadoCl } from './gnosis/consensus/chiado-cl/meta'; +export { default as gnosisCl } from './gnosis/consensus/gnosis-cl/meta'; +export { default as kava } from './kava/meta'; +export { default as linea } from './linea/meta'; +export { default as litecoin } from './litecoin/meta'; +export { default as mode } from './mode/meta'; +export { default as moonbeam } from './moonbeam/meta'; +export { default as near } from './near/meta'; +export { default as neartest } from './near/testnets/neartest/meta'; +export { default as optimism } from './optimism/meta'; +export { default as ore } from './ore/meta'; +export { default as orestage } from './ore/testnets/orestage/meta'; +export { default as osmosis } from './osmosis/meta'; +export { default as polygon } from './polygon/meta'; +export { default as amoy } from './polygon/testnets/amoy/meta'; +export { default as mumbai } from './polygon/testnets/mumbai/meta'; +export { default as ronin } from './ronin/meta'; +export { default as scroll } from './scroll/meta'; +export { default as sei } from './sei/meta'; +export { default as starknet } from './starknet/meta'; +export { default as telos } from './telos/meta'; +export { default as telostest } from './telos/testnets/telostest/meta'; +export { default as wax } from './wax/meta'; +export { default as waxtest } from './wax/testnets/waxtest/meta'; +export { default as xLayer } from './x-layer/meta'; +export { default as xai } from './xai/meta'; +export { default as zkastar } from './zkastar/meta'; +export { default as zkatana } from './zkastar/testnets/zkatana/meta'; +export { default as zkyoto } from './zkastar/testnets/zkyoto/meta'; +export { default as zksync } from './zksync/meta'; +export { default as zora } from './zora/meta'; diff --git a/data/chains/V2/kava/kava.branded.svg b/data/chains/V2/kava/kava.branded.svg new file mode 100644 index 0000000..afca52f --- /dev/null +++ b/data/chains/V2/kava/kava.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/kava/kava.dark.svg b/data/chains/V2/kava/kava.dark.svg new file mode 100644 index 0000000..15d7eb4 --- /dev/null +++ b/data/chains/V2/kava/kava.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/kava/kava.light.svg b/data/chains/V2/kava/kava.light.svg new file mode 100644 index 0000000..3ef7c2c --- /dev/null +++ b/data/chains/V2/kava/kava.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/kava/meta.ts b/data/chains/V2/kava/meta.ts new file mode 100644 index 0000000..ed65ad8 --- /dev/null +++ b/data/chains/V2/kava/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'kava', + graph_id: null, + name: 'Kava', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/kava', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.kava.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/linea/linea.branded.svg b/data/chains/V2/linea/linea.branded.svg new file mode 100644 index 0000000..1fcdd17 --- /dev/null +++ b/data/chains/V2/linea/linea.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/linea/linea.dark.svg b/data/chains/V2/linea/linea.dark.svg new file mode 100644 index 0000000..b70101f --- /dev/null +++ b/data/chains/V2/linea/linea.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/linea/linea.light.svg b/data/chains/V2/linea/linea.light.svg new file mode 100644 index 0000000..36b185a --- /dev/null +++ b/data/chains/V2/linea/linea.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/linea/meta.ts b/data/chains/V2/linea/meta.ts new file mode 100644 index 0000000..679734b --- /dev/null +++ b/data/chains/V2/linea/meta.ts @@ -0,0 +1,44 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'linea', + name: 'Linea', + alt_names: [], + graph_id: 'linea', + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/linea', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:00Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:00Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:00Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + website: 'https://linea.build/', + }, +}; + +export default meta; diff --git a/data/chains/V2/litecoin/litecoin.branded.svg b/data/chains/V2/litecoin/litecoin.branded.svg new file mode 100644 index 0000000..e83c952 --- /dev/null +++ b/data/chains/V2/litecoin/litecoin.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/litecoin/litecoin.dark.svg b/data/chains/V2/litecoin/litecoin.dark.svg new file mode 100644 index 0000000..f624524 --- /dev/null +++ b/data/chains/V2/litecoin/litecoin.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/litecoin/litecoin.light.svg b/data/chains/V2/litecoin/litecoin.light.svg new file mode 100644 index 0000000..96533f2 --- /dev/null +++ b/data/chains/V2/litecoin/litecoin.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/litecoin/meta.ts b/data/chains/V2/litecoin/meta.ts new file mode 100644 index 0000000..3494048 --- /dev/null +++ b/data/chains/V2/litecoin/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'litecoin', + name: 'Litecoin', + alt_names: ['LTC'], + graph_id: null, + standard: 'ltc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.litecoin.type.v1.Block', + url: 'https://buf.build/streamingfast/firehose-litecoin/docs/main:sf.litecoin.type.v1', + }, + icon: { + id: 'tokens/ltc', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L1', + website: 'https://litecoin.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/mode/meta.ts b/data/chains/V2/mode/meta.ts new file mode 100644 index 0000000..d333c22 --- /dev/null +++ b/data/chains/V2/mode/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'mode', + name: 'Mode Network', + alt_names: [], + graph_id: 'mode-mainnet', + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/mode', + brand_theme: 'light', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-05-14T00:00:00Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-05-14T00:00:00Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-05-14T00:00:00Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L2', + website: 'https://www.mode.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/mode/mode.branded.svg b/data/chains/V2/mode/mode.branded.svg new file mode 100644 index 0000000..88a614e --- /dev/null +++ b/data/chains/V2/mode/mode.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/mode/mode.dark.svg b/data/chains/V2/mode/mode.dark.svg new file mode 100644 index 0000000..89e0103 --- /dev/null +++ b/data/chains/V2/mode/mode.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/mode/mode.light.svg b/data/chains/V2/mode/mode.light.svg new file mode 100644 index 0000000..47ada5b --- /dev/null +++ b/data/chains/V2/mode/mode.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/moonbeam/meta.ts b/data/chains/V2/moonbeam/meta.ts new file mode 100644 index 0000000..237c6d1 --- /dev/null +++ b/data/chains/V2/moonbeam/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'moonbeam', + graph_id: 'moonbeam', + name: 'Moonbeam', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/moonbeam', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://moonbeam.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/moonbeam/moonbeam.branded.svg b/data/chains/V2/moonbeam/moonbeam.branded.svg new file mode 100644 index 0000000..f819a51 --- /dev/null +++ b/data/chains/V2/moonbeam/moonbeam.branded.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/moonbeam/moonbeam.dark.svg b/data/chains/V2/moonbeam/moonbeam.dark.svg new file mode 100644 index 0000000..35d39e9 --- /dev/null +++ b/data/chains/V2/moonbeam/moonbeam.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/moonbeam/moonbeam.light.svg b/data/chains/V2/moonbeam/moonbeam.light.svg new file mode 100644 index 0000000..eb76348 --- /dev/null +++ b/data/chains/V2/moonbeam/moonbeam.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/near/meta.ts b/data/chains/V2/near/meta.ts new file mode 100644 index 0000000..c079de8 --- /dev/null +++ b/data/chains/V2/near/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'near', + graph_id: 'near-mainnet', + name: 'Near', + alt_names: [], + standard: 'near', + is_detailed_blocks: true, + block_type: { + label: 'sf.near.type.v1.Block', + url: 'https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1', + }, + icon: { + id: 'tokens/near', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://near.org/', + }, +}; + +export default meta; diff --git a/data/chains/V2/near/near.branded.svg b/data/chains/V2/near/near.branded.svg new file mode 100644 index 0000000..3efe47c --- /dev/null +++ b/data/chains/V2/near/near.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/near/near.dark.svg b/data/chains/V2/near/near.dark.svg new file mode 100644 index 0000000..0f25eda --- /dev/null +++ b/data/chains/V2/near/near.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/near/near.light.svg b/data/chains/V2/near/near.light.svg new file mode 100644 index 0000000..876f1d4 --- /dev/null +++ b/data/chains/V2/near/near.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/near/testnets/neartest/meta.ts b/data/chains/V2/near/testnets/neartest/meta.ts new file mode 100644 index 0000000..7ccc589 --- /dev/null +++ b/data/chains/V2/near/testnets/neartest/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'neartest', + graph_id: 'near-testnet', + name: 'Near-testnet', + alt_names: [], + standard: 'near', + is_detailed_blocks: true, + block_type: { + label: 'sf.near.type.v1.Block', + url: 'https://buf.build/streamingfast/firehose-near/docs/main:sf.near.type.v1', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/optimism/meta.ts b/data/chains/V2/optimism/meta.ts new file mode 100644 index 0000000..d185d54 --- /dev/null +++ b/data/chains/V2/optimism/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'optimism', + graph_id: 'optimism', + name: 'Optimism', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/optimistic-ethereum', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2024-01-01T00:00:00.000Z', + full_released_at: '2024-01-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-01-01T00:00:00.000Z', + full_released_at: '2024-01-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://optimism.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/optimism/optimism.branded.svg b/data/chains/V2/optimism/optimism.branded.svg new file mode 100644 index 0000000..d355b27 --- /dev/null +++ b/data/chains/V2/optimism/optimism.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/optimism/optimism.dark.svg b/data/chains/V2/optimism/optimism.dark.svg new file mode 100644 index 0000000..a115182 --- /dev/null +++ b/data/chains/V2/optimism/optimism.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/optimism/optimism.light.svg b/data/chains/V2/optimism/optimism.light.svg new file mode 100644 index 0000000..708b411 --- /dev/null +++ b/data/chains/V2/optimism/optimism.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/ore/meta.ts b/data/chains/V2/ore/meta.ts new file mode 100644 index 0000000..3268945 --- /dev/null +++ b/data/chains/V2/ore/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'ore', + graph_id: null, + name: 'Ore', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + icon: { + id: 'networks/ore', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + firehose: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + substreams: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + }, + metadata: { + website: 'https://ore.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/ore/ore.branded.svg b/data/chains/V2/ore/ore.branded.svg new file mode 100644 index 0000000..6eeb726 --- /dev/null +++ b/data/chains/V2/ore/ore.branded.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/data/chains/V2/ore/ore.dark.svg b/data/chains/V2/ore/ore.dark.svg new file mode 100644 index 0000000..02f197e --- /dev/null +++ b/data/chains/V2/ore/ore.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/ore/ore.light.svg b/data/chains/V2/ore/ore.light.svg new file mode 100644 index 0000000..79e202f --- /dev/null +++ b/data/chains/V2/ore/ore.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/ore/testnets/orestage/meta.ts b/data/chains/V2/ore/testnets/orestage/meta.ts new file mode 100644 index 0000000..14c7670 --- /dev/null +++ b/data/chains/V2/ore/testnets/orestage/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'orestage', + graph_id: null, + name: 'Ore Stage', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + supported_services: { + rpc: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + firehose: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + substreams: { + beta_released_at: '2023-03-01T00:00:00.000Z', + full_released_at: '2023-03-01T00:00:00.000Z', + deprecated_at: '2023-03-21T00:00:00.000Z', + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/osmosis/meta.ts b/data/chains/V2/osmosis/meta.ts new file mode 100644 index 0000000..7792527 --- /dev/null +++ b/data/chains/V2/osmosis/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'osmosis', + graph_id: 'osmosis-1', + name: 'Osmosis', + alt_names: [], + standard: 'cosmos', + is_detailed_blocks: true, + block_type: { + label: 'sf.cosmos.type.v1.Block', + url: 'https://github.com/figment-networks/proto-cosmos/blob/main/sf/cosmos/type/v1/type.proto', + }, + icon: { + id: 'networks/osmosis', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2024-01-01T00:00:00.000Z', + full_released_at: '2024-01-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://osmosis.zone/', + }, +}; + +export default meta; diff --git a/data/chains/V2/osmosis/osmosis.branded.svg b/data/chains/V2/osmosis/osmosis.branded.svg new file mode 100644 index 0000000..b287a36 --- /dev/null +++ b/data/chains/V2/osmosis/osmosis.branded.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/chains/V2/osmosis/osmosis.dark.svg b/data/chains/V2/osmosis/osmosis.dark.svg new file mode 100644 index 0000000..be66e06 --- /dev/null +++ b/data/chains/V2/osmosis/osmosis.dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/osmosis/osmosis.light.svg b/data/chains/V2/osmosis/osmosis.light.svg new file mode 100644 index 0000000..dce9e92 --- /dev/null +++ b/data/chains/V2/osmosis/osmosis.light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/chains/V2/polygon/meta.ts b/data/chains/V2/polygon/meta.ts new file mode 100644 index 0000000..c11cf6a --- /dev/null +++ b/data/chains/V2/polygon/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'polygon', + graph_id: 'matic', + name: 'Polygon', + alt_names: ['matic'], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/polygon-pos', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + }, + metadata: { + website: 'https://polygon.technology/', + }, +}; + +export default meta; diff --git a/data/chains/V2/polygon/polygon.branded.svg b/data/chains/V2/polygon/polygon.branded.svg new file mode 100644 index 0000000..5f4bdea --- /dev/null +++ b/data/chains/V2/polygon/polygon.branded.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/data/chains/V2/polygon/polygon.dark.svg b/data/chains/V2/polygon/polygon.dark.svg new file mode 100644 index 0000000..dda426c --- /dev/null +++ b/data/chains/V2/polygon/polygon.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/polygon/polygon.light.svg b/data/chains/V2/polygon/polygon.light.svg new file mode 100644 index 0000000..7236412 --- /dev/null +++ b/data/chains/V2/polygon/polygon.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/polygon/testnets/amoy/meta.ts b/data/chains/V2/polygon/testnets/amoy/meta.ts new file mode 100644 index 0000000..9755240 --- /dev/null +++ b/data/chains/V2/polygon/testnets/amoy/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'amoy', + graph_id: 'polygon-amoy', + name: 'Amoy', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2024-04-12T00:00:00.000Z', + full_released_at: '2024-04-12T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-04-12T00:00:00.000Z', + full_released_at: '2024-04-12T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-04-12T00:00:00.000Z', + full_released_at: '2024-04-12T00:00:00.000Z', + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/polygon/testnets/mumbai/meta.ts b/data/chains/V2/polygon/testnets/mumbai/meta.ts new file mode 100644 index 0000000..4763544 --- /dev/null +++ b/data/chains/V2/polygon/testnets/mumbai/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'mumbai', + graph_id: null, + name: 'Mumbai', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: '2024-04-12T00:00:00.000Z', + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: '2024-04-12T00:00:00.000Z', + }, + rpc: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: '2024-04-12T00:00:00.000Z', + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/ronin/meta.ts b/data/chains/V2/ronin/meta.ts new file mode 100644 index 0000000..300f3db --- /dev/null +++ b/data/chains/V2/ronin/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'ronin', + graph_id: null, + name: 'Ronin', + alt_names: [], + standard: 'rrc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/ronin', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://roninchain.com/', + }, +}; + +export default meta; diff --git a/data/chains/V2/ronin/ronin.branded.svg b/data/chains/V2/ronin/ronin.branded.svg new file mode 100644 index 0000000..29ef675 --- /dev/null +++ b/data/chains/V2/ronin/ronin.branded.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/data/chains/V2/ronin/ronin.dark.svg b/data/chains/V2/ronin/ronin.dark.svg new file mode 100644 index 0000000..d9fabc1 --- /dev/null +++ b/data/chains/V2/ronin/ronin.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/ronin/ronin.light.svg b/data/chains/V2/ronin/ronin.light.svg new file mode 100644 index 0000000..e53f957 --- /dev/null +++ b/data/chains/V2/ronin/ronin.light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/chains/V2/scroll/meta.ts b/data/chains/V2/scroll/meta.ts new file mode 100644 index 0000000..49fa445 --- /dev/null +++ b/data/chains/V2/scroll/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'scroll', + graph_id: 'scroll', + name: 'Scroll', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/scroll', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://scroll.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/scroll/scroll.branded.svg b/data/chains/V2/scroll/scroll.branded.svg new file mode 100644 index 0000000..2672cbc --- /dev/null +++ b/data/chains/V2/scroll/scroll.branded.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/data/chains/V2/scroll/scroll.dark.svg b/data/chains/V2/scroll/scroll.dark.svg new file mode 100644 index 0000000..9623b5c --- /dev/null +++ b/data/chains/V2/scroll/scroll.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/scroll/scroll.light.svg b/data/chains/V2/scroll/scroll.light.svg new file mode 100644 index 0000000..bbdf115 --- /dev/null +++ b/data/chains/V2/scroll/scroll.light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/sei/meta.ts b/data/chains/V2/sei/meta.ts new file mode 100644 index 0000000..4e40c36 --- /dev/null +++ b/data/chains/V2/sei/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'sei', + graph_id: null, + name: 'Sei', + alt_names: [], + standard: 'sei', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'tokens/sei', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.sei.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/sei/sei.branded.svg b/data/chains/V2/sei/sei.branded.svg new file mode 100644 index 0000000..504518e --- /dev/null +++ b/data/chains/V2/sei/sei.branded.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/data/chains/V2/sei/sei.dark.svg b/data/chains/V2/sei/sei.dark.svg new file mode 100644 index 0000000..f5cc4a8 --- /dev/null +++ b/data/chains/V2/sei/sei.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/sei/sei.light.svg b/data/chains/V2/sei/sei.light.svg new file mode 100644 index 0000000..81252a4 --- /dev/null +++ b/data/chains/V2/sei/sei.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/starknet/meta.ts b/data/chains/V2/starknet/meta.ts new file mode 100644 index 0000000..cc24da9 --- /dev/null +++ b/data/chains/V2/starknet/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'starknet', + graph_id: null, + name: 'Starknet', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/starknet', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.starknet.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/starknet/starknet.branded.svg b/data/chains/V2/starknet/starknet.branded.svg new file mode 100644 index 0000000..a092984 --- /dev/null +++ b/data/chains/V2/starknet/starknet.branded.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/data/chains/V2/starknet/starknet.dark.svg b/data/chains/V2/starknet/starknet.dark.svg new file mode 100644 index 0000000..64de940 --- /dev/null +++ b/data/chains/V2/starknet/starknet.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/starknet/starknet.light.svg b/data/chains/V2/starknet/starknet.light.svg new file mode 100644 index 0000000..55452c8 --- /dev/null +++ b/data/chains/V2/starknet/starknet.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/telos/meta.ts b/data/chains/V2/telos/meta.ts new file mode 100644 index 0000000..f9aa3b9 --- /dev/null +++ b/data/chains/V2/telos/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'telos', + graph_id: null, + name: 'Telos', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + icon: { + id: 'networks/telos', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://telos.net/', + }, +}; + +export default meta; diff --git a/data/chains/V2/telos/telos.branded.svg b/data/chains/V2/telos/telos.branded.svg new file mode 100644 index 0000000..335acf8 --- /dev/null +++ b/data/chains/V2/telos/telos.branded.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/data/chains/V2/telos/telos.dark.svg b/data/chains/V2/telos/telos.dark.svg new file mode 100644 index 0000000..31640b2 --- /dev/null +++ b/data/chains/V2/telos/telos.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/telos/telos.light.svg b/data/chains/V2/telos/telos.light.svg new file mode 100644 index 0000000..7c8daf3 --- /dev/null +++ b/data/chains/V2/telos/telos.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/telos/testnets/telostest/meta.ts b/data/chains/V2/telos/testnets/telostest/meta.ts new file mode 100644 index 0000000..dd99f71 --- /dev/null +++ b/data/chains/V2/telos/testnets/telostest/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'telostest', + graph_id: null, + name: 'Telos Test', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/wax/meta.ts b/data/chains/V2/wax/meta.ts new file mode 100644 index 0000000..f8c51dd --- /dev/null +++ b/data/chains/V2/wax/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'wax', + graph_id: null, + name: 'WAX', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + icon: { + id: 'tokens/waxp', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://wax.io/', + }, +}; + +export default meta; diff --git a/data/chains/V2/wax/testnets/waxtest/meta.ts b/data/chains/V2/wax/testnets/waxtest/meta.ts new file mode 100644 index 0000000..73b5629 --- /dev/null +++ b/data/chains/V2/wax/testnets/waxtest/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'waxtest', + graph_id: null, + name: 'WAX Test', + alt_names: [], + standard: 'antelope', + is_detailed_blocks: true, + block_type: { + label: 'sf.antelope.type.v1.Block', + url: 'https://buf.build/pinax/firehose-antelope/docs/main:sf.antelope.type.v1', + }, + supported_services: { + firehose: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + substreams: { + beta_released_at: '2023-12-01T00:00:00.000Z', + full_released_at: '2023-12-01T00:00:00.000Z', + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/wax/wax.branded.svg b/data/chains/V2/wax/wax.branded.svg new file mode 100644 index 0000000..57c5d8b --- /dev/null +++ b/data/chains/V2/wax/wax.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/wax/wax.dark.svg b/data/chains/V2/wax/wax.dark.svg new file mode 100644 index 0000000..dad28e1 --- /dev/null +++ b/data/chains/V2/wax/wax.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/wax/wax.light.svg b/data/chains/V2/wax/wax.light.svg new file mode 100644 index 0000000..20804b0 --- /dev/null +++ b/data/chains/V2/wax/wax.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/x-layer/meta.ts b/data/chains/V2/x-layer/meta.ts new file mode 100644 index 0000000..9e96ad5 --- /dev/null +++ b/data/chains/V2/x-layer/meta.ts @@ -0,0 +1,41 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'x-layer', + graph_id: null, + name: 'X-Layer', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/x-layer', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://www.okx.com/fr/xlayer', + }, +}; + +export default meta; diff --git a/data/chains/V2/x-layer/x-layer.branded.svg b/data/chains/V2/x-layer/x-layer.branded.svg new file mode 100644 index 0000000..f7a7ba2 --- /dev/null +++ b/data/chains/V2/x-layer/x-layer.branded.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/x-layer/x-layer.dark.svg b/data/chains/V2/x-layer/x-layer.dark.svg new file mode 100644 index 0000000..51ee552 --- /dev/null +++ b/data/chains/V2/x-layer/x-layer.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/x-layer/x-layer.light.svg b/data/chains/V2/x-layer/x-layer.light.svg new file mode 100644 index 0000000..1820c7e --- /dev/null +++ b/data/chains/V2/x-layer/x-layer.light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/data/chains/V2/xai/meta.ts b/data/chains/V2/xai/meta.ts new file mode 100644 index 0000000..72b0ed6 --- /dev/null +++ b/data/chains/V2/xai/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'xai', + name: 'XAI', + alt_names: [], + graph_id: null, + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/xai', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L3', + website: 'https://xai.games/', + }, +}; + +export default meta; diff --git a/data/chains/V2/xai/xai.branded.svg b/data/chains/V2/xai/xai.branded.svg new file mode 100644 index 0000000..6272abb --- /dev/null +++ b/data/chains/V2/xai/xai.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/xai/xai.dark.svg b/data/chains/V2/xai/xai.dark.svg new file mode 100644 index 0000000..9109748 --- /dev/null +++ b/data/chains/V2/xai/xai.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/xai/xai.light.svg b/data/chains/V2/xai/xai.light.svg new file mode 100644 index 0000000..b1cc000 --- /dev/null +++ b/data/chains/V2/xai/xai.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/zkastar/meta.ts b/data/chains/V2/zkastar/meta.ts new file mode 100644 index 0000000..1f30427 --- /dev/null +++ b/data/chains/V2/zkastar/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'zkastar', + name: 'Astar zkEVM', + alt_names: [], + graph_id: null, + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.zkevm.type.v1.Block', + url: 'https://buf.build/pinax/firehose-zkevm/docs/main:sf.zkevm.type.v1', + }, + icon: { + id: 'networks/astar', + brand_theme: 'both', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L2', + website: 'https://astar.network/', + }, +}; + +export default meta; diff --git a/data/chains/V2/zkastar/testnets/zkatana/meta.ts b/data/chains/V2/zkastar/testnets/zkatana/meta.ts new file mode 100644 index 0000000..fe73a73 --- /dev/null +++ b/data/chains/V2/zkastar/testnets/zkatana/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'zkatana', + name: 'Astar zKatana', + alt_names: [], + graph_id: null, + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.zkevm.type.v1.Block', + url: 'https://buf.build/pinax/firehose-zkevm/docs/main:sf.zkevm.type.v1', + }, + supported_services: { + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/zkastar/testnets/zkyoto/meta.ts b/data/chains/V2/zkastar/testnets/zkyoto/meta.ts new file mode 100644 index 0000000..93a939a --- /dev/null +++ b/data/chains/V2/zkastar/testnets/zkyoto/meta.ts @@ -0,0 +1,33 @@ +import { ___InternalTestnet } from '../../../../../../types/chain.types'; + +const meta: ___InternalTestnet = { + id: 'zkyoto', + name: 'Astar zKyoto', + alt_names: [], + graph_id: 'zkyoto-testnet', + standard: 'erc20', + is_detailed_blocks: false, + block_type: { + label: 'sf.zkevm.type.v1.Block', + url: 'https://buf.build/pinax/firehose-zkevm/docs/main:sf.zkevm.type.v1', + }, + supported_services: { + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, +}; + +export default meta; diff --git a/data/chains/V2/zkastar/zkastar.branded.svg b/data/chains/V2/zkastar/zkastar.branded.svg new file mode 100644 index 0000000..13ce8c8 --- /dev/null +++ b/data/chains/V2/zkastar/zkastar.branded.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/chains/V2/zkastar/zkastar.dark.svg b/data/chains/V2/zkastar/zkastar.dark.svg new file mode 100644 index 0000000..799c7aa --- /dev/null +++ b/data/chains/V2/zkastar/zkastar.dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/data/chains/V2/zkastar/zkastar.light.svg b/data/chains/V2/zkastar/zkastar.light.svg new file mode 100644 index 0000000..0cec748 --- /dev/null +++ b/data/chains/V2/zkastar/zkastar.light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/data/chains/V2/zksync/meta.ts b/data/chains/V2/zksync/meta.ts new file mode 100644 index 0000000..9904f41 --- /dev/null +++ b/data/chains/V2/zksync/meta.ts @@ -0,0 +1,42 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'zksync', + graph_id: 'zksync-era', + name: 'zkSync Era', + alt_names: [], + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/zksync', + brand_theme: 'dark', + variants: ['branded', 'mono'], + }, + supported_services: { + rpc: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: null, + full_released_at: null, + deprecated_at: null, + }, + }, + metadata: { + website: 'https://zksync.io/', + tags: ['zk'], + }, +}; + +export default meta; diff --git a/data/chains/V2/zksync/zksync.branded.svg b/data/chains/V2/zksync/zksync.branded.svg new file mode 100644 index 0000000..901dc2b --- /dev/null +++ b/data/chains/V2/zksync/zksync.branded.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/zksync/zksync.dark.svg b/data/chains/V2/zksync/zksync.dark.svg new file mode 100644 index 0000000..d404ffd --- /dev/null +++ b/data/chains/V2/zksync/zksync.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/zksync/zksync.light.svg b/data/chains/V2/zksync/zksync.light.svg new file mode 100644 index 0000000..09b7c8c --- /dev/null +++ b/data/chains/V2/zksync/zksync.light.svg @@ -0,0 +1,3 @@ + + + diff --git a/data/chains/V2/zora/meta.ts b/data/chains/V2/zora/meta.ts new file mode 100644 index 0000000..4e2d03e --- /dev/null +++ b/data/chains/V2/zora/meta.ts @@ -0,0 +1,45 @@ +import { ___InternalChain } from '../../../../types/chain.types'; + +const meta: ___InternalChain = { + id: 'zora', + name: 'Zora Network', + alt_names: [], + graph_id: null, + standard: 'erc20', + is_detailed_blocks: true, + block_type: { + label: 'sf.ethereum.type.v2.Block', + url: 'https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2', + }, + icon: { + id: 'networks/zora-network', + brand_theme: 'both', + variants: ['branded'], + }, + supported_services: { + rpc: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + firehose: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + substreams: { + beta_released_at: '2024-08-01T00:00:000Z', + full_released_at: null, + deprecated_at: null, + }, + }, + testnets: [], + consensus: [], + evms: [], + metadata: { + layer: 'L2', + website: 'https://zora.co/', + }, +}; + +export default meta; diff --git a/data/chains/V2/zora/zora.branded.svg b/data/chains/V2/zora/zora.branded.svg new file mode 100644 index 0000000..f0a60e0 --- /dev/null +++ b/data/chains/V2/zora/zora.branded.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/data/index.config.ts b/data/index.config.ts new file mode 100644 index 0000000..0dd88f3 --- /dev/null +++ b/data/index.config.ts @@ -0,0 +1,58 @@ +// This file is partially auto-generated. +// Chains under ordered were manually placed, to manage the z-index (priority order) of chains. +// Chains under missing are generated from available data, make sure to order them. +// Include deprecated or future chains. +// Last generation on 8/2/2024, 12:13:17 PM. + +export default { + ordered: { + eth: [ + 'holesky', + 'sepolia', + 'eth-cl', + 'holesky-cl', + 'sepolia-cl', + 'goerli', + 'goerli-cl', + ], + bitcoin: [], + polygon: ['amoy', 'mumbai'], + bsc: ['chapel'], + arbone: ['arbgoerli', 'arbsepolia', 'chiado-cl', 'chiado'], + avalanche: [], + optimism: [], + base: [], + near: ['neartest'], + cardano: [], + decimal: [], + gnosis: ['gnosis-cl'], + fantom: [], + celo: ['alfajores'], + arweave: [], + cosmoshub: ['theta', 'juno'], + osmosis: [], + moonbeam: [], + scroll: [], + starknet: [], + eos: ['eosevm', 'jungle4', 'kylin'], + wax: ['waxtest'], + telos: ['telostest'], + kava: [], + blast: ['blastsepolia'], + boba: ['bobasepolia'], + cronos: [], + fuse: [], + linea: [], + litecoin: [], + mode: [], + ronin: [], + sei: [], + xai: [], + zkastar: ['zkatana', 'zkyoto'], + 'x-layer': [], + zksync: [], + zora: [], + ore: ['orestage'], + }, + missing: [], +}; diff --git a/data/services.ts b/data/services.ts new file mode 100644 index 0000000..16fd09d --- /dev/null +++ b/data/services.ts @@ -0,0 +1,21 @@ +import { ServiceEndpoint } from '../types/service.types'; + +const services: Array = [ + { + name: 'Substreams', + endpoint_slug: 'substreams', + port: 443, + }, + { + name: 'Firehose', + endpoint_slug: 'firehose', + port: 443, + }, + { + name: 'RPC', + endpoint_slug: 'rpc', + port: 443, + }, +]; + +export default services; diff --git a/docs/beta_chains.md b/docs/beta_chains.md new file mode 100644 index 0000000..4864489 --- /dev/null +++ b/docs/beta_chains.md @@ -0,0 +1,5 @@ +# Beta Chains + +Beta chains are chains that are not yet officially supported by Pinax. These chains are not yet available in the Pinax UI, but endpoints are available for developers to use. These chains are typically requested to use by The Graph and while we do not productize them, we support them and they _**should**_ have the stability required by our contract with The Graph. + +We assume those are still risky to use on a production app. \ No newline at end of file diff --git a/docs/chain_icons.md b/docs/chain_icons.md new file mode 100644 index 0000000..ad8bd35 --- /dev/null +++ b/docs/chain_icons.md @@ -0,0 +1,11 @@ +# Chain Icons + +For our chain icons, we use [Edge & Node's Token Icons library](https://tokenicons.io/). The library is a collection of SVG icons for various blockchain tokens and chains. The library is available on [GitHub](https://github.com/0xa3k5/token-icons), [NPM](https://www.npmjs.com/package/@token-icons/react) and [Figma](https://www.figma.com/community/file/1355517329090639687/token-icons-community). + +We wrote a script to leverage the library's metadata (in the final data.json generation script), to make sure that the chain icons are up-to-date with the latest changes. + +The [copy_token_icons.ts script](../scripts/generate/V2/copy_token_icons.ts) iterates through our supported chains and makes sure that every mainnet has its associated token-icons logos. The script will attempt to retrieve the `branded` and `mono` versions of the chains logo. It will then copy those over and with the mono version of the logo create the `dark` and `light` variants. For more information, please read [chain_icons.md](./chain_icons.md). + +If it can't find them, you'll receive an error and may need to provide an ID match in the script's code. + +See [copy_token_icons.ts](../scripts/generate/V2/copy_token_icons.ts) for more information. \ No newline at end of file diff --git a/docs/how_to_use.md b/docs/how_to_use.md new file mode 100644 index 0000000..e78263e --- /dev/null +++ b/docs/how_to_use.md @@ -0,0 +1,117 @@ +# How to Use the Chains Repository + +This file is the best place to learn everything there is to know about the chains repository! Feel free to use this as a quickstart guide or as a reference as you work inside the project. + +## Content + +- [Metadata Updates](#metadata-updates) + - [Adding a new chain](#adding-a-new-chain) + - [Updating an Existing Chain](#updating-an-existing-chain) + - [Deprecating a Chain](#deprecating-a-chain) +- [Scripts](#scripts) + - [Script: Copy Token Icons](#script-copy-token-icons) + - [Script: Data Index](#script-data-index) + - [Script: Index Config Check](#script-index-config-check) + - [Script: Graph IDs Type](#script-graph-ids-type) + - [Script: Pinax IDs Type](#script-pinax-ids-type) +- [Types](#types) + - [Typing & Updating Auto-Generated Types](#typing--updating-auto-generated-types) + - [Updating the Chain Type](#updating-the-chain-type) + +## Metadata Updates + +In this section, you'll learn all you need to update the chains metadata, to either add newly supported chains by Pinax, deprecated chains, etc. + +### Adding a new chain + +Adding a new chain is as simple as adding a new file under the `data/chains/V2` directory (we're deprecating V1). The folder structure should respect the following; + +``` +/data/chains/V2 +├── MAINNET_ID/ +│ ├── meta.ts # Metadata of the Mainnet +│ ├── MAINNET_ID.branded.svg # Auto-generated Token-icons +│ ├── MAINNET_ID.dark.svg +│ ├── MAINNET_ID.light.svg +│ ├── consensus/ +│ │ ├── TESTNET_ID/ +│ │ ├── meta.ts # Metadata of the consensus subnet (can be testnets) +│ │ └── ... +│ ├── evms/ +│ │ ├── EVM_ID/ +│ │ ├── meta.ts # Metadata of the EVM subnet +│ │ └── ... +│ ├── testnets/ +│ │ ├── TESTNET_ID/ +│ │ ├── meta.ts # Metadata of the testnet +│ │ └── ... +│ └── +└── ... +``` + +The folders should be named after the chain's official Pinax ID and should contain the `meta.ts` file describing the chain. You may also like to read about [Beta Chains](./beta_chains.md). + +### Updating an Existing Chain + +To update an existing chain, you can simply open a PR with the changes you want to make to the chain's metadata. + +### Deprecating a Chain + +If a chain data stream is no longer supported, simply set the `deprecated_at` field as the date of the deprecation. This allows the different services to know when to stop supporting the chain, and enables us to keep track of the chains we've supported in the past for proper redirects and such. + +## Scripts + +As maintaining this huge list of chain can become challenging and repetitive, we've developed a few scripts to help automate certain tasks. You can review those scripts under the `/scripts` folder, but we'll summarize what they do here; + +### Generation Scripts + +Generation scripts use external data or project structure to extrapolate data to automate repetitive tasks. + +#### Script: Copy Token Icons + +This script iterates through our supported chains and makes sure that every mainnet has its associated token-icons logos. The script will attempt to retrieve the `branded` and `mono` versions of the chains logo. It will then copy those over and with the mono version of the logo create the `dark` and `light` variants. For more information, please read [chain_icons.md](./chain_icons.md). + +#### Script: Data Index + +This script maintains the index.ts file exporting all `meta.ts` from the `/data/chains/V2` folder (and nested folders), so we don't have to worry about unexported chains. + +#### Script: Index Config Check + +This script validates that every chain was placed in the `index.config.ts`, to be given a unique, prioritized index relative to other chains. If any chains are found in the `/data/chains/V2` folder but isn't configured in the `index.config.ts` file, it will throw an error and add those missing chains in the `missing` array of the file. For more info, please read [updating_indexes.md](./updating_indexes.md). + +#### Script: Graph IDs Type + +This script fetches The Graph endpoint of supported chains and updates our type definition for valid Graph network IDs. For more info, please read [retrieve_graph_ids.md](./retrieve_graph_ids.md). + +#### Script: Pinax IDs Type + +This script iterates through the files in the `/data/chains/V2` and updates our type definition for valid Pinax network IDs. + + +#### Script Automation + +All of those scripts are defined in the `package.json`, so you can run them manually by using NPM commands. You may find that you need to need some scripts manually, one good example being `generate:type_pinaxid` and `generate:type_graphid` while adding new chains. + +But in most cases, you shouldn't have to worry to much about those scripts, they're run pre-commit, so everything _**should**_ update automagically, otherwise you'll receive errors explaning the steps that needs to be taken. + +### Verification Scripts + +For now, no verification script is implemented, but it would be a good idea to implement a script that can check our metadata against [Notion's Blockchain Service Matrix](https://www.notion.so/pinaxnetwork/bfec60491b1d48509980ef69e31e7651?v=93922339441443698c3ebc8a695b61bd) (or whatever chosen selected single-source-of-truth for Pinax-supported chains). The folder structure for such a script is already there, but the scripts would need to be implemented. + +## Types + +Core types are located under `/types/`. Make sure to review those files to familiarize yourself with the data format we enforce for mainnets and their subnets. + +### Typing & Updating Auto-Generated Types + +The chain files are in Typescript, so make sure to cast them to the appropriate type to get the proper validations (Chain, Testnet, Consensus). + +Also make sure to run the `npm run generate:type_pinaxid` and `npm run generate:data_json` commands to update the related types and index if you're encountering any ID type issue there. + +If you're unsure about the fields you need to fill, you can have a look at the [Chain Type](/types/chain.types.ts) to learn more about the fields you need to fill. + +### Updating the Chain Type + +If you want to add a new field to the chain type, you can simply open a PR with the changes you want to make to the chain type and make sure every chain's metadata is updated to include the new field if required. + +Removing a field from the chain type is not recommended, as it may break the metadata of the chains. If you want to remove a field, please open an issue to discuss it first. \ No newline at end of file diff --git a/docs/proposals/ops-product-sync.md b/docs/proposals/ops-product-sync.md new file mode 100644 index 0000000..039896f --- /dev/null +++ b/docs/proposals/ops-product-sync.md @@ -0,0 +1,109 @@ +# OPS-Product Sync + +## Summary + +This document is a proposal for syncing the OPS and Product teams. The goal is to ensure that the metadata of chains supported by Pinax products is up-to-date and accurate. This process is crucial in ensuring that the product team has the necessary information to maintain the products. + +> WIP: This document is a work in progress and is subject to change. +> +> exact schedule for blockchain to be deployed exists +There are different sources +Jonathan prioritizes chains on 'easy' wins +YAML/JSON doesn't mean its ready +> +> -->> Once a blockchain is ready, DNS record (another yaml file in repo) <<-- +Doesn't mean blockchain is backuped, stable, etc. Maybe OK for use by The Graph. +> +> Automation might not be as straightforward +> +> Requirements for The Graph are different than requirements from public use. +> +> Fully operationnal chains tracked in Google Sheets +> +> Sajjad handles backups + +## Background + +The OPS team maintains a private list (in a YAML file in the OPS Github organization) of chains supported or to-be-supported by Pinax. This list needs to be maintained as it triggers a series of automations on the ops side. + +The Product team maintains this repository, which acts as the single-source-of-truth for Pinax products. It contains extra metadata that is not present in the OPS list, such as chain icons, __chain services__, and other product-specific information. + +Those two lists are already necessary for their respective teams. + +The OPS team also maintains a Notion page on The Graph's side, which contains the list of chains supported by Pinax products. + +### Data duplication + +To further avoid maintaining the same data in two different places, here's the data that each team currently maintains. It would be beneficial to understand which team is responsible for which piece of data. + +#### OPS Team + +##### Chain Metadata + +```json +{ + "status": "TBD" +} +``` + +##### The Graph Notion Page + +TBD + +#### Product Team + +```json +{ + "id": "eth", + "graph_id": "mainnet", + "name": "Ethereum", + "alt_names": [], + "index": 0, + "standard": "erc20", + "block_type": { + "label": "sf.ethereum.type.v2.Block", + "url": "https://buf.build/streamingfast/firehose-ethereum/docs/main:sf.ethereum.type.v2" + }, + "icon": { + "id": "networks/ethereum", + "brand_theme": "both", + "variants": [ + "branded", + "mono" + ] + }, + "supported_services": { + "firehose": { + "released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "substreams": { + "released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + }, + "rpc": { + "released_at": "2023-12-01T00:00:00.000Z", + "deprecated_at": null + } + }, + "testnets": [ + // Array of simplified chain objects + ], + "consensus": [ + // Array of simplified chain objects + ], + "evms": [ + // Array of simplified chain objects + ], + } +``` + +## Proposal + +The proposal is for the OPS team to expose the metadata of chains supported by Pinax products as a public endpoint. + +The OPS team will maintain the private list as they do now and a GitHub Action, which will automatically update the public endpoint's data. + +The Product team can then leverage the public endpoint and Github Actions on their side too. + +Depending on the data the OPs team can provide and if The Graph accepts it, the Product team could work on an automated alternative to the current manual process of updating the Notion page. \ No newline at end of file diff --git a/docs/retrieve_graph_ids.md b/docs/retrieve_graph_ids.md new file mode 100644 index 0000000..2d0e074 --- /dev/null +++ b/docs/retrieve_graph_ids.md @@ -0,0 +1,33 @@ +# Retrieve The Graph Chain IDs + +This process is useful to add a supported chain to the app, as we need to make sure that the chain is available on The Graph to provide a valid TOML quickstart config. GraphID type is automatically updated on pre-commit, so in most cases you don't need to worry about it. + +In the case that the chain is not available on The Graph, we set its `graph_id` to null, so that the TOML config shows `This chain is not supported by The Graph Network`. + +## Steps to retrieve The Graph Chain IDs + +**OPTION A: Run `npm run fetch-graph-ids` in the project** + +1. Clone the repository +2. At the root of the project, run `npm run fetch-graph-ids` + +**OPTION B: CURL** + +1. Fetch The Graph Supported Chains + - **Option A**: Install [JQ](https://jqlang.github.io/jq/) and run cURL command `curl -X POST -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "method": "chain_list", "id": 1 }' https://api.studio.thegraph.com/deploy | jq` + - **Option B**: Use your favorite HTTP Client to retrieve it: + ```json + { + "url": "https://api.studio.thegraph.com/deploy", + "headers": { + "Content-Type": "application/json" + }, + "body": { + "jsonrpc": "2.0", + "method": "chain_list", + "id": 1 + } + } + ``` +2. See if you can find a chain ID matching the chain you are adding to the app under "hostedService" +3. If you can't find any matching ID, the added chain will have `graph_id: null`, otherwise the chain ID \ No newline at end of file diff --git a/docs/updating_dependent_products.md b/docs/updating_dependent_products.md new file mode 100644 index 0000000..ea94871 --- /dev/null +++ b/docs/updating_dependent_products.md @@ -0,0 +1,8 @@ +# Updating Dependent Products + +To update the dependent products, you simply need to publish a new version of the package and update those products to use the latest version. + +To keep things in sync, make sure to update ALL of the following products at the same time: + +- [App](https://github.com/pinax-network/app-frontend) +- [Website](https://github.com/pinax-network/website-frontend) \ No newline at end of file diff --git a/docs/updating_indexes.md b/docs/updating_indexes.md new file mode 100644 index 0000000..45c3be5 --- /dev/null +++ b/docs/updating_indexes.md @@ -0,0 +1,3 @@ +# Updating Indexes + +To display the chains in the UI, each chain has an index score that is used to sort the chains. To reorganize the chains, you can update the [index.config.ts](../data/index.config.ts) file. Indexes are given in ascending order. \ No newline at end of file diff --git a/index.ts b/index.ts index 31dd3fb..98bfbdc 100644 --- a/index.ts +++ b/index.ts @@ -1,3 +1,5 @@ -import * as data from './data'; +import * as services from './data/services'; +import * as types from './types'; import * as utils from './utils'; -export default { data, utils }; + +export default { services, types, utils }; diff --git a/package-lock.json b/package-lock.json index b38c611..d2bedb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,59 +1,6659 @@ { "name": "@pinax/chains", - "version": "1.1.19", + "version": "2.0.5-rc1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pinax/chains", - "version": "1.1.19", + "version": "2.0.5-rc1", "devDependencies": { + "@token-icons/core": "^2.8.2", + "@types/bun": "latest", + "@types/jest": "^29.5.12", "husky": "^9.0.11", - "prettier": "^3.2.5" + "jest": "^29.7.0", + "prettier": "^3.2.5", + "ts-morph": "^22.0.0" + }, + "peerDependencies": { + "typescript": "^5.4.4" } }, - "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "bin": { - "husky": "bin.mjs" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=18" + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "node_modules/@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "dev": true, "bin": { - "prettier": "bin/prettier.cjs" + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=14" + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } - } - }, - "dependencies": { - "husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@token-icons/core": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@token-icons/core/-/core-2.8.2.tgz", + "integrity": "sha512-wK29YO8DJbFbbsfZd1mN1jxuDxBC/gZMJUpTtDzdk6afMY2O/3tsMC+k9Mt9/OYzOKg+4J3yy6vsqwaLwdN75w==", + "dev": true, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.23.0.tgz", + "integrity": "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.3.2", + "minimatch": "^9.0.3", + "mkdirp": "^3.0.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/bun": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.2.tgz", + "integrity": "sha512-pRBDD3EDqPf83qe95i3EpYu5G2J8bbb78a3736vnCm2K8YWtEE5cvJUq2jkKvJhW07YTfQtbImywIwRhWL8z3Q==", + "dev": true, + "dependencies": { + "bun-types": "1.1.8" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bun-types": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.8.tgz", + "integrity": "sha512-dwhfuUKSGK8hm5Llcvb5+ejRh+4mIt8ibObJVKhZBsi0ScpXmt+AlaS1eDW6uRXCHj084Qt0kIqAJ08/7ZGC9Q==", + "dev": true, + "dependencies": { + "@types/node": "~20.12.8", + "@types/ws": "~8.5.10" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-block-writer": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.1.tgz", + "integrity": "sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==", + "dev": true + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.829", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.829.tgz", + "integrity": "sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "9.0.11", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", + "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-morph": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-22.0.0.tgz", + "integrity": "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.23.0", + "code-block-writer": "^13.0.1" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "dev": true + }, + "@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true + }, + "@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@token-icons/core": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@token-icons/core/-/core-2.8.2.tgz", + "integrity": "sha512-wK29YO8DJbFbbsfZd1mN1jxuDxBC/gZMJUpTtDzdk6afMY2O/3tsMC+k9Mt9/OYzOKg+4J3yy6vsqwaLwdN75w==", + "dev": true, + "requires": {} + }, + "@ts-morph/common": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.23.0.tgz", + "integrity": "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==", + "dev": true, + "requires": { + "fast-glob": "^3.3.2", + "minimatch": "^9.0.3", + "mkdirp": "^3.0.1", + "path-browserify": "^1.0.1" + } + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/bun": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.2.tgz", + "integrity": "sha512-pRBDD3EDqPf83qe95i3EpYu5G2J8bbb78a3736vnCm2K8YWtEE5cvJUq2jkKvJhW07YTfQtbImywIwRhWL8z3Q==", + "dev": true, + "requires": { + "bun-types": "1.1.8" + } + }, + "@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/node": { + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bun-types": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.8.tgz", + "integrity": "sha512-dwhfuUKSGK8hm5Llcvb5+ejRh+4mIt8ibObJVKhZBsi0ScpXmt+AlaS1eDW6uRXCHj084Qt0kIqAJ08/7ZGC9Q==", + "dev": true, + "requires": { + "@types/node": "~20.12.8", + "@types/ws": "~8.5.10" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "code-block-writer": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.1.tgz", + "integrity": "sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.829", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.829.tgz", + "integrity": "sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "9.0.11", + "dev": true + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", + "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "prettier": { + "version": "3.2.5", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-morph": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-22.0.0.tgz", + "integrity": "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==", + "dev": true, + "requires": { + "@ts-morph/common": "~0.23.0", + "code-block-writer": "^13.0.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "peer": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/package.json b/package.json index 8c6d728..871851d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pinax/chains", - "version": "1.1.25", + "version": "2.0.6", "description": "Single-source-of-truth for the metadata of chains supported by Pinax.", "keywords": [ "chains", @@ -8,27 +8,45 @@ "ssot" ], "author": "Dominic ", - "main": "data.json", - "types": "data.d.ts", + "main": "data/chains/V2/data.json", + "types": "/types/index.ts", "files": [ - "data.json", - "data.d.ts", - "types/**.ts" + "index.ts", + "/utils/**/**.ts", + "/types/**.ts", + "/data/services.ts", + "/data/chains/V1/chains.json", + "/data/chains/V2/chains.json" ], "scripts": { - "fetch-graph-ids": "node ./scripts/fetchGraphIDs.js", + "fetch-graph-ids": "bun ./scripts/fetchGraphIDs.ts", "format": "prettier --log-level warn --write \"./**/*.{js,jsx,ts,tsx}\"", - "generate": "npm run generate:data", - "generate:data": "node ./scripts/generate/data_json.js", - "generate:types": "npm run generate:type_graphid && npm run generate:type_pinaxid && npm run format", - "generate:type_graphid": "node ./scripts/generate/type_graphid.js", - "generate:type_pinaxid": "node ./scripts/generate/type_pinaxid.js", - "test": "echo \"Error: no test specified\" && exit 1", + "generate": "bun run generate:data && bun run generate:types && bun run generate:copy_token_icons", + "generate:data": "bun run generate:data_index && bun run generate:index_config && bun run generate:data_json", + "generate:index_config": "bun ./scripts/generate/V2/index_config_check.ts", + "generate:data_index": "bun ./scripts/generate/V2/data_index.ts", + "generate:data_json": "bun ./scripts/generate/V2/data_json.ts", + "generate:types": "bun run generate:type_graphid && bun run generate:type_pinaxid && bun run format", + "generate:type_graphid": "bun ./scripts/generate/V2/type_graphid.ts", + "generate:type_pinaxid": "bun ./scripts/generate/V2/type_pinaxid.ts", + "generate:copy_token_icons": "bun ./scripts/generate/V2/copy_token_icons.ts", + "verify:match_legacy_check": "bun ./scripts/verify/V2/match_legacy_data.ts", + "generate_v1": "npm run generate_v1:data", + "generate_v1:data": "node ./scripts/generate/V1/data_json.js", + "generate_v1:types": "npm run generate_v1:type_graphid && npm run generate_v1:type_pinaxid && npm run format", + "generate_v1:type_graphid": "node ./scripts/generate/V1/type_graphid.js", + "generate_v1:type_pinaxid": "node ./scripts/generate/V1/type_pinaxid.js", + "test": "bun test", "prepare": "husky" }, "devDependencies": { + "@token-icons/core": "^2.8.2", + "@types/bun": "latest", + "@types/jest": "^29.5.12", "husky": "^9.0.11", - "prettier": "^3.2.5" + "jest": "^29.7.0", + "prettier": "^3.2.5", + "ts-morph": "^22.0.0" }, "repository": { "type": "git", @@ -37,5 +55,8 @@ "homepage": "https://github.com/pinax-network/chains#readme", "bugs": { "url": "https://github.com/pinax-network/chains/issues" + }, + "peerDependencies": { + "typescript": "^5.4.4" } } diff --git a/scripts/fetchGraphIDs.js b/scripts/fetchGraphIDs.js deleted file mode 100644 index 864da5d..0000000 --- a/scripts/fetchGraphIDs.js +++ /dev/null @@ -1,21 +0,0 @@ -const fetchGraphIDs = () => { - console.log('Fetching graph IDs...'); - fetch('https://api.studio.thegraph.com/deploy', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - jsonrpc: '2.0', - method: 'chain_list', - id: 1, - }), - }) - .then((res) => res.json()) - .then((res) => { - let graphIds = res.result.studio; - console.log(graphIds.sort((a, b) => (a < b ? -1 : 1))); - }); -}; - -fetchGraphIDs(); diff --git a/scripts/fetchGraphIDs.ts b/scripts/fetchGraphIDs.ts new file mode 100644 index 0000000..5b2f0aa --- /dev/null +++ b/scripts/fetchGraphIDs.ts @@ -0,0 +1,26 @@ +import bun from 'bun'; + +const fetchGraphIDs = async (): Promise => { + console.log('Fetching graph IDs...'); + try { + const res = await fetch('https://api.studio.thegraph.com/deploy', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'chain_list', + id: 1, + }), + }); + + const data = await res.json(); + let graphIds = data.result.studio; + console.log(graphIds.sort((a: string, b: string) => (a < b ? -1 : 1))); + } catch (error) { + console.error('Error fetching graph IDs:', error); + } +}; + +fetchGraphIDs(); diff --git a/scripts/generate/data_json.js b/scripts/generate/V1/data_json.js similarity index 73% rename from scripts/generate/data_json.js rename to scripts/generate/V1/data_json.js index d39e6db..4bd1e47 100644 --- a/scripts/generate/data_json.js +++ b/scripts/generate/V1/data_json.js @@ -2,7 +2,7 @@ const fs = require('fs'); const path = require('path'); // Define the directory containing the JSON files -const directoryPath = path.join(__dirname, '../..//data/chains'); +const directoryPath = path.join(__dirname, '../../../data/chains/V1'); // Read the directory fs.readdir(directoryPath, (err, files) => { @@ -14,6 +14,9 @@ fs.readdir(directoryPath, (err, files) => { // Loop through all the files in the directory files.forEach((file) => { + // Skip the chains.json file + if (file === 'chains.json') return; + // Only process .json files if (path.extname(file) === '.json') { // Read the JSON file @@ -24,5 +27,8 @@ fs.readdir(directoryPath, (err, files) => { }); // Write the combined data to a new JSON file - fs.writeFileSync(path.join('./', 'data.json'), JSON.stringify(data, null, 2)); + fs.writeFileSync( + path.join(directoryPath, 'chains.json'), + JSON.stringify(data, null, 2), + ); }); diff --git a/scripts/generate/type_graphid.js b/scripts/generate/V1/type_graphid.js similarity index 100% rename from scripts/generate/type_graphid.js rename to scripts/generate/V1/type_graphid.js diff --git a/scripts/generate/type_pinaxid.js b/scripts/generate/V1/type_pinaxid.js similarity index 100% rename from scripts/generate/type_pinaxid.js rename to scripts/generate/V1/type_pinaxid.js diff --git a/scripts/generate/V2/copy_token_icons.ts b/scripts/generate/V2/copy_token_icons.ts new file mode 100644 index 0000000..caa00a7 --- /dev/null +++ b/scripts/generate/V2/copy_token_icons.ts @@ -0,0 +1,190 @@ +// Run after `npm run generate:data` +import fs from 'fs'; +import path from 'path'; + +interface Icon { + id: string; + variants: string[]; +} + +interface Network { + id: string; + icon: Icon; +} + +interface Token { + id: string; + symbol: string; + variants: string[]; +} + +// Define the source directories and files +const tokenIconDistDir: string = './node_modules/@token-icons/core/dist'; +const tokenIconMetaDir: string = `${tokenIconDistDir}/metadata`; +const tokenIconNetworksMetaPath: string = `${tokenIconMetaDir}/networks.json`; +const tokenIconTokensMetaPath: string = `${tokenIconMetaDir}/tokens.json`; +const tokenIconNetworkSvgsDir: string = `${tokenIconDistDir}/svgs/networks`; +const tokenIconTokenSvgsDir: string = `${tokenIconDistDir}/svgs/tokens`; + +// Define the destination directory for the icons +const destDir = (chainID: string) => `./data/chains/V2/${chainID}`; + +// Read and parse the chains.json file +const chains = JSON.parse( + fs.readFileSync('./data/chains/V2/chains.json', 'utf-8'), +); + +const tiUnavailableIcons = [ + // Those icons are not available in Token Icons + 'networks/ore', +]; + +// Token Icon Exceptions, where metadata ID +// does not match the SVG ID +const tiExceptions = [ + ['networks/optimistic-ethereum', 'optimism'], + ['networks/binance-smart-chain', 'binance-smart-chain'], // Don't split at hyphen for bsc + ['networks/polygon-pos', 'polygon'], + ['networks/zora-network', 'zora'], + ['networks/x-layer', 'x-layer'], // Don't split at hyphen for x-layer +]; + +const iconIsUnavailable = (iconId: string) => { + return tiUnavailableIcons.includes(iconId); +}; + +const tokens: Token[] = JSON.parse( + fs.readFileSync(path.resolve(tokenIconTokensMetaPath), 'utf8'), +); + +const networks: Network[] = JSON.parse( + fs.readFileSync(path.resolve(tokenIconNetworksMetaPath), 'utf8'), +); + +const matchMetaToSVGIDs = (metaIconID: string, exceptions: string[][]) => { + // Find if metaIconID is in exceptions + const exception = tiExceptions.find(([id]) => id === metaIconID); + + // If it is, return the second element of the exception array + if (exception) { + return exception[1]; + } + + // If it's not in exceptions, split at '/' and '-' and return the first element after the split + return metaIconID.split('/')[1].split('-')[0]; +}; + +const checkIconMetaForChain = (chain: any) => { + if (!chain.icon) { + // Ignore chains without icons (typically subnets) + return; + } + + if (iconIsUnavailable(chain.icon.id)) { + return; + } + + if (chain.icon.id.indexOf('tokens') !== -1) { + const iconMeta = tokens.find( + (token) => token.symbol === chain.icon.id.split('/')[1], + ); + if (iconMeta) { + chain.icon.variants = iconMeta.variants; + } else { + const warnMsg = `⚠️ Could not find icon meta for '${chain.icon.id}'`; + warnings.push(`(${warnings.length + 1}) ${warnMsg}`); + } + } else { + const iconMeta = networks.find( + (network) => network.id === chain.icon.id.split('/')[1], + ); + if (iconMeta) { + // @ts-ignore + chain.icon.variants = iconMeta.variants; + } else { + const warnMsg = `⚠️ Could not find icon meta for '${chain.icon.id}'`; + warnings.push(`(${warnings.length + 1}) ${warnMsg}`); + } + } +}; + +const warnings: string[] = []; + +console.log('🕑 Copying chain icons from token-icons...'); + +// Iterate over each chain +for (const chain of chains) { + checkIconMetaForChain(chain); + + const iconBasePath: string = + chain.icon.id.split('/')[0] === 'networks' + ? tokenIconNetworkSvgsDir + : tokenIconTokenSvgsDir; + + // Define the paths to the icon variants + const brandedIconPath: string = path.join( + iconBasePath, + 'branded', + `${matchMetaToSVGIDs(chain.icon.id, tiExceptions)}.svg`, + ); + const monoIconPath: string = path.join( + iconBasePath, + 'mono', + `${matchMetaToSVGIDs(chain.icon.id, tiExceptions)}.svg`, + ); + + // Define the destination file paths + const destBrandedIconPath: string = path.join( + destDir(chain.id), + `${chain.id}.branded.svg`, + ); + const destLightIconPath: string = path.join( + destDir(chain.id), + `${chain.id}.light.svg`, + ); + const destDarkIconPath: string = path.join( + destDir(chain.id), + `${chain.id}.dark.svg`, + ); + + if (chain.icon.variants.includes('branded')) { + // Copy the branded icon to the destination directory + if (fs.existsSync(brandedIconPath)) { + fs.copyFileSync(brandedIconPath, destBrandedIconPath); + } else { + if (!iconIsUnavailable(chain.icon.id)) { + console.log(brandedIconPath); + const warnMsg = `⚠️ Branded icon not found for ${chain.id}`; + warnings.push(`(${warnings.length + 1}) ${warnMsg}`); + } + } + } + + if (chain.icon.variants.includes('mono')) { + if (fs.existsSync(monoIconPath)) { + // Create the light icon by replacing '#fff' with '#fffffe' in the mono icon + let monoIconContent = fs.readFileSync(monoIconPath, 'utf-8'); + let lightIconContent = monoIconContent.replace(/#fff/g, '#fffffe'); + fs.writeFileSync(destLightIconPath, lightIconContent); + + // Create the dark icon by replacing '#fff' with '#000001' in the mono icon + monoIconContent = fs.readFileSync(monoIconPath, 'utf-8'); + let darkIconContent = monoIconContent.replace(/#fff/g, '#000001'); + fs.writeFileSync(destDarkIconPath, darkIconContent); + } else { + if (!iconIsUnavailable(chain.icon.id)) { + const warnMsg = `⚠️ Mono icon not found for ${chain.id}`; + warnings.push(`(${warnings.length + 1}) ${warnMsg}`); + } + } + } +} + +if (warnings.length) { + console.log(warnings.join('\n')); + console.log( + `☑️ Copied chain icons from token-icons with ${warnings.length} warnings.`, + ); +} else { + console.log(`✅ Successfully copied chain icons from token-icons!`); +} diff --git a/scripts/generate/V2/data_index.ts b/scripts/generate/V2/data_index.ts new file mode 100644 index 0000000..16db0dc --- /dev/null +++ b/scripts/generate/V2/data_index.ts @@ -0,0 +1,43 @@ +import fs from 'fs'; +import path from 'path'; +import { toCamelCase } from '../../../utils/case'; + +console.log('🕑 Generating data index...'); + +const dataDir = path.join(__dirname, '../../../', 'data/chains/V2'); +let indexContent = ''; + +// Generate the GraphId type definition +const indexGeneratedComment = `// This file is auto-generated on pre-commit to avoid maintaining it.\n// Do not modify manually as it will be overwritten.\n// Last generation on ${new Date().toLocaleString()}.\n\n`; + +indexContent += indexGeneratedComment; + +fs.readdirSync(dataDir).forEach((mainnetDir) => { + // Ignore index.ts and chains.json files + if (mainnetDir === 'index.ts' || mainnetDir === 'chains.json') return; + + const mainnetPath = path.join(dataDir, mainnetDir); + const mainnetMetaPath = path.join(mainnetPath, 'meta.ts'); + + if (fs.existsSync(mainnetMetaPath)) { + indexContent += `export { default as ${toCamelCase(mainnetDir)} } from './${mainnetDir}/meta';\n`; + } + + ['testnets', 'consensus', 'evms'].forEach((subnetType) => { + const subnetPath = path.join(mainnetPath, subnetType); + + if (fs.existsSync(subnetPath)) { + fs.readdirSync(subnetPath).forEach((subnetDir) => { + const subnetMetaPath = path.join(subnetPath, subnetDir, 'meta.ts'); + + if (fs.existsSync(subnetMetaPath)) { + indexContent += `export { default as ${toCamelCase(subnetDir)} } from './${mainnetDir}/${subnetType}/${subnetDir}/meta';\n`; + } + }); + } + }); +}); + +fs.writeFileSync(path.join(dataDir, 'index.ts'), indexContent); + +console.log('✅ Successfully generated data index!'); diff --git a/scripts/generate/V2/data_json.ts b/scripts/generate/V2/data_json.ts new file mode 100644 index 0000000..59d797e --- /dev/null +++ b/scripts/generate/V2/data_json.ts @@ -0,0 +1,64 @@ +import fs from 'fs'; +import path from 'path'; +import * as chainData from '../../../data/chains/V2/index'; +import { toCamelCase } from '../../../utils/case'; +import indexConf from '../../../data/index.config'; +import { IndexConfig } from './index_config_check'; +import { Chain, SupportedServices } from '../../../types'; + +interface SubnetData { + id: string; + index: number; + supported_services: SupportedServices; +} + +console.log('🕑 Generating data.json...'); + +if (indexConf.missing.length > 0) { + console.log( + '⚠️ Missing chains detected. Please add them to the ./data/index.config.ts file.', + ); + process.exit(1); +} + +const data: Chain[] = []; + +let indexCounter = 0; + +Object.keys(indexConf.ordered).forEach((mainnet, mainnetIndex) => { + // @ts-ignore + const mainnetData: MainnetData = chainData[toCamelCase(mainnet)]; + + mainnetData.index = indexCounter++; + + (indexConf as IndexConfig).ordered[mainnet].forEach((subnet: any) => { + // @ts-ignore + const subnetData: SubnetData = chainData[toCamelCase(subnet)]; + + subnetData.index = indexCounter++; + + if (subnetData.id.indexOf('-cl') !== -1) { + if (!mainnetData.consensus) mainnetData.consensus = []; + mainnetData.consensus.push(subnetData); + } else if (subnetData.id.indexOf('evm') !== -1) { + if (!mainnetData.evms) mainnetData.evms = []; + mainnetData.evms.push(subnetData); + } else { + if (!mainnetData.testnets) mainnetData.testnets = []; + mainnetData.testnets.push(subnetData); + } + }); + data.push(mainnetData); +}); + +const dataFolderPath = path.join(__dirname, '../../../data/chains/V2'); +if (!fs.existsSync(dataFolderPath)) { + fs.mkdirSync(dataFolderPath); +} + +fs.writeFileSync( + path.join(dataFolderPath, 'chains.json'), + JSON.stringify(data, null, 2), +); + +console.log(`✅ Successfully generated 'chains.json'!`); diff --git a/scripts/generate/V2/index_config_check.ts b/scripts/generate/V2/index_config_check.ts new file mode 100644 index 0000000..a6f5e1d --- /dev/null +++ b/scripts/generate/V2/index_config_check.ts @@ -0,0 +1,67 @@ +import fs from 'fs'; +import path from 'path'; +import config from '../../../data/index.config'; + +export type IndexConfig = { + ordered: { [key: string]: string[] }; + missing?: string[]; +}; + +console.log('🕑 Checking integrity of index.config.ts...'); + +const configCast: IndexConfig = config; + +// Function to get directories recursively +const getDirectories = (basePath: string, depth: number = 0): Array => { + const directories: Array = []; + const files = fs.readdirSync(basePath, { withFileTypes: true }); + + for (const file of files) { + if (file.isDirectory()) { + const dirPath = path.join(basePath, file.name); + if (depth === 0 || depth === 2) { + directories.push(dirPath.split(path.sep).pop() || ''); + } + + // Get subdirectories + const subdirectories: Array = getDirectories(dirPath, depth + 1); + directories.push(...subdirectories); + } + } + + return directories; +}; + +// Get the list of directories under /data/chains/V2/ +const chainsPath = './data/chains/V2'; +const directories = getDirectories(chainsPath); + +// Get the list of chains already in the config file +const existingChains = Object.keys(configCast.ordered); +existingChains.forEach((chain: string) => { + if (configCast.ordered[chain].length > 0) { + existingChains.push(...configCast.ordered[chain]); + } +}); + +// Find the missing chains +const missingChains = directories.filter( + (chain: string) => !existingChains.includes(chain), +); + +// Add the missing chains +configCast.missing = missingChains; + +// Notice for the generated file +const fileGenerationNotive = `// This file is partially auto-generated.\n// Chains under ordered were manually placed, to manage the z-index (priority order) of chains.\n// Chains under missing are generated from available data, make sure to order them.\n// Include deprecated or future chains. \n// Last generation on ${new Date().toLocaleString()}.`; + +// Write the updated config back to the file +fs.writeFileSync( + './data/index.config.ts', + [ + fileGenerationNotive, + `export default ${JSON.stringify(config, null, 2)}`, + ].join('\n\n'), +); + +console.log(`✅ Successfully checked index.config.ts integrity!`); diff --git a/scripts/generate/V2/type_graphid.ts b/scripts/generate/V2/type_graphid.ts new file mode 100644 index 0000000..5b5e697 --- /dev/null +++ b/scripts/generate/V2/type_graphid.ts @@ -0,0 +1,46 @@ +import fs from 'fs'; +import path from 'path'; + +const typesDir = path.join(__dirname, '../../../types'); +const graphTypesFile = path.join(typesDir, 'graph.types.ts'); + +console.log('🕑 Generating GraphID type...'); + +const fetchGraphIDs = async (): Promise => { + try { + const res = await fetch('https://api.studio.thegraph.com/deploy', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'chain_list', + id: 1, + }), + }); + + const data = await res.json(); + let graphIds = data.result.studio; + let sortedGraphIds = graphIds.sort((a: string, b: string) => + a < b ? -1 : 1, + ); + + // Generate the GraphId type definition + const graphIdType = `// This file is auto-generated on pre-commit to avoid maintaining it.\n// Do not modify manually as it will be overwritten.\n// Last generation on ${new Date().toLocaleString()}.\nexport type GraphID = '${sortedGraphIds.join("' | '")}'`; + + // Write the GraphId type definition to the types directory + fs.writeFile(graphTypesFile, graphIdType, (err) => { + if (err) { + console.error('Error writing graph.types.ts file:', err); + return; + } + + console.log('✅ Successfully generated GraphID type!'); + }); + } catch (error) { + console.error('Error fetching graph IDs:', error); + } +}; + +fetchGraphIDs(); diff --git a/scripts/generate/V2/type_pinaxid.ts b/scripts/generate/V2/type_pinaxid.ts new file mode 100644 index 0000000..e11c620 --- /dev/null +++ b/scripts/generate/V2/type_pinaxid.ts @@ -0,0 +1,62 @@ +import fs from 'fs'; +import path from 'path'; + +const chainsDir = path.join(__dirname, '../../../data'); +const typesDir = path.join(__dirname, '../../../types'); + +const pinaxTypesFile = path.join(typesDir, 'pinax.types.ts'); + +console.log('🕑 Generating PinaxID type...'); + +// Function to recursively read directories and subdirectories +function readDir(directory: string): string[] { + let fileNames: string[] = []; + const files = fs.readdirSync(directory); + + files.forEach((file) => { + const filePath = path.join(directory, file); + const stats = fs.statSync(filePath); + + if (stats.isDirectory()) { + // If the file is a directory, recursively read it + fileNames = fileNames.concat(readDir(filePath)); + } else if ( + path.extname(file) === '.ts' && + path.basename(file) === 'meta.ts' + ) { + // If the file is a .ts file named meta.ts, add the directory name to the array + fileNames.push(path.basename(path.dirname(filePath))); + } + }); + + return fileNames; +} + +// Read the directory and subdirectories +const mainnetNames = readDir(chainsDir); + +// Read the subnets directories +const subnetTypes = ['testnets', 'consensus', 'evms']; +let subnetNames: string[] = []; +subnetTypes.forEach((subnetType) => { + const subnetDir = path.join(chainsDir, subnetType); + if (fs.existsSync(subnetDir)) { + subnetNames = subnetNames.concat(readDir(subnetDir)); + } +}); + +// Combine mainnet and subnet names +const fileNames = mainnetNames.concat(subnetNames); + +// Generate the PinaxId type definition +const pinaxIdType = `// This file is auto-generated on pre-commit to avoid maintaining it / circular dependencies.\n// Do not modify manually as it will be overwritten.\n// Last generation on ${new Date().toLocaleString()}.\nexport type PinaxID = '${fileNames.join("' | '")}'`; + +// Write the PinaxId type definition to the types directory +fs.writeFile(pinaxTypesFile, pinaxIdType, (err) => { + if (err) { + console.error('Error writing pinax.types.ts file:', err); + return; + } + + console.log('✅ Successfully generating PinaxID type!'); +}); diff --git a/scripts/verify/V2/match_legacy_data.ts b/scripts/verify/V2/match_legacy_data.ts new file mode 100644 index 0000000..81684e3 --- /dev/null +++ b/scripts/verify/V2/match_legacy_data.ts @@ -0,0 +1,41 @@ +import fs from 'fs'; + +// Read and parse the JSON files +const dataLegacy = JSON.parse( + fs.readFileSync('./dist/data_legacy.json', 'utf8'), +); +const data = JSON.parse(fs.readFileSync('./dist/data.json', 'utf8')); + +// Create a new array for the missing chain IDs +let missingChainIDs = []; + +// Iterate over the chains in data_legacy.json +for (let legacyChain of dataLegacy) { + // Find the corresponding chain in data.json + let chain = data.find((c: any) => c.id === legacyChain.id); + + // If the chain doesn't exist in data.json, check the mainnet of the chain + if (!chain) { + let mainnetChain = data.find((c: any) => c.id === legacyChain.mainnet); + if (mainnetChain) { + // Check both testnets and consensus arrays within that mainnet + if ( + mainnetChain.testnets?.find((t: any) => t.id === legacyChain.id) !== + undefined + ) { + continue; + } + if ( + mainnetChain.consensus?.find((c: any) => c.id === legacyChain.id) !== + undefined + ) { + continue; + } + } + // If the chain doesn't exist in data.json, add the legacy chain ID to the missingChainIDs array + missingChainIDs.push(legacyChain.id); + } +} + +// Log the missing chain IDs +console.log(missingChainIDs); diff --git a/scripts/verify/V2/notion-diff/.gitignore b/scripts/verify/V2/notion-diff/.gitignore new file mode 100644 index 0000000..7674fbb --- /dev/null +++ b/scripts/verify/V2/notion-diff/.gitignore @@ -0,0 +1 @@ +input/ \ No newline at end of file diff --git a/scripts/verify/V2/notion-diff/README.md b/scripts/verify/V2/notion-diff/README.md new file mode 100644 index 0000000..16229c4 --- /dev/null +++ b/scripts/verify/V2/notion-diff/README.md @@ -0,0 +1,18 @@ +# Notion CSV Diff Tool + +This tool is used to compare the data that we have here against the Notion database that the broader team maintains. It is used to ensure that the data we have is up to date and accurate. + +## What it does + +- ✅ Show missing chains +- ✅ Shows the different in service statuses + +## How to use + +1. Export the Blockchain Service Matrix CSV; + 1. Go on Notion [Blockchain Service Matrix](https://www.notion.so/pinaxnetwork/bfec60491b1d48509980ef69e31e7651?v=93922339441443698c3ebc8a695b61bd); + 1. Click on the three dots on the top right corner; + 1. Click on `Export`, and `Export` again (Markdown & CSV); +1. Place the exported CSV in the `notion-diff/input` folder (only one file at a time); +1. Run the script with `npm run notion-diff`; +1. The script will output the differences between the data we have and the Notion database. \ No newline at end of file diff --git a/scripts/verify/V2/notion-diff/input/test.txt b/scripts/verify/V2/notion-diff/check_notion_csv_diff.ts similarity index 100% rename from scripts/verify/V2/notion-diff/input/test.txt rename to scripts/verify/V2/notion-diff/check_notion_csv_diff.ts diff --git a/tests/chain_exported.test.ts b/tests/chain_exported.test.ts new file mode 100644 index 0000000..200676c --- /dev/null +++ b/tests/chain_exported.test.ts @@ -0,0 +1,32 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById } from '../utils/chains'; +import indexConfig from '../data/index.config'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_exported', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + it('assert_every_indexconfig_chain_is_exported', () => { + const allChainIds = Object.values(indexConfig.ordered).flat(); + + allChainIds.forEach((chainId) => { + const chain = findChainById(chains, chainId); + expect(chain).toBeDefined(); + expect(chain?.id).toBe(chainId); + }); + }); +}); diff --git a/tests/chain_find_by_id.test.ts b/tests/chain_find_by_id.test.ts new file mode 100644 index 0000000..f492c22 --- /dev/null +++ b/tests/chain_find_by_id.test.ts @@ -0,0 +1,51 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, hasChainFullBlockSupport } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_find_by_id', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_find_mainnet___returns_mainnet', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + expect(chain.id).toBe(chainID); + }); + + test('assert_find_testnet___returns_testnet', () => { + const chainID = 'holesky'; + let chain = findChainById(chains, chainID) as Chain; + expect(chain.id).toBe(chainID); + }); + + test('assert_find_consensus_layer___returns_consensus_layer', () => { + const chainID = 'eth-cl'; + let chain = findChainById(chains, chainID) as Chain; + expect(chain.id).toBe(chainID); + }); + + test('assert_find_evm___returns_evm', () => { + const chainID = 'eosevm'; + let chain = findChainById(chains, chainID) as Chain; + expect(chain.id).toBe(chainID); + }); + + test('assert_find_non_existent___returns_undefined', () => { + const chainID = 'this_is_a_chain_id_that_does_not_exist'; + let chain = findChainById(chains, chainID); + expect(chain).toBe(undefined); + }); +}); diff --git a/tests/chain_has_full_block.test.ts b/tests/chain_has_full_block.test.ts new file mode 100644 index 0000000..3b52d6b --- /dev/null +++ b/tests/chain_has_full_block.test.ts @@ -0,0 +1,39 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, hasChainFullBlockSupport } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_has_full_block', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_full_block_chain___returns_true', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(hasChainFullBlockSupport(chain)).toBe(true); + }); + + test('assert_partial_block_chain___returns_false', () => { + const chainID = 'bitcoin'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(hasChainFullBlockSupport(chain)).toBe(false); + }); +}); diff --git a/tests/chain_has_no_substreams_wo_firehose.test.ts b/tests/chain_has_no_substreams_wo_firehose.test.ts new file mode 100644 index 0000000..7c8ba5c --- /dev/null +++ b/tests/chain_has_no_substreams_wo_firehose.test.ts @@ -0,0 +1,30 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_has_no_substreams_wo_firehose', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + const hasDuplicates = (array: Array) => { + return new Set(array).size !== array.length; + }; + + test('assert_chain_services_are_valid', () => { + expect( + hasDuplicates(chains.map((chain) => chain.index) as Array), + ).toBe(false); + }); +}); diff --git a/tests/chain_is_consensus_layer.test.ts b/tests/chain_is_consensus_layer.test.ts new file mode 100644 index 0000000..ce6711d --- /dev/null +++ b/tests/chain_is_consensus_layer.test.ts @@ -0,0 +1,41 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, isChainConsensusLayer } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_is_consensus_layer', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_consensus_layer___returns_true', () => { + const chainID = 'eth-cl'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error( + 'Expected ' + chainID + ' Consensus Layer, but got ' + chain.id, + ); + } + expect(isChainConsensusLayer(chain)).toBe(true); + }); + + test('assert_non_consensus_layer___returns_false', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ' Mainnet, but got ' + chain.id); + } + expect(isChainConsensusLayer(chain)).toBe(false); + }); +}); diff --git a/tests/chain_is_deprecated.test.ts b/tests/chain_is_deprecated.test.ts new file mode 100644 index 0000000..7471343 --- /dev/null +++ b/tests/chain_is_deprecated.test.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, isChainDeprecated } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_is_deprecated', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_deprecated_chain___returns_true', () => { + const chainID = 'goerli'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isChainDeprecated(chain)).toBe(true); + }); + + test('assert_supported_chain___returns_false', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isChainDeprecated(chain)).toBe(false); + }); + + test('assert_unsupported_chain___returns_false', () => { + const chainID = 'zksync'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isChainDeprecated(chain)).toBe(false); + }); +}); diff --git a/tests/chain_is_service_beta.test.ts b/tests/chain_is_service_beta.test.ts new file mode 100644 index 0000000..9064242 --- /dev/null +++ b/tests/chain_is_service_beta.test.ts @@ -0,0 +1,57 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, isServiceBeta } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_is_service_beta', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_beta_service___returns_true', () => { + const chainID = 'mode'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceBeta(chain, 'rpc')).toBe(true); + }); + + test('assert_supported_service___returns_false', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceBeta(chain, 'rpc')).toBe(false); + }); + + test('assert_deprecated_service___returns_false', () => { + const chainID = 'goerli'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceBeta(chain, 'firehose')).toBe(false); + }); + + test('assert_unsupported_chain___returns_false', () => { + const chainID = 'zksync'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceBeta(chain, 'firehose')).toBe(false); + }); +}); diff --git a/tests/chain_is_service_deprecated.test.ts b/tests/chain_is_service_deprecated.test.ts new file mode 100644 index 0000000..aa0ab88 --- /dev/null +++ b/tests/chain_is_service_deprecated.test.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, isServiceDeprecated } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_is_service_deprecated', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_deprecated_service___returns_true', () => { + const chainID = 'goerli'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceDeprecated(chain, 'substreams')).toBe(true); + }); + + test('assert_supported_service___returns_false', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceDeprecated(chain, 'rpc')).toBe(false); + }); + + test('assert_unsupported_service___returns_false', () => { + const chainID = 'zksync'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceDeprecated(chain, 'firehose')).toBe(false); + }); +}); diff --git a/tests/chain_is_service_supported.test.ts b/tests/chain_is_service_supported.test.ts new file mode 100644 index 0000000..1ce8d79 --- /dev/null +++ b/tests/chain_is_service_supported.test.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, isServiceSupported } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_is_service_supported', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_supported_service___returns_true', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceSupported(chain, 'rpc')).toBe(true); + }); + + test('assert_deprecated_service___returns_false', () => { + const chainID = 'goerli'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceSupported(chain, 'firehose')).toBe(false); + }); + + test('assert_unsupported_chain___returns_false', () => { + const chainID = 'zksync'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isServiceSupported(chain, 'firehose')).toBe(false); + }); +}); diff --git a/tests/chain_is_supported.test.ts b/tests/chain_is_supported.test.ts new file mode 100644 index 0000000..5279b31 --- /dev/null +++ b/tests/chain_is_supported.test.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; +import { Chain } from '../types'; +import { findChainById, isChainSupported } from '../utils/chains'; + +const setup = (): Array => { + // read the data file as JSON + const chainsFile = path.join(__dirname, '../', 'data/chains/V2/chains.json'); + if (fs.existsSync(chainsFile)) { + const chains = JSON.parse(fs.readFileSync(chainsFile, 'utf8')); + return chains; + } + return []; +}; + +describe('chain_is_supported', () => { + let chains: Array; + beforeAll(() => { + chains = setup(); + }); + + test('assert_supported_chain___returns_true', () => { + const chainID = 'eth'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isChainSupported(chain)).toBe(true); + }); + + test('assert_deprecated_chain___returns_false', () => { + const chainID = 'goerli'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isChainSupported(chain)).toBe(false); + }); + + test('assert_unsupported_chain___returns_false', () => { + const chainID = 'zksync'; + let chain = findChainById(chains, chainID) as Chain; + if (chain.id !== chainID) { + throw new Error('Expected ' + chainID + ', but got ' + chain.id); + } + expect(isChainSupported(chain)).toBe(false); + }); +}); diff --git a/types/chain.types.ts b/types/chain.types.ts index a8145c8..4340ca2 100644 --- a/types/chain.types.ts +++ b/types/chain.types.ts @@ -1,57 +1,192 @@ import { BlockType } from './block.types'; -import { GraphId } from './graph.types'; -import { Mainnet } from './mainnet.types'; -import { PinaxId } from './pinax.types'; -import { SupportedServices } from './service.types'; +import { GraphID } from './graph.types'; +import { PinaxID } from './pinax.types'; +import { + ___InternalConsensusLayerServices, + ___InternalSupportedServices, + ConsensusLayerServices, + SupportedServices, +} from './service.types'; import { Standard } from './standard.types'; +export type ChainBase = { + // Testnet ID + id: PinaxID; + + // Testnet Name + name: string; + + // Alternative Names + alt_names: string[]; + + // The Graph ID + // See docs/retrieve_graph_ids.md + graph_id: GraphID | null; + + // Display Priority, lower is higher + index?: number; + + // Chain Standard (ie. ERC20) + // One good reference to determine chain standard is + // https://thegraph.com/docs/en/developing/supported-networks/ + standard: Standard | null; + + // Whether or not the chain supports detailed blocks. + // Not all chains are equal, some uses RPC poller + // which only offer partial blocks. + // See whether or not RPC poller is ticked on the + // Blockchain Service Matrix (https://www.notion.so/pinaxnetwork/Blockchain-Service-Matrix). + is_detailed_blocks: boolean; + + // Block Type + block_type: BlockType; +}; + +export type ___InternalTestnet = ChainBase & { + // Whether or not the chain supports our existing services + supported_services: ___InternalSupportedServices; + + metadata?: { + // Chain ID that replaces this (deprecated) chain + deprecated_replacing_chain?: PinaxID; + }; +}; + +export type ___InternalConsensusLayer = ChainBase & { + // Whether or not the chain supports our existing services + // Consensus Layers exist only for services built on top of RPC + // (Firehose, Substreams), and not for the RPC service itself. + supported_services: ___InternalConsensusLayerServices; +}; + +export type ___InternalEVM = ChainBase & { + // Whether or not the chain supports our existing services + supported_services: ___InternalSupportedServices; +}; + /** * Describes the Data that needs to be provided for a Chain. * * The Chain type theb extends the Chain type to include * the generated fields. */ -export type Chain = { - // Pinax ID - id: PinaxId; +export interface ___InternalChain extends ChainBase { + icon: { + // Token Icon ID + // See if icon is available on https://tokenicons.io/, if not create PR to add it. + // Then go on the Github Repo and find the icon ID under /packages/core/src/metadata/ + // https://github.com/0xa3k5/token-icons + id: string; - // Verbose Name - name: string; + // Theme of the Icon brand + // To avoid placing a dark icon on a dark background. + // If the brand is in midtones or some vibrant color, use 'both'. + brand_theme: 'light' | 'dark' | 'both'; - // The Graph ID - // See graph.types.ts for instructions on how to retrieve Graph IDs - graph_id: GraphId | null; + // Generated by ./scripts/generate/data_json.js + variants?: Array<'branded' | 'mono'>; + }; - // Display Priority - index: number; + // Whether or not the chain supports our existing services + supported_services: ___InternalSupportedServices; - // Alternative Names - alt_names: string[]; + // Merged by ./scripts/generate/data_json.js + testnets?: Array<___InternalTestnet>; - // Mainnet ID - mainnet: Mainnet; + // Merged by ./scripts/generate/data_json.js + consensus?: Array<___InternalConsensusLayer>; - // Chain Standard (ie. ERC20) - standard: Standard | null; + // Merge by ./scripts/generate/data_json.js + evms?: Array<___InternalEVM>; - // Block Type - block_type: BlockType; + // Any additional metadata we want to store (ie. Wagmi) + metadata?: { + // Layer of the chain + layer?: 'L0' | 'L1' | 'L2' | 'L3'; - // Image URL - img: string; + // Website of the chain + website?: string; - // Image URL (Inverted) if is_img_dt_invert is true - img_invert?: string; + // Mainchain ID, if the chain is a sidechain + // Either a PinaxID or a string, as the mainchain may not be in the list of chains + mainchain_id?: PinaxID | string; - // Whether or not the image should be inverted - is_img_dt_invert: boolean; + // tags for the chain + tags?: string[]; - // Whether or not the chain is a testnet - is_testnet: boolean; + // Chain ID that replaces this (deprecated) chain + deprecated_replacing_chain?: PinaxID; + }; +} +export type Testnet = ChainBase & { // Whether or not the chain supports our existing services supported_services: SupportedServices; - // Any additional metadata we want to store (ie. Wagmi) - // metadata: any | null; + metadata?: { + // Chain ID that replaces this (deprecated) chain + deprecated_replacing_chain?: PinaxID; + }; }; + +export type ConsensusLayer = ChainBase & { + // Whether or not the chain supports our existing services + // Consensus Layers exist only for services built on top of RPC + // (Firehose, Substreams), and not for the RPC service itself. + supported_services: ConsensusLayerServices; +}; + +export type EVM = ChainBase & { + // Whether or not the chain supports our existing services + supported_services: SupportedServices; +}; + +/** + * Describes the Data that needs to be provided for a Chain. + * + * The Chain type theb extends the Chain type to include + * the generated fields. + */ +export interface Chain extends ChainBase { + icon: { + // Token Icon ID + id: string; + + // Theme of the Icon brand + brand_theme: 'light' | 'dark' | 'both'; + + // Generated by ./scripts/generate/data_json.js + variants?: Array<'branded' | 'mono'>; + }; + + // Whether or not the chain supports our existing services + supported_services: SupportedServices; + + // Merged by ./scripts/generate/data_json.js + testnets?: Array; + + // Merged by ./scripts/generate/data_json.js + consensus?: Array; + + // Merge by ./scripts/generate/data_json.js + evms?: Array; + + // Any additional metadata we want to store (ie. Wagmi) + metadata?: { + // Layer of the chain + layer?: 'L0' | 'L1' | 'L2' | 'L3'; + + // Website of the chain + website?: string; + + // Mainchain ID, if the chain is a sidechain + // Either a PinaxID or a string, as the mainchain may not be in the list of chains + mainchain_id?: PinaxID | string; + + // tags for the chain + tags?: string[]; + + // Chain ID that replaces this (deprecated) chain + deprecated_replacing_chain?: PinaxID; + }; +} diff --git a/types/graph.types.ts b/types/graph.types.ts index 4898e4b..af4c1b3 100644 --- a/types/graph.types.ts +++ b/types/graph.types.ts @@ -1,7 +1,7 @@ // This file is auto-generated on pre-commit to avoid maintaining it. // Do not modify manually as it will be overwritten. -// Last generation on 2024-05-03, 3:03:14 p.m.. -export type GraphId = +// Last generation on 8/2/2024, 12:13:18 PM. +export type GraphID = | 'arbitrum-one' | 'arbitrum-sepolia' | 'arweave-mainnet' @@ -19,8 +19,8 @@ export type GraphId = | 'celo' | 'celo-alfajores' | 'chapel' - | 'clover' | 'cosmoshub-4' + | 'etherlink-mainnet' | 'etherlink-testnet' | 'fantom' | 'fantom-testnet' @@ -28,10 +28,13 @@ export type GraphId = | 'fuse' | 'gnosis' | 'gnosis-chiado' + | 'gravity-mainnet' + | 'gravity-testnet' | 'harmony' | 'holesky' + | 'iotex' + | 'iotex-testnet' | 'linea' - | 'linea-goerli' | 'linea-sepolia' | 'mainnet' | 'matic' @@ -46,14 +49,17 @@ export type GraphId = | 'optimism-sepolia' | 'osmo-test-4' | 'osmosis-1' - | 'poa-core' | 'polygon-amoy' | 'polygon-zkevm' - | 'polygon-zkevm-testnet' + | 'polygon-zkevm-cardona' + | 'rootstock' | 'scroll' | 'scroll-sepolia' + | 'sei-atlantic' + | 'sei-mainnet' | 'sei-testnet' | 'sepolia' + | 'solana-mainnet-beta' | 'theta-testnet-001' | 'xlayer-mainnet' | 'xlayer-sepolia' diff --git a/types/index.ts b/types/index.ts new file mode 100644 index 0000000..8731225 --- /dev/null +++ b/types/index.ts @@ -0,0 +1,6 @@ +export * from './block.types'; +export * from './chain.types'; +export * from './graph.types'; +export * from './pinax.types'; +export * from './service.types'; +export * from './standard.types'; diff --git a/types/mainnet.types.ts b/types/mainnet.types.ts deleted file mode 100644 index 3ab1b75..0000000 --- a/types/mainnet.types.ts +++ /dev/null @@ -1,28 +0,0 @@ -export type Mainnet = - | 'arbitrum' - | 'arweave' - | 'avalanche' - | 'base' - | 'bsc' - | 'bitcoin' - | 'celo' - | 'cosmoshub' - | 'decimal' - | 'eth' - | 'eos' - | 'fantom' - | 'gnosis' - | 'juno' - | 'kava' - | 'moonbeam' - | 'near' - | 'optimism' - | 'ore' - | 'osmosis' - | 'polygon' - | 'scroll' - | 'starknet' - | 'telos' - | 'ux' - | 'wax' - | 'zkatana'; diff --git a/types/pinax.types.ts b/types/pinax.types.ts index f43afa0..7512d2c 100644 --- a/types/pinax.types.ts +++ b/types/pinax.types.ts @@ -1,39 +1,51 @@ // This file is auto-generated on pre-commit to avoid maintaining it / circular dependencies. // Do not modify manually as it will be overwritten. -// Last generation on 2024-05-03, 3:03:15 p.m.. -export type PinaxId = - | 'alfajores' - | 'amoy' - | 'arbgoerli' +// Last generation on 8/2/2024, 12:13:18 PM. +export type PinaxID = | 'arbone' + | 'arbgoerli' | 'arbsepolia' | 'arweave' | 'avalanche' | 'base' | 'bitcoin' + | 'blast' + | 'blastsepolia' + | 'boba' + | 'bobasepolia' | 'bsc' - | 'celo' | 'chapel' - | 'chiado-cl' - | 'chiado' + | 'cardano' + | 'celo' + | 'alfajores' | 'cosmoshub' + | 'juno' + | 'theta' + | 'cronos' | 'decimal' + | 'eosevm' | 'eos' + | 'jungle4' + | 'kylin' | 'eth-cl' + | 'goerli-cl' + | 'holesky-cl' + | 'sepolia-cl' | 'eth' + | 'goerli' + | 'holesky' + | 'sepolia' | 'fantom' + | 'fuse' + | 'chiado-cl' | 'gnosis-cl' | 'gnosis' - | 'goerli-cl' - | 'goerli' - | 'holesky-cl' - | 'holesky' - | 'jungle4' - | 'juno' + | 'chiado' | 'kava' - | 'kylin' + | 'linea' + | 'litecoin' + | 'mode' | 'moonbeam' - | 'mumbai' | 'near' | 'neartest' | 'optimism' @@ -41,14 +53,20 @@ export type PinaxId = | 'orestage' | 'osmosis' | 'polygon' + | 'amoy' + | 'mumbai' + | 'ronin' | 'scroll' - | 'sepolia-cl' - | 'sepolia' + | 'sei' | 'starknet' | 'telos' | 'telostest' - | 'theta' - | 'ux' | 'wax' | 'waxtest' - | 'zkatana'; + | 'x-layer' + | 'xai' + | 'zkastar' + | 'zkatana' + | 'zkyoto' + | 'zksync' + | 'zora'; diff --git a/types/service.types.ts b/types/service.types.ts index 8ac11a8..44b2f5f 100644 --- a/types/service.types.ts +++ b/types/service.types.ts @@ -1,7 +1,30 @@ -export type Service = 'substreams' | 'firehose' | 'rpc'; +export type ConsensusLayerServiceID = 'substreams' | 'firehose'; +export type ServiceID = ConsensusLayerServiceID | 'rpc'; export type ServiceEndpoint = { - released_at: string | null; + name: string; + endpoint_slug: ServiceID; + port: number; +}; + +export type ___InternalConsensusLayerServices = { + [key in ConsensusLayerServiceID]: ServiceStatusDates; +}; + +export type ___InternalSupportedServices = { + [key in ServiceID]: ServiceStatusDates; +}; + +export type ServiceStatusDates = { + beta_released_at: string | null; + full_released_at: string | null; deprecated_at: string | null; }; -export type SupportedServices = { [key in Service]: ServiceEndpoint }; + +export type ConsensusLayerServices = { + [key in ConsensusLayerServiceID]: ServiceStatusDates; +}; + +export type SupportedServices = { + [key in ServiceID]: ServiceStatusDates; +}; diff --git a/types/standard.types.ts b/types/standard.types.ts index 63d9a81..3404cf7 100644 --- a/types/standard.types.ts +++ b/types/standard.types.ts @@ -4,4 +4,8 @@ export type Standard = | 'brc20' | 'cosmos' | 'erc20' - | 'near'; + | 'ltc20' + | 'near' + | 'rrc20' + | 'sei' + | 'cardano'; diff --git a/utils/case.ts b/utils/case.ts new file mode 100644 index 0000000..46fd0d5 --- /dev/null +++ b/utils/case.ts @@ -0,0 +1,5 @@ +export const toCamelCase = (str: string): string => { + return str.replace(/([-_][a-z])/g, (group) => + group.toUpperCase().replace('-', '').replace('_', ''), + ); +}; diff --git a/utils/chains.ts b/utils/chains.ts new file mode 100644 index 0000000..3a422c6 --- /dev/null +++ b/utils/chains.ts @@ -0,0 +1,198 @@ +import { + ConsensusLayerServiceID, + ServiceID, + ServiceStatusDates, +} from '../types'; +import { + Chain, + ChainBase, + ConsensusLayer, + EVM, + Testnet, +} from '../types/chain.types'; + +/** + * Checks whether a service is fully supported. + * + * @param chain Chain, Testnet or ConsensusLayer + * @param service ServiceID or ConsensusLayerServiceID + * + * @returns boolean + */ +const isServiceSupported = ( + chain: Chain | Testnet | ConsensusLayer, + service: ConsensusLayerServiceID | ServiceID, +) => { + // @ts-ignore + const serviceStatusDates = chain.supported_services[service] as + | ServiceStatusDates + | undefined; + return ( + serviceStatusDates && + serviceStatusDates.full_released_at !== null && + serviceStatusDates.deprecated_at === null + ); +}; + +/** + * Checks whether a service is in beta. + * + * @param chain Chain, Testnet or ConsensusLayer + * @param service ServiceID or ConsensusLayerServiceID + * + * @returns boolean + */ +const isServiceBeta = ( + chain: Chain | Testnet | ConsensusLayer, + service: ConsensusLayerServiceID | ServiceID, +) => { + // @ts-ignore + const serviceStatusDates = chain.supported_services[service] as + | ServiceStatusDates + | undefined; + return ( + serviceStatusDates && + serviceStatusDates.beta_released_at !== null && + serviceStatusDates.deprecated_at === null && + !isServiceSupported(chain, service) + ); +}; + +/** + * Checks whether a service was once supported. + * + * @param chain Chain, Testnet or ConsensusLayer + * @param service ServiceID or ConsensusLayerServiceID + * + * @returns boolean + */ +const isServiceDeprecated = ( + chain: Chain | Testnet | ConsensusLayer, + service: ConsensusLayerServiceID | ServiceID, +) => { + // @ts-ignore + const serviceStatusDates = chain.supported_services[service] as + | ServiceStatusDates + | undefined; + return ( + serviceStatusDates && + (serviceStatusDates.beta_released_at !== null || + serviceStatusDates.full_released_at !== null) && + serviceStatusDates.deprecated_at !== null + ); +}; + +/** + * Checks whether any service is fully supported for a given chain. + * + * @param chain Chain, Testnet or ConsensusLayer + * + * @returns boolean + */ +const isChainSupported = (chain: Chain | Testnet | ConsensusLayer) => { + return ( + isServiceSupported(chain, 'firehose') || + isServiceSupported(chain, 'substreams') || + isServiceSupported(chain, 'rpc') + ); +}; + +/** + * Checks whether any service is in beta for a given chain. + * + * @param chain Chain, Testnet or ConsensusLayer + * + * @returns boolean + */ +const isChainBeta = (chain: Chain | Testnet | ConsensusLayer) => { + return ( + isServiceBeta(chain, 'firehose') || + isServiceBeta(chain, 'substreams') || + isServiceBeta(chain, 'rpc') + ); +}; + +/** + * Checks whether any service was once supported for a given chain. + * + * @param chain Chain, Testnet or ConsensusLayer + * + * @returns boolean + */ +const isChainDeprecated = (chain: Chain | Testnet | ConsensusLayer) => { + return ( + isServiceDeprecated(chain, 'firehose') || + isServiceDeprecated(chain, 'substreams') || + isServiceDeprecated(chain, 'rpc') + ); +}; + +/** + * Checks whether a chain is a consensus layer. + * + * @param chain Chain, Testnet or ConsensusLayer + * + * @returns boolean + */ +const isChainConsensusLayer = ( + chain: Chain | Testnet | ConsensusLayer, +): boolean => { + return chain.id.slice(-3).includes('-cl'); +}; + +/** + * Finds a chain by its ID by scanning mainnets, consensus layers, testnets and EVMs. + * Returns first match. + * + * @param db Array of Chains + * @param id Chain ID + * + * @returns Chain, Testnet or ConsensusLayer + */ +const findChainById = ( + db: Array, + id: string, +): Chain | Testnet | ConsensusLayer | EVM | undefined => { + for (const chain of db) { + if (chain.id === id) { + return chain; + } + const consensus = chain.consensus?.find((consensus) => consensus.id === id); + if (consensus) { + return consensus; + } + const testnet = chain.testnets?.find((testnet) => testnet.id === id); + if (testnet) { + return testnet; + } + const evm = chain.evms?.find((evm) => evm.id === id); + if (evm) { + return evm; + } + } + return undefined; +}; + +/** + * Checks whether a chain has full block support. Chains that use RPC poller only + * support partial blocks. + * + * @param chain Chain, Testnet or ConsensusLayer + * + * @returns boolean + */ +const hasChainFullBlockSupport = (chain: Chain | Testnet | ConsensusLayer) => { + return chain.is_detailed_blocks; +}; + +export { + isServiceSupported, + isServiceBeta, + isServiceDeprecated, + isChainSupported, + isChainBeta, + isChainDeprecated, + isChainConsensusLayer, + findChainById, + hasChainFullBlockSupport, +}; diff --git a/utils/index.ts b/utils/index.ts new file mode 100644 index 0000000..5a6d971 --- /dev/null +++ b/utils/index.ts @@ -0,0 +1,4 @@ +import * as chains from './chains'; +import * as services from './service_configs'; + +export { chains, services }; diff --git a/utils/service_configs/firehose.ts b/utils/service_configs/firehose.ts new file mode 100644 index 0000000..30a625f --- /dev/null +++ b/utils/service_configs/firehose.ts @@ -0,0 +1,54 @@ +import services from '../../data/services'; +import { ServiceEndpoint } from '../../types/service.types'; +import { Chain } from '../../types/chain.types'; + +const firehose = services.filter( + (s: ServiceEndpoint) => s.endpoint_slug.indexOf('firehose') > -1, +)[0]; + +const generateGRPCurlConfig = (chain: Chain, apiKey: string) => { + return [ + `# Set your API Key`, + `export PINAX_KEY=${apiKey}`, + ``, + `# Set your JWT`, + `export FIREHOSE_API_TOKEN=$(curl https://auth.pinax.network/v1/auth/issue -s --data-binary '{"api_key":"'$PINAX_KEY'"}' | jq -r .token)`, + ``, + `# Run Firehose`, + `grpcurl -keepalive-time 30 -max-msg-sz 50241867 -d '{"start_block_num": -100}' -H 'Authorization: "$FIREHOSE_API_TOKEN"' ${chain.id}.firehose.pinax.network:443 sf.firehose.v2.Stream.Blocks`, + ].join('\n'); +}; + +const generateTomlEnv = (chain: Chain, token: string) => { + return [ + `PINAX_RPC_NODE=${chain.id}.rpc.pinax.network`, + `PINAX_JWT=${token}`, + ].join('\n'); +}; + +const generateTomlConfig = (chain: Chain) => { + const getERC20ConfigLines = (chain: Chain) => { + if (chain.standard?.localeCompare('ERC-20') === 0) + return [ + ` # Ethereum Based Chain`, + ` { label = "bootstrap", details = { type = "web3", url = "$PINAX_RPC_NODE", features = [ "archive" ] }},`, + ]; + return []; + }; + + return [ + `[chains.${chain.graph_id}]`, + `shard = "primary"`, + `provider = [`, + ...getERC20ConfigLines(chain), + ` # Firehose Configuration`, + ` { label = "firehose", details = { type = "firehose", url = "https://${chain.id}.firehose.pinax.network:443", token = "$PINAX_JWT" }},`, + ].join('\n'); +}; + +export default { + service: firehose, + generateGRPCurlConfig, + generateTomlEnv, + generateTomlConfig, +}; diff --git a/utils/service_configs/index.ts b/utils/service_configs/index.ts new file mode 100644 index 0000000..464fdb8 --- /dev/null +++ b/utils/service_configs/index.ts @@ -0,0 +1,3 @@ +export * as firehose from './firehose'; +export * as rpc from './rpc'; +export * as substreams from './substreams'; diff --git a/utils/service_configs/rpc.ts b/utils/service_configs/rpc.ts new file mode 100644 index 0000000..c321146 --- /dev/null +++ b/utils/service_configs/rpc.ts @@ -0,0 +1,16 @@ +import services from '../../data/services'; +import { ServiceEndpoint } from '../../types/service.types'; +import { Chain } from '../../types/chain.types'; + +const rpc = services.filter( + (s: ServiceEndpoint) => s.endpoint_slug.indexOf('rpc') > -1, +)[0]; + +const generateCurlConfig = (chain: Chain, apiKey: string) => { + return `curl -4vsH 'Content-Type: application/json' -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["latest", false], "id": 1}' https://${chain.id}.rpc.pinax.network/v1/${apiKey}/`; +}; + +export default { + service: rpc, + generateCurlConfig, +}; diff --git a/utils/service_configs/substreams.ts b/utils/service_configs/substreams.ts new file mode 100644 index 0000000..c5e74a9 --- /dev/null +++ b/utils/service_configs/substreams.ts @@ -0,0 +1,108 @@ +import services from '../../data/services'; +import { ServiceEndpoint } from '../../types/service.types'; +import { Chain } from '../../types/chain.types'; + +const substreams = services.filter( + (s: ServiceEndpoint) => s.endpoint_slug.indexOf('substreams') > -1, +)[0]; + +const generateTomlEnv = (chain: Chain, token: string): string => { + const getEthBasedEnv = () => { + if (chain.standard?.localeCompare('ERC-20') === 0) + return `PINAX_RPC_NODE=${chain.id}.rpc.pinax.network\n`; + return ''; + }; + + const getSubstreamsEnv = () => { + return `PINAX_JWT=${token}`; + }; + + return ['# ...\n', getEthBasedEnv(), getSubstreamsEnv()].join(''); +}; + +const generateJavascriptEnv = (chain: Chain, apiKey: string): string => { + return `# ... +MANIFEST=https://example.com/substreams.spkg +SUBSTREAMS_URL=https://${chain.id}.${substreams.endpoint_slug}.pinax.network:${substreams.port} +SUBSTREAMS_API_KEY=${apiKey}`; +}; + +const generateCurlConfig = (chain: Chain, api_key: string): string => { + return [ + `# Set your API Key`, + `export PINAX_KEY=${api_key}`, + ``, + `# Set your JWT`, + `export SUBSTREAMS_API_TOKEN=$(curl https://auth.pinax.network/v1/auth/issue -s --data-binary '{"api_key":"'$PINAX_KEY'"}' | jq -r .token)`, + ``, + `# Run Substreams`, + `substreams run -e ${chain.id}.substreams.pinax.network:443 https://github.com/pinax-network/substreams/releases/download/blocks-v0.1.0/blocks-v0.1.0.spkg map_blocks -s -10`, + ].join('\n'); +}; + +const generateTomlConfig = (chain: Chain): string => { + const getChainsLine = (chain: Chain) => `[chains.${chain.graph_id}]\n`; + const getShardLine = () => `shard = "primary"\n`; + const getEthConfigLines = (chain: Chain) => { + if (chain.standard?.localeCompare('ERC-20') === 0) + return ` # Ethereum Based Chain\n { label = "bootstrap", details = { type = "web3", url = "$PINAX_RPC_NODE", features = [ "archive" ] }},\n`; + return ''; + }; + const getSubstreamsConfigLines = (chain: Chain) => + ` # Substreams Configuration\n { label = "substreams", details = { type = "substreams", url = "https://${chain.id}.${substreams.endpoint_slug}.pinax.network:${substreams.port}", token = "$PINAX_JWT" }},\n`; + + let config = [ + getChainsLine(chain), + getShardLine(), + 'provider = [\n', + getEthConfigLines(chain), + ].join(''); + config += getSubstreamsConfigLines(chain); + config += ']\n'; + return config; +}; + +const generateJavascriptConfig = (): string => { + return `import { createRegistry, createRequest } from “@substreams/core”; +import { readPackage } from “@substreams/manifest”; +import { BlockEmitter, createDefaultTransport } from “@substreams/node”; + +const { MANIFEST, SUBSTREAMS_URL, SUBSTREAMS_API_KEY } = process.env; + +// Read Substream +const substreamPackage = await readPackage({MANIFEST}); + +// Connect Transport +const headers = new Headers({ “User-Agent”: “@substreams/node” }); +const registry = createRegistry(substreamPackage); +const transport = createDefaultTransport({SUBSTREAMS_URL}, {SUBSTREAMS_API_KEY}, registry, headers); +const request = createRequest({substreamPackage, outputModule: “graph_out”, startBlockNum: -1}); + +// NodeJS Events +const emitter = new BlockEmitter(transport, request, registry); + +// Session Trace ID +emitter.on("session", (session) => { + console.dir(session); +}); + +// Stream Blocks +emitter.on("anyMessage", (message, cursor, clock) => { + console.dir(message); + console.dir(cursor); + console.dir(clock); +}); + +// Start Emitter +await emitter.start(); +console.log("✅ Done")`; +}; + +export default { + service: substreams, + generateTomlEnv, + generateJavascriptEnv, + generateCurlConfig, + generateTomlConfig, + generateJavascriptConfig, +};