diff --git a/eslint.config.js b/eslint.config.js index a2b25c75..8946f3c5 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -4,5 +4,10 @@ import baseConfig from '@polkadot/dev/config/eslint'; export default [ - ...baseConfig + ...baseConfig, + { + rules: { + 'import/extensions': 'off' + } + } ]; diff --git a/packages/extension-base/package.json b/packages/extension-base/package.json index ab58e83d..fbcd324a 100644 --- a/packages/extension-base/package.json +++ b/packages/extension-base/package.json @@ -39,6 +39,7 @@ "tslib": "^2.6.2" }, "devDependencies": { + "@polkadot/dev-test": "^0.79.3", "@polkadot/extension-mocks": "0.48.3-1-x" } } diff --git a/packages/extension-base/src/background/handlers/Extension.spec.ts b/packages/extension-base/src/background/handlers/Extension.spec.ts index 64676d42..6c0fd570 100644 --- a/packages/extension-base/src/background/handlers/Extension.spec.ts +++ b/packages/extension-base/src/background/handlers/Extension.spec.ts @@ -1,12 +1,11 @@ // Copyright 2019-2024 @polkadot/extension-base authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - /* global chrome */ import '@polkadot/extension-mocks/chrome'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { ResponseSigning } from '@polkadot/extension-base/background/types'; import type { MetadataDef } from '@polkadot/extension-inject/types'; import type { KeyringPair } from '@polkadot/keyring/types'; diff --git a/packages/extension-dapp/package.json b/packages/extension-dapp/package.json index 12cfa6b4..f1b1f004 100644 --- a/packages/extension-dapp/package.json +++ b/packages/extension-dapp/package.json @@ -26,6 +26,9 @@ "@polkadot/util-crypto": "^12.6.2", "tslib": "^2.6.2" }, + "devDependencies": { + "@polkadot/dev-test": "^0.79.3" + }, "peerDependencies": { "@polkadot/api": "*", "@polkadot/util": "*", diff --git a/packages/extension-dapp/src/wrapBytes.spec.ts b/packages/extension-dapp/src/wrapBytes.spec.ts index 924e96ca..6165d11b 100644 --- a/packages/extension-dapp/src/wrapBytes.spec.ts +++ b/packages/extension-dapp/src/wrapBytes.spec.ts @@ -1,7 +1,7 @@ // Copyright 2019-2024 @polkadot/extension authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import { u8aConcat, u8aEq, u8aToString } from '@polkadot/util'; diff --git a/packages/extension-inject/package.json b/packages/extension-inject/package.json index 9a8990f2..36cb6344 100644 --- a/packages/extension-inject/package.json +++ b/packages/extension-inject/package.json @@ -27,6 +27,7 @@ "tslib": "^2.6.2" }, "devDependencies": { + "@polkadot/dev-test": "^0.79.3", "@types/chrome": "^0.0.254", "@types/firefox-webext-browser": "^111.0.5" }, diff --git a/packages/extension-inject/src/cyrb53.spec.ts b/packages/extension-inject/src/cyrb53.spec.ts index bc61069f..45beb990 100644 --- a/packages/extension-inject/src/cyrb53.spec.ts +++ b/packages/extension-inject/src/cyrb53.spec.ts @@ -1,7 +1,7 @@ // Copyright 2019-2024 @polkadot/extension-inject authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import { cyrb53 } from './cyrb53.js'; diff --git a/packages/extension-ui/package.json b/packages/extension-ui/package.json index 0f65b805..be8a0431 100644 --- a/packages/extension-ui/package.json +++ b/packages/extension-ui/package.json @@ -52,6 +52,7 @@ "tslib": "^2.6.2" }, "devDependencies": { + "@polkadot/dev-test": "^0.79.3", "@polkadot/extension-mocks": "0.48.3-1-x", "@types/enzyme": "^3.10.18", "@types/enzyme-adapter-react-16": "^1.0.9", diff --git a/packages/extension-ui/src/Popup/Accounts/Account.spec.tsx b/packages/extension-ui/src/Popup/Accounts/Account.spec.tsx index 562522c9..48e951d5 100644 --- a/packages/extension-ui/src/Popup/Accounts/Account.spec.tsx +++ b/packages/extension-ui/src/Popup/Accounts/Account.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/Popup/Authorize/Authorize.spec.tsx b/packages/extension-ui/src/Popup/Authorize/Authorize.spec.tsx index 667363d3..988290aa 100644 --- a/packages/extension-ui/src/Popup/Authorize/Authorize.spec.tsx +++ b/packages/extension-ui/src/Popup/Authorize/Authorize.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { AccountJson, AuthorizeRequest } from '@polkadot/extension-base/background/types'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; diff --git a/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.spec.tsx b/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.spec.tsx index a57f2736..0af6ec51 100644 --- a/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.spec.tsx +++ b/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/Popup/Derive/Derive.spec.tsx b/packages/extension-ui/src/Popup/Derive/Derive.spec.tsx index 9f8f4c4e..81748399 100644 --- a/packages/extension-ui/src/Popup/Derive/Derive.spec.tsx +++ b/packages/extension-ui/src/Popup/Derive/Derive.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { AccountJson, ResponseDeriveValidate } from '@polkadot/extension-base/background/types'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; diff --git a/packages/extension-ui/src/Popup/Export.spec.tsx b/packages/extension-ui/src/Popup/Export.spec.tsx index bc3b0349..3668d048 100644 --- a/packages/extension-ui/src/Popup/Export.spec.tsx +++ b/packages/extension-ui/src/Popup/Export.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { KeyringPair$Json } from '@polkadot/keyring/types'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; diff --git a/packages/extension-ui/src/Popup/ImportQr.spec.tsx b/packages/extension-ui/src/Popup/ImportQr.spec.tsx index ef9789cb..40add517 100644 --- a/packages/extension-ui/src/Popup/ImportQr.spec.tsx +++ b/packages/extension-ui/src/Popup/ImportQr.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/Popup/ImportSeed/ImportSeed.spec.tsx b/packages/extension-ui/src/Popup/ImportSeed/ImportSeed.spec.tsx index 6ccf31ce..b637c6c2 100644 --- a/packages/extension-ui/src/Popup/ImportSeed/ImportSeed.spec.tsx +++ b/packages/extension-ui/src/Popup/ImportSeed/ImportSeed.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/Popup/Signing/Signing.spec.tsx b/packages/extension-ui/src/Popup/Signing/Signing.spec.tsx index 41bcbb9c..01cf3463 100644 --- a/packages/extension-ui/src/Popup/Signing/Signing.spec.tsx +++ b/packages/extension-ui/src/Popup/Signing/Signing.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { SigningRequest } from '@polkadot/extension-base/background/types'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; diff --git a/packages/extension-ui/src/components/AccountNamePasswordCreation.spec.tsx b/packages/extension-ui/src/components/AccountNamePasswordCreation.spec.tsx index 4cafbb85..46e084cf 100644 --- a/packages/extension-ui/src/components/AccountNamePasswordCreation.spec.tsx +++ b/packages/extension-ui/src/components/AccountNamePasswordCreation.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/components/Address.spec.tsx b/packages/extension-ui/src/components/Address.spec.tsx index 23f3f2fc..b3b942a9 100644 --- a/packages/extension-ui/src/components/Address.spec.tsx +++ b/packages/extension-ui/src/components/Address.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { AccountJson } from '@polkadot/extension-base/background/types'; import type { IconTheme } from '@polkadot/react-identicon/types'; import type { HexString } from '@polkadot/util/types'; diff --git a/packages/extension-ui/src/components/ErrorBoundary.tsx b/packages/extension-ui/src/components/ErrorBoundary.tsx index 86b7e582..9c3eee6f 100644 --- a/packages/extension-ui/src/components/ErrorBoundary.tsx +++ b/packages/extension-ui/src/components/ErrorBoundary.tsx @@ -1,76 +1,62 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributor // SPDX-License-Identifier: Apache-2.0 -import type { WithTranslation } from 'react-i18next'; +import React, { useCallback, useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; -import React from 'react'; -import { withTranslation } from 'react-i18next'; +import Header from '../partials/Header'; +import Button from './Button'; +import ButtonArea from './ButtonArea'; +import VerticalSpace from './VerticalSpace'; -import Header from '../partials/Header.js'; -import Button from './Button.js'; -import ButtonArea from './ButtonArea.js'; -import VerticalSpace from './VerticalSpace.js'; - -interface Props extends WithTranslation { +interface ErrorBoundaryProps { children: React.ReactNode; className?: string; error?: Error | null; trigger?: string; } -interface State { - error: Error | null; -} +const ErrorBoundary: React.FC = ({ children, error: propError, trigger }) => { + const { t } = useTranslation(); + const [error, setError] = useState(null); -const translate = withTranslation(); - -// NOTE: This is the only way to do an error boundary, via extend -class ErrorBoundary extends React.Component { - public override state: State = { error: null }; - - public static getDerivedStateFromError (error: Error): Partial { - return { error }; - } - - public override componentDidUpdate (prevProps: Props) { - const { error } = this.state; - const { trigger } = this.props; - - if (error !== null && (prevProps.trigger !== trigger)) { - this.setState({ error: null }); + useEffect(() => { + if (error !== null && trigger) { + setError(null); } - } + }, [error, trigger]); - #goHome = () => { - this.setState({ error: null }); + useEffect(() => { + if (propError) { + setError(propError); + } + }, [propError]); + + const goHome = useCallback(() => { + setError(null); window.location.hash = '/'; - }; + }, [setError]); - public override render (): React.ReactNode { - const { children, t } = this.props; - const { error } = this.state; - - return error - ? ( - <> -
, string>('An error occurred')} /> -
- {t('Something went wrong with the query and rendering of this component. {{message}}', { - replace: { message: error.message } - })} -
- - - - - - ) - : children; + if (error) { + return ( + <> +
+
+ {t('Something went wrong with the query and rendering of this component. {{message}}', { + replace: { message: error.message } + })} +
+ + + + + + ); } -} -export default translate(ErrorBoundary); + return <>{children}; +}; + +export default ErrorBoundary; diff --git a/packages/extension-ui/src/messaging.spec.ts b/packages/extension-ui/src/messaging.spec.ts index d7638871..8cb9dbc5 100644 --- a/packages/extension-ui/src/messaging.spec.ts +++ b/packages/extension-ui/src/messaging.spec.ts @@ -1,12 +1,12 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - /* global chrome */ import '@polkadot/extension-mocks/chrome'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; + import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/partials/Header.spec.tsx b/packages/extension-ui/src/partials/Header.spec.tsx index fb3c3186..915631da 100644 --- a/packages/extension-ui/src/partials/Header.spec.tsx +++ b/packages/extension-ui/src/partials/Header.spec.tsx @@ -1,11 +1,10 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - import '@polkadot/extension-mocks/chrome'; import type { ReactWrapper } from 'enzyme'; +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import enzyme from 'enzyme'; diff --git a/packages/extension-ui/src/util/buildHierarchy.spec.ts b/packages/extension-ui/src/util/buildHierarchy.spec.ts index fe504fce..ec3bc57b 100644 --- a/packages/extension-ui/src/util/buildHierarchy.spec.ts +++ b/packages/extension-ui/src/util/buildHierarchy.spec.ts @@ -1,10 +1,9 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// - /* eslint-disable jest/expect-expect */ +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import type { AccountJson, AccountWithChildren } from '@polkadot/extension-base/background/types'; import { buildHierarchy } from './buildHierarchy.js'; diff --git a/packages/extension-ui/src/util/nextDerivationPath.spec.ts b/packages/extension-ui/src/util/nextDerivationPath.spec.ts index ffae2740..aa151837 100644 --- a/packages/extension-ui/src/util/nextDerivationPath.spec.ts +++ b/packages/extension-ui/src/util/nextDerivationPath.spec.ts @@ -1,7 +1,7 @@ // Copyright 2019-2024 @polkadot/extension-ui authors & contributors // SPDX-License-Identifier: Apache-2.0 -/// +import type * as _ from '@polkadot/dev-test/globals.d.ts'; import { nextDerivationPath } from './nextDerivationPath.js'; diff --git a/tsconfig.base.json b/tsconfig.base.json index 59049c5a..848199bd 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -4,7 +4,7 @@ "composite": true, /* FIXME Dropzone is problematic with nodenext resolution */ "module": "ESNext", - "moduleResolution": "node", + "moduleResolution": "Bundler", "paths": { "@polkadot/extension": ["extension/src/index.ts"], "@polkadot/extension/*": ["extension/src/*.ts"], diff --git a/yarn.lock b/yarn.lock index 392d0f62..81c93430 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,7 +63,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.23.2": version: 7.23.2 resolution: "@babel/runtime@npm:7.23.2" dependencies: @@ -72,6 +72,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.22.5": + version: 7.24.7 + resolution: "@babel/runtime@npm:7.24.7" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10/7b77f566165dee62db3db0296e71d08cafda3f34e1b0dcefcd68427272e17c1704f4e4369bff76651b07b6e49d3ea5a0ce344818af9116e9292e4381e0918c76 + languageName: node + linkType: hard + "@babel/types@npm:^7.8.3": version: 7.22.10 resolution: "@babel/types@npm:7.22.10" @@ -878,6 +887,7 @@ __metadata: resolution: "@polkadot/extension-base@workspace:packages/extension-base" dependencies: "@polkadot/api": "npm:^12.0.2" + "@polkadot/dev-test": "npm:^0.79.3" "@polkadot/extension-chains": "npm:0.48.3-1-x" "@polkadot/extension-dapp": "npm:0.48.3-1-x" "@polkadot/extension-inject": "npm:0.48.3-1-x" @@ -932,6 +942,7 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/extension-dapp@workspace:packages/extension-dapp" dependencies: + "@polkadot/dev-test": "npm:^0.79.3" "@polkadot/extension-inject": "npm:0.48.3-1-x" "@polkadot/util": "npm:^12.6.2" "@polkadot/util-crypto": "npm:^12.6.2" @@ -948,6 +959,7 @@ __metadata: resolution: "@polkadot/extension-inject@workspace:packages/extension-inject" dependencies: "@polkadot/api": "npm:^12.0.2" + "@polkadot/dev-test": "npm:^0.79.3" "@polkadot/rpc-provider": "npm:^12.0.2" "@polkadot/types": "npm:^12.0.2" "@polkadot/util": "npm:^12.6.2" @@ -982,6 +994,7 @@ __metadata: "@fortawesome/react-fontawesome": "npm:^0.2.0" "@paraspell/xcm-analyser": "npm:^1.3.0" "@polkadot/api": "npm:^12.0.2" + "@polkadot/dev-test": "npm:^0.79.3" "@polkadot/extension-base": "npm:0.48.3-1-x" "@polkadot/extension-chains": "npm:0.48.3-1-x" "@polkadot/extension-dapp": "npm:0.48.3-1-x"