thirdweb 5.80.0 → 5.80.1-nightly-ce3e850fdbf34911e20919ecc2674e4a63f08fa3-20241225000333
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/adapters/ethers6.js +1 -1
- package/dist/cjs/contract/deployment/utils/bootstrap.js +29 -11
- package/dist/cjs/contract/deployment/utils/bootstrap.js.map +1 -1
- package/dist/cjs/contract/deployment/zksync/implementations.js +27 -0
- package/dist/cjs/contract/deployment/zksync/implementations.js.map +1 -0
- package/dist/cjs/extensions/prebuilts/get-required-transactions.js +5 -2
- package/dist/cjs/extensions/prebuilts/get-required-transactions.js.map +1 -1
- package/dist/cjs/react/core/utils/walletIcon.js +3 -0
- package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
- package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js +18 -8
- package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
- package/dist/cjs/react/web/ui/MediaRenderer/useResolvedMediaType.js +25 -0
- package/dist/cjs/react/web/ui/MediaRenderer/useResolvedMediaType.js.map +1 -1
- package/dist/cjs/react/web/ui/prebuilt/NFT/media.js +24 -12
- package/dist/cjs/react/web/ui/prebuilt/NFT/media.js.map +1 -1
- package/dist/cjs/react/web/ui/prebuilt/NFT/name.js +24 -12
- package/dist/cjs/react/web/ui/prebuilt/NFT/name.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/wallets/manager/index.js +2 -2
- package/dist/cjs/wallets/manager/index.js.map +1 -1
- package/dist/esm/adapters/ethers6.js +1 -1
- package/dist/esm/contract/deployment/utils/bootstrap.js +29 -11
- package/dist/esm/contract/deployment/utils/bootstrap.js.map +1 -1
- package/dist/esm/contract/deployment/zksync/implementations.js +24 -0
- package/dist/esm/contract/deployment/zksync/implementations.js.map +1 -0
- package/dist/esm/extensions/prebuilts/get-required-transactions.js +5 -2
- package/dist/esm/extensions/prebuilts/get-required-transactions.js.map +1 -1
- package/dist/esm/react/core/utils/walletIcon.js +3 -0
- package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
- package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js +12 -3
- package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
- package/dist/esm/react/web/ui/MediaRenderer/useResolvedMediaType.js +24 -0
- package/dist/esm/react/web/ui/MediaRenderer/useResolvedMediaType.js.map +1 -1
- package/dist/esm/react/web/ui/prebuilt/NFT/media.js +23 -12
- package/dist/esm/react/web/ui/prebuilt/NFT/media.js.map +1 -1
- package/dist/esm/react/web/ui/prebuilt/NFT/name.js +23 -12
- package/dist/esm/react/web/ui/prebuilt/NFT/name.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/wallets/manager/index.js +2 -2
- package/dist/esm/wallets/manager/index.js.map +1 -1
- package/dist/types/adapters/ethers6.d.ts +1 -1
- package/dist/types/contract/deployment/utils/bootstrap.d.ts.map +1 -1
- package/dist/types/contract/deployment/zksync/implementations.d.ts +3 -0
- package/dist/types/contract/deployment/zksync/implementations.d.ts.map +1 -0
- package/dist/types/extensions/prebuilts/get-required-transactions.d.ts +1 -1
- package/dist/types/extensions/prebuilts/get-required-transactions.d.ts.map +1 -1
- package/dist/types/react/core/utils/walletIcon.d.ts +3 -0
- package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
- package/dist/types/react/web/ui/MediaRenderer/MediaRenderer.d.ts +12 -0
- package/dist/types/react/web/ui/MediaRenderer/MediaRenderer.d.ts.map +1 -1
- package/dist/types/react/web/ui/MediaRenderer/useResolvedMediaType.d.ts +8 -0
- package/dist/types/react/web/ui/MediaRenderer/useResolvedMediaType.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts +10 -0
- package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts +10 -0
- package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/adapters/ethers6.ts +1 -1
- package/src/contract/deployment/utils/bootstrap.test.ts +44 -1
- package/src/contract/deployment/utils/bootstrap.ts +38 -11
- package/src/contract/deployment/zksync/implementations.ts +24 -0
- package/src/extensions/prebuilts/get-required-transactions.test.ts +14 -1
- package/src/extensions/prebuilts/get-required-transactions.ts +6 -2
- package/src/react/core/hooks/wallets/useSwitchActiveWalletChain.test.tsx +51 -0
- package/src/react/core/providers/connection-manager.test.tsx +11 -0
- package/src/react/core/utils/isSmartWallet.test.ts +19 -0
- package/src/react/core/utils/storage.test.ts +57 -0
- package/src/react/core/utils/structuralSharing.test.ts +55 -0
- package/src/react/core/utils/walletIcon.test.ts +81 -0
- package/src/react/core/utils/walletIcon.ts +3 -0
- package/src/react/web/ui/MediaRenderer/MediaRenderer.test.tsx +193 -2
- package/src/react/web/ui/MediaRenderer/MediaRenderer.tsx +12 -3
- package/src/react/web/ui/MediaRenderer/icons.test.tsx +80 -0
- package/src/react/web/ui/MediaRenderer/mime/mime.test.ts +66 -0
- package/src/react/web/ui/MediaRenderer/useResolvedMediaType.test.tsx +27 -0
- package/src/react/web/ui/MediaRenderer/useResolvedMediaType.ts +28 -0
- package/src/react/web/ui/hooks/useCopyClipboard.test.tsx +41 -0
- package/src/react/web/ui/hooks/useDebouncedValue.test.tsx +107 -0
- package/src/react/web/ui/hooks/useShowMore.test.tsx +83 -0
- package/src/react/web/ui/prebuilt/Chain/name.test.tsx +36 -28
- package/src/react/web/ui/prebuilt/NFT/media.test.tsx +58 -1
- package/src/react/web/ui/prebuilt/NFT/media.tsx +32 -13
- package/src/react/web/ui/prebuilt/NFT/name.test.tsx +37 -1
- package/src/react/web/ui/prebuilt/NFT/name.tsx +29 -13
- package/src/react/web/utils/resolveMimeType.test.ts +63 -0
- package/src/version.ts +1 -1
- package/src/wallets/manager/index.ts +2 -2
- package/src/wallets/smart/smart.test.ts +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"walletIcon.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/utils/walletIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+B5D,eAAO,MAAM,gBAAgB,+2EACi1E,CAAC;AAG/2E,eAAO,MAAM,iBAAiB,+mDACglD,CAAC;AAI/mD,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAqC1E"}
|
1
|
+
{"version":3,"file":"walletIcon.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/utils/walletIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+B5D,eAAO,MAAM,gBAAgB,+2EACi1E,CAAC;AAG/2E,eAAO,MAAM,iBAAiB,+mDACglD,CAAC;AAI/mD;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAqC1E"}
|
@@ -39,4 +39,16 @@ import type { MediaRendererProps } from "./types.js";
|
|
39
39
|
* @param props - Refer to [`MediaRendererProps`](https://portal.thirdweb.com/references/typescript/v5/MediaRendererProps) to see the available props.
|
40
40
|
*/
|
41
41
|
export declare const MediaRenderer: React.ForwardRefExoticComponent<MediaRendererProps & React.RefAttributes<HTMLMediaElement>>;
|
42
|
+
/**
|
43
|
+
* @internal Exported for tests
|
44
|
+
*/
|
45
|
+
export declare const IframePlayer: React.ForwardRefExoticComponent<Omit<MediaRendererProps, "client" | "children" | "height" | "width" | "controls" | "gatewayUrl" | "mimeType"> & React.RefAttributes<HTMLIFrameElement>>;
|
46
|
+
/**
|
47
|
+
* @internal Exported for tests
|
48
|
+
*/
|
49
|
+
export declare const LinkPlayer: React.ForwardRefExoticComponent<Pick<MediaRendererProps, "src" | "style" | "alt" | "className"> & React.RefAttributes<HTMLAnchorElement>>;
|
50
|
+
/**
|
51
|
+
* @internal
|
52
|
+
*/
|
53
|
+
export declare function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T>;
|
42
54
|
//# sourceMappingURL=MediaRenderer.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MediaRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/MediaRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAO3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,6FAoJpB,CAAC"}
|
1
|
+
{"version":3,"file":"MediaRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/MediaRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAO3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,6FAoJpB,CAAC;AAsUP;;GAEG;AACH,eAAO,MAAM,YAAY,yLAiElB,CAAC;AAER;;GAEG;AACH,eAAO,MAAM,UAAU,2IAkDhB,CAAC;AAER;;GAEG;AAEH,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAC1D,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB"}
|
@@ -9,4 +9,12 @@ export declare function useResolvedMediaType(client: ThirdwebClient, uri?: strin
|
|
9
9
|
};
|
10
10
|
isFetched: boolean;
|
11
11
|
};
|
12
|
+
/**
|
13
|
+
* @internal Exported for tests
|
14
|
+
*/
|
15
|
+
export declare function resolveMediaTypeFromUri(props: {
|
16
|
+
uri?: string;
|
17
|
+
client: ThirdwebClient;
|
18
|
+
gatewayUrl?: string;
|
19
|
+
}): string;
|
12
20
|
//# sourceMappingURL=useResolvedMediaType.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useResolvedMediaType.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/useResolvedMediaType.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM;;;;;;EAiCpB"}
|
1
|
+
{"version":3,"file":"useResolvedMediaType.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/useResolvedMediaType.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM;;;;;;EAiCpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,UAmBA"}
|
@@ -109,6 +109,16 @@ export type NFTMediaProps = Omit<MediaRendererProps, "src" | "poster" | "client"
|
|
109
109
|
* @beta
|
110
110
|
*/
|
111
111
|
export declare function NFTMedia({ loadingComponent, fallbackComponent, queryOptions, mediaResolver, ...mediaRendererProps }: NFTMediaProps): import("react/jsx-runtime.js").JSX.Element | null;
|
112
|
+
/**
|
113
|
+
* @internal
|
114
|
+
*/
|
115
|
+
export declare function getQueryKey(props: {
|
116
|
+
chainId: number;
|
117
|
+
tokenId: bigint;
|
118
|
+
mediaResolver?: NFTMediaInfo | (() => NFTMediaInfo) | (() => Promise<NFTMediaInfo>);
|
119
|
+
}): readonly ["_internal_nft_media_", number, string, {
|
120
|
+
readonly resolver: string | NFTMediaInfo | undefined;
|
121
|
+
}];
|
112
122
|
/**
|
113
123
|
* @internal Exported for tests only
|
114
124
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/media.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,kBAAkB,EAClB,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAC5B,GAAG;IACF,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IAC3E;;;;OAIG;IACH,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,GAAG,kBAAkB,EACtB,EAAE,aAAa,
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/media.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,kBAAkB,EAClB,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAC5B,GAAG;IACF,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IAC3E;;;;OAIG;IACH,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,GAAG,kBAAkB,EACtB,EAAE,aAAa,qDA6Bf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC;;GAeA;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CA2BvD"}
|
@@ -77,6 +77,16 @@ export interface NFTNameProps extends Omit<React.HTMLAttributes<HTMLSpanElement>
|
|
77
77
|
* @beta
|
78
78
|
*/
|
79
79
|
export declare function NFTName({ loadingComponent, fallbackComponent, queryOptions, nameResolver, ...restProps }: NFTNameProps): import("react/jsx-runtime.js").JSX.Element | null;
|
80
|
+
/**
|
81
|
+
* @internal
|
82
|
+
*/
|
83
|
+
export declare function getQueryKey(props: {
|
84
|
+
chainId: number;
|
85
|
+
tokenId: bigint;
|
86
|
+
nameResolver?: string | (() => string) | (() => Promise<string>);
|
87
|
+
}): readonly ["_internal_nft_name_", number, string, {
|
88
|
+
readonly resolver: string | undefined;
|
89
|
+
}];
|
80
90
|
/**
|
81
91
|
* @internal Exported for tests
|
82
92
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/name.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAK5E,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC/D,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,OAAO,CAAC,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,YAAY,
|
1
|
+
{"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/name.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAK5E,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC/D,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,OAAO,CAAC,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,YAAY,qDAsBd;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;;GAeA;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}
|
package/dist/types/version.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "5.80.
|
1
|
+
export declare const version = "5.80.1-nightly-ce3e850fdbf34911e20919ecc2674e4a63f08fa3-20241225000333";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,2EAA2E,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "thirdweb",
|
3
|
-
"version": "5.80.
|
3
|
+
"version": "5.80.1-nightly-ce3e850fdbf34911e20919ecc2674e4a63f08fa3-20241225000333",
|
4
4
|
"repository": {
|
5
5
|
"type": "git",
|
6
6
|
"url": "git+https://github.com/thirdweb-dev/js.git#main"
|
@@ -313,7 +313,7 @@
|
|
313
313
|
"@testing-library/react": "^16.1.0",
|
314
314
|
"@testing-library/user-event": "^14.5.2",
|
315
315
|
"@types/cross-spawn": "^6.0.6",
|
316
|
-
"@types/react": "19.0.
|
316
|
+
"@types/react": "19.0.2",
|
317
317
|
"@viem/anvil": "0.0.10",
|
318
318
|
"@vitejs/plugin-react": "^4.3.4",
|
319
319
|
"@vitest/coverage-v8": "2.1.8",
|
package/src/adapters/ethers6.ts
CHANGED
@@ -166,7 +166,7 @@ export const ethers6Adapter = /* @__PURE__ */ (() => {
|
|
166
166
|
},
|
167
167
|
},
|
168
168
|
/**
|
169
|
-
* Converts an ethers6 Signer into
|
169
|
+
* Converts an ethers6 Signer into a Wallet object or the other way around.
|
170
170
|
* @example
|
171
171
|
*
|
172
172
|
* ### fromEthersSigner
|
@@ -3,7 +3,12 @@ import { describe, expect, it } from "vitest";
|
|
3
3
|
import { ANVIL_CHAIN } from "../../../../test/src/chains.js";
|
4
4
|
import { TEST_CLIENT } from "../../../../test/src/test-clients.js";
|
5
5
|
import { TEST_ACCOUNT_A } from "../../../../test/src/test-wallets.js";
|
6
|
-
import {
|
6
|
+
import { defineChain } from "../../../chains/utils.js";
|
7
|
+
import {
|
8
|
+
deployCloneFactory,
|
9
|
+
getOrDeployInfraContract,
|
10
|
+
getOrDeployInfraForPublishedContract,
|
11
|
+
} from "./bootstrap.js";
|
7
12
|
import { getDeployedCreate2Factory } from "./create-2-factory.js";
|
8
13
|
import { getDeployedInfraContract } from "./infra.js";
|
9
14
|
|
@@ -42,4 +47,42 @@ describe.runIf(process.env.TW_SECRET_KEY)("bootstrap", () => {
|
|
42
47
|
});
|
43
48
|
expect(cloneFactory).not.toBeNull();
|
44
49
|
});
|
50
|
+
|
51
|
+
it("should return saved implementations for zksync chains", async () => {
|
52
|
+
let infra = await getOrDeployInfraForPublishedContract({
|
53
|
+
client: TEST_CLIENT,
|
54
|
+
chain: defineChain(300),
|
55
|
+
account: TEST_ACCOUNT_A,
|
56
|
+
contractId: "MarketplaceV3",
|
57
|
+
});
|
58
|
+
|
59
|
+
expect(infra.cloneFactoryContract.address).to.eq(
|
60
|
+
"0xa51baf6a9c0ef5Db8C1898d5aDD92Bf3227d6088",
|
61
|
+
);
|
62
|
+
expect(infra.implementationContract.address).to.eq(
|
63
|
+
"0x58e0F289C7dD2025eBd0696d913ECC0fdc1CC8bc",
|
64
|
+
);
|
65
|
+
|
66
|
+
infra = await getOrDeployInfraForPublishedContract({
|
67
|
+
client: TEST_CLIENT,
|
68
|
+
chain: defineChain(300),
|
69
|
+
account: TEST_ACCOUNT_A,
|
70
|
+
contractId: "DropERC721",
|
71
|
+
version: "5.0.4",
|
72
|
+
});
|
73
|
+
|
74
|
+
expect(infra.cloneFactoryContract.address).to.eq(
|
75
|
+
"0xa51baf6a9c0ef5Db8C1898d5aDD92Bf3227d6088",
|
76
|
+
);
|
77
|
+
expect(infra.implementationContract.address).toBeDefined();
|
78
|
+
|
79
|
+
const weth = await getOrDeployInfraContract({
|
80
|
+
client: TEST_CLIENT,
|
81
|
+
chain: defineChain(300),
|
82
|
+
account: TEST_ACCOUNT_A,
|
83
|
+
contractId: "WETH9",
|
84
|
+
});
|
85
|
+
|
86
|
+
expect(weth.address).to.eq("0x0462C05457Fed440740Ff3696bDd2D0577411e34");
|
87
|
+
});
|
45
88
|
});
|
@@ -7,6 +7,10 @@ import { isZkSyncChain } from "../../../utils/any-evm/zksync/isZkSyncChain.js";
|
|
7
7
|
import type { ClientAndChainAndAccount } from "../../../utils/types.js";
|
8
8
|
import { type ThirdwebContract, getContract } from "../../contract.js";
|
9
9
|
import { fetchPublishedContractMetadata } from "../publisher.js";
|
10
|
+
import {
|
11
|
+
ZKSYNC_IMPLEMENTATIONS,
|
12
|
+
ZKSYNC_WETH,
|
13
|
+
} from "../zksync/implementations.js";
|
10
14
|
import { zkDeployCreate2Factory } from "../zksync/zkDeployCreate2Factory.js";
|
11
15
|
import { zkDeployContractDeterministic } from "../zksync/zkDeployDeterministic.js";
|
12
16
|
import { getDeployedCloneFactoryContract } from "./clone-factory.js";
|
@@ -69,18 +73,29 @@ export async function getOrDeployInfraForPublishedContract(
|
|
69
73
|
publisher,
|
70
74
|
version,
|
71
75
|
});
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
76
|
+
|
77
|
+
const zksyncImplementations = ZKSYNC_IMPLEMENTATIONS[chain.id];
|
78
|
+
let implementationContract: string | undefined;
|
79
|
+
|
80
|
+
if (zksyncImplementations) {
|
81
|
+
implementationContract = zksyncImplementations[contractId];
|
82
|
+
}
|
83
|
+
|
84
|
+
if (!implementationContract) {
|
85
|
+
implementationContract = await zkDeployContractDeterministic({
|
80
86
|
chain,
|
81
|
-
|
82
|
-
|
83
|
-
|
87
|
+
client,
|
88
|
+
account,
|
89
|
+
abi: compilerMetadata.abi,
|
90
|
+
bytecode: await fetchBytecodeFromCompilerMetadata({
|
91
|
+
compilerMetadata,
|
92
|
+
client,
|
93
|
+
chain,
|
94
|
+
}),
|
95
|
+
params: constructorParams,
|
96
|
+
});
|
97
|
+
}
|
98
|
+
|
84
99
|
return {
|
85
100
|
cloneFactoryContract: getContract({
|
86
101
|
address: cloneFactoryContract,
|
@@ -188,6 +203,18 @@ export async function getOrDeployInfraContract(
|
|
188
203
|
version?: string;
|
189
204
|
},
|
190
205
|
) {
|
206
|
+
if (options.contractId === "WETH9" && (await isZkSyncChain(options.chain))) {
|
207
|
+
const weth = ZKSYNC_WETH[options.chain.id];
|
208
|
+
|
209
|
+
if (weth) {
|
210
|
+
return getContract({
|
211
|
+
client: options.client,
|
212
|
+
chain: options.chain,
|
213
|
+
address: weth,
|
214
|
+
});
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
191
218
|
const contractMetadata = await fetchPublishedContractMetadata({
|
192
219
|
client: options.client,
|
193
220
|
contractId: options.contractId,
|
@@ -0,0 +1,24 @@
|
|
1
|
+
export const ZKSYNC_IMPLEMENTATIONS: Record<number, Record<string, string>> = {
|
2
|
+
[300]: {
|
3
|
+
MarketplaceV3: "0x58e0F289C7dD2025eBd0696d913ECC0fdc1CC8bc",
|
4
|
+
},
|
5
|
+
[302]: {
|
6
|
+
MarketplaceV3: "0x8b0DBCf5b7D01eBB0F24525CE8AB72F16CE4F8C8",
|
7
|
+
},
|
8
|
+
[324]: {
|
9
|
+
MarketplaceV3: "0xBc02441a36Bb4029Cd191b20243c2e41B862F118",
|
10
|
+
},
|
11
|
+
[11124]: {
|
12
|
+
MarketplaceV3: "0x2dA4Dd326A6482679547071be21f74685d730504",
|
13
|
+
},
|
14
|
+
[37111]: {
|
15
|
+
MarketplaceV3: "0x56Abb6a3f25DCcdaDa106191053b1CC54C196DEE",
|
16
|
+
},
|
17
|
+
};
|
18
|
+
|
19
|
+
export const ZKSYNC_WETH: Record<number, string> = {
|
20
|
+
[300]: "0x0462C05457Fed440740Ff3696bDd2D0577411e34",
|
21
|
+
[324]: "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91",
|
22
|
+
[11124]: "0x9EDCde0257F2386Ce177C3a7FCdd97787F0D841d",
|
23
|
+
[37111]: "0xaA91D645D7a6C1aeaa5988e0547267B77d33fe16",
|
24
|
+
};
|
@@ -1,8 +1,12 @@
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
2
2
|
import { CLEAN_ANVIL_CHAIN } from "../../../test/src/chains.js";
|
3
3
|
import { TEST_CLIENT } from "../../../test/src/test-clients.js";
|
4
|
+
import { defineChain } from "../../chains/utils.js";
|
4
5
|
import { fetchPublishedContractMetadata } from "../../contract/deployment/publisher.js";
|
5
|
-
import {
|
6
|
+
import {
|
7
|
+
getAllDefaultConstructorParamsForImplementation,
|
8
|
+
getRequiredTransactions,
|
9
|
+
} from "./get-required-transactions.js";
|
6
10
|
|
7
11
|
describe.runIf(process.env.TW_SECRET_KEY)(
|
8
12
|
"getRequiredTransactions",
|
@@ -59,5 +63,14 @@ describe.runIf(process.env.TW_SECRET_KEY)(
|
|
59
63
|
});
|
60
64
|
expect(results.length).toBe(7);
|
61
65
|
});
|
66
|
+
|
67
|
+
it("should return default constructor params for zksync chains", async () => {
|
68
|
+
const params = await getAllDefaultConstructorParamsForImplementation({
|
69
|
+
chain: defineChain(300),
|
70
|
+
client: TEST_CLIENT,
|
71
|
+
});
|
72
|
+
|
73
|
+
expect(params.nativeTokenWrapper).toBeDefined();
|
74
|
+
});
|
62
75
|
},
|
63
76
|
);
|
@@ -3,6 +3,7 @@ import type { ThirdwebClient } from "../../client/client.js";
|
|
3
3
|
import { getDeployedCreate2Factory } from "../../contract/deployment/utils/create-2-factory.js";
|
4
4
|
import { getDeployedInfraContract } from "../../contract/deployment/utils/infra.js";
|
5
5
|
import { getDeployedInfraContractFromMetadata } from "../../contract/deployment/utils/infra.js";
|
6
|
+
import { ZKSYNC_WETH } from "../../contract/deployment/zksync/implementations.js";
|
6
7
|
import { computePublishedContractAddress } from "../../utils/any-evm/compute-published-contract-address.js";
|
7
8
|
import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js";
|
8
9
|
import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
|
@@ -227,8 +228,11 @@ export async function getAllDefaultConstructorParamsForImplementation(args: {
|
|
227
228
|
const { chain, client } = args;
|
228
229
|
const isZkSync = await isZkSyncChain(chain);
|
229
230
|
if (isZkSync) {
|
230
|
-
|
231
|
-
|
231
|
+
const weth = ZKSYNC_WETH[chain.id];
|
232
|
+
|
233
|
+
return {
|
234
|
+
nativeTokenWrapper: weth,
|
235
|
+
};
|
232
236
|
}
|
233
237
|
const [forwarder, weth] = await Promise.all([
|
234
238
|
computePublishedContractAddress({
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { renderHook } from "@testing-library/react";
|
2
|
+
import type { ReactNode } from "react";
|
3
|
+
import { optimism } from "thirdweb/chains";
|
4
|
+
import { describe, expect, it, vi } from "vitest";
|
5
|
+
import { MockStorage } from "../../../../../test/src/mocks/storage.js";
|
6
|
+
import { TEST_CLIENT } from "../../../../../test/src/test-clients.js";
|
7
|
+
import { TEST_ACCOUNT_A } from "../../../../../test/src/test-wallets.js";
|
8
|
+
import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js";
|
9
|
+
import { ethereum } from "../../../../chains/chain-definitions/ethereum.js";
|
10
|
+
import { createConnectionManager } from "../../../../wallets/manager/index.js";
|
11
|
+
import { ConnectionManagerCtx } from "../../providers/connection-manager.js";
|
12
|
+
import { useSetActiveWallet } from "./useSetActiveWallet.js";
|
13
|
+
import { useSwitchActiveWalletChain } from "./useSwitchActiveWalletChain.js";
|
14
|
+
|
15
|
+
const switchChain = vi.fn();
|
16
|
+
describe("useSwitchActiveWalletChain", () => {
|
17
|
+
// Mock the connection manager
|
18
|
+
const mockStorage = new MockStorage();
|
19
|
+
const manager = createConnectionManager(mockStorage);
|
20
|
+
|
21
|
+
// Create a wrapper component with the mocked context
|
22
|
+
const wrapper = ({ children }: { children: ReactNode }) => {
|
23
|
+
return (
|
24
|
+
<ConnectionManagerCtx.Provider value={manager}>
|
25
|
+
{children}
|
26
|
+
</ConnectionManagerCtx.Provider>
|
27
|
+
);
|
28
|
+
};
|
29
|
+
|
30
|
+
const wallet = createWalletAdapter({
|
31
|
+
adaptedAccount: TEST_ACCOUNT_A,
|
32
|
+
client: TEST_CLIENT,
|
33
|
+
chain: ethereum,
|
34
|
+
onDisconnect: () => {},
|
35
|
+
switchChain,
|
36
|
+
});
|
37
|
+
|
38
|
+
it("should switch the active wallet chain", async () => {
|
39
|
+
const { result } = renderHook(() => useSetActiveWallet(), { wrapper });
|
40
|
+
await result.current(wallet);
|
41
|
+
const { result: switchChainResult } = renderHook(
|
42
|
+
() => useSwitchActiveWalletChain(),
|
43
|
+
{
|
44
|
+
wrapper,
|
45
|
+
},
|
46
|
+
);
|
47
|
+
await switchChainResult.current(optimism);
|
48
|
+
|
49
|
+
expect(switchChain).toHaveBeenCalledWith(optimism);
|
50
|
+
});
|
51
|
+
});
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { renderHook } from "~test/react-render.js";
|
3
|
+
import { useConnectionManager } from "./connection-manager.js";
|
4
|
+
|
5
|
+
describe("useConnectionManager", () => {
|
6
|
+
it("throws an error when used outside of ThirdwebProvider", () => {
|
7
|
+
expect(() => {
|
8
|
+
renderHook(() => useConnectionManager());
|
9
|
+
}).toThrow("useConnectionManager must be used within <ThirdwebProvider>");
|
10
|
+
});
|
11
|
+
});
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
|
+
import { createWallet } from "../../../wallets/create-wallet.js";
|
4
|
+
import { hasSmartAccount } from "./isSmartWallet.js";
|
5
|
+
|
6
|
+
describe("isSmartWallet", () => {
|
7
|
+
it("should work if id is inApp and has smartAccount in wallet config", () => {
|
8
|
+
const wallet = createWallet("inApp", {
|
9
|
+
smartAccount: {
|
10
|
+
chain: ANVIL_CHAIN,
|
11
|
+
sponsorGas: true,
|
12
|
+
overrides: {
|
13
|
+
bundlerUrl: "your-bundler-url",
|
14
|
+
},
|
15
|
+
},
|
16
|
+
});
|
17
|
+
expect(hasSmartAccount(wallet)).toBe(true);
|
18
|
+
});
|
19
|
+
});
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
2
|
+
import type { AsyncStorage } from "../../../utils/storage/AsyncStorage.js";
|
3
|
+
import type { AuthArgsType } from "../../../wallets/in-app/core/authentication/types.js";
|
4
|
+
import {
|
5
|
+
LAST_AUTH_PROVIDER_STORAGE_KEY,
|
6
|
+
getLastAuthProvider,
|
7
|
+
setLastAuthProvider,
|
8
|
+
} from "./storage.js";
|
9
|
+
|
10
|
+
describe("Auth Provider Storage", () => {
|
11
|
+
let mockStorage: AsyncStorage;
|
12
|
+
|
13
|
+
beforeEach(() => {
|
14
|
+
mockStorage = {
|
15
|
+
getItem: vi.fn(),
|
16
|
+
setItem: vi.fn(),
|
17
|
+
removeItem: vi.fn(),
|
18
|
+
};
|
19
|
+
});
|
20
|
+
|
21
|
+
describe("setLastAuthProvider", () => {
|
22
|
+
it("should store the auth provider in storage", async () => {
|
23
|
+
const authProvider: AuthArgsType["strategy"] = "email";
|
24
|
+
await setLastAuthProvider(authProvider, mockStorage);
|
25
|
+
|
26
|
+
expect(mockStorage.setItem).toHaveBeenCalledWith(
|
27
|
+
LAST_AUTH_PROVIDER_STORAGE_KEY,
|
28
|
+
authProvider,
|
29
|
+
);
|
30
|
+
});
|
31
|
+
});
|
32
|
+
|
33
|
+
describe("getLastAuthProvider", () => {
|
34
|
+
it("should retrieve the last auth provider from storage", async () => {
|
35
|
+
const mockAuthProvider: AuthArgsType["strategy"] = "google";
|
36
|
+
vi.mocked(mockStorage.getItem).mockResolvedValue(mockAuthProvider);
|
37
|
+
|
38
|
+
const result = await getLastAuthProvider(mockStorage);
|
39
|
+
|
40
|
+
expect(mockStorage.getItem).toHaveBeenCalledWith(
|
41
|
+
LAST_AUTH_PROVIDER_STORAGE_KEY,
|
42
|
+
);
|
43
|
+
expect(result).toBe(mockAuthProvider);
|
44
|
+
});
|
45
|
+
|
46
|
+
it("should return null if no auth provider is stored", async () => {
|
47
|
+
vi.mocked(mockStorage.getItem).mockResolvedValue(null);
|
48
|
+
|
49
|
+
const result = await getLastAuthProvider(mockStorage);
|
50
|
+
|
51
|
+
expect(mockStorage.getItem).toHaveBeenCalledWith(
|
52
|
+
LAST_AUTH_PROVIDER_STORAGE_KEY,
|
53
|
+
);
|
54
|
+
expect(result).toBeNull();
|
55
|
+
});
|
56
|
+
});
|
57
|
+
});
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { structuralSharing } from "./structuralSharing.js";
|
3
|
+
|
4
|
+
describe("structuralSharing", () => {
|
5
|
+
it("should return the old data if it is deeply equal to the new data", () => {
|
6
|
+
const oldData = { a: 1, b: { c: 2 } };
|
7
|
+
const newData = { a: 1, b: { c: 2 } };
|
8
|
+
const result = structuralSharing(oldData, newData);
|
9
|
+
expect(result).toBe(oldData);
|
10
|
+
});
|
11
|
+
|
12
|
+
it("should return a new object with shared structure for equal parts", () => {
|
13
|
+
const oldData = { a: 1, b: { c: 2 }, d: 3 };
|
14
|
+
const newData = { a: 1, b: { c: 2 }, d: 4 };
|
15
|
+
const result = structuralSharing(oldData, newData);
|
16
|
+
expect(result).not.toBe(oldData);
|
17
|
+
expect(result).not.toBe(newData);
|
18
|
+
expect(result.a).toBe(oldData.a);
|
19
|
+
expect(result.b).toBe(oldData.b);
|
20
|
+
expect(result.d).toBe(newData.d);
|
21
|
+
});
|
22
|
+
|
23
|
+
it("should handle arrays correctly", () => {
|
24
|
+
const oldData = [1, 2, [3, 4]];
|
25
|
+
const newData = [1, 2, [3, 5]];
|
26
|
+
const result = structuralSharing(oldData, newData);
|
27
|
+
expect(result).not.toBe(oldData);
|
28
|
+
expect(result).not.toBe(newData);
|
29
|
+
expect(result[0]).toBe(oldData[0]);
|
30
|
+
expect(result[1]).toBe(oldData[1]);
|
31
|
+
expect(result[2]).not.toBe(oldData[2]);
|
32
|
+
});
|
33
|
+
|
34
|
+
it("should handle undefined oldData", () => {
|
35
|
+
const oldData = undefined;
|
36
|
+
const newData = { a: 1 };
|
37
|
+
const result = structuralSharing(oldData, newData);
|
38
|
+
expect(result).toBe(newData);
|
39
|
+
});
|
40
|
+
|
41
|
+
it("should handle NaN values correctly", () => {
|
42
|
+
const oldData = { a: Number.NaN };
|
43
|
+
const newData = { a: Number.NaN };
|
44
|
+
const result = structuralSharing(oldData, newData);
|
45
|
+
expect(result).toBe(oldData);
|
46
|
+
});
|
47
|
+
|
48
|
+
it("should handle objects with different constructors", () => {
|
49
|
+
class CustomClass {}
|
50
|
+
const oldData = new CustomClass();
|
51
|
+
const newData = { a: 1 };
|
52
|
+
const result = structuralSharing(oldData, newData);
|
53
|
+
expect(result).toBe(newData);
|
54
|
+
});
|
55
|
+
});
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { genericWalletIcon, getSocialIcon, socialIcons } from "./walletIcon.js";
|
3
|
+
|
4
|
+
const emailIcon =
|
5
|
+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjMzMzUgMi42NjY1SDIuNjY2ODNDMS45MzA0NSAyLjY2NjUgMS4zMzM1IDMuMjYzNDYgMS4zMzM1IDMuOTk5ODRWMTEuOTk5OEMxLjMzMzUgMTIuNzM2MiAxLjkzMDQ1IDEzLjMzMzIgMi42NjY4MyAxMy4zMzMySDEzLjMzMzVDMTQuMDY5OSAxMy4zMzMyIDE0LjY2NjggMTIuNzM2MiAxNC42NjY4IDExLjk5OThWMy45OTk4NEMxNC42NjY4IDMuMjYzNDYgMTQuMDY5OSAyLjY2NjUgMTMuMzMzNSAyLjY2NjVaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQuNjY2OCA0LjY2NjVMOC42ODY4MyA4LjQ2NjVDOC40ODEwMSA4LjU5NTQ1IDguMjQzMDQgOC42NjM4NCA4LjAwMDE2IDguNjYzODRDNy43NTcyOCA4LjY2Mzg0IDcuNTE5MzEgOC41OTU0NSA3LjMxMzUgOC40NjY1TDEuMzMzNSA0LjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
|
6
|
+
const phoneIcon =
|
7
|
+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfNjMyKSI+CjxwYXRoIGQ9Ik0xNC42NjY5IDExLjI4MDJWMTMuMjgwMkMxNC42Njc3IDEzLjQ2NTkgMTQuNjI5NyAxMy42NDk3IDE0LjU1NTMgMTMuODE5OEMxNC40ODA5IDEzLjk4OTkgMTQuMzcxOCAxNC4xNDI2IDE0LjIzNSAxNC4yNjgxQzE0LjA5ODIgMTQuMzkzNyAxMy45MzY3IDE0LjQ4OTIgMTMuNzYwOCAxNC41NDg3QzEzLjU4NDkgMTQuNjA4MiAxMy4zOTg1IDE0LjYzMDMgMTMuMjEzNiAxNC42MTM2QzExLjE2MjIgMTQuMzkwNyA5LjE5MTYxIDEzLjY4OTcgNy40NjAyOCAxMi41NjY5QzUuODQ5NSAxMS41NDMzIDQuNDgzODQgMTAuMTc3NyAzLjQ2MDI4IDguNTY2ODlDMi4zMzM2IDYuODI3NyAxLjYzMjQ0IDQuODQ3NTYgMS40MTM2MSAyLjc4Njg5QzEuMzk2OTUgMi42MDI1NCAxLjQxODg2IDIuNDE2NzMgMS40Nzc5NSAyLjI0MTMxQzEuNTM3MDMgMi4wNjU4OSAxLjYzMTk5IDEuOTA0NjkgMS43NTY3OSAxLjc2Nzk3QzEuODgxNTkgMS42MzEyNiAyLjAzMzQ4IDEuNTIyMDMgMi4yMDI4MSAxLjQ0NzI0QzIuMzcyMTMgMS4zNzI0NSAyLjU1NTE3IDEuMzMzNzQgMi43NDAyOCAxLjMzMzU2SDQuNzQwMjhDNS4wNjM4MiAxLjMzMDM4IDUuMzc3NDggMS40NDQ5NSA1LjYyMjc5IDEuNjU1OTJDNS44NjgxIDEuODY2ODkgNi4wMjgzMyAyLjE1OTg2IDYuMDczNjEgMi40ODAyM0M2LjE1ODAzIDMuMTIwMjcgNi4zMTQ1OCAzLjc0ODcxIDYuNTQwMjggNC4zNTM1NkM2LjYyOTk4IDQuNTkyMTggNi42NDkzOSA0Ljg1MTUgNi41OTYyMiA1LjEwMDgxQzYuNTQzMDUgNS4zNTAxMiA2LjQxOTUyIDUuNTc4OTcgNi4yNDAyOCA1Ljc2MDIzTDUuMzkzNjEgNi42MDY4OUM2LjM0MjY1IDguMjc1OTIgNy43MjQ1OCA5LjY1Nzg2IDkuMzkzNjEgMTAuNjA2OUwxMC4yNDAzIDkuNzYwMjNDMTAuNDIxNSA5LjU4MDk5IDEwLjY1MDQgOS40NTc0NiAxMC44OTk3IDkuNDA0MjlDMTEuMTQ5IDkuMzUxMTIgMTEuNDA4MyA5LjM3MDUzIDExLjY0NjkgOS40NjAyM0MxMi4yNTE4IDkuNjg1OTMgMTIuODgwMiA5Ljg0MjQ4IDEzLjUyMDMgOS45MjY4OUMxMy44NDQxIDkuOTcyNTggMTQuMTM5OSAxMC4xMzU3IDE0LjM1MTMgMTAuMzg1MkMxNC41NjI3IDEwLjYzNDggMTQuNjc1MSAxMC45NTMzIDE0LjY2NjkgMTEuMjgwMloiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzYzMiI+CjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K";
|
8
|
+
const guestIcon =
|
9
|
+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5IDIxVjE5QzE5IDE3LjkzOTEgMTguNTc4NiAxNi45MjE3IDE3LjgyODQgMTYuMTcxNkMxNy4wNzgzIDE1LjQyMTQgMTYuMDYwOSAxNSAxNSAxNUg5QzcuOTM5MTMgMTUgNi45MjE3MiAxNS40MjE0IDYuMTcxNTcgMTYuMTcxNkM1LjQyMTQzIDE2LjkyMTcgNSAxNy45MzkxIDUgMTlWMjEiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEyIDExQzE0LjIwOTEgMTEgMTYgOS4yMDkxNCAxNiA3QzE2IDQuNzkwODYgMTQuMjA5MSAzIDEyIDNDOS43OTA4NiAzIDggNC43OTA4NiA4IDdDOCA5LjIwOTE0IDkuNzkwODYgMTEgMTIgMTFaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
|
10
|
+
const passkeyIcon =
|
11
|
+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfMzIpIj4KPHBhdGggZD0iTTcuOTk5NTkgNi42NjY1QzcuNjQ1OTYgNi42NjY1IDcuMzA2ODMgNi44MDY5OCA3LjA1Njc4IDcuMDU3MDNDNi44MDY3MyA3LjMwNzA4IDYuNjY2MjUgNy42NDYyMiA2LjY2NjI1IDcuOTk5ODRDNi42NjYyNSA4LjY3OTg0IDYuNTk5NTkgOS42NzMxNyA2LjQ5MjkyIDEwLjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOS4zMzI5MyA4Ljc0NjU4QzkuMzMyOTMgMTAuMzMzMiA5LjMzMjkzIDEyLjk5OTkgOC42NjYyNiAxNC42NjY2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjUyNzMgMTQuMDEzM0MxMS42MDczIDEzLjYxMzMgMTEuODE0IDEyLjQ4IDExLjg2MDcgMTIiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMS4zMzM5OCA4LjAwMDE2QzEuMzMzOTggNi42MDA5NSAxLjc3NDIzIDUuMjM3MiAyLjU5MjM3IDQuMTAyMDlDMy40MTA1MSAyLjk2Njk5IDQuNTY1MDUgMi4xMTgwOCA1Ljg5MjQ3IDEuNjc1NjFDNy4yMTk4OCAxLjIzMzE0IDguNjUyODYgMS4yMTk1NCA5Ljk4ODQ0IDEuNjM2NzRDMTEuMzI0IDIuMDUzOTQgMTIuNDk0NSAyLjg4MDc5IDEzLjMzNCA0LjAwMDE2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEuMzMzOTggMTAuNjY2NUgxLjMzOTE0IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE0LjUzMjcgMTAuNjY2NUMxNC42NjYgOS4zMzMxNyAxNC42MiA3LjA5NzE3IDE0LjUzMjcgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMuMzMzOTggMTIuOTk5OEMzLjY2NzMyIDExLjk5OTggNC4wMDA2NSA5Ljk5OTg0IDQuMDAwNjUgNy45OTk4NEMzLjk5OTk4IDcuNTQ1NzUgNC4wNzY2MyA3LjA5NDg2IDQuMjI3MzIgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTUuNzY3MDkgMTQuNjY2OEM1LjkwNzA5IDE0LjIyNjggNi4wNjcwOSAxMy43ODY4IDYuMTQ3MDkgMTMuMzMzNSIgc3Ryb2tlPSIjMzM4NUZGIiBzdHJva2Utd2lkdGg9IjEuMjU0OSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02IDQuNTMzNDZDNi42MDgyNyA0LjE4MjI4IDcuMjk4MjggMy45OTc0NSA4LjAwMDY0IDMuOTk3NTZDOC43MDMwMSAzLjk5NzY3IDkuMzkyOTYgNC4xODI3MiAxMC4wMDExIDQuNTM0MUMxMC42MDkzIDQuODg1NDggMTEuMTE0MiA1LjM5MDc5IDExLjQ2NTEgNS45OTkyM0MxMS44MTYgNi42MDc2NiAxMi4wMDA1IDcuMjk3NzYgMTIgOC4wMDAxMlY5LjMzMzQ2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzMyIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=";
|
12
|
+
|
13
|
+
describe("walletIcon", () => {
|
14
|
+
it("should return google icon", () => {
|
15
|
+
expect(getSocialIcon("google")).toBe(socialIcons.google);
|
16
|
+
});
|
17
|
+
|
18
|
+
it("should return coinbase icon", () => {
|
19
|
+
expect(getSocialIcon("coinbase")).toBe(socialIcons.coinbase);
|
20
|
+
});
|
21
|
+
|
22
|
+
it("should return apple icon", () => {
|
23
|
+
expect(getSocialIcon("apple")).toBe(socialIcons.apple);
|
24
|
+
});
|
25
|
+
|
26
|
+
it("should return facebook icon", () => {
|
27
|
+
expect(getSocialIcon("facebook")).toBe(socialIcons.facebook);
|
28
|
+
});
|
29
|
+
|
30
|
+
it("should return phone icon", () => {
|
31
|
+
expect(getSocialIcon("phone")).toBe(phoneIcon);
|
32
|
+
});
|
33
|
+
|
34
|
+
it("should return email icon", () => {
|
35
|
+
expect(getSocialIcon("email")).toBe(emailIcon);
|
36
|
+
});
|
37
|
+
|
38
|
+
it("should return passkey icon", () => {
|
39
|
+
expect(getSocialIcon("passkey")).toBe(passkeyIcon);
|
40
|
+
});
|
41
|
+
|
42
|
+
it("should return discord icon", () => {
|
43
|
+
expect(getSocialIcon("discord")).toBe(socialIcons.discord);
|
44
|
+
});
|
45
|
+
|
46
|
+
it("should return line icon", () => {
|
47
|
+
expect(getSocialIcon("line")).toBe(socialIcons.line);
|
48
|
+
});
|
49
|
+
|
50
|
+
it("should return x icon", () => {
|
51
|
+
expect(getSocialIcon("x")).toBe(socialIcons.x);
|
52
|
+
});
|
53
|
+
|
54
|
+
it("should return farcaster icon", () => {
|
55
|
+
expect(getSocialIcon("farcaster")).toBe(socialIcons.farcaster);
|
56
|
+
});
|
57
|
+
|
58
|
+
it("should return telegram icon", () => {
|
59
|
+
expect(getSocialIcon("telegram")).toBe(socialIcons.telegram);
|
60
|
+
});
|
61
|
+
|
62
|
+
it("should return twitch icon", () => {
|
63
|
+
expect(getSocialIcon("twitch")).toBe(socialIcons.twitch);
|
64
|
+
});
|
65
|
+
|
66
|
+
it("should return github icon", () => {
|
67
|
+
expect(getSocialIcon("github")).toBe(socialIcons.github);
|
68
|
+
});
|
69
|
+
|
70
|
+
it("should return steam icon", () => {
|
71
|
+
expect(getSocialIcon("steam")).toBe(socialIcons.steam);
|
72
|
+
});
|
73
|
+
|
74
|
+
it("should return guest icon", () => {
|
75
|
+
expect(getSocialIcon("guest")).toBe(guestIcon);
|
76
|
+
});
|
77
|
+
|
78
|
+
it("should return generic wallet icon for unknown provider", () => {
|
79
|
+
expect(getSocialIcon("unknown")).toBe(genericWalletIcon);
|
80
|
+
});
|
81
|
+
});
|