Skip to content

Commit

Permalink
Merge pull request anza-xyz#375 from biw/refactor-wallet-name
Browse files Browse the repository at this point in the history
Better TypeScript Hints for WalletName
  • Loading branch information
jordaaash authored Mar 30, 2022
2 parents e152872 + f3989b3 commit 9af5308
Show file tree
Hide file tree
Showing 20 changed files with 36 additions and 36 deletions.
10 changes: 5 additions & 5 deletions packages/core/base/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ export interface SendTransactionOptions extends SendOptions {
signers?: Signer[];
}

// WalletName is a nominal type that wallet adapters should use, e.g. `'MyCryptoWallet' as WalletName`
// WalletName is a nominal type that wallet adapters should use, e.g. `'MyCryptoWallet' as WalletName<'MyCryptoWallet'>`
// https://medium.com/@KevinBGreene/surviving-the-typescript-ecosystem-branding-and-type-tagging-6cf6e516523d
export type WalletName = string & { __brand__: 'WalletName' };
export type WalletName<T extends string = string> = T & { __brand__: 'WalletName' };

export interface WalletAdapterProps {
name: WalletName;
export interface WalletAdapterProps<Name extends string = string> {
name: WalletName<Name>;
url: string;
icon: string;
readyState: WalletReadyState;
Expand All @@ -37,7 +37,7 @@ export interface WalletAdapterProps {
): Promise<TransactionSignature>;
}

export type WalletAdapter = WalletAdapterProps & EventEmitter<WalletAdapterEvents>;
export type WalletAdapter<Name extends string = string> = WalletAdapterProps<Name> & EventEmitter<WalletAdapterEvents>;

/**
* A wallet's readiness describes a series of states that the wallet can be in,
Expand Down
24 changes: 12 additions & 12 deletions packages/core/react/src/__tests__/WalletProvider-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,19 +89,19 @@ describe('WalletProvider', () => {
sendTransaction = jest.fn();
}
class FooWalletAdapter extends MockWalletAdapter {
name = 'FooWallet' as WalletName;
name = 'FooWallet' as WalletName<'FooWallet'>;
url = 'https://foowallet.com';
icon = 'foo.png';
publicKey = new PublicKey('Foo11111111111111111111111111111111111111111');
}
class BarWalletAdapter extends MockWalletAdapter {
name = 'BarWallet' as WalletName;
name = 'BarWallet' as WalletName<'BarWallet'>;
url = 'https://barwallet.com';
icon = 'bar.png';
publicKey = new PublicKey('Bar11111111111111111111111111111111111111111');
}
class BazWalletAdapter extends MockWalletAdapter {
name = 'BazWallet' as WalletName;
name = 'BazWallet' as WalletName<'BazWallet'>;
url = 'https://bazwallet.com';
icon = 'baz.png';
publicKey = new PublicKey('Baz11111111111111111111111111111111111111111');
Expand Down Expand Up @@ -130,7 +130,7 @@ describe('WalletProvider', () => {
fooWalletAdapter.readyStateValue = WalletReadyState.NotDetected;
renderTest({});
await act(async () => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
expect(ref.current?.getWalletContextState().wallet?.readyState).toBe(WalletReadyState.NotDetected);
Expand Down Expand Up @@ -255,7 +255,7 @@ describe('WalletProvider', () => {
handleError = jest.fn();
renderTest({ onError: handleError });
await act(async () => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
});
Expand All @@ -281,7 +281,7 @@ describe('WalletProvider', () => {
fooWalletAdapter.readyStateValue = WalletReadyState.NotDetected;
renderTest({});
act(() => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
});
expect(ref.current?.getWalletContextState().wallet?.readyState).toBe(WalletReadyState.NotDetected);
act(() => {
Expand Down Expand Up @@ -310,7 +310,7 @@ describe('WalletProvider', () => {
beforeEach(async () => {
renderTest({});
await act(async () => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
fooWalletAdapter.connectionPromise = new Promise<void>((resolve) => {
Expand Down Expand Up @@ -351,7 +351,7 @@ describe('WalletProvider', () => {
window.open = jest.fn();
renderTest({});
await act(async () => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
act(() => {
Expand Down Expand Up @@ -395,7 +395,7 @@ describe('WalletProvider', () => {
beforeEach(async () => {
renderTest({});
await act(async () => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
});
Expand All @@ -417,14 +417,14 @@ describe('WalletProvider', () => {
});
renderTest({});
await act(async () => {
ref.current?.getWalletContextState().select('FooWallet' as WalletName);
ref.current?.getWalletContextState().select('FooWallet' as WalletName<'FooWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
});
describe('and you select a different wallet', () => {
beforeEach(async () => {
await act(async () => {
ref.current?.getWalletContextState().select('BarWallet' as WalletName);
ref.current?.getWalletContextState().select('BarWallet' as WalletName<'BarWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
});
Expand All @@ -442,7 +442,7 @@ describe('WalletProvider', () => {
describe('then change your mind before the first one has disconnected', () => {
beforeEach(async () => {
await act(async () => {
ref.current?.getWalletContextState().select('BazWallet' as WalletName);
ref.current?.getWalletContextState().select('BazWallet' as WalletName<'BazWallet'>);
await Promise.resolve(); // Flush all promises in effects after calling `select()`.
});
act(() => {
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/bitkeep/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ declare const window: BitKeepWindow;

export interface BitKeepWalletAdapterConfig {}

export const BitKeepWalletName = 'BitKeep' as WalletName;
export const BitKeepWalletName = 'BitKeep' as WalletName<'BitKeep'>;

export class BitKeepWalletAdapter extends BaseSignerWalletAdapter {
name = BitKeepWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/bitpie/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ declare const window: BitpieWalletWindow;

export interface BitpieWalletAdapterConfig {}

export const BitpieWalletName = 'Bitpie' as WalletName;
export const BitpieWalletName = 'Bitpie' as WalletName<'Bitpie'>;

export class BitpieWalletAdapter extends BaseSignerWalletAdapter {
name = BitpieWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/blocto/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export interface BloctoWalletAdapterConfig {
network?: WalletAdapterNetwork;
}

export const BloctoWalletName = 'Blocto' as WalletName;
export const BloctoWalletName = 'Blocto' as WalletName<'Blocto'>;

export class BloctoWalletAdapter extends BaseWalletAdapter {
name = BloctoWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/clover/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ declare const window: CloverWalletWindow;

export interface CloverWalletAdapterConfig {}

export const CloverWalletName = 'Clover' as WalletName;
export const CloverWalletName = 'Clover' as WalletName<'Clover'>;

export class CloverWalletAdapter extends BaseMessageSignerWalletAdapter {
name = CloverWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/coin98/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ declare const window: Coin98Window;

export interface Coin98WalletAdapterConfig {}

export const Coin98WalletName = 'Coin98' as WalletName;
export const Coin98WalletName = 'Coin98' as WalletName<'Coin98'>;

export class Coin98WalletAdapter extends BaseMessageSignerWalletAdapter {
name = Coin98WalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/coinhub/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ declare const window: CoinhubWalletWindow;

export interface CoinhubWalletAdapterConfig {}

export const CoinhubWalletName = 'Coinhub' as WalletName;
export const CoinhubWalletName = 'Coinhub' as WalletName<'Coinhub'>;

export class CoinhubWalletAdapter extends BaseSignerWalletAdapter {
name = CoinhubWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/glow/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ declare const window: GlowWindow;

export interface GlowWalletAdapterConfig {}

export const GlowWalletName = 'Glow' as WalletName;
export const GlowWalletName = 'Glow' as WalletName<'Glow'>;

export class GlowWalletAdapter extends BaseMessageSignerWalletAdapter {
name = GlowWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/huobi/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ declare const window: HuobiWalletWindow;

export interface HuobiWalletAdapterConfig {}

export const HuobiWalletName = 'HuobiWallet' as WalletName;
export const HuobiWalletName = 'HuobiWallet' as WalletName<'HuobiWallet'>;

export class HuobiWalletAdapter extends BaseMessageSignerWalletAdapter {
name = HuobiWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/ledger/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export interface LedgerWalletAdapterConfig {
derivationPath?: Buffer;
}

export const LedgerWalletName = 'Ledger' as WalletName;
export const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;

export class LedgerWalletAdapter extends BaseSignerWalletAdapter {
name = LedgerWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/mathwallet/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ declare const window: MathWalletWindow;

export interface MathWalletAdapterConfig {}

export const MathWalletName = 'MathWallet' as WalletName;
export const MathWalletName = 'MathWallet' as WalletName<'MathWallet'>;

export class MathWalletAdapter extends BaseSignerWalletAdapter {
name = MathWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/phantom/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ declare const window: PhantomWindow;

export interface PhantomWalletAdapterConfig {}

export const PhantomWalletName = 'Phantom' as WalletName;
export const PhantomWalletName = 'Phantom' as WalletName<'Phantom'>;

export class PhantomWalletAdapter extends BaseMessageSignerWalletAdapter {
name = PhantomWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/safepal/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ declare const window: SafePalWalletWindow;

export interface SafePalWalletAdapterConfig {}

export const SafePalWalletName = 'SafePal' as WalletName;
export const SafePalWalletName = 'SafePal' as WalletName<'SafePal'>;

export class SafePalWalletAdapter extends BaseSignerWalletAdapter {
name = SafePalWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/slope/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ declare const window: SlopeWindow;

export interface SlopeWalletAdapterConfig {}

export const SlopeWalletName = 'Slope' as WalletName;
export const SlopeWalletName = 'Slope' as WalletName<'Slope'>;

export class SlopeWalletAdapter extends BaseMessageSignerWalletAdapter {
name = SlopeWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/solflare/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export interface SolflareWalletAdapterConfig {
network?: WalletAdapterNetwork;
}

export const SolflareWalletName = 'Solflare' as WalletName;
export const SolflareWalletName = 'Solflare' as WalletName<'Solflare'>;

export class SolflareWalletAdapter extends BaseMessageSignerWalletAdapter {
name = SolflareWalletName;
Expand Down
4 changes: 2 additions & 2 deletions packages/wallets/sollet/src/adapter.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { WalletName } from '@solana/wallet-adapter-base';
import { BaseSolletWalletAdapter, SolletWalletAdapterConfig } from './base';

export const SolletWalletName = 'Sollet' as WalletName;
export const SolletWalletName = 'Sollet' as WalletName<'Sollet'>;

export class SolletWalletAdapter extends BaseSolletWalletAdapter {
name = SolletWalletName;
Expand All @@ -14,7 +14,7 @@ export class SolletWalletAdapter extends BaseSolletWalletAdapter {
}
}

export const SolletExtensionWalletName = 'Sollet (Extension)' as WalletName;
export const SolletExtensionWalletName = 'Sollet (Extension)' as WalletName<'Sollet (Extension)'>;

export class SolletExtensionWalletAdapter extends BaseSolletWalletAdapter {
name = SolletExtensionWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/solong/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ declare const window: SolongWindow;

export interface SolongWalletAdapterConfig {}

export const SolongWalletName = 'Solong' as WalletName;
export const SolongWalletName = 'Solong' as WalletName<'Solong'>;

export class SolongWalletAdapter extends BaseSignerWalletAdapter {
name = SolongWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/tokenpocket/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ declare const window: TokenPocketWindow;

export interface TokenPocketWalletAdapterConfig {}

export const TokenPocketWalletName = 'TokenPocket' as WalletName;
export const TokenPocketWalletName = 'TokenPocket' as WalletName<'TokenPocket'>;

export class TokenPocketWalletAdapter extends BaseMessageSignerWalletAdapter {
name = TokenPocketWalletName;
Expand Down
2 changes: 1 addition & 1 deletion packages/wallets/torus/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ interface TorusWindow extends Window {

declare const window: TorusWindow;

export const TorusWalletName = 'Torus' as WalletName;
export const TorusWalletName = 'Torus' as WalletName<'Torus'>;

export class TorusWalletAdapter extends BaseMessageSignerWalletAdapter {
name = TorusWalletName;
Expand Down

0 comments on commit 9af5308

Please sign in to comment.