diff --git a/packages/thirdweb-react/docs/react.usecontract.md b/packages/thirdweb-react/docs/react.usecontract.md index 3c05f76..856454c 100644 --- a/packages/thirdweb-react/docs/react.usecontract.md +++ b/packages/thirdweb-react/docs/react.usecontract.md @@ -146,7 +146,7 @@ export declare function useContract(contractAddress: RequiredParam void; fetchStatus: import("@tanstack/react-query").FetchStatus; } | { - contract: SmartContract | null; + contract: import("@thirdweb-dev/sdk").SmartContract | null; data: { contractType: "split" | "nft-drop" | "signature-drop" | "nft-collection" | "edition-drop" | "edition" | "token-drop" | "token" | "vote" | "marketplace" | "pack" | "multiwrap" | undefined; compilerMetadata: null; @@ -257,7 +257,7 @@ export declare function useContract(contractAddress: RequiredParam void; fetchStatus: import("@tanstack/react-query").FetchStatus; } | { - contract: SmartContract | null; + contract: import("@thirdweb-dev/sdk").SmartContract | null; data: { contractType: "split" | "nft-drop" | "signature-drop" | "nft-collection" | "edition-drop" | "edition" | "token-drop" | "token" | "vote" | "marketplace" | "pack" | "multiwrap" | undefined; compilerMetadata: null; @@ -378,7 +378,7 @@ export declare function useContract(contractAddress: RequiredParamReturns: -{ contract: null; data: undefined; error: unknown; isError: true; isLoading: false; isLoadingError: true; isRefetchError: false; isSuccess: false; status: "error"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } \| { contract: null; data: undefined; error: null; isError: false; isLoading: true; isLoadingError: false; isRefetchError: false; isSuccess: false; status: "loading"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } \| { contract: SmartContract<import("ethers").BaseContract> \| null; data: { contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined; error: unknown; isError: true; isLoading: false; isLoadingError: false; isRefetchError: true; isSuccess: false; status: "error"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } \| { contract: SmartContract<import("ethers").BaseContract> \| null; data: { contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined; error: null; isError: false; isLoading: false; isLoadingError: false; isRefetchError: false; isSuccess: true; status: "success"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } +{ contract: null; data: undefined; error: unknown; isError: true; isLoading: false; isLoadingError: true; isRefetchError: false; isSuccess: false; status: "error"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } \| { contract: null; data: undefined; error: null; isError: false; isLoading: true; isLoadingError: false; isRefetchError: false; isSuccess: false; status: "loading"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } \| { contract: import("@thirdweb-dev/sdk").SmartContract<import("ethers").BaseContract> \| null; data: { contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined; error: unknown; isError: true; isLoading: false; isLoadingError: false; isRefetchError: true; isSuccess: false; status: "error"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } \| { contract: import("@thirdweb-dev/sdk").SmartContract<import("ethers").BaseContract> \| null; data: { contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined; error: null; isError: false; isLoading: false; isLoadingError: false; isRefetchError: false; isSuccess: true; status: "success"; dataUpdatedAt: number; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isPaused: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetching: boolean; isStale: boolean; refetch: <TPageData>(options?: (import("@tanstack/react-query").RefetchOptions & import("@tanstack/react-query").RefetchQueryFilters<TPageData>) \| undefined) => Promise<import("@tanstack/react-query").QueryObserverResult<{ contractType: "split" \| "nft-drop" \| "signature-drop" \| "nft-collection" \| "edition-drop" \| "edition" \| "token-drop" \| "token" \| "vote" \| "marketplace" \| "pack" \| "multiwrap" \| undefined; compilerMetadata: null; } \| { contractType: "custom"; compilerMetadata: { name: string; metadata: Record<string, any>; abi: { \[x: string\]: any; type: string; name: string; outputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; inputs: { \[x: string\]: any; components?: { \[x: string\]: any; type: string; name: string; }\[\] \| undefined; stateMutability?: string \| undefined; type: string; name: string; }\[\]; }\[\]; info: { title?: string \| undefined; author?: string \| undefined; details?: string \| undefined; notice?: string \| undefined; }; licenses: string\[\]; } \| undefined; } \| undefined, unknown>>; remove: () => void; fetchStatus: import("@tanstack/react-query").FetchStatus; } a response object that includes the contract once it is resolved diff --git a/packages/thirdweb-react/etc/react.api.md b/packages/thirdweb-react/etc/react.api.md index 83986ef..620e1fd 100644 --- a/packages/thirdweb-react/etc/react.api.md +++ b/packages/thirdweb-react/etc/react.api.md @@ -38,7 +38,6 @@ import type { EventQueryFilter } from '@thirdweb-dev/sdk'; import { FetchStatus } from '@tanstack/react-query'; import { InjectedConnector } from 'wagmi/connectors/injected'; import type { IStorage } from '@thirdweb-dev/storage'; -import { IStorage as IStorage_2 } from '@thirdweb-dev/sdk'; import { Json } from '@thirdweb-dev/sdk'; import { ListingType } from '@thirdweb-dev/sdk'; import { LoginOptions } from '@thirdweb-dev/sdk/dist/src/schema'; @@ -288,7 +287,7 @@ export type RevealLazyMintInput = { // Warning: (ae-internal-missing-underscore) The name "RolesForContract" should be prefixed with an underscore because the declaration is marked as @internal // // @internal (undocumented) -export type RolesForContract = TContract extends SmartContract ? Role | (string & {}) : NonNullable["roles"][number]; +export type RolesForContract = TContract extends SmartContract ? Role | (string & {}) : NonNullable["roles"]>["roles"][number]; // @beta export type SetClaimConditionsParams = { @@ -1647,7 +1646,7 @@ export { useProvider } // Warning: (ae-internal-missing-underscore) The name "useReadonlySDK" should be prefixed with an underscore because the declaration is marked as @internal // // @internal (undocumented) -export function useReadonlySDK(readonlyRpcUrl: string, sdkOptions: SDKOptions, storageInterface?: IStorage_2): ThirdwebSDK; +export function useReadonlySDK(readonlyRpcUrl: string, sdkOptions: SDKOptions, storageInterface?: IStorage): ThirdwebSDK; // @beta export function useResetClaimConditions(...[contract, tokenId]: ClaimConditionsInputParams): UseMutationResult=5.5.1", - "react": ">=18.0.0" + "react": ">=18.0.0", + "react-dom": ">=18.0.0" }, "resolutions": { "ansi-regex": "^6.0.1", diff --git a/packages/thirdweb-react/src/components/ConnectWallet/index.tsx b/packages/thirdweb-react/src/components/ConnectWallet/index.tsx index 389021f..47fc6ce 100644 --- a/packages/thirdweb-react/src/components/ConnectWallet/index.tsx +++ b/packages/thirdweb-react/src/components/ConnectWallet/index.tsx @@ -7,6 +7,7 @@ import { useChainId } from "../../hooks/useChainId"; import { useConnect } from "../../hooks/useConnect"; import { useDisconnect } from "../../hooks/useDisconnect"; import { useNetwork } from "../../hooks/useNetwork"; +import { Portal } from "../../lib/portal"; import { shortenIfAddress } from "../../utils/addresses"; import { useClipboard } from "../hooks/useCopyClipboard"; import { useIsMounted } from "../hooks/useIsMounted"; @@ -19,7 +20,6 @@ import { Spinner } from "../shared/Spinner"; import { ThemeProvider, ThemeProviderProps } from "../shared/ThemeProvider"; import { fontFamily } from "../theme"; import { SupportedNetworkSelect } from "./NetworkSelect"; -import { Portal } from "@reach/portal"; import { ChainId, LoginOptions, SUPPORTED_CHAIN_ID } from "@thirdweb-dev/sdk"; import * as menu from "@zag-js/menu"; import { normalizeProps, useMachine } from "@zag-js/react"; diff --git a/packages/thirdweb-react/src/hooks/async/claim-conditions.ts b/packages/thirdweb-react/src/hooks/async/claim-conditions.ts index cb67d44..4266fba 100644 --- a/packages/thirdweb-react/src/hooks/async/claim-conditions.ts +++ b/packages/thirdweb-react/src/hooks/async/claim-conditions.ts @@ -91,7 +91,7 @@ export function useActiveClaimCondition( contract?.drop?.claim?.conditions?.getActive, "Contract instance does not support contract?.drop?.claim?.conditions.getActive", ); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant(tokenId, "tokenId is required for ERC1155 claim conditions"); return contract?.drop?.claim?.conditions?.getActive(tokenId); } @@ -101,7 +101,10 @@ export function useActiveClaimCondition( // Checks that happen here: // 1. if the contract is based on ERC1155 contract => tokenId cannot be `undefined` // 2. if the contract is NOT based on ERC1155 => contract has to still be provided - enabled: contract instanceof Erc1155 ? tokenId !== undefined : !!contract, + enabled: + contract?.featureName === "ERC1155" + ? tokenId !== undefined + : !!contract, }, ); } @@ -141,7 +144,7 @@ export function useClaimConditions( contract?.drop?.claim?.conditions?.getAll, "Contract instance does not support drop.claim.conditions.getAll", ); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant(tokenId, "tokenId is required for ERC1155 claim conditions"); return contract?.drop?.claim?.conditions?.getAll(tokenId); } @@ -151,7 +154,10 @@ export function useClaimConditions( // Checks that happen here: // 1. if the contract is based on ERC1155 contract => tokenId cannot be `undefined` // 2. if the contract is NOT based on ERC1155 => contract has to still be provided - enabled: contract instanceof Erc1155 ? tokenId !== undefined : !!contract, + enabled: + contract?.featureName === "ERC1155" + ? tokenId !== undefined + : !!contract, }, ); } @@ -195,7 +201,7 @@ export function useClaimIneligibilityReasons< contract?.drop?.claim?.conditions.getClaimIneligibilityReasons, "Contract instance does not support claimConditions.getClaimIneligibilityReasons", ); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant( tokenId, "tokenId is required for ERC1155 claim ineligibility reasons", @@ -218,7 +224,9 @@ export function useClaimIneligibilityReasons< // 3. has a params object been passed? // 4. does params have an address in it? enabled: - (contract instanceof Erc1155 ? tokenId !== undefined : !!contract) && + (contract?.featureName === "ERC1155" + ? tokenId !== undefined + : !!contract) && !!params && !!params.walletAddress, }, @@ -297,7 +305,7 @@ export function useSetClaimConditions( invariant(contract, "No Contract instance provided"); const { phases, reset = false } = data; invariant(phases, 'No "phases" provided'); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant(tokenId, "tokenId is required for ERC1155 claim conditions"); return contract?.drop?.claim?.conditions.set(tokenId, phases, reset); } @@ -391,7 +399,7 @@ export function useResetClaimConditions( })); }; - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant(tokenId, "tokenId is required for ERC1155 claim conditions"); const claimConditions = await contract?.drop?.claim?.conditions.getAll( tokenId, diff --git a/packages/thirdweb-react/src/hooks/async/contracts.ts b/packages/thirdweb-react/src/hooks/async/contracts.ts index 87629dd..74363ef 100644 --- a/packages/thirdweb-react/src/hooks/async/contracts.ts +++ b/packages/thirdweb-react/src/hooks/async/contracts.ts @@ -18,7 +18,7 @@ import type { ThirdwebSDK, } from "@thirdweb-dev/sdk"; // eslint-disable-next-line no-duplicate-imports -import { CONTRACTS_MAP, SmartContract } from "@thirdweb-dev/sdk"; +import { CONTRACTS_MAP } from "@thirdweb-dev/sdk"; import type { CustomContractMetadata, PublishedMetadata, @@ -352,7 +352,7 @@ export function useContractFunctions( typeAndCompilerMetadata, sdk, ); - if (contract instanceof SmartContract) { + if (contract?.publishedMetadata.extractFunctions) { return contract.publishedMetadata.extractFunctions(); } return null; diff --git a/packages/thirdweb-react/src/hooks/async/drop.ts b/packages/thirdweb-react/src/hooks/async/drop.ts index 5367bac..44762fd 100644 --- a/packages/thirdweb-react/src/hooks/async/drop.ts +++ b/packages/thirdweb-react/src/hooks/async/drop.ts @@ -16,7 +16,6 @@ import { useQueryWithNetwork } from "../query-utils/useQueryWithNetwork"; import { useNFTs } from "./nft"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { - Erc1155, NFTDrop, NFTMetadataInput, QueryAllParams, @@ -117,7 +116,7 @@ export function useClaimedNFTSupply(contract: RequiredParam) { cacheKeys.contract.nft.drop.totalClaimedSupply(contractAddress), () => { invariant(contract, "No Contract instance provided"); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { return contract.getTotalCount(); } invariant( @@ -198,7 +197,7 @@ export function useClaimNFT( async (data: ClaimNFTParams) => { invariant(data.to, 'No "to" address provided'); invariant(contract?.claimTo, "contract does not support claimTo"); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant("tokenId" in data, "tokenId not provided"); const { to, tokenId, quantity } = data; return (await contract.claimTo( diff --git a/packages/thirdweb-react/src/hooks/async/nft.ts b/packages/thirdweb-react/src/hooks/async/nft.ts index 1133ed5..503340e 100644 --- a/packages/thirdweb-react/src/hooks/async/nft.ts +++ b/packages/thirdweb-react/src/hooks/async/nft.ts @@ -30,7 +30,7 @@ function convertResponseToNFTType( contract: NFTContract, metadata: Awaited>, ): NFT { - if (contract instanceof Erc721) { + if (contract.featureName === "ERC721") { return { type: "ERC721", supply: 1, @@ -172,7 +172,7 @@ export function useTotalCirculatingSupply( cacheKeys.contract.nft.query.totalCirculatingSupply(contractAddress), () => { invariant(contract, "No Contract instance provided"); - if (contract instanceof Erc721) { + if (contract.featureName === "ERC721") { invariant( contract?.query?.totalCirculatingSupply, "Contract instance does not support query.totalCirculatingSupply", @@ -219,7 +219,7 @@ export function useTotalCount(contract: RequiredParam) { cacheKeys.contract.nft.query.totalCount(contractAddress), () => { invariant(contract, "No Contract instance provided"); - if (contract instanceof Erc721) { + if (contract.featureName === "ERC721") { invariant( contract?.query?.totalCirculatingSupply, "Contract instance does not support query.totalCirculatingSupply", @@ -266,7 +266,7 @@ export function useOwnedNFTs( cacheKeys.contract.nft.query.owned.all(contractAddress, ownerWalletAddress), async () => { invariant(contract, "No Contract instance provided"); - if (contract instanceof Erc721) { + if (contract.featureName === "ERC721") { invariant( contract.query?.owned?.all, "Contract instance does not support query.owned.all", @@ -327,7 +327,7 @@ export function useNFTBalance( "Contract instance does not support balanceOf", ); invariant(ownerWalletAddress, "No owner wallet address provided"); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant(tokenId, "No tokenId provided"); return contract.balanceOf(ownerWalletAddress, tokenId); } @@ -410,7 +410,7 @@ export function useMintNFT( async (data: MintNFTParams) => { invariant(data.to, 'No "to" address provided'); invariant(contract?.mint?.to, "contract does not support mint.to"); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant("supply" in data, "supply not provided"); const { to, metadata, supply } = data; return (await contract.mint.to(to, { @@ -589,7 +589,7 @@ export function useTransferNFT( return useMutation( (data: TransferNFTParams) => { invariant(contract?.transfer, "contract does not support transfer"); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant("amount" in data, "amount not provided"); return contract.transfer(data.to, data.tokenId, data.amount); } @@ -761,7 +761,7 @@ export function useBurnNFT( async (data: BurnNFTParams) => { invariant(data.tokenId, "No tokenId provided"); invariant(contract?.burn, "contract does not support burn"); - if (contract instanceof Erc1155) { + if (contract.featureName === "ERC1155") { invariant("amount" in data, "amount not provided"); const { tokenId, amount } = data; return await contract.burn.tokens(tokenId, amount); diff --git a/packages/thirdweb-react/src/hooks/async/roles.ts b/packages/thirdweb-react/src/hooks/async/roles.ts index 644b8eb..bcb3459 100644 --- a/packages/thirdweb-react/src/hooks/async/roles.ts +++ b/packages/thirdweb-react/src/hooks/async/roles.ts @@ -34,7 +34,7 @@ export type ContractWithRoles = export type RolesForContract = TContract extends SmartContract ? Role | (string & {}) - : NonNullable["roles"][number]; + : NonNullable["roles"]>["roles"][number]; /** * @internal diff --git a/packages/thirdweb-react/src/hooks/useReadonlySDK.ts b/packages/thirdweb-react/src/hooks/useReadonlySDK.ts index 0c813fe..5261a94 100644 --- a/packages/thirdweb-react/src/hooks/useReadonlySDK.ts +++ b/packages/thirdweb-react/src/hooks/useReadonlySDK.ts @@ -1,4 +1,5 @@ -import { IStorage, SDKOptions, ThirdwebSDK } from "@thirdweb-dev/sdk"; +import { SDKOptions, ThirdwebSDK } from "@thirdweb-dev/sdk"; +import type { IStorage } from "@thirdweb-dev/storage"; import { useMemo } from "react"; /** diff --git a/packages/thirdweb-react/src/lib/portal.tsx b/packages/thirdweb-react/src/lib/portal.tsx new file mode 100644 index 0000000..9420860 --- /dev/null +++ b/packages/thirdweb-react/src/lib/portal.tsx @@ -0,0 +1,90 @@ + import { useState, useCallback, useLayoutEffect, useEffect, useRef, PropsWithChildren } from "react"; + import { createPortal } from "react-dom"; + + + function canUseDOM() { + return !!( +typeof window !== "undefined" && +window.document && +window.document.createElement +); +} + +/** + * Forces a re-render, similar to `forceUpdate` in class components. + */ +function useForceUpdate() { +const [, dispatch] = useState<{}>(Object.create(null)); +return useCallback(() => { +dispatch(Object.create(null)); +}, []); +} + + +export const useIsomorphicLayoutEffect = canUseDOM() ? useLayoutEffect : useEffect; + + + /** + * Portal from `@reach/portal` + * + * @see Docs https://reach.tech/portal#portal + */ + const PortalImpl: React.FC = ({ + children, + type = "reach-portal", + containerRef, + }) => { + const mountNode = useRef(null); + const portalNode = useRef(null); + const forceUpdate = useForceUpdate(); + + + useLayoutEffect(() => { + // This ref may be null when a hot-loader replaces components on the page + if (!mountNode.current) {return;} + // It's possible that the content of the portal has, itself, been portaled. + // In that case, it's important to append to the correct document element. + const ownerDocument = mountNode.current.ownerDocument; + const body = containerRef?.current || ownerDocument.body; + portalNode.current = ownerDocument?.createElement(type); + body.appendChild(portalNode.current); + forceUpdate(); + return () => { + if (portalNode.current && body) { + body.removeChild(portalNode.current); + } + }; + }, [type, forceUpdate, containerRef]); + + return portalNode.current ? ( + createPortal(children, portalNode.current) + ) : ( + + ); + }; + + export const Portal: React.FC = ({ + unstable_skipInitialRender, + ...props + }) => { + const [hydrated, setHydrated] = useState(false); + useEffect(() => { + if (unstable_skipInitialRender) { + setHydrated(true); + } + }, [unstable_skipInitialRender]); + if (unstable_skipInitialRender && !hydrated) { + return null; + } + return ; + }; + + + export type PortalProps = PropsWithChildren<{ + type?: string; + containerRef?: React.RefObject; + unstable_skipInitialRender?: boolean; + }>; + + Portal.displayName = "Portal"; + diff --git a/packages/thirdweb-react/tsconfig.json b/packages/thirdweb-react/tsconfig.json index 00d2ee5..d32b81f 100644 --- a/packages/thirdweb-react/tsconfig.json +++ b/packages/thirdweb-react/tsconfig.json @@ -34,7 +34,7 @@ "skipLibCheck": true, // error out if import and file system have a casing mismatch. Recommended by TS "forceConsistentCasingInFileNames": true, - "emitDeclarationOnly": true, + "noEmit": true, "target": "ES6", "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/yarn.lock b/yarn.lock index 828a918..ed04e4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1059,9 +1059,9 @@ to-fast-properties "^2.0.0" "@coinbase/wallet-sdk@^3.0.8": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.5.0.tgz#a50cbe5779972f5471b20cbed200d3aae80b8d4c" - integrity sha512-xdYMpz98gNwhOnSCh7Rm+qziI/K7LnPJnqHI93sZIRiRGtRTtDihcxjVxV2s1rj9NsYjC5jcKiOEgm8VqIK8Tg== + version "3.5.1" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.5.1.tgz#409ea4ecb2823bdfb9f9c6bd395259e09bafdc29" + integrity sha512-s+noyqQfFfdxqot0gVM1nAS3JObrIuPFW4glRaMQP2n7Fxsk7ObGGkjTUy2cPgSE0ZW9ocswIjBCTcdo+31mug== dependencies: "@metamask/safe-event-emitter" "2.0.0" "@solana/web3.js" "1.52.0" @@ -1182,14 +1182,14 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint/eslintrc@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.1.tgz#de0807bfeffc37b964a7d0400e0c348ce5a2543d" + integrity sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" + espree "^9.4.0" globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1648,6 +1648,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" @@ -2113,17 +2118,17 @@ dependencies: tslib "^2.4.0" -"@tanstack/query-core@^4.0.0-beta.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.2.1.tgz#21ff3a33f27bf038c990ea53af89cf7c7e8078fc" - integrity sha512-UOyOhHKLS/5i9qG2iUnZNVV3R9riJJmG9eG+hnMFIPT/oRh5UzAfjxCtBneNgPQZLDuP8y6YtRYs/n4qVAD5Ng== +"@tanstack/query-core@4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.2.3.tgz#52d75430c9662cc85c160761c1421de483c7791f" + integrity sha512-zdt5lYWs1dZaA3IxJbCgtAfHZJScRZONpiLL7YkeOkrme5MfjQqTpjq7LYbzpyuwPOh2Jx68le0PLl57JFv5hQ== "@tanstack/react-query@^4.0.10": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.2.1.tgz#1f00f03573b35a353e62fa64f904bbb0286a1808" - integrity sha512-w02oTOYpoxoBzD/onAGRQNeLAvggLn7WZjS811cT05WAE/4Q3br0PTp388M7tnmyYGbgOOhFq0MkhH0wIfAKqA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.2.3.tgz#782fd0f84553ba6219f1137a12ea28ab8cd3a3f3" + integrity sha512-JLaMOxoJTkiAu7QpevRCt2uI/0vd3E8K/rSlCuRgWlcW5DeJDFpDS5kfzmLO5MOcD97fgsJRrDbxDORxR1FdJA== dependencies: - "@tanstack/query-core" "^4.0.0-beta.1" + "@tanstack/query-core" "4.2.3" "@types/use-sync-external-store" "^0.0.3" use-sync-external-store "^1.2.0" @@ -2316,7 +2321,14 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/react@^18.0.17", "@types/react@^18.0.5": +"@types/react-dom@^18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.0.17", "@types/react@^18.0.5": version "18.0.17" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== @@ -2764,10 +2776,15 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-regex@^4.1.0, ansi-regex@^5.0.1, ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -3563,9 +3580,9 @@ eip1193-provider@1.0.1: "@json-rpc-tools/provider" "^1.5.5" electron-to-chromium@^1.4.202: - version "1.4.230" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.230.tgz#666909fdf5765acb1348b69752ee9955dc1664b7" - integrity sha512-3pwjAK0qHSDN9+YAF4fJknsSruP7mpjdWzUSruIJD/JCH77pEh0SorEyb3xVaKkfwk2tzjOt2D8scJ0KAdfXLA== + version "1.4.232" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.232.tgz#67a0a874b0057662244230d18d3a9847c135a9d9" + integrity sha512-nd+FW8xHjM+PxNWG44nKnwHaBDdVpJUZuI2sS2JJPt/QpdombnmoCRWEEQNnzaktdIQhsNWdD+dlqxwO8Bn99g== elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3806,9 +3823,9 @@ eslint-plugin-react-hooks@^4.5.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.29.4: - version "7.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.0.tgz#fd3f81c9db5971095b3521ede22781afd37442b0" - integrity sha512-BWriBttYYCnfb4RO9SB91Og8uA9CPcBMl5UlCOCtuYW1UjhN3QypzEcEHky4ZIRZDKjbO2Blh9BjP8E7W/b1SA== + version "7.31.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz#d29793ed27743f3ed8a473c347b1bf5a0a8fb9af" + integrity sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg== dependencies: array-includes "^3.1.5" array.prototype.flatmap "^1.3.0" @@ -3867,13 +3884,14 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.16.0, eslint@^8.9.0: - version "8.22.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" - integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== + version "8.23.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.0.tgz#a184918d288820179c6041bb3ddcc99ce6eea040" + integrity sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA== dependencies: - "@eslint/eslintrc" "^1.3.0" + "@eslint/eslintrc" "^1.3.1" "@humanwhocodes/config-array" "^0.10.4" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@humanwhocodes/module-importer" "^1.0.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3883,7 +3901,7 @@ eslint@^8.16.0, eslint@^8.9.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.3" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3909,12 +3927,11 @@ eslint@^8.16.0, eslint@^8.9.0: strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.2, espree@^9.3.3: - version "9.3.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" - integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" @@ -5827,7 +5844,7 @@ react-cool-dimensions@^2.0.7: resolved "https://registry.yarnpkg.com/react-cool-dimensions/-/react-cool-dimensions-2.0.7.tgz#2fe6657608f034cd7c89f149ed14e79cf1cb2d50" integrity sha512-z1VwkAAJ5d8QybDRuYIXTE41RxGr5GYsv1bQhbOBE8cMfoZQZpcF0odL64vdgrQVzat2jayedj1GoYi80FWcbA== -react-dom@^18.1.0: +react-dom@^18.1.0, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -5852,7 +5869,7 @@ react-native-url-polyfill@^1.3.0: dependencies: whatwg-url-without-unicode "8.0.0-3" -react@^18.1.0: +react@^18.1.0, react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -6551,11 +6568,16 @@ typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.6.2, typescript@^4.7.2, typescript@~4.7.4: +typescript@^4.6.2, typescript@^4.7.2: version "4.8.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== +typescript@~4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + uint8arrays@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" @@ -6665,7 +6687,7 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +v8-compile-cache@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==