diff --git a/package.json b/package.json index cf3b89da69..d6535d26ed 100644 --- a/package.json +++ b/package.json @@ -12,19 +12,20 @@ "packages/*" ], "resolutions": { - "@polkadot/api": "^6.3.2-17", - "@polkadot/api-contract": "^6.3.2-17", + "@polkadot/api": "^6.3.2-19", + "@polkadot/api-contract": "^6.3.2-19", "@polkadot/hw-ledger": "^7.5.1", "@polkadot/keyring": "^7.5.1", "@polkadot/networks": "^7.5.1", "@polkadot/phishing": "^0.6.356", - "@polkadot/types": "^6.3.2-17", - "@polkadot/types-known": "^6.3.2-17", - "@polkadot/types-support": "^6.3.2-17", + "@polkadot/types": "^6.3.2-19", + "@polkadot/types-known": "^6.3.2-19", + "@polkadot/types-support": "^6.3.2-19", "@polkadot/util": "^7.5.1", "@polkadot/util-crypto": "^7.5.1", "@polkadot/wasm-crypto": "^4.2.1", "babel-core": "^7.0.0-bridge.0", + "eslint-plugin-react-hooks": "^4.2.1-alpha-930c9e7ee-20211015", "styled-components": "^5.3.1", "typescript": "^4.4.4" }, @@ -73,7 +74,7 @@ "@babel/runtime": "^7.15.4", "@crustio/crust-pin": "^1.0.0", "@pinata/sdk": "^1.1.23", - "@polkadot/dev": "^0.62.71", + "@polkadot/dev": "^0.63.2", "@polkadot/ts": "^0.4.9", "@types/bn.js": "^4.11.6", "@types/chart.js": "^2.9.34", diff --git a/packages/apps-electron/package.json b/packages/apps-electron/package.json index e801241be9..40709dad54 100644 --- a/packages/apps-electron/package.json +++ b/packages/apps-electron/package.json @@ -6,7 +6,7 @@ "dependencies": { "@babel/core": "^7.15.8", "@babel/polyfill": "^7.12.1", - "@polkadot/dev": "^0.62.71", + "@polkadot/dev": "^0.63.2", "@polkadot/react-components": "^0.96.2-81", "electron-log": "^4.4.1", "electron-updater": "^4.6.1" diff --git a/packages/apps-electron/src/main/register-ipc-handler.ts b/packages/apps-electron/src/main/register-ipc-handler.ts index 4be966d8df..a2b676d5ce 100644 --- a/packages/apps-electron/src/main/register-ipc-handler.ts +++ b/packages/apps-electron/src/main/register-ipc-handler.ts @@ -7,7 +7,7 @@ import { IpcMainHandler } from './ipc-main-handler'; export const registerIpcHandler = (ipcHandler: IpcMainHandler): void => { for (const [channel, listener] of Object.entries(ipcHandler)) { - ipcMain.handle(channel, (_, ...args) => { + ipcMain.handle(channel, (_, ...args: unknown[]) => { return listener(...args); }); } diff --git a/packages/apps-electron/src/renderer/remote-electron-store.spec.ts b/packages/apps-electron/src/renderer/remote-electron-store.spec.ts index 1476531c87..3ecebc82ee 100644 --- a/packages/apps-electron/src/renderer/remote-electron-store.spec.ts +++ b/packages/apps-electron/src/renderer/remote-electron-store.spec.ts @@ -1,6 +1,8 @@ // Copyright 2017-2021 @polkadot/apps authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { KeyringJson } from '@polkadot/ui-keyring/types'; + import { RemoteElectronStore } from './remote-electron-store'; describe('Remote Electron Store', () => { @@ -79,7 +81,7 @@ describe('Remote Electron Store', () => { accountStore.set.mockResolvedValue(null); const cb = jest.fn(); - remoteStore.set('1', 'a' as any, cb); + remoteStore.set('1', 'a' as unknown as KeyringJson, cb); await Promise.resolve(); expect(accountStore.set).toBeCalledWith('1', 'a'); diff --git a/packages/apps/package.json b/packages/apps/package.json index 5a56c76c8f..ba086443db 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -11,7 +11,7 @@ "@babel/runtime": "^7.15.4", "@polkadot/apps-config": "^0.96.2-81", "@polkadot/apps-routing": "^0.96.2-81", - "@polkadot/dev": "^0.62.71", + "@polkadot/dev": "^0.63.2", "@polkadot/react-api": "^0.96.2-81", "@polkadot/react-components": "^0.96.2-81", "@polkadot/react-hooks": "^0.96.2-81", diff --git a/packages/apps/src/Apps.tsx b/packages/apps/src/Apps.tsx index 860499a760..6fd815693f 100644 --- a/packages/apps/src/Apps.tsx +++ b/packages/apps/src/Apps.tsx @@ -20,7 +20,7 @@ import WarmUp from './WarmUp'; export const PORTAL_ID = 'portals'; function Apps ({ className = '' }: Props): React.ReactElement { - const { theme } = useContext(ThemeContext); + const { theme } = useContext(ThemeContext as React.Context); const { isDevelopment, specName, systemChain, systemName } = useApi(); const uiHighlight = useMemo( diff --git a/packages/apps/src/Endpoints/index.tsx b/packages/apps/src/Endpoints/index.tsx index cec9c2827b..46dcb0d876 100644 --- a/packages/apps/src/Endpoints/index.tsx +++ b/packages/apps/src/Endpoints/index.tsx @@ -103,7 +103,7 @@ function extractUrlState (apiUrl: string, groups: Group[]): UrlState { function loadAffinities (groups: Group[]): Record { return Object - .entries(store.get(STORAGE_AFFINITIES) || {}) + .entries(store.get(STORAGE_AFFINITIES) as Record || {}) .filter(([network, apiUrl]) => groups.some(({ networks }) => networks.some(({ name, providers }) => diff --git a/packages/page-accounts/src/Accounts/Account.tsx b/packages/page-accounts/src/Accounts/Account.tsx index 7ccf3541a9..e5ac8a3c43 100644 --- a/packages/page-accounts/src/Accounts/Account.tsx +++ b/packages/page-accounts/src/Accounts/Account.tsx @@ -102,7 +102,7 @@ const transformRecovery = { function Account ({ account: { address, meta }, className = '', delegation, filter, isFavorite, proxy, setBalance, toggleFavorite }: Props): React.ReactElement | null { const { t } = useTranslation(); const [isExpanded, toggleIsExpanded] = useToggle(false); - const { theme } = useContext(ThemeContext); + const { theme } = useContext(ThemeContext as React.Context); const { queueExtrinsic } = useContext(StatusContext); const api = useApi(); const { getLedger } = useLedger(); diff --git a/packages/page-accounts/src/modals/Ledger.tsx b/packages/page-accounts/src/modals/Ledger.tsx index fadb409ca2..bf0522a8d2 100644 --- a/packages/page-accounts/src/modals/Ledger.tsx +++ b/packages/page-accounts/src/modals/Ledger.tsx @@ -69,7 +69,7 @@ function LedgerModal ({ className, onClose }: Props): React.ReactElement queryLedger(api, getLedger, name, accIndex, addIndex) .then(() => onClose()) - .catch((error): void => { + .catch((error: Error): void => { console.error(error); setIsBusy(false); diff --git a/packages/page-addresses/src/Contacts/Address.tsx b/packages/page-addresses/src/Contacts/Address.tsx index c269cc99ed..dccc5652a1 100644 --- a/packages/page-addresses/src/Contacts/Address.tsx +++ b/packages/page-addresses/src/Contacts/Address.tsx @@ -29,7 +29,7 @@ const isEditable = true; function Address ({ address, className = '', filter, isFavorite, toggleFavorite }: Props): React.ReactElement | null { const { t } = useTranslation(); - const { theme } = useContext(ThemeContext); + const { theme } = useContext(ThemeContext as React.Context); const api = useApi(); const info = useCall(api.api.derive.accounts.info, [address]); const balancesAll = useBalancesAll(address); diff --git a/packages/page-bounties/src/BountyExtraActions/SlashCurator.tsx b/packages/page-bounties/src/BountyExtraActions/SlashCurator.tsx index 1d0d19b83d..26bde5010e 100644 --- a/packages/page-bounties/src/BountyExtraActions/SlashCurator.tsx +++ b/packages/page-bounties/src/BountyExtraActions/SlashCurator.tsx @@ -1,12 +1,12 @@ // Copyright 2017-2021 @polkadot/app-bounties authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { SubmittableExtrinsicFunction } from '@polkadot/api/types'; import type { AccountId, BountyIndex } from '@polkadot/types/interfaces'; import BN from 'bn.js'; import React, { useEffect, useMemo, useState } from 'react'; -import { SubmittableExtrinsic } from '@polkadot/api/types'; import { getTreasuryProposalThreshold } from '@polkadot/apps-config'; import { InputAddress, Modal, TxButton } from '@polkadot/react-components'; import { useAccounts, useApi, useCollectiveInstance, useCollectiveMembers } from '@polkadot/react-hooks'; @@ -28,11 +28,11 @@ interface ActionProperties { filter: string[]; header: string; helpMessage: string; - params: any[] | (() => any[]) | undefined; + params: unknown[] | (() => unknown[]) | undefined; proposingAccountTip: string; tip: string; title: string; - tx: null | ((...args: any[]) => SubmittableExtrinsic<'promise'>); + tx: null | SubmittableExtrinsicFunction<'promise'>; } function SlashCurator ({ action, curatorId, description, index, toggleOpen }: Props): React.ReactElement | null { diff --git a/packages/page-bounties/src/hooks/useBounties.tsx b/packages/page-bounties/src/hooks/useBounties.tsx index dee9dc39de..5e49cfdcdc 100644 --- a/packages/page-bounties/src/hooks/useBounties.tsx +++ b/packages/page-bounties/src/hooks/useBounties.tsx @@ -2,16 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 import type BN from 'bn.js'; -import type { SubmittableExtrinsic } from '@polkadot/api/types'; +import type { SubmittableExtrinsicFunction } from '@polkadot/api/types'; import { DeriveBounties } from '@polkadot/api-derive/types'; import { useApi, useBestNumber, useCall } from '@polkadot/react-hooks'; import { BalanceOf, BlockNumber, BountyIndex } from '@polkadot/types/interfaces'; export type BountyApi = { - acceptCurator: ((...args: any[]) => SubmittableExtrinsic<'promise'>); - approveBounty: ((...args: any[]) => SubmittableExtrinsic<'promise'>); - awardBounty: ((...args: any[]) => SubmittableExtrinsic<'promise'>); + acceptCurator: SubmittableExtrinsicFunction<'promise'>; + approveBounty: SubmittableExtrinsicFunction<'promise'>; + awardBounty: SubmittableExtrinsicFunction<'promise'>; bestNumber?: BlockNumber, bounties?: DeriveBounties, bountyCuratorDeposit: BN, @@ -19,14 +19,14 @@ export type BountyApi = { bountyIndex?: BN, bountyUpdatePeriod?: BN, bountyValueMinimum: BN, - claimBounty: ((...args: any[]) => SubmittableExtrinsic<'promise'>); - closeBounty: ((...args: any[]) => SubmittableExtrinsic<'promise'>); + claimBounty: SubmittableExtrinsicFunction<'promise'>; + closeBounty: SubmittableExtrinsicFunction<'promise'>; dataDepositPerByte: BN, - extendBountyExpiry: ((...args: any[]) => SubmittableExtrinsic<'promise'>); + extendBountyExpiry: SubmittableExtrinsicFunction<'promise'>; maximumReasonLength: number, - proposeBounty: ((...args: any[]) => SubmittableExtrinsic<'promise'>); - proposeCurator: ((...args: any[]) => SubmittableExtrinsic<'promise'>); - unassignCurator: ((...args: any[]) => SubmittableExtrinsic<'promise'>); + proposeBounty: SubmittableExtrinsicFunction<'promise'>; + proposeCurator: SubmittableExtrinsicFunction<'promise'>; + unassignCurator: SubmittableExtrinsicFunction<'promise'>; }; export function useBounties (): BountyApi { diff --git a/packages/page-bounties/test/hooks/defaults.ts b/packages/page-bounties/test/hooks/defaults.ts index 172aff59c6..ab7047c185 100644 --- a/packages/page-bounties/test/hooks/defaults.ts +++ b/packages/page-bounties/test/hooks/defaults.ts @@ -1,6 +1,8 @@ // Copyright 2017-2021 @polkadot/app-bounties authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { SubmittableExtrinsicFunction } from '@polkadot/api/types'; + import BN from 'bn.js'; import { DeriveBounties } from '@polkadot/api-derive/types'; @@ -12,23 +14,23 @@ import { BountyApi } from '../../src/hooks'; export const defaultBountyUpdatePeriod = new BN(100000); export const defaultBountyApi: BountyApi = { - acceptCurator: jest.fn(), - approveBounty: jest.fn(), - awardBounty: jest.fn().mockReturnValue('mockAwardExtrinsic'), + acceptCurator: jest.fn() as unknown as SubmittableExtrinsicFunction<'promise'>, + approveBounty: jest.fn() as unknown as SubmittableExtrinsicFunction<'promise'>, + awardBounty: jest.fn().mockReturnValue('mockAwardExtrinsic') as unknown as SubmittableExtrinsicFunction<'promise'>, bestNumber: new BN(1) as BlockNumber, bounties: [] as DeriveBounties, bountyCuratorDeposit: balanceOf(500000), bountyDepositBase: new BN(1), bountyUpdatePeriod: defaultBountyUpdatePeriod, bountyValueMinimum: new BN(1), - claimBounty: jest.fn(), - closeBounty: jest.fn().mockReturnValue({ length: 4 }), + claimBounty: jest.fn() as unknown as SubmittableExtrinsicFunction<'promise'>, + closeBounty: jest.fn().mockReturnValue({ length: 4 }) as unknown as SubmittableExtrinsicFunction<'promise'>, dataDepositPerByte: new BN(1), - extendBountyExpiry: jest.fn().mockReturnValue('mockExtendExtrinsic'), + extendBountyExpiry: jest.fn().mockReturnValue('mockExtendExtrinsic') as unknown as SubmittableExtrinsicFunction<'promise'>, maximumReasonLength: 100, - proposeBounty: jest.fn(), - proposeCurator: jest.fn(), - unassignCurator: jest.fn().mockReturnValue('mockUnassignExtrinsic') + proposeBounty: jest.fn() as unknown as SubmittableExtrinsicFunction<'promise'>, + proposeCurator: jest.fn() as unknown as SubmittableExtrinsicFunction<'promise'>, + unassignCurator: jest.fn().mockReturnValue('mockUnassignExtrinsic') as unknown as SubmittableExtrinsicFunction<'promise'> }; const defaultBalance = balanceOf(1); diff --git a/packages/page-bounties/test/utils/clickButtonWithName.ts b/packages/page-bounties/test/utils/clickButtonWithName.ts index 7a40f01dc0..7018a2dd2b 100644 --- a/packages/page-bounties/test/utils/clickButtonWithName.ts +++ b/packages/page-bounties/test/utils/clickButtonWithName.ts @@ -3,8 +3,8 @@ import { fireEvent } from '@testing-library/react'; -export const clickButtonWithName = async (buttonName: string, findByRole: (...args: any[]) => Promise): Promise => { +export async function clickButtonWithName (buttonName: string, findByRole: (...args: any[]) => Promise): Promise { const button = await findByRole('button', { name: buttonName }); fireEvent.click(button); -}; +} diff --git a/packages/page-calendar/src/index.tsx b/packages/page-calendar/src/index.tsx index 1ec2a837b0..33fb9c718d 100644 --- a/packages/page-calendar/src/index.tsx +++ b/packages/page-calendar/src/index.tsx @@ -110,7 +110,7 @@ function CalendarApp ({ basePath, className }: Props): React.ReactElement ); const _setAllEventsView = useCallback( - (v) => setAllEventsView(v), + (v: boolean) => setAllEventsView(v), [] ); diff --git a/packages/page-claims/src/Claim.tsx b/packages/page-claims/src/Claim.tsx index a8841f81dd..63490741e6 100644 --- a/packages/page-claims/src/Claim.tsx +++ b/packages/page-claims/src/Claim.tsx @@ -31,8 +31,8 @@ interface Props { } interface ConstructTx { - params?: any[]; - tx?: (...args: any[]) => SubmittableExtrinsic<'promise'>; + params?: unknown[]; + tx?: (...args: unknown[]) => SubmittableExtrinsic<'promise'>; } // Depending on isOldClaimProcess, construct the correct tx. diff --git a/packages/page-contracts/package.json b/packages/page-contracts/package.json index 6840e3b8ad..7bea0d07c4 100644 --- a/packages/page-contracts/package.json +++ b/packages/page-contracts/package.json @@ -6,6 +6,6 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.15.4", - "@polkadot/api-contract": "^6.3.2-17" + "@polkadot/api-contract": "^6.3.2-19" } } diff --git a/packages/page-contracts/src/Codes/Code.tsx b/packages/page-contracts/src/Codes/Code.tsx index 996f427206..6959064304 100644 --- a/packages/page-contracts/src/Codes/Code.tsx +++ b/packages/page-contracts/src/Codes/Code.tsx @@ -35,8 +35,8 @@ function Code ({ className, code, onShowDeploy }: Props): React.ReactElement { - onShowDeploy && onShowDeploy(code.json.codeHash, constructorIndex); + (constructorIndex?: number): void => { + onShowDeploy && onShowDeploy(code.json.codeHash, constructorIndex || 0); }, [code, onShowDeploy] ); diff --git a/packages/page-contracts/src/Codes/Upload.tsx b/packages/page-contracts/src/Codes/Upload.tsx index 05be12dd9b..65bca87a88 100644 --- a/packages/page-contracts/src/Codes/Upload.tsx +++ b/packages/page-contracts/src/Codes/Upload.tsx @@ -32,7 +32,7 @@ function Upload ({ onClose }: Props): React.ReactElement { const [[uploadTx, error], setUploadTx] = useState<[SubmittableExtrinsic<'promise'> | null, string | null]>([null, null]); const [constructorIndex, setConstructorIndex] = useState(0); const [endowment, isEndowmentValid, setEndowment] = useNonZeroBn(ENDOWMENT); - const [params, setParams] = useState([]); + const [params, setParams] = useState([]); const [[wasm, isWasmValid], setWasm] = useState<[Uint8Array | null, boolean]>([null, false]); const [name, isNameValid, setName] = useNonEmptyString(); const { abiName, contractAbi, errorText, isAbiError, isAbiSupplied, isAbiValid, onChangeAbi, onRemoveAbi } = useAbi(); diff --git a/packages/page-contracts/src/Contracts/Call.tsx b/packages/page-contracts/src/Contracts/Call.tsx index 877f8b664e..48f5d9e791 100644 --- a/packages/page-contracts/src/Contracts/Call.tsx +++ b/packages/page-contracts/src/Contracts/Call.tsx @@ -40,7 +40,7 @@ function Call ({ className = '', contract, messageIndex, onCallResult, onChangeM const [value, isValueValid, setEndowment] = useFormField(BN_ZERO); const [outcomes, setOutcomes] = useState([]); const [execTx, setExecTx] = useState | null>(null); - const [params, setParams] = useState([]); + const [params, setParams] = useState([]); const [isViaCall, toggleViaCall] = useToggle(); const weight = useWeight(); const dbValue = useDebounce(value); diff --git a/packages/page-contracts/src/Contracts/Deploy.tsx b/packages/page-contracts/src/Contracts/Deploy.tsx index 0844e8f199..ad7a94136c 100644 --- a/packages/page-contracts/src/Contracts/Deploy.tsx +++ b/packages/page-contracts/src/Contracts/Deploy.tsx @@ -33,7 +33,7 @@ function Deploy ({ codeHash, constructorIndex = 0, onClose, setConstructorIndex const { api } = useApi(); const weight = useWeight(); const [initTx, setInitTx] = useState | null>(null); - const [params, setParams] = useState([]); + const [params, setParams] = useState([]); const [accountId, isAccountIdValid, setAccountId] = useFormField(null); const [endowment, isEndowmentValid, setEndowment] = useNonZeroBn(ENDOWMENT); const [salt, setSalt] = useState(() => randomAsHex()); diff --git a/packages/page-contracts/src/Contracts/types.ts b/packages/page-contracts/src/Contracts/types.ts index 811618cb29..719d1a8198 100644 --- a/packages/page-contracts/src/Contracts/types.ts +++ b/packages/page-contracts/src/Contracts/types.ts @@ -6,7 +6,7 @@ import type { AbiMessage, ContractCallOutcome } from '@polkadot/api-contract/typ export interface CallResult extends ContractCallOutcome { from: string; message: AbiMessage; - params: any[]; + params: unknown[]; when: Date; } diff --git a/packages/page-contracts/src/Contracts/util.tsx b/packages/page-contracts/src/Contracts/util.tsx index c49345f923..73dc8a232d 100644 --- a/packages/page-contracts/src/Contracts/util.tsx +++ b/packages/page-contracts/src/Contracts/util.tsx @@ -35,7 +35,7 @@ export function getContractForAddress (api: ApiPromise, address: string | null): } } -export function getCallMessageOptions (callContract: Contract | null): any[] { +export function getCallMessageOptions (callContract: Contract | null): unknown[] { return callContract ? callContract.abi.messages.map((m, index): { key: string; text: React.ReactNode; value: number } => ({ key: m.identifier, diff --git a/packages/page-contracts/src/shared/MessageSignature.tsx b/packages/page-contracts/src/shared/MessageSignature.tsx index bebb59a035..0781b532f3 100644 --- a/packages/page-contracts/src/shared/MessageSignature.tsx +++ b/packages/page-contracts/src/shared/MessageSignature.tsx @@ -18,7 +18,7 @@ export interface Props { asConstructor?: boolean; className?: string; message: AbiMessage; - params?: any[]; + params?: unknown[]; withTooltip?: boolean; } diff --git a/packages/page-contracts/src/shared/Params.tsx b/packages/page-contracts/src/shared/Params.tsx index 03a2c5d030..951d828ddf 100644 --- a/packages/page-contracts/src/shared/Params.tsx +++ b/packages/page-contracts/src/shared/Params.tsx @@ -11,7 +11,7 @@ import UIParams from '@polkadot/react-params'; interface Props { isDisabled?: boolean; params?: ParamDef[] | null | ''; - onChange: (values: any[]) => void; + onChange: (values: unknown[]) => void; onEnter?: () => void; registry: Registry; } diff --git a/packages/page-explorer/src/BlockInfo/Logs.tsx b/packages/page-explorer/src/BlockInfo/Logs.tsx index b2c5650df2..c193fa9286 100644 --- a/packages/page-explorer/src/BlockInfo/Logs.tsx +++ b/packages/page-explorer/src/BlockInfo/Logs.tsx @@ -86,11 +86,11 @@ function formatVector (vector: Vec): React.ReactNode { function formatItem (item: DigestItem): React.ReactNode { if (item.value instanceof Struct) { - return formatStruct(item.value); + return formatStruct(item.value as Struct); } else if (item.value instanceof Tuple) { return formatTuple(item.value); } else if (item.value instanceof Vec) { - return formatVector(item.value); + return formatVector(item.value as Vec); } else if (item.value instanceof Raw) { return formatU8a(item.value); } diff --git a/packages/page-explorer/src/Forks.tsx b/packages/page-explorer/src/Forks.tsx index fdf1cae22c..eea6b0ff91 100644 --- a/packages/page-explorer/src/Forks.tsx +++ b/packages/page-explorer/src/Forks.tsx @@ -313,7 +313,7 @@ function Forks ({ className }: Props): React.ReactElement | null { if (!headersRef.current.has(hash)) { // if this is the first, add to the root entry if (firstNumRef.current === bn) { - (childrenRef.current.get('root') as any[]).push(hash); + (childrenRef.current.get('root') as unknown[]).push(hash); } // add to the header map @@ -323,7 +323,7 @@ function Forks ({ className }: Props): React.ReactElement | null { // check to see if the children already has a entry if (childrenRef.current.has(parent)) { isFork = true; - (childrenRef.current.get(parent) as any[]).push(hash); + (childrenRef.current.get(parent) as unknown[]).push(hash); } else { childrenRef.current.set(parent, [hash]); } diff --git a/packages/page-js/src/Playground.tsx b/packages/page-js/src/Playground.tsx index 6b4143f81c..7d3769fb6b 100644 --- a/packages/page-js/src/Playground.tsx +++ b/packages/page-js/src/Playground.tsx @@ -27,8 +27,8 @@ import { useTranslation } from './translate'; interface Injected { api: ApiPromise; console: { - error: (...args: any[]) => void; - log: (...args: any[]) => void; + error: (...args: unknown[]) => void; + log: (...args: unknown[]) => void; }; hashing: typeof hashing; keyring: KeyringInstance | null; @@ -44,7 +44,7 @@ const DEFAULT_NULL = { Atomics: null, Bluetooth: null, Clipboard: null, Document const snippets = JSON.parse(JSON.stringify(allSnippets)) as Snippet[]; let hasSnippetWrappers = false; -function setupInjected ({ api, isDevelopment }: ApiProps, setIsRunning: (isRunning: boolean) => void, hookConsole: (type: LogType, args: any[]) => void): Injected { +function setupInjected ({ api, isDevelopment }: ApiProps, setIsRunning: (isRunning: boolean) => void, hookConsole: (type: LogType, args: unknown[]) => void): Injected { return { ...Object .keys(window) @@ -56,8 +56,8 @@ function setupInjected ({ api, isDevelopment }: ApiProps, setIsRunning: (isRunni }, { ...DEFAULT_NULL }), api: api.clone(), console: { - error: (...args: any[]) => hookConsole('error', args), - log: (...args: any[]) => hookConsole('log', args) + error: (...args: unknown[]) => hookConsole('error', args), + log: (...args: unknown[]) => hookConsole('log', args) }, hashing, keyring: isDevelopment @@ -130,7 +130,7 @@ function Playground ({ basePath, className = '' }: Props): React.ReactElement { + (type: LogType, args: unknown[]): void => { logs.push({ args, type }); setLogs(logs.slice(0)); }, diff --git a/packages/page-js/src/types.ts b/packages/page-js/src/types.ts index 46d423fe1e..ffe530067d 100644 --- a/packages/page-js/src/types.ts +++ b/packages/page-js/src/types.ts @@ -6,7 +6,7 @@ import type { LabelProps, SemanticShorthandItem } from 'semantic-ui-react'; export type LogType = 'error' | 'log'; export interface Log { - args: any[]; + args: unknown[]; type: LogType; } diff --git a/packages/page-rpc/src/Rpc/Results.tsx b/packages/page-rpc/src/Rpc/Results.tsx index 9cf11ca31a..2fdb089ed9 100644 --- a/packages/page-rpc/src/Rpc/Results.tsx +++ b/packages/page-rpc/src/Rpc/Results.tsx @@ -32,7 +32,7 @@ function Results ({ queue = [] }: Props): React.ReactElement | null { value={ error ? error.message - :
{valueToText('', result, false)}
+ :
{valueToText('', result as null, false)}
} /> ))} diff --git a/packages/page-signing/src/Verify.tsx b/packages/page-signing/src/Verify.tsx index ebc1b2271c..2a64dea65b 100644 --- a/packages/page-signing/src/Verify.tsx +++ b/packages/page-signing/src/Verify.tsx @@ -28,7 +28,7 @@ function Verify ({ className = '' }: Props): React.ReactElement { const [{ data, isHexData }, setData] = useState<{ data: string; isHexData: boolean }>({ data: '', isHexData: false }); const [{ isValidPk, publicKey }, setPublicKey] = useState<{ isValidPk: boolean; publicKey: Uint8Array | null }>({ isValidPk: false, publicKey: null }); const [{ isValidSignature, signature }, setSignature] = useState<{ isValidSignature: boolean; signature: string }>({ isValidSignature: false, signature: '' }); - const [cryptoOptions] = useState([{ text: t('Crypto not detected'), value: 'unknown' }].concat(settings.availableCryptos as any[])); + const [cryptoOptions] = useState([{ text: t('Crypto not detected'), value: 'unknown' }].concat(settings.availableCryptos as { text: string; value: string }[])); useEffect((): void => { let cryptoType: CryptoTypes = 'unknown'; diff --git a/packages/page-staking/src/Actions/partials/SessionKey.tsx b/packages/page-staking/src/Actions/partials/SessionKey.tsx index 0cc70c8f27..001605e85b 100644 --- a/packages/page-staking/src/Actions/partials/SessionKey.tsx +++ b/packages/page-staking/src/Actions/partials/SessionKey.tsx @@ -31,8 +31,7 @@ function SessionKey ({ className = '', controllerId, onChange, stashId, withFocu try { onChange({ sessionTx: isHex(keys) - // this is weird... :( - ? api.tx.session.setKeys(keys as any, EMPTY_PROOF) + ? api.tx.session.setKeys(keys, EMPTY_PROOF) : null }); } catch { diff --git a/packages/page-staking/src/Actions/useInactives.ts b/packages/page-staking/src/Actions/useInactives.ts index 4a8b4d16b7..c5bb7f7491 100644 --- a/packages/page-staking/src/Actions/useInactives.ts +++ b/packages/page-staking/src/Actions/useInactives.ts @@ -1,6 +1,7 @@ // Copyright 2017-2021 @polkadot/app-staking authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { QueryableStorageMultiArg } from '@polkadot/api/types'; import type { DeriveSessionIndexes } from '@polkadot/api-derive/types'; import type { Option } from '@polkadot/types'; import type { EraIndex, Exposure, Nominations, SlashingSpans } from '@polkadot/types/interfaces'; @@ -93,7 +94,7 @@ export default function useInactives (stashId: string, nominees?: string[]): Ina if (mountedRef.current && nominees && nominees.length && indexes) { api .queryMulti( - [[api.query.staking.nominators, stashId] as any] + [[api.query.staking.nominators, stashId] as QueryableStorageMultiArg<'promise'>] .concat( api.query.staking.erasStakers ? nominees.map((id) => [api.query.staking.erasStakers, [indexes.activeEra, id]]) diff --git a/packages/page-storage/src/Query.tsx b/packages/page-storage/src/Query.tsx index 3b9a404677..a05d07ffbb 100644 --- a/packages/page-storage/src/Query.tsx +++ b/packages/page-storage/src/Query.tsx @@ -72,7 +72,7 @@ function createComponent (type: string, Component: React.ComponentType, def // In order to modify the parameters which are used to render the default component, we can use this method refresh: (contentShorten: boolean): React.ComponentType => renderHelper( - (value: any) =>
{valueToText(type, value, contentShorten)}
, + (value: unknown) =>
{valueToText(type, value as null, contentShorten)}
, defaultProps ), // In order to replace the default component during runtime we can provide a RenderFn to create a new 'plugged' component @@ -128,7 +128,7 @@ function getCachedComponent (registry: Registry, query: QueryTypes): CacheInstan const defaultProps = { className: 'ui--output' }; const Component = renderHelper( // By default we render a simple div node component with the query results in it - (value: any) =>
{valueToText(type, value, true)}
, + (value: unknown) =>
{valueToText(type, value as null, true)}
, defaultProps ); diff --git a/packages/react-api/package.json b/packages/react-api/package.json index b81aacebaf..1a38271958 100644 --- a/packages/react-api/package.json +++ b/packages/react-api/package.json @@ -6,9 +6,9 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.15.4", - "@polkadot/api": "^6.3.2-17", - "@polkadot/extension-compat-metamask": "^0.40.4-0", - "@polkadot/extension-dapp": "^0.40.4-0", + "@polkadot/api": "^6.3.2-19", + "@polkadot/extension-compat-metamask": "^0.40.4-2", + "@polkadot/extension-dapp": "^0.40.4-2", "@substrate/connect": "^0.4.5", "fflate": "^0.7.1", "rxjs": "^7.4.0" diff --git a/packages/react-api/src/hoc/call.tsx b/packages/react-api/src/hoc/call.tsx index d1f894a8cc..3c891184f9 100644 --- a/packages/react-api/src/hoc/call.tsx +++ b/packages/react-api/src/hoc/call.tsx @@ -9,7 +9,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import type { ApiProps, CallState as State, SubtractProps } from '../types'; +import type { ApiProps, CallState as State, OnChangeCb, SubtractProps } from '../types'; import type { Options } from './types'; import React from 'react'; @@ -22,13 +22,13 @@ import withApi from './api'; // FIXME This is not correct, we need some junction of derive, query & consts interface Method { - (...params: any[]): Promise; - at: (hash: Uint8Array | string, ...params: any[]) => Promise; + (...params: unknown[]): Promise; + at: (hash: Uint8Array | string, ...params: unknown[]) => Promise; meta: any; - multi: (params: any[], cb: (value?: any) => void) => Promise; + multi: (params: unknown[], cb: (value?: any) => void) => Promise; } -type ApiMethodInfo = [Method, any[], string]; +type ApiMethodInfo = [Method, unknown[], string]; const NOOP = (): void => { // ignore @@ -118,7 +118,7 @@ export default function withCall

(endpoint: string, { at, at } } - private getParams (props: any): [boolean, any[]] { + private getParams (props: any): [boolean, unknown[]] { const paramValue = paramPick ? paramPick(props) : paramName @@ -162,20 +162,20 @@ export default function withCall

(endpoint: string, { at, at section, method ]; - } + }; - private getApiMethod (newParams: any[]): ApiMethodInfo { + private getApiMethod (newParams: unknown[]): ApiMethodInfo { if (endpoint === 'subscribe') { const [fn, ...params] = newParams; return [ - fn, + fn as Method, params, 'subscribe' ]; } - const endpoints: string[] = [endpoint].concat(fallbacks || []); + const endpoints = [endpoint].concat(fallbacks || []); const expanded = endpoints.map(this.constructApiSection); const [apiSection, area, section, method] = expanded.find(([apiSection]): boolean => !!apiSection @@ -198,7 +198,7 @@ export default function withCall

(endpoint: string, { at, at ]; } - private async subscribe ([isValid, newParams]: [boolean, any[]]): Promise { + private async subscribe ([isValid, newParams]: [boolean, unknown[]]): Promise { if (!isValid || skipIf(this.props)) { return; } @@ -267,7 +267,7 @@ export default function withCall

(endpoint: string, { at, at return; } - triggerChange(callResult, callOnResult, props.callOnResult); + triggerChange(callResult as OnChangeCb, callOnResult, props.callOnResult as OnChangeCb); this.nextState({ callResult, diff --git a/packages/react-api/src/hoc/callDiv.tsx b/packages/react-api/src/hoc/callDiv.tsx index 1048b17200..206e711b5f 100644 --- a/packages/react-api/src/hoc/callDiv.tsx +++ b/packages/react-api/src/hoc/callDiv.tsx @@ -22,7 +22,7 @@ export default function withCallDiv (endpoint: string, options: Options = {}) {...defaultProps} className={[className || '', callUpdated ? 'rx--updated' : undefined].join(' ')} > - {label}{render(callResult)}{children} + {label}{render(callResult as T)}{children} ); } diff --git a/packages/react-api/src/hoc/calls.ts b/packages/react-api/src/hoc/calls.ts index 1530b721f2..b4e770063f 100644 --- a/packages/react-api/src/hoc/calls.ts +++ b/packages/react-api/src/hoc/calls.ts @@ -18,8 +18,8 @@ export default function withCalls

(...calls: Call[]): (Component: React.Comp .reverse() .reduce((Component, call): React.ComponentType => { return Array.isArray(call) - ? withCall(...call)(Component as any) - : withCall(call)(Component as any); + ? withCall(...call)(Component as unknown as React.ComponentType) + : withCall(call)(Component as unknown as React.ComponentType); }, Component); }; } diff --git a/packages/react-api/src/hoc/observable.tsx b/packages/react-api/src/hoc/observable.tsx index 14831fc31a..a7a6834ae1 100644 --- a/packages/react-api/src/hoc/observable.tsx +++ b/packages/react-api/src/hoc/observable.tsx @@ -3,7 +3,7 @@ // TODO: Lots of duplicated code between this and withObservable, surely there is a better way of doing this? -import type { Observable } from 'rxjs'; +import type { Observable, OperatorFunction } from 'rxjs'; import type { CallState } from '../types'; import type { DefaultProps, HOC, Options, RenderFn } from './types'; @@ -34,10 +34,10 @@ export default function withObservable (observable: Observable

, { callO subscriptions: [ observable .pipe( - map(transform), + map(transform) as OperatorFunction, catchError(() => of(undefined)) ) - .subscribe((value: any) => this.triggerUpdate(this.props, value)), + .subscribe((value) => this.triggerUpdate(this.props, value as T)), intervalObservable(this) ] }); @@ -66,7 +66,7 @@ export default function withObservable (observable: Observable

, { callO } catch (error) { console.error(this.props, error); } - } + }; public override render (): React.ReactNode { const { children } = this.props; diff --git a/packages/react-api/src/hoc/types.ts b/packages/react-api/src/hoc/types.ts index 844eaf1410..816a93db2e 100644 --- a/packages/react-api/src/hoc/types.ts +++ b/packages/react-api/src/hoc/types.ts @@ -18,9 +18,9 @@ export interface Options { callOnResult?: OnChangeCb; fallbacks?: string[]; isMulti?: boolean; - params?: any[]; + params?: unknown[]; paramName?: string; - paramPick?: (props: any) => any; + paramPick?: (props: any) => unknown; paramValid?: boolean; propName?: string; skipIf?: (props: any) => boolean; @@ -30,9 +30,9 @@ export interface Options { export type RenderFn = (value?: any) => React.ReactNode; -export type StorageTransform = (input: any, index: number) => any | null; +export type StorageTransform = (input: any, index: number) => unknown | null; -export type HOC = (Component: React.ComponentType, defaultProps?: DefaultProps, render?: RenderFn) => React.ComponentType; +export type HOC = (Component: React.ComponentType, defaultProps?: DefaultProps, render?: RenderFn) => React.ComponentType; export interface ApiMethod { name: string; diff --git a/packages/react-api/src/util/historic.ts b/packages/react-api/src/util/historic.ts index 43ad5b4430..d0e1cbaae5 100644 --- a/packages/react-api/src/util/historic.ts +++ b/packages/react-api/src/util/historic.ts @@ -5,9 +5,9 @@ import type { Hash } from '@polkadot/types/interfaces'; import type { Codec } from '@polkadot/types/types'; // eslint-disable-next-line @typescript-eslint/no-unused-vars -type AtQuery = (hash: string | Uint8Array, ...params: I) => Promise; +type AtQuery = (hash: string | Uint8Array, ...params: I) => Promise; -export default async function getHistoric (atQuery: AtQuery, params: I, hashes: Hash[]): Promise<[Hash, T][]> { +export default async function getHistoric (atQuery: AtQuery, params: I, hashes: Hash[]): Promise<[Hash, T][]> { return Promise .all(hashes.map((hash): Promise => atQuery(hash, ...params) as Promise)) .then((results): [Hash, T][] => diff --git a/packages/react-components/src/Badge.tsx b/packages/react-components/src/Badge.tsx index 33a856ed11..f60f3aac55 100644 --- a/packages/react-components/src/Badge.tsx +++ b/packages/react-components/src/Badge.tsx @@ -25,7 +25,7 @@ let badgeId = 0; function Badge ({ className = '', color = 'normal', hover, hoverAction, icon, info, isSmall, onClick }: Props): React.ReactElement | null { const badgeTestId = `${icon ? `${icon}-` : ''}badge`; - const { theme } = useContext(ThemeContext); + const { theme } = useContext(ThemeContext as React.Context); const [trigger] = useState(() => `${badgeTestId}-hover-${Date.now()}-${badgeId++}`); const extraProps = hover diff --git a/packages/react-components/src/Dropdown.tsx b/packages/react-components/src/Dropdown.tsx index 9722399947..f955f04bc0 100644 --- a/packages/react-components/src/Dropdown.tsx +++ b/packages/react-components/src/Dropdown.tsx @@ -36,7 +36,7 @@ interface Props