fix: no-undefined-or in object field types (#6640)

This commit is contained in:
eddie 2023-05-24 11:31:40 -07:00 committed by GitHub
parent c07c401189
commit d180aef306
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
72 changed files with 162 additions and 133 deletions

@ -14,6 +14,7 @@ module.exports = {
rules: { rules: {
'multiline-comment-style': ['error', 'separate-lines'], 'multiline-comment-style': ['error', 'separate-lines'],
'rulesdir/enforce-retry-on-import': 'error', 'rulesdir/enforce-retry-on-import': 'error',
'rulesdir/no-undefined-or': 'error',
}, },
}, },
{ {

@ -0,0 +1,44 @@
/* eslint-env node */
module.exports = {
meta: {
type: 'suggestion',
docs: {
description: 'Enforce the use of optional object fields',
category: 'Best Practices',
recommended: true,
},
fixable: 'code',
schema: [],
},
create(context) {
return {
'TSPropertySignature > TSTypeAnnotation > TSUnionType': (node) => {
const types = node.types
const hasUndefined = types.some((typeNode) => typeNode.type === 'TSUndefinedKeyword')
if (hasUndefined) {
const typesWithoutUndefined = types.filter((typeNode) => typeNode.type !== 'TSUndefinedKeyword')
// If there is more than one type left after removing 'undefined',
// join them together with ' | ' to create a new union type.
const newTypeSource =
typesWithoutUndefined.length > 1
? typesWithoutUndefined.map((typeNode) => context.getSourceCode().getText(typeNode)).join(' | ')
: context.getSourceCode().getText(typesWithoutUndefined[0])
context.report({
node,
message: `Prefer optional properties to "Type | undefined".`,
fix(fixer) {
const propertySignature = node.parent.parent
const isAlreadyOptional = propertySignature.optional
const newTypeAnnotation = isAlreadyOptional ? `: ${newTypeSource}` : `?: ${newTypeSource}`
return fixer.replaceText(node.parent, newTypeAnnotation)
},
})
}
},
}
},
}

@ -49,7 +49,7 @@ const DEFAULT_CHAINS = [
SupportedChainId.CELO, SupportedChainId.CELO,
] ]
type UseMultiChainPositionsData = { positions: PositionInfo[] | undefined; loading: boolean } type UseMultiChainPositionsData = { positions?: PositionInfo[]; loading: boolean }
/** /**
* Returns all positions for a given account on multiple chains. * Returns all positions for a given account on multiple chains.

@ -32,13 +32,7 @@ const LabelText = styled.div<{ color: string }>`
justify-content: flex-end; justify-content: flex-end;
` `
export default function RangeBadge({ export default function RangeBadge({ removed, inRange }: { removed?: boolean; inRange?: boolean }) {
removed,
inRange,
}: {
removed: boolean | undefined
inRange: boolean | undefined
}) {
const theme = useTheme() const theme = useTheme()
return ( return (
<BadgeWrapper> <BadgeWrapper>

@ -19,7 +19,7 @@ interface SparklineChartProps {
width: number width: number
height: number height: number
tokenData: TopToken tokenData: TopToken
pricePercentChange: number | undefined | null pricePercentChange?: number | null
sparklineMap: SparklineMap sparklineMap: SparklineMap
} }

@ -14,7 +14,7 @@ const ContentWrapper = styled(Column)`
font-size: 12px; font-size: 12px;
` `
interface ConnectedAccountBlockedProps { interface ConnectedAccountBlockedProps {
account: string | null | undefined account?: string | null
isOpen: boolean isOpen: boolean
} }

@ -56,8 +56,8 @@ export default function FeeSelector({
disabled?: boolean disabled?: boolean
feeAmount?: FeeAmount feeAmount?: FeeAmount
handleFeePoolSelect: (feeAmount: FeeAmount) => void handleFeePoolSelect: (feeAmount: FeeAmount) => void
currencyA?: Currency | undefined currencyA?: Currency
currencyB?: Currency | undefined currencyB?: Currency
}) { }) {
const { chainId } = useWeb3React() const { chainId } = useWeb3React()

@ -79,8 +79,8 @@ interface StepCounterProps {
width?: string width?: string
locked?: boolean // disable input locked?: boolean // disable input
title: ReactNode title: ReactNode
tokenA: string | undefined tokenA?: string
tokenB: string | undefined tokenB?: string
} }
const StepCounter = ({ const StepCounter = ({

@ -4,7 +4,7 @@ import styled from 'styled-components/macro'
import { ChartEntry } from './types' import { ChartEntry } from './types'
const Path = styled.path<{ fill: string | undefined }>` const Path = styled.path<{ fill?: string }>`
opacity: 0.5; opacity: 0.5;
stroke: ${({ fill, theme }) => fill ?? theme.accentAction}; stroke: ${({ fill, theme }) => fill ?? theme.accentAction};
fill: ${({ fill, theme }) => fill ?? theme.accentAction}; fill: ${({ fill, theme }) => fill ?? theme.accentAction};
@ -23,7 +23,7 @@ export const Area = ({
yScale: ScaleLinear<number, number> yScale: ScaleLinear<number, number>
xValue: (d: ChartEntry) => number xValue: (d: ChartEntry) => number
yValue: (d: ChartEntry) => number yValue: (d: ChartEntry) => number
fill?: string | undefined fill?: string
}) => }) =>
useMemo( useMemo(
() => ( () => (

@ -10,9 +10,9 @@ export function useDensityChartData({
currencyB, currencyB,
feeAmount, feeAmount,
}: { }: {
currencyA: Currency | undefined currencyA?: Currency
currencyB: Currency | undefined currencyB?: Currency
feeAmount: FeeAmount | undefined feeAmount?: FeeAmount
}) { }) {
const { isLoading, error, data } = usePoolActiveLiquidity(currencyA, currencyB, feeAmount) const { isLoading, error, data } = usePoolActiveLiquidity(currencyA, currencyB, feeAmount)

@ -76,11 +76,11 @@ export default function LiquidityChartRangeInput({
onRightRangeInput, onRightRangeInput,
interactive, interactive,
}: { }: {
currencyA: Currency | undefined currencyA?: Currency
currencyB: Currency | undefined currencyB?: Currency
feeAmount?: FeeAmount feeAmount?: FeeAmount
ticksAtLimit: { [bound in Bound]?: boolean | undefined } ticksAtLimit: { [bound in Bound]?: boolean | undefined }
price: number | undefined price?: number
priceLower?: Price<Token, Token> priceLower?: Price<Token, Token>
priceUpper?: Price<Token, Token> priceUpper?: Price<Token, Token>
onLeftRangeInput: (typedValue: string) => void onLeftRangeInput: (typedValue: string) => void

@ -54,7 +54,7 @@ export interface LiquidityChartRangeInputProps {
interactive?: boolean interactive?: boolean
brushLabels: (d: 'w' | 'e', x: number) => string brushLabels: (d: 'w' | 'e', x: number) => string
brushDomain: [number, number] | undefined brushDomain?: [number, number]
onBrushDomainChange: (domain: [number, number], mode: string | undefined) => void onBrushDomainChange: (domain: [number, number], mode: string | undefined) => void
zoomLevels: ZoomLevels zoomLevels: ZoomLevels

@ -39,15 +39,7 @@ export function LoadingView({ children, onDismiss }: { children: any; onDismiss:
) )
} }
export function SubmittedView({ export function SubmittedView({ children, onDismiss, hash }: { children: any; onDismiss: () => void; hash?: string }) {
children,
onDismiss,
hash,
}: {
children: any
onDismiss: () => void
hash: string | undefined
}) {
const theme = useTheme() const theme = useTheme()
const { chainId } = useWeb3React() const { chainId } = useWeb3React()

@ -33,7 +33,7 @@ interface SearchBarDropdownSectionProps {
suggestions: (GenieCollection | SearchToken)[] suggestions: (GenieCollection | SearchToken)[]
header: JSX.Element header: JSX.Element
headerIcon?: JSX.Element headerIcon?: JSX.Element
hoveredIndex: number | undefined hoveredIndex?: number
startingIndex: number startingIndex: number
setHoveredIndex: (index: number | undefined) => void setHoveredIndex: (index: number | undefined) => void
isLoading?: boolean isLoading?: boolean

@ -21,7 +21,7 @@ const Tabs = styled.div`
justify-content: space-evenly; justify-content: space-evenly;
` `
const StyledHistoryLink = styled(HistoryLink)<{ flex: string | undefined }>` const StyledHistoryLink = styled(HistoryLink)<{ flex?: string }>`
flex: ${({ flex }) => flex ?? 'none'}; flex: ${({ flex }) => flex ?? 'none'};
${({ theme }) => theme.deprecated_mediaWidth.deprecated_upToMedium` ${({ theme }) => theme.deprecated_mediaWidth.deprecated_upToMedium`
@ -64,9 +64,9 @@ export function AddRemoveTabs({
adding: boolean adding: boolean
creating: boolean creating: boolean
autoSlippage: Percent autoSlippage: Percent
positionID?: string | undefined positionID?: string
showBackLink?: boolean showBackLink?: boolean
children?: ReactNode | undefined children?: ReactNode
}) { }) {
const theme = useTheme() const theme = useTheme()
// reset states on back // reset states on back

@ -53,7 +53,7 @@ export const Input = React.memo(function InnerInput({
error?: boolean error?: boolean
fontSize?: string fontSize?: string
align?: 'right' | 'left' align?: 'right' | 'left'
prependSymbol?: string | undefined prependSymbol?: string
} & Omit<React.HTMLProps<HTMLInputElement>, 'ref' | 'onChange' | 'as'>) { } & Omit<React.HTMLProps<HTMLInputElement>, 'ref' | 'onChange' | 'as'>) {
const enforcer = (nextUserInput: string) => { const enforcer = (nextUserInput: string) => {
if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) {

@ -27,7 +27,7 @@ export const PositionPreview = ({
position: Position position: Position
title?: ReactNode title?: ReactNode
inRange: boolean inRange: boolean
baseCurrencyDefault?: Currency | undefined baseCurrencyDefault?: Currency
ticksAtLimit: { [bound: string]: boolean | undefined } ticksAtLimit: { [bound: string]: boolean | undefined }
}) => { }) => {
const theme = useTheme() const theme = useTheme()

@ -68,9 +68,9 @@ const ResourcesContainer = styled.div`
type AboutSectionProps = { type AboutSectionProps = {
address: string address: string
chainId: SupportedChainId chainId: SupportedChainId
description?: string | null | undefined description?: string | null
homepageUrl?: string | null | undefined homepageUrl?: string | null
twitterName?: string | null | undefined twitterName?: string | null
} }
export function AboutSection({ address, chainId, description, homepageUrl, twitterName }: AboutSectionProps) { export function AboutSection({ address, chainId, description, homepageUrl, twitterName }: AboutSectionProps) {

@ -64,7 +64,7 @@ export function formatDelta(delta: number | null | undefined) {
return formattedDelta return formattedDelta
} }
export const DeltaText = styled.span<{ delta: number | undefined }>` export const DeltaText = styled.span<{ delta?: number }>`
color: ${({ theme, delta }) => color: ${({ theme, delta }) =>
delta !== undefined ? (Math.sign(delta) < 0 ? theme.accentFailure : theme.accentSuccess) : theme.textPrimary}; delta !== undefined ? (Math.sign(delta) < 0 ? theme.accentFailure : theme.accentSuccess) : theme.textPrimary};
` `
@ -124,7 +124,7 @@ const timeOptionsHeight = 44
interface PriceChartProps { interface PriceChartProps {
width: number width: number
height: number height: number
prices: PricePoint[] | undefined | null prices?: PricePoint[] | null
timePeriod: TimePeriod timePeriod: TimePeriod
} }

@ -87,11 +87,11 @@ function useRelevantToken(
} }
type TokenDetailsProps = { type TokenDetailsProps = {
urlAddress: string | undefined urlAddress?: string
inputTokenAddress?: string inputTokenAddress?: string
chain: Chain chain: Chain
tokenQuery: TokenQuery tokenQuery: TokenQuery
tokenPriceQuery: TokenPriceQuery | undefined tokenPriceQuery?: TokenPriceQuery
onChangeTimePeriod: OnChangeTimePeriod onChangeTimePeriod: OnChangeTimePeriod
} }
export default function TokenDetails({ export default function TokenDetails({

@ -94,9 +94,9 @@ function TransactionSubmittedContent({
inline, inline,
}: { }: {
onDismiss: () => void onDismiss: () => void
hash: string | undefined hash?: string
chainId: number chainId: number
currencyToAdd?: Currency | undefined currencyToAdd?: Currency
inline?: boolean // not in modal inline?: boolean // not in modal
}) { }) {
const theme = useTheme() const theme = useTheme()
@ -229,9 +229,9 @@ function L2Content({
inline, inline,
}: { }: {
onDismiss: () => void onDismiss: () => void
hash: string | undefined hash?: string
chainId: SupportedL2ChainId chainId: SupportedL2ChainId
currencyToAdd?: Currency | undefined currencyToAdd?: Currency
pendingText: ReactNode pendingText: ReactNode
inline?: boolean // not in modal inline?: boolean // not in modal
}) { }) {
@ -324,11 +324,11 @@ function L2Content({
interface ConfirmationModalProps { interface ConfirmationModalProps {
isOpen: boolean isOpen: boolean
onDismiss: () => void onDismiss: () => void
hash: string | undefined hash?: string
content: () => ReactNode content: () => ReactNode
attemptingTxn: boolean attemptingTxn: boolean
pendingText: ReactNode pendingText: ReactNode
currencyToAdd?: Currency | undefined currencyToAdd?: Currency
} }
export default function TransactionConfirmationModal({ export default function TransactionConfirmationModal({

@ -30,15 +30,15 @@ export default function ConfirmSwapModal({
fiatValueOutput, fiatValueOutput,
}: { }: {
trade: InterfaceTrade trade: InterfaceTrade
originalTrade: InterfaceTrade | undefined originalTrade?: InterfaceTrade
attemptingTxn: boolean attemptingTxn: boolean
txHash: string | undefined txHash?: string
allowedSlippage: Percent allowedSlippage: Percent
onAcceptChanges: () => void onAcceptChanges: () => void
onConfirm: () => void onConfirm: () => void
swapErrorMessage: ReactNode | undefined swapErrorMessage?: ReactNode
onDismiss: () => void onDismiss: () => void
swapQuoteReceivedDate: Date | undefined swapQuoteReceivedDate?: Date
fiatValueInput: { data?: number; isLoading: boolean } fiatValueInput: { data?: number; isLoading: boolean }
fiatValueOutput: { data?: number; isLoading: boolean } fiatValueOutput: { data?: number; isLoading: boolean }
}) { }) {

@ -92,7 +92,7 @@ const Wrapper = styled(Column)`
` `
interface SwapDetailsInlineProps { interface SwapDetailsInlineProps {
trade: InterfaceTrade | undefined trade?: InterfaceTrade
syncing: boolean syncing: boolean
loading: boolean loading: boolean
allowedSlippage: Percent allowedSlippage: Percent

@ -58,12 +58,12 @@ export default function SwapModalFooter({
onAcceptChanges, onAcceptChanges,
}: { }: {
trade: InterfaceTrade trade: InterfaceTrade
hash: string | undefined hash?: string
allowedSlippage: Percent allowedSlippage: Percent
onConfirm: () => void onConfirm: () => void
swapErrorMessage: ReactNode | undefined swapErrorMessage?: ReactNode
disabledConfirm: boolean disabledConfirm: boolean
swapQuoteReceivedDate: Date | undefined swapQuoteReceivedDate?: Date
fiatValueInput: { data?: number; isLoading: boolean } fiatValueInput: { data?: number; isLoading: boolean }
fiatValueOutput: { data?: number; isLoading: boolean } fiatValueOutput: { data?: number; isLoading: boolean }
showAcceptChanges: boolean showAcceptChanges: boolean

@ -33,7 +33,7 @@ interface AmountProps {
field: Field field: Field
tooltipText?: ReactNode tooltipText?: ReactNode
label: ReactNode label: ReactNode
amount: CurrencyAmount<Currency> | undefined amount?: CurrencyAmount<Currency>
usdAmount?: number usdAmount?: number
} }

@ -22,7 +22,7 @@ export const PageWrapper = styled.div`
` `
// Mostly copied from `AppBody` but it was getting too hard to maintain backwards compatibility. // Mostly copied from `AppBody` but it was getting too hard to maintain backwards compatibility.
export const SwapWrapper = styled.main<{ chainId: number | undefined }>` export const SwapWrapper = styled.main<{ chainId?: number }>`
position: relative; position: relative;
background: ${({ theme }) => theme.backgroundSurface}; background: ${({ theme }) => theme.backgroundSurface};
border-radius: 16px; border-radius: 16px;

@ -37,7 +37,7 @@ const ConfirmedIcon = styled(ColumnCenter)`
interface ExecuteModalProps { interface ExecuteModalProps {
isOpen: boolean isOpen: boolean
onDismiss: () => void onDismiss: () => void
proposalId: string | undefined // id for the proposal to execute proposalId?: string // id for the proposal to execute
} }
export default function ExecuteModal({ isOpen, onDismiss, proposalId }: ExecuteModalProps) { export default function ExecuteModal({ isOpen, onDismiss, proposalId }: ExecuteModalProps) {

@ -37,7 +37,7 @@ const ConfirmedIcon = styled(ColumnCenter)`
interface QueueModalProps { interface QueueModalProps {
isOpen: boolean isOpen: boolean
onDismiss: () => void onDismiss: () => void
proposalId: string | undefined // id for the proposal to queue proposalId?: string // id for the proposal to queue
} }
export default function QueueModal({ isOpen, onDismiss, proposalId }: QueueModalProps) { export default function QueueModal({ isOpen, onDismiss, proposalId }: QueueModalProps) {

@ -39,8 +39,8 @@ const ConfirmedIcon = styled(ColumnCenter)`
interface VoteModalProps { interface VoteModalProps {
isOpen: boolean isOpen: boolean
onDismiss: () => void onDismiss: () => void
voteOption: VoteOption | undefined voteOption?: VoteOption
proposalId: string | undefined // id for the proposal to vote on proposalId?: string // id for the proposal to vote on
} }
export default function VoteModal({ isOpen, onDismiss, proposalId, voteOption }: VoteModalProps) { export default function VoteModal({ isOpen, onDismiss, proposalId, voteOption }: VoteModalProps) {

@ -140,7 +140,7 @@ export type SparklineMap = { [key: string]: PricePoint[] | undefined }
export type TopToken = NonNullable<NonNullable<TopTokens100Query>['topTokens']>[number] export type TopToken = NonNullable<NonNullable<TopTokens100Query>['topTokens']>[number]
interface UseTopTokensReturnValue { interface UseTopTokensReturnValue {
tokens: TopToken[] | undefined tokens?: TopToken[]
tokenSortRank: Record<string, number> tokenSortRank: Record<string, number>
loadingTokens: boolean loadingTokens: boolean
sparklines: SparklineMap sparklines: SparklineMap

@ -153,7 +153,7 @@ export function getTokenDetailsURL({
export function unwrapToken< export function unwrapToken<
T extends { T extends {
address?: string | null | undefined address?: string | null
} | null } | null
>(chainId: number, token: T): T { >(chainId: number, token: T): T {
if (!token?.address) return token if (!token?.address) return token

@ -37,7 +37,7 @@ export default function useFeeTierDistributionQuery(
token0: string | undefined, token0: string | undefined,
token1: string | undefined, token1: string | undefined,
interval: number interval: number
): { error: ApolloError | undefined; isLoading: boolean; data: FeeTierDistributionQuery } { ): { error?: ApolloError; isLoading: boolean; data: FeeTierDistributionQuery } {
const { const {
data, data,
loading: isLoading, loading: isLoading,

@ -33,7 +33,7 @@ export function useClientSideV3Trade<TTradeType extends TradeType>(
tradeType: TTradeType, tradeType: TTradeType,
amountSpecified?: CurrencyAmount<Currency>, amountSpecified?: CurrencyAmount<Currency>,
otherCurrency?: Currency otherCurrency?: Currency
): { state: TradeState; trade: InterfaceTrade | undefined } { ): { state: TradeState; trade?: InterfaceTrade } {
const [currencyIn, currencyOut] = const [currencyIn, currencyOut] =
tradeType === TradeType.EXACT_INPUT tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency] ? [amountSpecified?.currency, otherCurrency]

@ -5,8 +5,8 @@ import { PositionDetails } from 'types/position'
import { useCurrency } from './Tokens' import { useCurrency } from './Tokens'
export function useDerivedPositionInfo(positionDetails: PositionDetails | undefined): { export function useDerivedPositionInfo(positionDetails: PositionDetails | undefined): {
position: Position | undefined position?: Position
pool: Pool | undefined pool?: Pool
} { } {
const currency0 = useCurrency(positionDetails?.token0) const currency0 = useCurrency(positionDetails?.token0)
const currency1 = useCurrency(positionDetails?.token1) const currency1 = useCurrency(positionDetails?.token1)

@ -13,7 +13,7 @@ const MAX_DATA_BLOCK_AGE = 20
interface FeeTierDistribution { interface FeeTierDistribution {
isLoading: boolean isLoading: boolean
isError: boolean isError: boolean
largestUsageFeeTier?: FeeAmount | undefined largestUsageFeeTier?: FeeAmount
// distributions as percentages of overall liquidity // distributions as percentages of overall liquidity
distributions?: Record<FeeAmount, number | undefined> distributions?: Record<FeeAmount, number | undefined>

@ -174,7 +174,7 @@ function useAllV3Ticks(
): { ): {
isLoading: boolean isLoading: boolean
error: unknown error: unknown
ticks: TickData[] | undefined ticks?: TickData[]
} { } {
const useSubgraph = currencyA ? !CHAIN_IDS_MISSING_SUBGRAPH_DATA.includes(currencyA.chainId) : true const useSubgraph = currencyA ? !CHAIN_IDS_MISSING_SUBGRAPH_DATA.includes(currencyA.chainId) : true
@ -213,8 +213,8 @@ export function usePoolActiveLiquidity(
): { ): {
isLoading: boolean isLoading: boolean
error: any error: any
activeTick: number | undefined activeTick?: number
data: TickProcessed[] | undefined data?: TickProcessed[]
} { } {
const pool = usePool(currencyA, currencyB, feeAmount) const pool = usePool(currencyA, currencyB, feeAmount)

@ -13,7 +13,7 @@ import { useUniversalRouterSwapCallback } from './useUniversalRouter'
// and the user has approved the slippage adjusted input amount for the trade // and the user has approved the slippage adjusted input amount for the trade
export function useSwapCallback( export function useSwapCallback(
trade: Trade<Currency, Currency, TradeType> | undefined, // trade to execute, required trade: Trade<Currency, Currency, TradeType> | undefined, // trade to execute, required
fiatValues: { amountIn: number | undefined; amountOut: number | undefined }, // usd values for amount in and out, logged for analytics fiatValues: { amountIn?: number; amountOut?: number }, // usd values for amount in and out, logged for analytics
allowedSlippage: Percent, // in bips allowedSlippage: Percent, // in bips
permitSignature: PermitSignature | undefined permitSignature: PermitSignature | undefined
): { callback: null | (() => Promise<string>) } { ): { callback: null | (() => Promise<string>) } {

@ -11,7 +11,7 @@ export function useTokenAllowance(
owner?: string, owner?: string,
spender?: string spender?: string
): { ): {
tokenAllowance: CurrencyAmount<Token> | undefined tokenAllowance?: CurrencyAmount<Token>
isSyncing: boolean isSyncing: boolean
} { } {
const contract = useTokenContract(token?.address, false) const contract = useTokenContract(token?.address, false)
@ -21,7 +21,7 @@ export function useTokenAllowance(
// This guarantees that the tokenAllowance is marked isSyncing upon approval and updated upon being synced. // This guarantees that the tokenAllowance is marked isSyncing upon approval and updated upon being synced.
const [blocksPerFetch, setBlocksPerFetch] = useState<1>() const [blocksPerFetch, setBlocksPerFetch] = useState<1>()
const { result, syncing: isSyncing } = useSingleCallResult(contract, 'allowance', inputs, { blocksPerFetch }) as { const { result, syncing: isSyncing } = useSingleCallResult(contract, 'allowance', inputs, { blocksPerFetch }) as {
result: Awaited<ReturnType<NonNullable<typeof contract>['allowance']>> | undefined result?: Awaited<ReturnType<NonNullable<typeof contract>['allowance']>>
syncing: boolean syncing: boolean
} }

@ -21,7 +21,7 @@ const ETH_AMOUNT_OUT: { [chainId: number]: CurrencyAmount<Currency> } = {
} }
function useETHValue(currencyAmount?: CurrencyAmount<Currency>): { function useETHValue(currencyAmount?: CurrencyAmount<Currency>): {
data: CurrencyAmount<Currency> | undefined data?: CurrencyAmount<Currency>
isLoading: boolean isLoading: boolean
} { } {
const chainId = currencyAmount?.currency?.chainId const chainId = currencyAmount?.currency?.chainId
@ -51,7 +51,7 @@ function useETHValue(currencyAmount?: CurrencyAmount<Currency>): {
} }
export function useUSDPrice(currencyAmount?: CurrencyAmount<Currency>): { export function useUSDPrice(currencyAmount?: CurrencyAmount<Currency>): {
data: number | undefined data?: number
isLoading: boolean isLoading: boolean
} { } {
const chain = currencyAmount?.currency.chainId ? chainIdToBackendName(currencyAmount?.currency.chainId) : undefined const chain = currencyAmount?.currency.chainId ? chainIdToBackendName(currencyAmount?.currency.chainId) : undefined

@ -45,7 +45,7 @@ interface SwapOptions {
export function useUniversalRouterSwapCallback( export function useUniversalRouterSwapCallback(
trade: Trade<Currency, Currency, TradeType> | undefined, trade: Trade<Currency, Currency, TradeType> | undefined,
fiatValues: { amountIn: number | undefined; amountOut: number | undefined }, fiatValues: { amountIn?: number; amountOut?: number },
options: SwapOptions options: SwapOptions
) { ) {
const { account, chainId, provider } = useWeb3React() const { account, chainId, provider } = useWeb3React()

@ -7,7 +7,7 @@ import { useV3NFTPositionManagerContract } from './useContract'
interface UseV3PositionsResults { interface UseV3PositionsResults {
loading: boolean loading: boolean
positions: PositionDetails[] | undefined positions?: PositionDetails[]
} }
function useV3PositionsFromTokenIds(tokenIds: BigNumber[] | undefined): UseV3PositionsResults { function useV3PositionsFromTokenIds(tokenIds: BigNumber[] | undefined): UseV3PositionsResults {
@ -51,7 +51,7 @@ function useV3PositionsFromTokenIds(tokenIds: BigNumber[] | undefined): UseV3Pos
interface UseV3PositionResults { interface UseV3PositionResults {
loading: boolean loading: boolean
position: PositionDetails | undefined position?: PositionDetails
} }
export function useV3PositionFromTokenId(tokenId: BigNumber | undefined): UseV3PositionResults { export function useV3PositionFromTokenId(tokenId: BigNumber | undefined): UseV3PositionResults {

@ -60,7 +60,7 @@ export default function useWrapCallback(
inputCurrency: Currency | undefined | null, inputCurrency: Currency | undefined | null,
outputCurrency: Currency | undefined | null, outputCurrency: Currency | undefined | null,
typedValue: string | undefined typedValue: string | undefined
): { wrapType: WrapType; execute?: undefined | (() => Promise<void>); inputError?: WrapInputError } { ): { wrapType: WrapType; execute?: () => Promise<void>; inputError?: WrapInputError } {
const { chainId, account } = useWeb3React() const { chainId, account } = useWeb3React()
const wethContract = useWETHContract() const wethContract = useWETHContract()
const balance = useCurrencyBalance(account ?? undefined, inputCurrency ?? undefined) const balance = useCurrencyBalance(account ?? undefined, inputCurrency ?? undefined)

@ -15,9 +15,9 @@ export function useRoutingAPIArguments({
tradeType, tradeType,
routerPreference, routerPreference,
}: { }: {
tokenIn: Currency | undefined tokenIn?: Currency
tokenOut: Currency | undefined tokenOut?: Currency
amount: CurrencyAmount<Currency> | undefined amount?: CurrencyAmount<Currency>
tradeType: TradeType tradeType: TradeType
routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE
}) { }) {

@ -40,7 +40,7 @@ export const formatSwapSignedAnalyticsEventProperties = ({
txHash, txHash,
}: { }: {
trade: InterfaceTrade | Trade<Currency, Currency, TradeType> trade: InterfaceTrade | Trade<Currency, Currency, TradeType>
fiatValues: { amountIn: number | undefined; amountOut: number | undefined } fiatValues: { amountIn?: number; amountOut?: number }
txHash: string txHash: string
}) => ({ }) => ({
transaction_hash: txHash, transaction_hash: txHash,

@ -3,7 +3,7 @@ import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from 'constants/locales'
interface FormatLocaleNumberArgs { interface FormatLocaleNumberArgs {
number: CurrencyAmount<Currency> | Price<Currency, Currency> | number number: CurrencyAmount<Currency> | Price<Currency, Currency> | number
locale: string | null | undefined locale?: string | null
options?: Intl.NumberFormatOptions options?: Intl.NumberFormatOptions
sigFigs?: number sigFigs?: number
fixedDecimals?: number fixedDecimals?: number

@ -1,8 +1,6 @@
const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/
export default function parseENSAddress( export default function parseENSAddress(ensAddress: string): { ensName: string; ensPath?: string } | undefined {
ensAddress: string
): { ensName: string; ensPath: string | undefined } | undefined {
const match = ensAddress.match(ENS_NAME_REGEX) const match = ensAddress.match(ENS_NAME_REGEX)
if (!match) return undefined if (!match) return undefined
return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[4] } return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[4] }

@ -206,9 +206,9 @@ const InputCurrencyValue = ({
}: { }: {
usingPayWithAnyToken: boolean usingPayWithAnyToken: boolean
totalEthPrice: BigNumber totalEthPrice: BigNumber
activeCurrency: Currency | undefined | null activeCurrency?: Currency | null
tradeState: TradeState tradeState: TradeState
trade: InterfaceTrade | undefined trade?: InterfaceTrade
}) => { }) => {
if (!usingPayWithAnyToken) { if (!usingPayWithAnyToken) {
return ( return (
@ -241,7 +241,7 @@ const FiatValue = ({
usingPayWithAnyToken, usingPayWithAnyToken,
}: { }: {
usdcValue: CurrencyAmount<Token> | null usdcValue: CurrencyAmount<Token> | null
priceImpact: PriceImpact | undefined priceImpact?: PriceImpact
tradeState: TradeState tradeState: TradeState
usingPayWithAnyToken: boolean usingPayWithAnyToken: boolean
}) => { }) => {

@ -82,7 +82,7 @@ const NoContentContainer = () => (
interface BagRowProps { interface BagRowProps {
asset: UpdatedGenieAsset asset: UpdatedGenieAsset
usdPrice: number | undefined usdPrice?: number
removeAsset: (assets: GenieAsset[]) => void removeAsset: (assets: GenieAsset[]) => void
showRemove?: boolean showRemove?: boolean
grayscale?: boolean grayscale?: boolean
@ -168,7 +168,7 @@ export const BagRow = ({ asset, usdPrice, removeAsset, showRemove, grayscale, is
interface PriceChangeBagRowProps { interface PriceChangeBagRowProps {
asset: UpdatedGenieAsset asset: UpdatedGenieAsset
usdPrice: number | undefined usdPrice?: number
markAssetAsReviewed: (asset: UpdatedGenieAsset, toKeep: boolean) => void markAssetAsReviewed: (asset: UpdatedGenieAsset, toKeep: boolean) => void
top?: boolean top?: boolean
isMobile: boolean isMobile: boolean
@ -219,7 +219,7 @@ export const PriceChangeBagRow = ({ asset, usdPrice, markAssetAsReviewed, top, i
interface UnavailableAssetsHeaderRowProps { interface UnavailableAssetsHeaderRowProps {
assets?: UpdatedGenieAsset[] assets?: UpdatedGenieAsset[]
usdPrice: number | undefined usdPrice?: number
clearUnavailableAssets: () => void clearUnavailableAssets: () => void
didOpenUnavailableAssets: boolean didOpenUnavailableAssets: boolean
setDidOpenUnavailableAssets: (didOpen: boolean) => void setDidOpenUnavailableAssets: (didOpen: boolean) => void

@ -111,7 +111,7 @@ const NftDisplayContainer = styled.div`
height: 34px; height: 34px;
` `
const NftHolder = styled.div<{ index: number; src: string | undefined }>` const NftHolder = styled.div<{ index: number; src?: string }>`
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;

@ -147,7 +147,7 @@ export const LoadingAssetActivity = ({ rowCount }: { rowCount: number }) => {
) )
} }
const AssetActivity = ({ events }: { events: ActivityEvent[] | undefined }) => { const AssetActivity = ({ events }: { events?: ActivityEvent[] }) => {
return ( return (
<ActivityTable> <ActivityTable>
{events && {events &&

@ -128,7 +128,7 @@ function assetMediaType(asset: GenieAsset): MediaType {
return MediaType.Image return MediaType.Image
} }
const RenderMediaShadow = ({ imageUrl }: { imageUrl: string | undefined }) => { const RenderMediaShadow = ({ imageUrl }: { imageUrl?: string }) => {
const [contentNotAvailable, setContentNotAvailable] = useState(false) const [contentNotAvailable, setContentNotAvailable] = useState(false)
if (!imageUrl || contentNotAvailable) { if (!imageUrl || contentNotAvailable) {

@ -32,7 +32,7 @@ const InputWrapper = styled(Row)<{ borderColor: string }>`
box-sizing: border-box; box-sizing: border-box;
` `
const CurrencyWrapper = styled.div<{ listPrice: number | undefined }>` const CurrencyWrapper = styled.div<{ listPrice?: number }>`
color: ${({ listPrice, theme }) => (listPrice ? theme.textPrimary : theme.textSecondary)}; color: ${({ listPrice, theme }) => (listPrice ? theme.textPrimary : theme.textSecondary)};
` `

@ -313,7 +313,7 @@ const CollectionFilterItem = ({
collection, collection,
setCollectionFilters, setCollectionFilters,
}: { }: {
collection: WalletCollection | undefined collection?: WalletCollection
setCollectionFilters: (address: string) => void setCollectionFilters: (address: string) => void
}) => { }) => {
if (!collection) return null if (!collection) return null

@ -9,8 +9,8 @@ export default function useDerivedPayWithAnyTokenSwapInfo(
parsedOutputAmount?: CurrencyAmount<NativeCurrency | Token> parsedOutputAmount?: CurrencyAmount<NativeCurrency | Token>
): { ): {
state: TradeState state: TradeState
trade: InterfaceTrade | undefined trade?: InterfaceTrade
maximumAmountIn: CurrencyAmount<Token> | undefined maximumAmountIn?: CurrencyAmount<Token>
allowedSlippage: Percent allowedSlippage: Percent
} { } {
const { state, trade } = useBestTrade(TradeType.EXACT_OUTPUT, parsedOutputAmount, inputCurrency ?? undefined) const { state, trade } = useBestTrade(TradeType.EXACT_OUTPUT, parsedOutputAmount, inputCurrency ?? undefined)

@ -4,10 +4,10 @@ import { create } from 'zustand'
import { devtools } from 'zustand/middleware' import { devtools } from 'zustand/middleware'
interface TokenInputState { interface TokenInputState {
inputCurrency: Currency | undefined inputCurrency?: Currency
setInputCurrency: (currency: Currency | undefined) => void setInputCurrency: (currency: Currency | undefined) => void
clearInputCurrency: () => void clearInputCurrency: () => void
tokenTradeInput: TokenTradeInput | undefined tokenTradeInput?: TokenTradeInput
setTokenTradeInput: (tokenTradeInput: TokenTradeInput | undefined) => void setTokenTradeInput: (tokenTradeInput: TokenTradeInput | undefined) => void
} }

@ -8,7 +8,7 @@ interface WalletBalanceProps {
address: string address: string
balance: string balance: string
weiBalance: BigNumber weiBalance: BigNumber
provider: Web3Provider | undefined provider?: Web3Provider
} }
export function useWalletBalance(): WalletBalanceProps { export function useWalletBalance(): WalletBalanceProps {

@ -88,7 +88,7 @@ export enum ListingStatus {
} }
export interface AssetRow { export interface AssetRow {
image: string | undefined image?: string
name?: string name?: string
status: ListingStatus status: ListingStatus
marketplace: ListingMarket marketplace: ListingMarket

@ -109,9 +109,9 @@ function buildTradeRouteInput(swap: Swap): TokenTradeRouteInput {
} }
export function buildAllTradeRouteInputs(trade: InterfaceTrade): { export function buildAllTradeRouteInputs(trade: InterfaceTrade): {
mixedTokenTradeRouteInputs: TokenTradeRouteInput[] | undefined mixedTokenTradeRouteInputs?: TokenTradeRouteInput[]
v2TokenTradeRouteInputs: TokenTradeRouteInput[] | undefined v2TokenTradeRouteInputs?: TokenTradeRouteInput[]
v3TokenTradeRouteInputs: TokenTradeRouteInput[] | undefined v3TokenTradeRouteInputs?: TokenTradeRouteInput[]
} { } {
const mixedTokenTradeRouteInputs: TokenTradeRouteInput[] = [] const mixedTokenTradeRouteInputs: TokenTradeRouteInput[] = []
const v2TokenTradeRouteInputs: TokenTradeRouteInput[] = [] const v2TokenTradeRouteInputs: TokenTradeRouteInput[] = []

@ -31,7 +31,7 @@ export const ProposalActionDetail = ({
}: { }: {
className?: string className?: string
proposalAction: ProposalAction proposalAction: ProposalAction
currency: Currency | undefined currency?: Currency
amount: string amount: string
toAddress: string toAddress: string
onCurrencySelect: (currency: Currency) => void onCurrencySelect: (currency: Currency) => void

@ -15,7 +15,7 @@ export const ProposalSubmissionModal = ({
onDismiss, onDismiss,
}: { }: {
isOpen: boolean isOpen: boolean
hash: string | undefined hash?: string
onDismiss: () => void onDismiss: () => void
}) => { }) => {
const theme = useTheme() const theme = useTheme()

@ -172,7 +172,7 @@ export function Swap({
}: { }: {
className?: string className?: string
prefilledState?: Partial<SwapState> prefilledState?: Partial<SwapState>
chainId: SupportedChainId | undefined chainId?: SupportedChainId
onCurrencyChange?: (selected: Pick<SwapState, Field.INPUT | Field.OUTPUT>) => void onCurrencyChange?: (selected: Pick<SwapState, Field.INPUT | Field.OUTPUT>) => void
disableTokenInputs?: boolean disableTokenInputs?: boolean
}) { }) {
@ -334,10 +334,10 @@ export function Swap({
// modal and loading // modal and loading
const [{ showConfirm, tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{ const [{ showConfirm, tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{
showConfirm: boolean showConfirm: boolean
tradeToConfirm: InterfaceTrade | undefined tradeToConfirm?: InterfaceTrade
attemptingTxn: boolean attemptingTxn: boolean
swapErrorMessage: string | undefined swapErrorMessage?: string
txHash: string | undefined txHash?: string
}>({ }>({
showConfirm: false, showConfirm: false,
tradeToConfirm: undefined, tradeToConfirm: undefined,

@ -22,7 +22,7 @@ const connectionSlice = createSlice({
reducers: { reducers: {
updateConnectionError( updateConnectionError(
state, state,
{ payload: { connectionType, error } }: { payload: { connectionType: ConnectionType; error: string | undefined } } { payload: { connectionType, error } }: { payload: { connectionType: ConnectionType; error?: string } }
) { ) {
state.errorByConnectionType[connectionType] = error state.errorByConnectionType[connectionType] = error
}, },

@ -362,7 +362,7 @@ export function useUserDelegatee(): string {
} }
// gets the users current votes // gets the users current votes
export function useUserVotes(): { loading: boolean; votes: CurrencyAmount<Token> | undefined } { export function useUserVotes(): { loading: boolean; votes?: CurrencyAmount<Token> } {
const { account, chainId } = useWeb3React() const { account, chainId } = useWeb3React()
const uniContract = useUniContract() const uniContract = useUniContract()

@ -21,7 +21,7 @@ enum LogsState {
} }
interface UseLogsResult { interface UseLogsResult {
logs: Log[] | undefined logs?: Log[]
state: LogsState state: LogsState
} }

@ -126,7 +126,7 @@ export function useV3DerivedMintInfo(
currencyBalances: { [field in Field]?: CurrencyAmount<Currency> } currencyBalances: { [field in Field]?: CurrencyAmount<Currency> }
dependentField: Field dependentField: Field
parsedAmounts: { [field in Field]?: CurrencyAmount<Currency> } parsedAmounts: { [field in Field]?: CurrencyAmount<Currency> }
position: Position | undefined position?: Position
noLiquidity?: boolean noLiquidity?: boolean
errorMessage?: ReactNode errorMessage?: ReactNode
invalidPool: boolean invalidPool: boolean

@ -58,7 +58,7 @@ interface StakingInfo {
// equivalent to percent of total supply * reward rate // equivalent to percent of total supply * reward rate
rewardRate: CurrencyAmount<Token> rewardRate: CurrencyAmount<Token>
// when the period ends // when the period ends
periodFinish: Date | undefined periodFinish?: Date
// if pool is active // if pool is active
active: boolean active: boolean
// calculates a hypothetical amount of token distributed to the active account per second. // calculates a hypothetical amount of token distributed to the active account per second.

@ -78,7 +78,7 @@ export function useDerivedSwapInfo(
): { ): {
currencies: { [field in Field]?: Currency | null } currencies: { [field in Field]?: Currency | null }
currencyBalances: { [field in Field]?: CurrencyAmount<Currency> } currencyBalances: { [field in Field]?: CurrencyAmount<Currency> }
parsedAmount: CurrencyAmount<Currency> | undefined parsedAmount?: CurrencyAmount<Currency>
inputError?: ReactNode inputError?: ReactNode
trade: { trade: {
trade?: InterfaceTrade trade?: InterfaceTrade

@ -8,10 +8,10 @@ export interface SwapState {
readonly independentField: Field readonly independentField: Field
readonly typedValue: string readonly typedValue: string
readonly [Field.INPUT]: { readonly [Field.INPUT]: {
readonly currencyId: string | undefined | null readonly currencyId?: string | null
} }
readonly [Field.OUTPUT]: { readonly [Field.OUTPUT]: {
readonly currencyId: string | undefined | null readonly currencyId?: string | null
} }
// the typed recipient address or ENS name, or null if swap should go to sender // the typed recipient address or ENS name, or null if swap should go to sender
readonly recipient: string | null readonly recipient: string | null

@ -10,7 +10,7 @@ import { SerializedPair, SerializedToken, SlippageTolerance } from './types'
const currentTimestamp = () => new Date().getTime() const currentTimestamp = () => new Date().getTime()
export interface UserState { export interface UserState {
buyFiatFlowCompleted: boolean | undefined buyFiatFlowCompleted?: boolean
selectedWallet?: ConnectionType selectedWallet?: ConnectionType
@ -53,7 +53,7 @@ export interface UserState {
URLWarningVisible: boolean URLWarningVisible: boolean
hideUniswapWalletBanner: boolean hideUniswapWalletBanner: boolean
// undefined means has not gone through A/B split yet // undefined means has not gone through A/B split yet
showSurveyPopup: boolean | undefined showSurveyPopup?: boolean
} }
function pairKey(token0Address: string, token1Address: string) { function pairKey(token0Address: string, token1Address: string) {

@ -24,7 +24,7 @@ export const priceToPreciseFloat = (price: Price<Currency, Currency> | undefined
} }
interface FormatDollarArgs { interface FormatDollarArgs {
num: number | undefined | null num?: number | null
isPrice?: boolean isPrice?: boolean
lessPreciseStablecoinValues?: boolean lessPreciseStablecoinValues?: boolean
digits?: number digits?: number

@ -4,7 +4,7 @@ import { Price, Token } from '@uniswap/sdk-core'
import { Bound } from '../state/mint/v3/actions' import { Bound } from '../state/mint/v3/actions'
interface FormatTickPriceArgs { interface FormatTickPriceArgs {
price: Price<Token, Token> | undefined price?: Price<Token, Token>
atLimit: { [bound in Bound]?: boolean | undefined } atLimit: { [bound in Bound]?: boolean | undefined }
direction: Bound direction: Bound
placeholder?: string placeholder?: string

@ -57,12 +57,12 @@ export const formatSwapPriceUpdatedEventProperties = (
interface AnalyticsEventProps { interface AnalyticsEventProps {
trade: InterfaceTrade trade: InterfaceTrade
hash: string | undefined hash?: string
allowedSlippage: Percent allowedSlippage: Percent
transactionDeadlineSecondsSinceEpoch: number | undefined transactionDeadlineSecondsSinceEpoch?: number
isAutoSlippage: boolean isAutoSlippage: boolean
isAutoRouterApi: boolean isAutoRouterApi: boolean
swapQuoteReceivedDate: Date | undefined swapQuoteReceivedDate?: Date
routes: RoutingDiagramEntry[] routes: RoutingDiagramEntry[]
fiatValueInput?: number fiatValueInput?: number
fiatValueOutput?: number fiatValueOutput?: number