diff --git a/.eslintrc.json b/.eslintrc.json index 4e133b0de61f..51b08c417f4d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,7 +7,7 @@ "env": { "node": true }, - "plugins": ["unused-imports", "lodash"], + "plugins": ["unused-imports"], "rules": { "constructor-super": "error", "dot-notation": "error", @@ -37,7 +37,6 @@ "no-template-curly-in-string": "error", "prefer-const": "warn", "use-isnan": "error", - "unused-imports/no-unused-imports-ts": "error", - "lodash/import-scope": ["error", "member"] + "unused-imports/no-unused-imports-ts": "error" } } diff --git a/package.json b/package.json index 800ff2a47c28..02eabb6f1dfb 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "devDependencies": { "@commitlint/cli": "^16.0.0", "@commitlint/config-conventional": "^16.0.0", + "@dimensiondev/eslint-plugin": "^0.0.1-20211222115249-7984aa5", "@dimensiondev/patch-package": "^6.5.0", "@jest/globals": "^27.4.4", "@magic-works/i18n-codegen": "^0.0.6", @@ -63,7 +64,6 @@ "eslint": "8.5.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "2.25.3", - "eslint-plugin-lodash": "^7.3.0", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.28.0", "eslint-plugin-react-hooks": "^4.3.0", diff --git a/packages/.eslintrc.json b/packages/.eslintrc.json index ff7c62aad61a..73167848d18a 100644 --- a/packages/.eslintrc.json +++ b/packages/.eslintrc.json @@ -1,9 +1,14 @@ { "root": true, "parser": "@typescript-eslint/parser", - "parserOptions": { "ecmaVersion": 7, "sourceType": "module", "project": "./tsconfig.eslint.json" }, + "parserOptions": { + "ecmaVersion": 7, + "sourceType": "module", + "project": "./tsconfig.eslint.json", + "warnOnUnsupportedTypeScriptVersion": false + }, "extends": ["../.eslintrc.json", "plugin:import/typescript"], - "plugins": ["@typescript-eslint", "unused-imports", "lodash", "import", "unicorn", "react", "react-hooks"], + "plugins": ["@typescript-eslint", "@dimensiondev", "unused-imports", "import", "unicorn", "react", "react-hooks"], "rules": { "no-restricted-imports": [ "error", @@ -21,6 +26,13 @@ "yoda": "error", "radix": "error", "eqeqeq": ["error", "always"], + "import/no-deprecated": "warn", + "no-cond-assign": "error", + "no-constant-condition": "error", + "no-script-url": "error", + "no-throw-literal": "error", + "no-unmodified-loop-condition": "error", + "no-useless-concat": "error", "prefer-regex-literals": "error", "react/jsx-boolean-value": "error", "react/jsx-curly-brace-presence": ["warn", { "props": "never", "children": "never" }], @@ -30,9 +42,6 @@ "react/self-closing-comp": ["warn", { "component": true, "html": true }], "react-hooks/exhaustive-deps": "off", "react-hooks/rules-of-hooks": "error", - "import/no-deprecated": "warn", - "lodash/import-scope": ["error", "member"], - "unused-imports/no-unused-imports-ts": "warn", "unicorn/better-regex": "error", "unicorn/catch-error-name": ["error", { "ignore": ["^err$"] }], "unicorn/no-instanceof-array": "error", @@ -43,19 +52,30 @@ "unicorn/prefer-dom-node-dataset": "error", "unicorn/prefer-number-properties": "error", "unicorn/throw-new-error": "error", + "unused-imports/no-unused-imports-ts": "error", + "@dimensiondev/no-jsx-template-literal": "error", + "@dimensiondev/no-number-constructor": "off", + "@dimensiondev/no-simple-template-literal": "error", + "@dimensiondev/no-unsafe-location": "error", + "@dimensiondev/prefer-early-return": "error", "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/no-base-to-string": "off", "@typescript-eslint/no-for-in-array": "error", "@typescript-eslint/no-implied-eval": "error", + "@typescript-eslint/no-inferrable-types": "error", "@typescript-eslint/no-invalid-this": "error", "@typescript-eslint/no-loop-func": "error", "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/prefer-enum-initializers": "error", "@typescript-eslint/prefer-for-of": "error", "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-literal-enum-member": "error", "@typescript-eslint/prefer-nullish-coalescing": "error", "@typescript-eslint/prefer-optional-chain": "error", "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-regexp-exec": "off", "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/prefer-enum-initializers": "error", - "@typescript-eslint/prefer-literal-enum-member": "error" + "@typescript-eslint/restrict-plus-operands": "off", + "@typescript-eslint/restrict-template-expressions": "off" } } diff --git a/packages/dashboard/src/components/DashboardFrame/Navigation.tsx b/packages/dashboard/src/components/DashboardFrame/Navigation.tsx index c641b0390772..46b70387d6b3 100644 --- a/packages/dashboard/src/components/DashboardFrame/Navigation.tsx +++ b/packages/dashboard/src/components/DashboardFrame/Navigation.tsx @@ -65,7 +65,7 @@ const ListItemLink = styled(ListItemLinkUnStyled)(({ theme }) => { color: MaskColorVar.textLink, backgroundColor: theme.palette.background.default, position: 'relative', - [`${listItemIconClasses.root}`]: { + [listItemIconClasses.root]: { color: MaskColorVar.textLink, }, '&:after': { @@ -91,7 +91,7 @@ const LogoItem = styled(MuiListItem)(({ theme }) => ({ })) as any as typeof MuiListItem const ItemIcon = styled(ListItemIcon)(({ theme }) => ({ - [`& svg`]: { + '& svg': { fontSize: 36, }, })) diff --git a/packages/dashboard/src/components/MaskAlert/index.tsx b/packages/dashboard/src/components/MaskAlert/index.tsx index 68df853a5a0e..ea0bd1aeec73 100644 --- a/packages/dashboard/src/components/MaskAlert/index.tsx +++ b/packages/dashboard/src/components/MaskAlert/index.tsx @@ -9,8 +9,8 @@ const InfoAlert = styled(Alert)(({ theme }) => ({ display: 'flex', alignItems: 'center', lineHeight: '16px', - color: `${MaskColorVar.secondaryInfoText}`, - fontSize: `${theme.typography.caption.fontSize}`, + color: MaskColorVar.secondaryInfoText, + fontSize: theme.typography.caption.fontSize, }, [`& > .${alertClasses.icon}`]: { alignItems: 'center', @@ -20,45 +20,45 @@ const InfoAlert = styled(Alert)(({ theme }) => ({ }, // standard [`&.${alertClasses.standardInfo}`]: { - backgroundColor: `${getMaskColor(theme).infoBackground}`, + backgroundColor: getMaskColor(theme).infoBackground, }, [`&.${alertClasses.standardInfo} .${alertClasses.icon}`]: { - color: `${getMaskColor(theme).secondaryInfoText}`, + color: getMaskColor(theme).secondaryInfoText, }, [`&.${alertClasses.standardInfo} .${alertClasses.action}`]: { - color: `${getMaskColor(theme).secondaryInfoText}`, + color: getMaskColor(theme).secondaryInfoText, }, // error [`&.${alertClasses.standardError}`]: { - backgroundColor: `${MaskColorVar.redMain.alpha(0.1)}`, + backgroundColor: MaskColorVar.redMain.alpha(0.1), }, [`&.${alertClasses.standardError} .${alertClasses.icon}`]: { - color: `${getMaskColor(theme).redMain}`, + color: getMaskColor(theme).redMain, 'path:first-child': { - fill: `${MaskColorVar.redMain.alpha(0.5)}`, + fill: MaskColorVar.redMain.alpha(0.5), }, path: { - fill: `${getMaskColor(theme).redMain}`, + fill: getMaskColor(theme).redMain, }, }, [`&.${alertClasses.standardError} .${alertClasses.action}`]: { - color: `${getMaskColor(theme).redMain}`, + color: getMaskColor(theme).redMain, }, [`&.${alertClasses.standardError} .${alertClasses.message}`]: { - color: `${getMaskColor(theme).redMain}`, + color: getMaskColor(theme).redMain, }, // success [`&.${alertClasses.standardSuccess}`]: { - backgroundColor: `${MaskColorVar.greenMain.alpha(0.1)}`, + backgroundColor: MaskColorVar.greenMain.alpha(0.1), }, [`&.${alertClasses.standardSuccess} .${alertClasses.icon}`]: { - color: `${getMaskColor(theme).greenMain}`, + color: getMaskColor(theme).greenMain, }, [`&.${alertClasses.standardSuccess} .${alertClasses.action}`]: { - color: `${getMaskColor(theme).greenMain}`, + color: getMaskColor(theme).greenMain, }, [`&.${alertClasses.standardSuccess} .${alertClasses.message}`]: { - color: `${getMaskColor(theme).greenMain}`, + color: getMaskColor(theme).greenMain, }, })) diff --git a/packages/dashboard/src/components/Mnemonic/MnemonicReveal.tsx b/packages/dashboard/src/components/Mnemonic/MnemonicReveal.tsx index c0da15002a12..d96a658d7a2d 100644 --- a/packages/dashboard/src/components/Mnemonic/MnemonicReveal.tsx +++ b/packages/dashboard/src/components/Mnemonic/MnemonicReveal.tsx @@ -23,7 +23,7 @@ export function MnemonicReveal(props: MnemonicRevealProps) { return ( {words.map((item, index) => ( - + {item} ))} diff --git a/packages/dashboard/src/components/PageFrame/index.tsx b/packages/dashboard/src/components/PageFrame/index.tsx index 37b125329c10..181966cdaa2b 100644 --- a/packages/dashboard/src/components/PageFrame/index.tsx +++ b/packages/dashboard/src/components/PageFrame/index.tsx @@ -61,7 +61,7 @@ const PageTitle = styled(Grid)(({ theme }) => ({ const Containment = styled(Grid)(({ theme }) => ({ maxWidth: '100%', display: 'flex', - height: `calc(100vh - 64px)`, + height: 'calc(100vh - 64px)', overflow: 'hidden', })) diff --git a/packages/dashboard/src/components/Restore/BackupInfoCard.tsx b/packages/dashboard/src/components/Restore/BackupInfoCard.tsx index 0e14621f4ea0..f9f8fe7fbcb7 100644 --- a/packages/dashboard/src/components/Restore/BackupInfoCard.tsx +++ b/packages/dashboard/src/components/Restore/BackupInfoCard.tsx @@ -10,15 +10,6 @@ interface BackupInfoProps { } export const BackupInfoCard = memo(({ info }: BackupInfoProps) => { - const economizeAbstract = (str: string) => { - if (!str.length) return
error
- if (str.length < 30) return
{str}
- return ( - -
{str.substr(0, 30) + '...' + '(' + str.split(',').length + ')'}
-
- ) - } return ( { ) }) + +function economizeAbstract(input: string) { + if (!input.length) return
error
+ if (input.length < 30) return
{input}
+ return ( + +
+ {input.slice(0, 30)}...({input.split(',').length}) +
+
+ ) +} diff --git a/packages/dashboard/src/components/Stepper/index.tsx b/packages/dashboard/src/components/Stepper/index.tsx index 596564b38362..4d641d7370c4 100644 --- a/packages/dashboard/src/components/Stepper/index.tsx +++ b/packages/dashboard/src/components/Stepper/index.tsx @@ -54,10 +54,9 @@ export const Stepper = (props: StepperProps) => { useEffect(() => { Children.forEach(props.children, (child: ReactElement) => { - if (isValidElement(child)) { - const name = child.props.name - setSteps(name, child) - } + if (!isValidElement(child)) return + const name = child.props.name + setSteps(name, child) }) }, []) diff --git a/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx b/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx index 30760b25e007..f35046ec569e 100644 --- a/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx @@ -66,12 +66,11 @@ export const ContactTableRow = memo(({ network, contact, i const theme = useTheme().palette.mode const handleClickStar = useCallback(async () => { - if (currentPersona) { - contact.favorite - ? await removeContactFromFavorite(contact.identifier, currentPersona) - : await addContactToFavorite(contact.identifier, currentPersona) - onReset() - } + if (!currentPersona) return + contact.favorite + ? await removeContactFromFavorite(contact.identifier, currentPersona) + : await addContactToFavorite(contact.identifier, currentPersona) + onReset() }, [contact, currentPersona, onReset]) const [{ loading }, handleClickInvite] = useAsyncFn(async () => { diff --git a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx index bceb1a342b4f..d81ebe3293ae 100644 --- a/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/PersonaDrawer/index.tsx @@ -10,7 +10,7 @@ import { useNavigate } from 'react-router-dom' const useStyles = makeStyles()((theme) => ({ paper: { // material-ui toolbar height - top: `64px`, + top: '64px', padding: theme.spacing(3, 3.75, 11.25, 3.75), background: MaskColorVar.suspensionBackground, }, diff --git a/packages/dashboard/src/pages/Personas/index.tsx b/packages/dashboard/src/pages/Personas/index.tsx index ea19e155a7ae..3b83aa19a179 100644 --- a/packages/dashboard/src/pages/Personas/index.tsx +++ b/packages/dashboard/src/pages/Personas/index.tsx @@ -53,10 +53,9 @@ function Personas() { PersonaContext.useContainer() useEffect(() => { - if (personas?.length === 0) { - showSnackbar(t.personas_setup_tip(), { variant: 'warning' }) - navigate(DashboardRoutes.Setup) - } + if (personas?.length !== 0) return + showSnackbar(t.personas_setup_tip(), { variant: 'warning' }) + navigate(DashboardRoutes.Setup) }, [personas]) const [activeTab, setActiveTab] = useState( diff --git a/packages/dashboard/src/pages/Settings/components/BackupSettingItem.tsx b/packages/dashboard/src/pages/Settings/components/BackupSettingItem.tsx index 7e5ee6b07dfd..5921764575a9 100644 --- a/packages/dashboard/src/pages/Settings/components/BackupSettingItem.tsx +++ b/packages/dashboard/src/pages/Settings/components/BackupSettingItem.tsx @@ -11,11 +11,10 @@ export default function BackupSettingItem() { const [desc, setDesc] = useState(t.settings_global_backup_desc()) useEffect(() => { - if (user.backupAt) { - const method = user.backupMethod === 'local' ? t.settings_local_backup() : t.settings_cloud_backup() - const last = t.settings_global_backup_last({ backupMethod: method, backupAt: user.backupAt }) - setDesc(last) - } + if (!user.backupAt) return + const method = user.backupMethod === 'local' ? t.settings_local_backup() : t.settings_cloud_backup() + const last = t.settings_global_backup_last({ backupMethod: method, backupAt: user.backupAt }) + setDesc(last) }, [user.backupAt]) return ( diff --git a/packages/dashboard/src/pages/Settings/components/dialogs/RestoreDialog.tsx b/packages/dashboard/src/pages/Settings/components/dialogs/RestoreDialog.tsx index 14cbd5609ea5..fa1fed57aeb5 100644 --- a/packages/dashboard/src/pages/Settings/components/dialogs/RestoreDialog.tsx +++ b/packages/dashboard/src/pages/Settings/components/dialogs/RestoreDialog.tsx @@ -26,11 +26,11 @@ const StyledTab: typeof Tab = styled(Tab)(() => ({ flex: 1, background: MaskColorVar.secondaryBackground, textTransform: 'none', - [`&:first-of-type`]: { + '&:first-of-type': { borderTopLeftRadius: 4, borderBottomLeftRadius: 4, }, - [`&:last-of-type`]: { + '&:last-of-type': { borderTopRightRadius: 4, borderBottomRightRadius: 4, }, diff --git a/packages/dashboard/src/pages/Setup/index.tsx b/packages/dashboard/src/pages/Setup/index.tsx index 19c0205c01d8..dfc953dda07a 100644 --- a/packages/dashboard/src/pages/Setup/index.tsx +++ b/packages/dashboard/src/pages/Setup/index.tsx @@ -20,7 +20,7 @@ const Setup = () => { return ( - `${theme.spacing(8)}` }}> + theme.spacing(8) }}> <Typography variant="h3">{t.setup_page_title()}</Typography> diff --git a/packages/dashboard/src/pages/SignUp/steps/MnemonicRevealForm.tsx b/packages/dashboard/src/pages/SignUp/steps/MnemonicRevealForm.tsx index 8a63b4617542..8e7d62b744dc 100644 --- a/packages/dashboard/src/pages/SignUp/steps/MnemonicRevealForm.tsx +++ b/packages/dashboard/src/pages/SignUp/steps/MnemonicRevealForm.tsx @@ -36,7 +36,7 @@ export const MnemonicRevealForm = memo(() => { if (words.join(' ') !== puzzleWords.join(' ')) { showSnackbar(t.create_account_mnemonic_confirm_failed(), { variant: 'error' }) } else { - navigate(`${SignUpRoutePath.PersonaCreate}`, { + navigate(SignUpRoutePath.PersonaCreate, { replace: true, state: { mnemonic: words }, }) diff --git a/packages/dashboard/src/pages/Wallets/components/Transfer/TransferERC20.tsx b/packages/dashboard/src/pages/Wallets/components/Transfer/TransferERC20.tsx index 3efa54345a95..8dc3d2ccc51d 100644 --- a/packages/dashboard/src/pages/Wallets/components/Transfer/TransferERC20.tsx +++ b/packages/dashboard/src/pages/Wallets/components/Transfer/TransferERC20.tsx @@ -163,12 +163,12 @@ export const TransferERC20 = memo<TransferERC20Props>(({ token }) => { //#endregion useEffect(() => { - if (transferState.type === TransactionStateType.FAILED || transferState.type === TransactionStateType.HASH) { - setMemo('') - setAddress('') - setAmount('') - resetTransferCallback() - } + const ALLOWED_TYPES = [TransactionStateType.FAILED, TransactionStateType.HASH] + if (!ALLOWED_TYPES.includes(transferState.type)) return + setMemo('') + setAddress('') + setAmount('') + resetTransferCallback() }, [transferState]) const ensContent = useMemo(() => { diff --git a/packages/dashboard/src/pages/Welcome/index.tsx b/packages/dashboard/src/pages/Welcome/index.tsx index c52e94d9a04b..6cd1654b2488 100644 --- a/packages/dashboard/src/pages/Welcome/index.tsx +++ b/packages/dashboard/src/pages/Welcome/index.tsx @@ -34,7 +34,7 @@ export default function Welcome() { const mode = useTheme().palette.mode const navigate = useNavigate() - const agreementContentPageURL = new URL(`./en.html`, import.meta.url).toString() + const agreementContentPageURL = new URL('./en.html', import.meta.url).toString() const privacyPolicyDocument = useMemo(() => () => iframeRef?.current?.contentWindow?.document, [iframeRef]) useEffect( diff --git a/packages/dashboard/src/utils/generateContactAvatarColor.ts b/packages/dashboard/src/utils/generateContactAvatarColor.ts index 6058fcfdfdb3..f9cf5129a560 100644 --- a/packages/dashboard/src/utils/generateContactAvatarColor.ts +++ b/packages/dashboard/src/utils/generateContactAvatarColor.ts @@ -5,5 +5,5 @@ export function generateContactAvatarColor(string: string, theme: 'light' | 'dar // eslint-disable-next-line no-bitwise return next & next }, 0) - return `hsl(${hash % 360}, ${theme === 'dark' ? `78%` : '98%'}, ${theme === 'dark' ? `50%` : '70%'})` + return `hsl(${hash % 360}, ${theme === 'dark' ? '78%' : '98%'}, ${theme === 'dark' ? '50%' : '70%'})` } diff --git a/packages/encryption/src/payload_internal/version-37.encoder.ts b/packages/encryption/src/payload_internal/version-37.encoder.ts index f4f51ec52be8..f97347edb01e 100644 --- a/packages/encryption/src/payload_internal/version-37.encoder.ts +++ b/packages/encryption/src/payload_internal/version-37.encoder.ts @@ -50,7 +50,7 @@ export async function encode37(payload: PayloadWellFormed.Payload) { } function warn(key: CryptoKey, err: any) { console.warn( - `[@masknet/encryption] Failed to encode a public key object into spki format. key is`, + '[@masknet/encryption] Failed to encode a public key object into spki format. key is', key, 'and the error is', err, diff --git a/packages/encryption/src/payload_internal/version-38.encoder.ts b/packages/encryption/src/payload_internal/version-38.encoder.ts index 8a896aaef9da..d3e1958e2163 100644 --- a/packages/encryption/src/payload_internal/version-38.encoder.ts +++ b/packages/encryption/src/payload_internal/version-38.encoder.ts @@ -29,9 +29,9 @@ export async function encode38(payload: PayloadWellFormed.Payload) { if (payload.authorPublicKey.some) { const compressed = await compressSecp256k1Key(payload.authorPublicKey.val.key) if (compressed.err) { - console.error(`[@masknet/encryption] An error happened when compressing a secp256k1 key.`, compressed.err) + console.error('[@masknet/encryption] An error happened when compressing a secp256k1 key.', compressed.err) } - fields[Index.authorPublicKey] = `${compressed.unwrapOr('_')}` + fields[Index.authorPublicKey] = compressed.unwrapOr('_') } fields[Index.publicShared] = String(payload.encryption.type === 'public' ? 1 : 0) if (payload.author.some) { diff --git a/packages/encryption/tests/v38-encode-decode.ts b/packages/encryption/tests/v38-encode-decode.ts index 2fe0d228e330..945b21eef682 100644 --- a/packages/encryption/tests/v38-encode-decode.ts +++ b/packages/encryption/tests/v38-encode-decode.ts @@ -45,10 +45,19 @@ test('Encode v38 payload', async () => { expect(parsed).toMatchSnapshot('Parse generated v38 message') }) -/* cspell:disable-next-line */ -const oldInfraOutput = `🎼4/4|avkwBKqMpCKznGclvChuuh2AEExV0J14xI/KANhwiKJfVyfm2ObWb432E3aAOa7ImRoCd7/JK1dDQWk4rt9NqajTEaajARMc9hJ9GmR8lorBNRNHlgj/h1KJYk5th7Nsr04PWO0nJUKiDH2CJwieSxW2YqxCI1ceYKUYcZOsVJEZOrJ/IB8WUmU0|BjPbfiSAXCvc/2nqKv2nzQ==|Og1u5pLG9GiWsZbxQwHAGtL6Jqo=|_|Aq/bVWAKvodJuURGk3enjE1gUiu2SELM8IIKIlNGqOWM|1|ZmFjZWJvb2suY29tLzEwMDAyNzU2MjI0OTU3NA==:||` -/* cspell:disable-next-line */ -const oldInfraOutputShort = `🎼4/4|avkwBKqMpCKznGclvChuuh2AEExV0J14xI/KANhwiKJfVyfm2ObWb432E3aAOa7ImRoCd7/JK1dDQWk4rt9NqajTEaajARMc9hJ9GmR8lorBNRNHlgj/h1KJYk5th7Nsr04PWO0nJUKiDH2CJwieSxW2YqxCI1ceYKUYcZOsVJEZOrJ/IB8WUmU0|BjPbfiSAXCvc/2nqKv2nzQ==|Og1u5pLG9GiWsZbxQwHAGtL6Jqo=|_:||` +/* cspell:disable */ +const oldInfraOutput = + '🎼4/4|avkwBKqMpCKznGclvChuuh2AEExV0J14xI/KANhwiKJfVyfm2ObWb432E3aAOa7ImRoCd7/JK1d' + + 'DQWk4rt9NqajTEaajARMc9hJ9GmR8lorBNRNHlgj/h1KJYk5th7Nsr04PWO0nJUKiDH2CJwieSxW2YqxC' + + 'I1ceYKUYcZOsVJEZOrJ/IB8WUmU0|BjPbfiSAXCvc/2nqKv2nzQ==|Og1u5pLG9GiWsZbxQwHAGtL6Jqo' + + '=|_|Aq/bVWAKvodJuURGk3enjE1gUiu2SELM8IIKIlNGqOWM|1|ZmFjZWJvb2suY29tLzEwMDAyNzU2MjI' + + '0OTU3NA==:||' +const oldInfraOutputShort = + '🎼4/4|avkwBKqMpCKznGclvChuuh2AEExV0J14xI/KANhwiKJfVyfm2ObWb432E3aAOa7ImRoCd7/JK1d' + + 'DQWk4rt9NqajTEaajARMc9hJ9GmR8lorBNRNHlgj/h1KJYk5th7Nsr04PWO0nJUKiDH2CJwieSxW2YqxC' + + 'I1ceYKUYcZOsVJEZOrJ/IB8WUmU0|BjPbfiSAXCvc/2nqKv2nzQ==|Og1u5pLG9GiWsZbxQwHAGtL6Jqo=|_:||' +/* cspell:enable */ + const AESKey = { key_ops: ['encrypt', 'decrypt'], ext: true, diff --git a/packages/encryption/tests/v39-v40-decode.ts b/packages/encryption/tests/v39-v40-decode.ts index 40582938737c..97d8a6a256c6 100644 --- a/packages/encryption/tests/v39-v40-decode.ts +++ b/packages/encryption/tests/v39-v40-decode.ts @@ -3,8 +3,12 @@ import { expect, test } from '@jest/globals' import { encodePayload, parsePayload } from '../src' import { PayloadException } from '../src/types' -/* cspell:disable-next-line */ -const oldInfraOutput = `🎼2/4|avkwBKqMpCKznGclvChuuh2AEExV0J14xI/KANhwiKJfVyfm2ObWb432E3aAOa7ImRoCd7/JK1dDQWk4rt9NqajTEaajARMc9hJ9GmR8lorBNRNHlgj/h1KJYk5th7Nsr04PWO0nJUKiDH2CJwieSxW2YqxCI1ceYKUYcZOsVJEZOrJ/IB8WUmU0|BjPbfiSAXCvc/2nqKv2nzQ==|Og1u5pLG9GiWsZbxQwHAGtL6Jqo=:||` +/* cspell:disable */ +const oldInfraOutput = + '🎼2/4|avkwBKqMpCKznGclvChuuh2AEExV0J14xI/KANhwiKJfVyfm2ObWb432E3aAOa7ImRoCd7/JK1d' + + 'DQWk4rt9NqajTEaajARMc9hJ9GmR8lorBNRNHlgj/h1KJYk5th7Nsr04PWO0nJUKiDH2CJwieSxW2YqxC' + + 'I1ceYKUYcZOsVJEZOrJ/IB8WUmU0|BjPbfiSAXCvc/2nqKv2nzQ==|Og1u5pLG9GiWsZbxQwHAGtL6Jqo=:||' +/* cspell:enable */ test('Parse v39 payload', async () => { const out = (await parsePayload(oldInfraOutput)).unwrap() diff --git a/packages/injected-script/main/GlobalVariableBridge/index.ts b/packages/injected-script/main/GlobalVariableBridge/index.ts index 061050201b5f..d28425e49282 100644 --- a/packages/injected-script/main/GlobalVariableBridge/index.ts +++ b/packages/injected-script/main/GlobalVariableBridge/index.ts @@ -12,11 +12,11 @@ const { shift } = Array.prototype function read(path: string) { const fragments = apply(split, path, ['.' as any]) let result: any = window - while (true) { - if (fragments.length === 0) return result + while (fragments.length !== 0) { const key = apply(shift, fragments, []) result = key ? result[key] : result } + return result } export function access(path: string, id: number, property: string) { diff --git a/packages/injected-script/sdk/utils.ts b/packages/injected-script/sdk/utils.ts index 3838b485b702..5c918e9eb3cc 100644 --- a/packages/injected-script/sdk/utils.ts +++ b/packages/injected-script/sdk/utils.ts @@ -10,7 +10,7 @@ export function sendEvent<K extends keyof InternalEvents>(name: K, ...params: In ) } const promisePool = new Map<number, [resolve: Function, reject: Function]>() -let id: number = 1 +let id = 1 export function createPromise<T>(callback: (id: number) => void) { return new Promise<T>((resolve, reject) => { id += 1 diff --git a/packages/injected-script/shared/index.ts b/packages/injected-script/shared/index.ts index 54ca31854b2a..70c5f45e5cd2 100644 --- a/packages/injected-script/shared/index.ts +++ b/packages/injected-script/shared/index.ts @@ -93,6 +93,7 @@ export function encodeEvent<T extends keyof InternalEvents>(key: T, args: Intern export function decodeEvent(data: string): EventItemBeforeSerialization { const result = parse(data) // Do not throw new Error cause it requires a global lookup. + // eslint-disable-next-line if (!isEventItemBeforeSerialization(result)) throw null return result } diff --git a/packages/mask/background/database/persona/consistency.ts b/packages/mask/background/database/persona/consistency.ts index ad8df22dd138..e23525a8bfed 100644 --- a/packages/mask/background/database/persona/consistency.ts +++ b/packages/mask/background/database/persona/consistency.ts @@ -21,7 +21,7 @@ export async function assertPersonaDBConsistency( diag.push(w) } if (diag.length) { - const warn = `PersonaDB is in the inconsistency state` + const warn = 'PersonaDB is in the inconsistency state' console.warn(warn) console.info(await t.objectStore('personas').getAll()) console.info(await t.objectStore('profiles').getAll()) diff --git a/packages/mask/background/database/post/index.ts b/packages/mask/background/database/post/index.ts index 30a0807e10ab..0fe5c9b3b1b6 100644 --- a/packages/mask/background/database/post/index.ts +++ b/packages/mask/background/database/post/index.ts @@ -59,6 +59,7 @@ const db = createDBAccessWithAsyncUpgrade<PostDB, UpgradeKnowledge>( b = a } // Prevent unused code removal + // eslint-disable-next-line no-constant-condition if (1 + 1 === 3) _assert({} as any, {} as any) if (oldVersion < 1) { // inline keys diff --git a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx index 81d2a875d88e..8a3b384acfdd 100644 --- a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx +++ b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx @@ -21,7 +21,7 @@ import { Trans } from 'react-i18next' const useStyles = makeStyles()({ root: { '& > *': { - marginBottom: `10px !important`, + marginBottom: '10px !important', }, }, flex: { @@ -36,7 +36,7 @@ const useStyles = makeStyles()({ flexDirection: 'row', justifyContent: 'flex-end', alignItems: 'center', - '& > *': { marginLeft: `12px !important` }, + '& > *': { marginLeft: '12px !important' }, }, }) diff --git a/packages/mask/src/components/DebugModeUI/DebugList.tsx b/packages/mask/src/components/DebugModeUI/DebugList.tsx index 27310ba8b50c..cf503db43779 100644 --- a/packages/mask/src/components/DebugModeUI/DebugList.tsx +++ b/packages/mask/src/components/DebugModeUI/DebugList.tsx @@ -17,10 +17,8 @@ function F({ content, hint }: { hint: string; content: AcceptableDebuggerType }) export function DebugList(props: { items: readonly (readonly [string, AcceptableDebuggerType] | JSX.Element)[] }) { return ( <div style={{ wordBreak: 'break-all', padding: '0 1em', margin: 0, background: 'black', color: 'white' }}> - {props.items.map((x) => ( - <Fragment key={x.toString()}> - {Array.isArray(x) ? <F key={x[0]} hint={x[0]} content={x[1]} /> : x} - </Fragment> + {props.items.map((x, key) => ( + <Fragment key={key}>{Array.isArray(x) ? <F key={x[0]} hint={x[0]} content={x[1]} /> : x}</Fragment> ))} </div> ) diff --git a/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts b/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts index a8c2e97d5e4e..fe6c8d60ba7d 100644 --- a/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts +++ b/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts @@ -86,7 +86,7 @@ function makeProgress( if (typeof progress === 'string') return { type: 'progress', progress, internal } return { type: 'progress', progress: 'intermediate_success', data: progress, internal } } -function makeError(error: string | Error, internal: boolean = false): Failure { +function makeError(error: string | Error, internal = false): Failure { if (typeof error === 'string') return { type: 'error', error, internal } return makeError(error.message, internal) } @@ -184,6 +184,7 @@ async function* decryptFromPayloadWithProgress_raw( const { publicKey: minePublic, privateKey: minePrivate } = mine const networkWorker = getNetworkWorkerUninitialized(whoAmI) try { + // eslint-disable-next-line if (version === -40) throw '' const gunNetworkHint = networkWorker!.gunNetworkHint const { keyHash, postHash } = await ( diff --git a/packages/mask/src/extension/background-script/EthereumServices/nonce.ts b/packages/mask/src/extension/background-script/EthereumServices/nonce.ts index f3423c91d28d..ffb3802b54ed 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/nonce.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/nonce.ts @@ -6,7 +6,7 @@ import { currentMaskWalletChainIdSettings } from '../../../plugins/Wallet/settin class NonceManager { constructor(private address: string) {} private nonce = NonceManager.INITIAL_NONCE - private locked: boolean = false + private locked = false private tasks: (() => void)[] = [] private lock() { diff --git a/packages/mask/src/extension/background-script/EthereumServices/rpc/index.ts b/packages/mask/src/extension/background-script/EthereumServices/rpc/index.ts index 7c1ed9949aa7..a20a51e8086a 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/rpc/index.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/rpc/index.ts @@ -143,7 +143,7 @@ export async function getSendTransactionComputedPayload(payload: JsonRpcPayload) } if (to) { - let code: string = '' + let code = '' try { code = await getCode(to) } catch { diff --git a/packages/mask/src/extension/background-script/HelperService/extensionPermission.ts b/packages/mask/src/extension/background-script/HelperService/extensionPermission.ts index 04aa2a1ba442..a2265be42e7f 100644 --- a/packages/mask/src/extension/background-script/HelperService/extensionPermission.ts +++ b/packages/mask/src/extension/background-script/HelperService/extensionPermission.ts @@ -16,10 +16,9 @@ export async function requestExtensionPermission(permission: browser.permissions }) return new Promise((resolve) => { browser.windows.onRemoved.addListener(function listener(windowID: number) { - if (windowID === popup.id) { - resolve(browser.permissions.contains(permission)) - browser.windows.onRemoved.removeListener(listener) - } + if (windowID !== popup.id) return + resolve(browser.permissions.contains(permission)) + browser.windows.onRemoved.removeListener(listener) }) }) } diff --git a/packages/mask/src/extension/background-script/HelperService/storage.ts b/packages/mask/src/extension/background-script/HelperService/storage.ts index 3b633e4cb893..68dfb00461db 100644 --- a/packages/mask/src/extension/background-script/HelperService/storage.ts +++ b/packages/mask/src/extension/background-script/HelperService/storage.ts @@ -6,7 +6,7 @@ import { timeout } from '@masknet/shared-base' */ class MutexStorage<T extends browser.storage.StorageValue> { private tasks: (() => void)[] = [] - private locked: boolean = false + private locked = false private lock() { this.locked = true diff --git a/packages/mask/src/extension/options-page/DashboardComponents/ActionButton.tsx b/packages/mask/src/extension/options-page/DashboardComponents/ActionButton.tsx index 53b112d19e06..d3f81ac1d162 100644 --- a/packages/mask/src/extension/options-page/DashboardComponents/ActionButton.tsx +++ b/packages/mask/src/extension/options-page/DashboardComponents/ActionButton.tsx @@ -27,10 +27,9 @@ function useDebounceAsync<T extends any[]>( useDebounce(() => setDebounceLoading(state.loading), 500, [state]) const f = useCallback( (...args: T) => { - if (!state.loading) { - setDebounceLoading(false) - startAsyncFn(...args) - } + if (state.loading) return + setDebounceLoading(false) + startAsyncFn(...args) }, [startAsyncFn, state.loading], ) diff --git a/packages/mask/src/extension/popups/PermissionAwareRedirect/index.tsx b/packages/mask/src/extension/popups/PermissionAwareRedirect/index.tsx index 3aa4cb600d75..5cf8ae7f2840 100644 --- a/packages/mask/src/extension/popups/PermissionAwareRedirect/index.tsx +++ b/packages/mask/src/extension/popups/PermissionAwareRedirect/index.tsx @@ -20,11 +20,10 @@ function Inner({ url, context }: { url: string; context: string }) { return browser.permissions.contains({ origins: [getHostPermissionFieldFromURL(url)] }) }, [url]) useEffect(() => { - if (hasPermission) { - const u = new URL(url) - u.searchParams.append('mask_context', context) - location.href = u.toString() - } + if (!hasPermission) return + const parsed = new URL(url) + parsed.searchParams.append('mask_context', context) + location.assign(parsed.toString()) }, [hasPermission, url]) return ( <PermissionAwareRedirectUI diff --git a/packages/mask/src/extension/popups/pages/Personas/Logout/index.tsx b/packages/mask/src/extension/popups/pages/Personas/Logout/index.tsx index 4ffd3c2e63a1..47d84032c44a 100644 --- a/packages/mask/src/extension/popups/pages/Personas/Logout/index.tsx +++ b/packages/mask/src/extension/popups/pages/Personas/Logout/index.tsx @@ -96,17 +96,14 @@ const Logout = memo(() => { }, []) const [{ loading }, onLogout] = useAsyncFn(async () => { - if (deletingPersona) { - await Services.Identity.logoutPersona(deletingPersona.identifier) - const currentPersona = await Services.Settings.getCurrentPersonaIdentifier() - if (!currentPersona) { - const lastCreatedPersona = await Services.Identity.queryLastPersonaCreated() - if (lastCreatedPersona) - await Services.Settings.setCurrentPersonaIdentifier(lastCreatedPersona.identifier) - } - - history.replace(PopupRoutes.Personas) + if (!deletingPersona) return + await Services.Identity.logoutPersona(deletingPersona.identifier) + const currentPersona = await Services.Settings.getCurrentPersonaIdentifier() + if (!currentPersona) { + const lastCreatedPersona = await Services.Identity.queryLastPersonaCreated() + if (lastCreatedPersona) await Services.Settings.setCurrentPersonaIdentifier(lastCreatedPersona.identifier) } + history.replace(PopupRoutes.Personas) }, [deletingPersona, history]) return ( <LogoutUI diff --git a/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx b/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx index a358274bf83b..0da91207ea57 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx @@ -258,10 +258,9 @@ const ContractInteraction = memo(() => { }, [request, location.search, history]) const [{ loading: rejectLoading }, handleReject] = useAsyncFn(async () => { - if (request) { - await Services.Ethereum.rejectRequest(request.payload) - history.replace(PopupRoutes.Wallet) - } + if (!request) return + await Services.Ethereum.rejectRequest(request.payload) + history.replace(PopupRoutes.Wallet) }, [request]) // Wei diff --git a/packages/mask/src/extension/popups/pages/Wallet/GasSetting/GasSetting1559.tsx b/packages/mask/src/extension/popups/pages/Wallet/GasSetting/GasSetting1559.tsx index c4519cd720a4..54f66a4583bd 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/GasSetting/GasSetting1559.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/GasSetting/GasSetting1559.tsx @@ -265,35 +265,28 @@ export const GasSetting1559 = memo(() => { //#region If the selected changed, set the value on the option to the form data useEffect(() => { - if (selected !== null) { - setValue( - 'maxPriorityFeePerGas', - new BigNumber(options[selected].content?.suggestedMaxPriorityFeePerGas ?? 0).toString() ?? '', - ) - setValue( - 'maxFeePerGas', - new BigNumber(options[selected].content?.suggestedMaxFeePerGas ?? 0).toString() ?? '', - ) - } + if (selected === null) return + const { content } = options[selected] + setValue('maxPriorityFeePerGas', new BigNumber(content?.suggestedMaxPriorityFeePerGas ?? 0).toString() ?? '') + setValue('maxFeePerGas', new BigNumber(content?.suggestedMaxFeePerGas ?? 0).toString() ?? '') }, [selected, setValue, options]) //#endregion const [{ loading }, handleConfirm] = useAsyncFn( async (data: zod.infer<typeof schema>) => { - if (value) { - const config = value.payload.params.map((param) => ({ - ...param, - gas: toHex(new BigNumber(data.gasLimit).toString()), - maxPriorityFeePerGas: toHex(formatGweiToWei(data.maxPriorityFeePerGas).toString()), - maxFeePerGas: toHex(formatGweiToWei(data.maxFeePerGas).toString()), - })) + if (!value) return + const config = value.payload.params.map((param) => ({ + ...param, + gas: toHex(new BigNumber(data.gasLimit).toString()), + maxPriorityFeePerGas: toHex(formatGweiToWei(data.maxPriorityFeePerGas).toString()), + maxFeePerGas: toHex(formatGweiToWei(data.maxFeePerGas).toString()), + })) - await WalletRPC.updateUnconfirmedRequest({ - ...value.payload, - params: config, - }) - history.goBack() - } + await WalletRPC.updateUnconfirmedRequest({ + ...value.payload, + params: config, + }) + history.goBack() }, [value, history], ) diff --git a/packages/mask/src/extension/popups/pages/Wallet/GasSetting/Prior1559GasSetting.tsx b/packages/mask/src/extension/popups/pages/Wallet/GasSetting/Prior1559GasSetting.tsx index 3fb9fea5b15c..e1f0d0f6cb19 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/GasSetting/Prior1559GasSetting.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/GasSetting/Prior1559GasSetting.tsx @@ -213,19 +213,17 @@ export const Prior1559GasSetting = memo(() => { const [{ loading }, handleConfirm] = useAsyncFn( async (data: zod.infer<typeof schema>) => { - if (value) { - const config = value.payload.params.map((param) => ({ - ...param, - gas: toHex(new BigNumber(data.gasLimit).toString()), - gasPrice: toHex(formatGweiToWei(data.gasPrice).toString()), - })) - - await WalletRPC.updateUnconfirmedRequest({ - ...value.payload, - params: config, - }) - history.goBack() - } + if (!value) return + const config = value.payload.params.map((param) => ({ + ...param, + gas: toHex(new BigNumber(data.gasLimit).toString()), + gasPrice: toHex(formatGweiToWei(data.gasPrice).toString()), + })) + await WalletRPC.updateUnconfirmedRequest({ + ...value.payload, + params: config, + }) + history.goBack() }, [value], ) diff --git a/packages/mask/src/extension/popups/pages/Wallet/SignRequest/index.tsx b/packages/mask/src/extension/popups/pages/Wallet/SignRequest/index.tsx index 4f6f0a734802..0ee48f5e686f 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/SignRequest/index.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/SignRequest/index.tsx @@ -109,10 +109,9 @@ const SignRequest = memo(() => { }, [value, location.search, history]) const [{ loading: rejectLoading }, handleReject] = useAsyncFn(async () => { - if (value) { - await Services.Ethereum.rejectRequest(value.payload) - history.replace(PopupRoutes.Wallet) - } + if (!value) return + await Services.Ethereum.rejectRequest(value.payload) + history.replace(PopupRoutes.Wallet) }, [value]) useUpdateEffect(() => { diff --git a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx index 4e9a022d4fec..f2525b6db9d6 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx @@ -227,10 +227,9 @@ export const Prior1559Transfer = memo<Prior1559TransferProps>(({ selectedAsset, //#region set default gasLimit useUpdateEffect(() => { - if (minGasLimit) { - methods.setValue('gasLimit', `${minGasLimit}`) - setMinGasLimitContext(minGasLimit) - } + if (!minGasLimit) return + methods.setValue('gasLimit', minGasLimit.toString()) + setMinGasLimitContext(minGasLimit) }, [minGasLimit, methods.setValue]) //#endregion diff --git a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx index b8dbd21a58d2..e709a51d3a28 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx @@ -314,25 +314,18 @@ export const Transfer1559 = memo<Transfer1559Props>(({ selectedAsset, openAssetM //#region set default gasLimit useUpdateEffect(() => { - if (minGasLimit) { - methods.setValue('gasLimit', `${minGasLimit}`) - setMinGasLimitContext(minGasLimit) - } + if (!minGasLimit) return + methods.setValue('gasLimit', minGasLimit.toString()) + setMinGasLimitContext(minGasLimit) }, [minGasLimit, methods.setValue]) //#endregion //#region set default Max priority gas fee and max fee useUpdateEffect(() => { - if (estimateGasFees) { - methods.setValue( - 'maxFeePerGas', - new BigNumber(estimateGasFees.medium?.suggestedMaxFeePerGas ?? 0).toString(), - ) - methods.setValue( - 'maxPriorityFeePerGas', - new BigNumber(estimateGasFees.medium?.suggestedMaxPriorityFeePerGas ?? 0).toString(), - ) - } + if (!estimateGasFees) return + const { medium } = estimateGasFees + methods.setValue('maxFeePerGas', new BigNumber(medium?.suggestedMaxFeePerGas ?? 0).toString()) + methods.setValue('maxPriorityFeePerGas', new BigNumber(medium?.suggestedMaxPriorityFeePerGas ?? 0).toString()) }, [estimateGasFees, methods.setValue]) //#endregion diff --git a/packages/mask/src/extension/popups/pages/Wallet/Unlock/index.tsx b/packages/mask/src/extension/popups/pages/Wallet/Unlock/index.tsx index dd8a0f587356..c3f0150b64de 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/Unlock/index.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/Unlock/index.tsx @@ -68,13 +68,9 @@ const Unlock = memo(() => { const { isLocked, loading: getLockStatusLoading } = useWalletLockStatus() useAsync(async () => { - if (isLocked === false && !getLockStatusLoading) { - const from = new URLSearchParams(location.search).get('from') - history.replace({ - pathname: from ?? PopupRoutes.Wallet, - search: location.search, - }) - } + if (!(isLocked === false && !getLockStatusLoading)) return + const from = new URLSearchParams(location.search).get('from') + history.replace({ pathname: from ?? PopupRoutes.Wallet, search: location.search }) }, [isLocked, getLockStatusLoading, location.search]) return ( diff --git a/packages/mask/src/extension/popups/pages/Wallet/index.tsx b/packages/mask/src/extension/popups/pages/Wallet/index.tsx index 5a5eaddcea26..4cf80b0229e0 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/index.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/index.tsx @@ -78,10 +78,8 @@ export default function Wallet() { }, [location.search, location.pathname]) useEffect(() => { - if (isLocked && !getLockStatusLoading && location.pathname !== PopupRoutes.Unlock) { - history.replace(urlcat(PopupRoutes.Unlock, { from: location.pathname })) - return - } + if (!(isLocked && !getLockStatusLoading && location.pathname !== PopupRoutes.Unlock)) return + history.replace(urlcat(PopupRoutes.Unlock, { from: location.pathname })) }, [isLocked, location.pathname, getLockStatusLoading]) useEffect(() => { diff --git a/packages/mask/src/network/gun/version.2/hash.ts b/packages/mask/src/network/gun/version.2/hash.ts index df377de4ce83..98c2043177c8 100644 --- a/packages/mask/src/network/gun/version.2/hash.ts +++ b/packages/mask/src/network/gun/version.2/hash.ts @@ -27,7 +27,7 @@ export async function calculatePostKeyPartition( export const hashPostSalt = memoizePromise( async function (postSalt: string, networkHint: string) { - const hashPair = `9283464d-ee4e-4e8d-a7f3-cf392a88133f` + const hashPair = '9283464d-ee4e-4e8d-a7f3-cf392a88133f' const N = 2 const hash = (await Gun.SEA.work(postSalt, hashPair))! @@ -40,7 +40,7 @@ export const hashPostSalt = memoizePromise( * @param key - The key need to be hashed */ export const hashCryptoKeyUnstable = memoizePromise(async function (key: EC_Public_JsonWebKey) { - const hashPair = `10198a2f-205f-45a6-9987-3488c80113d0` + const hashPair = '10198a2f-205f-45a6-9987-3488c80113d0' const N = 2 const jwk = JSON.stringify(key) @@ -52,7 +52,7 @@ export const hashCryptoKeyUnstable = memoizePromise(async function (key: EC_Publ * @param key - The key need to be hashed */ export const hashCryptoKey = memoizePromise(async function (key: EC_Public_JsonWebKey) { - const hashPair = `10198a2f-205f-45a6-9987-3488c80113d0` + const hashPair = '10198a2f-205f-45a6-9987-3488c80113d0' const N = 2 const jwk = key diff --git a/packages/mask/src/network/gun/version.2/post.ts b/packages/mask/src/network/gun/version.2/post.ts index bbaeac95a09e..2fbcaa1beb20 100644 --- a/packages/mask/src/network/gun/version.2/post.ts +++ b/packages/mask/src/network/gun/version.2/post.ts @@ -87,7 +87,7 @@ export async function publishPostAESKeyOnGun2( // Store AES key to gun receiversKeys.forEach(async ({ aesKey, receiverKey }) => { const keyHash = await (version <= -39 ? hashCryptoKeyUnstable : hashCryptoKey)(receiverKey) - console.log(`gun[${postHash}][${keyHash}].push(`, aesKey, `)`) + console.log(`gun[${postHash}][${keyHash}].push(`, aesKey, ')') gun2.get(postHash) // @ts-ignore .get(keyHash) diff --git a/packages/mask/src/plugins/Collectible/types/rarible.ts b/packages/mask/src/plugins/Collectible/types/rarible.ts index cacf364baa75..28387ada41c6 100644 --- a/packages/mask/src/plugins/Collectible/types/rarible.ts +++ b/packages/mask/src/plugins/Collectible/types/rarible.ts @@ -120,7 +120,7 @@ export interface Tag { } export interface RaribleCollectibleResponse { - ['@class']: string + '@class': string id: string name: string symbol: string diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts b/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts index 1719cee0b158..8defe6e37b66 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts @@ -9,13 +9,12 @@ export default class FindTrumanConstPromise { constructor() {} init = (executor: (resolve: (value: FindTrumanConst) => void, reject: (reason: any) => void) => void) => { - if (!this.initialized) { - this.initialized = true - executor(this.resolve, this.reject) - } + if (this.initialized) return + this.initialized = true + executor(this.resolve, this.reject) } - initialized: boolean = false + initialized = false status: Status = Status.PENDING value?: FindTrumanConst diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/MainDialog.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/MainDialog.tsx index fa3849fc1d1d..047b3ad63e46 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/MainDialog.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/MainDialog.tsx @@ -48,25 +48,14 @@ const FindTrumanDialog: React.FC<Props> = (props) => { const [consts, setConsts] = useState<FindTrumanConst>() useEffect(() => { - if (!!account) { - if (!FindTruman_Const.initialized) { - FindTruman_Const.init((resolve, reject) => { - fetchConst(i18n.language) - .then((res) => { - resolve(res) - }) - .catch((error) => { - reject(error) - }) - }) - } - FindTruman_Const.then((res) => { - setConsts(res) - }) - fetchUserParticipatedStoryStatus(account).then((res) => { - setStatuses(res) + if (!account) return + if (!FindTruman_Const.initialized) { + FindTruman_Const.init((resolve, reject) => { + fetchConst(i18n.language).then(resolve, reject) }) } + FindTruman_Const.then(setConsts) + fetchUserParticipatedStoryStatus(account).then(setStatuses) }, [account]) const renderProgress = (total: number, success: number, color: 'primary' | 'secondary' | 'success') => { diff --git a/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx b/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx index 16dd271c260a..7cc60bba3167 100644 --- a/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx +++ b/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx @@ -29,7 +29,7 @@ const useStyles = makeStyles()((theme) => ({ tabs: { borderTop: `solid 1px ${theme.palette.divider}`, borderBottom: `solid 1px ${theme.palette.divider}`, - backgroundColor: `#1b1b21`, + backgroundColor: '#1b1b21', }, tab: { fontFamily: 'inherit', diff --git a/packages/mask/src/plugins/GoodGhosting/hooks/useGameActions.ts b/packages/mask/src/plugins/GoodGhosting/hooks/useGameActions.ts index 0386d49bff98..9d193e293a44 100644 --- a/packages/mask/src/plugins/GoodGhosting/hooks/useGameActions.ts +++ b/packages/mask/src/plugins/GoodGhosting/hooks/useGameActions.ts @@ -64,39 +64,32 @@ export function useMakeDeposit(info: GoodGhostingInfo) { return { canMakeDeposit, - makeDeposit: async () => { - if (contract) { - const gasEstimate = await contract.methods.makeDeposit().estimateGas({ - from: account, - }) + async makeDeposit() { + if (!contract) return + const gasEstimate = await contract.methods.makeDeposit().estimateGas({ + from: account, + }) - let txHash = '' - return new Promise<void>(async (resolve, reject) => { - contract.methods - .makeDeposit() - .send({ - from: account, - gas: gasEstimate, - }) - .on(TransactionEventType.TRANSACTION_HASH, (hash) => (txHash = hash)) - .on(TransactionEventType.CONFIRMATION, (_no, receipt: TransactionReceipt) => { - if (receipt.status) { - resolve() - } else { - reject({ - gameActionStatus: TransactionStateType.CONFIRMED, - ...receipt, - }) - } - }) - .on(TransactionEventType.ERROR, (error) => { - reject({ - gameActionStatus: TransactionStateType.FAILED, - transactionHash: txHash, - }) + let txHash = '' + return new Promise<void>(async (resolve, reject) => { + contract.methods + .makeDeposit() + .send({ from: account, gas: gasEstimate }) + .on(TransactionEventType.TRANSACTION_HASH, (hash) => (txHash = hash)) + .on(TransactionEventType.CONFIRMATION, (_no, receipt: TransactionReceipt) => { + if (receipt.status) { + resolve() + } else { + reject({ gameActionStatus: TransactionStateType.CONFIRMED, ...receipt }) + } + }) + .on(TransactionEventType.ERROR, () => { + reject({ + gameActionStatus: TransactionStateType.FAILED, + transactionHash: txHash, }) - }) - } + }) + }) }, } } @@ -110,39 +103,31 @@ export function useWithdraw(info: GoodGhostingInfo) { return { canWithdraw, - withdraw: async () => { - if (contract) { - const gasEstimate = await contract.methods.withdraw().estimateGas({ - from: account, - }) - - let txHash = '' - return new Promise<void>(async (resolve, reject) => { - contract.methods - .withdraw() - .send({ - from: account, - gas: gasEstimate, - }) - .on(TransactionEventType.TRANSACTION_HASH, (hash) => (txHash = hash)) - .on(TransactionEventType.CONFIRMATION, (_no, receipt: TransactionReceipt) => { - if (receipt.status) { - resolve() - } else { - reject({ - gameActionStatus: TransactionStateType.CONFIRMED, - ...receipt, - }) - } - }) - .on(TransactionEventType.ERROR, (error) => { - reject({ - gameActionStatus: TransactionStateType.FAILED, - transactionHash: txHash, - }) + async withdraw() { + if (!contract) return + const gasEstimate = await contract.methods.withdraw().estimateGas({ + from: account, + }) + let txHash = '' + return new Promise<void>(async (resolve, reject) => { + contract.methods + .withdraw() + .send({ from: account, gas: gasEstimate }) + .on(TransactionEventType.TRANSACTION_HASH, (hash) => (txHash = hash)) + .on(TransactionEventType.CONFIRMATION, (_no, receipt: TransactionReceipt) => { + if (receipt.status) { + resolve() + } else { + reject({ gameActionStatus: TransactionStateType.CONFIRMED, ...receipt }) + } + }) + .on(TransactionEventType.ERROR, () => { + reject({ + gameActionStatus: TransactionStateType.FAILED, + transactionHash: txHash, }) - }) - } + }) + }) }, } } @@ -157,39 +142,31 @@ export function useEarlyWithdraw(info: GoodGhostingInfo) { return { canEarlyWithdraw, - earlyWithdraw: async () => { - if (contract) { - const gasEstimate = await contract.methods.earlyWithdraw().estimateGas({ - from: account, - }) - - let txHash = '' - return new Promise<void>(async (resolve, reject) => { - contract.methods - .earlyWithdraw() - .send({ - from: account, - gas: gasEstimate, - }) - .on(TransactionEventType.TRANSACTION_HASH, (hash) => (txHash = hash)) - .on(TransactionEventType.CONFIRMATION, (_no, receipt: TransactionReceipt) => { - if (receipt.status) { - resolve() - } else { - reject({ - gameActionStatus: TransactionStateType.CONFIRMED, - ...receipt, - }) - } - }) - .on(TransactionEventType.ERROR, (error) => { - reject({ - gameActionStatus: TransactionStateType.FAILED, - transactionHash: txHash, - }) + async earlyWithdraw() { + if (!contract) return + const gasEstimate = await contract.methods.earlyWithdraw().estimateGas({ + from: account, + }) + let txHash = '' + return new Promise<void>(async (resolve, reject) => { + contract.methods + .earlyWithdraw() + .send({ from: account, gas: gasEstimate }) + .on(TransactionEventType.TRANSACTION_HASH, (hash) => (txHash = hash)) + .on(TransactionEventType.CONFIRMATION, (_no, receipt: TransactionReceipt) => { + if (receipt.status) { + resolve() + } else { + reject({ gameActionStatus: TransactionStateType.CONFIRMED, ...receipt }) + } + }) + .on(TransactionEventType.ERROR, () => { + reject({ + gameActionStatus: TransactionStateType.FAILED, + transactionHash: txHash, }) - }) - } + }) + }) }, } } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/CreateForm.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/CreateForm.tsx index 672c06c7cabb..97a26067a9e8 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/CreateForm.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/CreateForm.tsx @@ -235,7 +235,7 @@ export function CreateForm(props: CreateFormProps) { setTokenAndAmount(first) onChangePoolSettings({ // this is the raw password which should be signed by the sender - password: Web3Utils.sha3(`${message}`) ?? '', + password: Web3Utils.sha3(message) ?? '', name: senderName, title: message, limit: formatAmount(totalOfPerWallet || '0', first?.token?.decimals), diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/RegionSelect.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/RegionSelect.tsx index 044997e3345e..b53d0080d8f9 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/RegionSelect.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/RegionSelect.tsx @@ -46,7 +46,7 @@ const useStyles = makeStyles()((theme) => ({ }, }, input: { - padding: `${theme.spacing(2)}`, + padding: theme.spacing(2), }, span: { paddingLeft: theme.spacing(2), diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/helpers.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/helpers.ts index 0bcc630a513b..172c80e7bfb2 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/helpers.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/helpers.ts @@ -28,6 +28,7 @@ export function gcd(a: BigNumber, b: BigNumber) { b_ = a_ a_ = temp } + // eslint-disable-next-line no-constant-condition while (true) { if (b_.isZero()) return a_ a_ = a_.mod(b_) diff --git a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawDialog.tsx b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawDialog.tsx index 496a222f8589..7afd884bc3d4 100644 --- a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawDialog.tsx +++ b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawDialog.tsx @@ -51,10 +51,10 @@ const useStyles = makeStyles()((theme) => ({ field: { borderRadius: 0, padding: theme.spacing(0), - height: `25px !important`, + height: '25px !important', minWidth: 0, minHeight: 0, - outline: `none !important`, + outline: 'none !important', borderColor: `${theme.palette.divider} !important`, }, textfield: { diff --git a/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx b/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx index 73c9f9b7c15c..d4ab80fc5c09 100644 --- a/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx +++ b/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx @@ -143,7 +143,7 @@ export function PollCardUI(props: PollCardProps) { ))} </List> <Typography variant="body2" classes={{ root: classes.deadline }}> - {isClosed ? `${t('plugin_poll_status_closed')}` : `${getDeadline(poll.end_time)}`} + {isClosed ? t('plugin_poll_status_closed') : getDeadline(poll.end_time)} </Typography> </Card> ) diff --git a/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx b/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx index 20bf6f749d93..90b574253b43 100644 --- a/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx +++ b/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx @@ -92,10 +92,9 @@ export function DepositDialog() { //#region remote controlled dialog const { open, closeDialog } = useRemoteControlledDialog(PluginPoolTogetherMessages.DepositDialogUpdated, (ev) => { - if (ev.open) { - setPool(ev.pool) - setToken(ev.token) - } + if (!ev.open) return + setPool(ev.pool) + setToken(ev.token) }) const onClose = useCallback(() => { closeDialog() diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx index 56d0efe93b65..edc7f6634ee5 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx @@ -159,10 +159,9 @@ export const NftRedPacketHistoryItem: FC<NftRedPacketHistoryItemProps> = memo( WalletMessages.events.walletStatusDialogUpdated, ) const handleSend = useCallback(() => { - if (canSend && contractDetailed && isPasswordValid) { - onSend(history, contractDetailed) - closeWalletStatusDialog() - } + if (!(canSend && contractDetailed && isPasswordValid)) return + onSend(history, contractDetailed) + closeWalletStatusDialog() }, [onSend, closeWalletStatusDialog, canSend, history, contractDetailed, isPasswordValid]) const { value: redpacketStatus } = useAvailabilityNftRedPacket(history.rpid, account) diff --git a/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts b/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts index 71e715b67ce2..0d8e70a20681 100644 --- a/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts +++ b/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts @@ -12,7 +12,7 @@ export async function fetchProposal(id: string) { } async function fetchProposalFromGraphql(id: string) { - const response = await fetch(`https://hub.snapshot.org/graphql`, { + const response = await fetch('https://hub.snapshot.org/graphql', { method: 'POST', headers: { Accept: 'application/json', @@ -143,7 +143,7 @@ export async function vote(identifier: ProposalIdentifier, choice: number, addre const sig = await Services.Ethereum.personalSign(msg, address) - const response = await fetch(`https://hub.snapshot.org/api/msg`, { + const response = await fetch('https://hub.snapshot.org/api/msg', { method: 'POST', headers: { Accept: 'application/json', diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/ConfirmDialog.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/ConfirmDialog.tsx index 7e88a8585b28..ec681bd9425a 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/ConfirmDialog.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/ConfirmDialog.tsx @@ -28,7 +28,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } display: 'flex', justifyContent: 'space-between', alignItems: 'center', - ['& > p']: { + '& > p': { fontSize: 16, lineHeight: '22px', color: theme.palette.text.primary, diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Gas1559Settings.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Gas1559Settings.tsx index a311b509502d..b21a95ae3de4 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Gas1559Settings.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Gas1559Settings.tsx @@ -235,28 +235,19 @@ export const Gas1559Settings = memo<Gas1559SettingsProps>(({ onCancel, onSave: o //#region If the selected changed, set the value on the option to the form data useEffect(() => { - if (selected !== null) { - setValue( - 'maxPriorityFeePerGas', - new BigNumber(options[selected].content?.suggestedMaxPriorityFeePerGas ?? 0).toFixed() ?? '', - ) - setValue( - 'maxFeePerGas', - new BigNumber(options[selected].content?.suggestedMaxFeePerGas ?? 0).toFixed() ?? '', - ) - } + if (selected === null) return + const { content } = options[selected] + setValue('maxPriorityFeePerGas', new BigNumber(content?.suggestedMaxPriorityFeePerGas ?? 0).toFixed() ?? '') + setValue('maxFeePerGas', new BigNumber(content?.suggestedMaxFeePerGas ?? 0).toFixed() ?? '') }, [selected, setValue, options]) //#endregion useEffect(() => { - if (gasConfig?.maxPriorityFeePerGas && gasConfig?.maxFeePerGas && gasConfig?.maxPriorityFeePerGas) { - setOption(null) - setValue('maxFeePerGas', fromWei(new BigNumber(gasConfig.maxFeePerGas).toString(), 'gwei').toString()) - setValue( - 'maxPriorityFeePerGas', - fromWei(new BigNumber(gasConfig.maxPriorityFeePerGas).toString(), 'gwei').toString(), - ) - } + if (!(gasConfig?.maxPriorityFeePerGas && gasConfig?.maxFeePerGas)) return + const { maxFeePerGas, maxPriorityFeePerGas } = gasConfig + setOption(null) + setValue('maxFeePerGas', fromWei(maxFeePerGas.toString(), 'gwei').toString()) + setValue('maxPriorityFeePerGas', fromWei(maxPriorityFeePerGas.toString(), 'gwei').toString()) }, [gasConfig, setValue]) return ( diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/GasPrior1559Settings.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/GasPrior1559Settings.tsx index ce86dbe553a5..3846e9d6a345 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/GasPrior1559Settings.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/GasPrior1559Settings.tsx @@ -166,14 +166,13 @@ export const GasPrior1559Settings = memo<GasPrior1559SettingsProps>(({ onCancel, //#endregion useUpdateEffect(() => { - if (gasConfig?.gasPrice && gasOptions) { - const gasPrice = new BigNumber(gasConfig.gasPrice) - if (gasPrice.isEqualTo(gasOptions.standard)) setOption(0) - else if (gasPrice.isEqualTo(gasOptions.fast)) setOption(1) - else { - setCustomGasPrice(formatWeiToGwei(gasPrice).toString()) - setOption(2) - } + if (!(gasConfig?.gasPrice && gasOptions)) return + const gasPrice = new BigNumber(gasConfig.gasPrice) + if (gasPrice.isEqualTo(gasOptions.standard)) setOption(0) + else if (gasPrice.isEqualTo(gasOptions.fast)) setOption(1) + else { + setCustomGasPrice(formatWeiToGwei(gasPrice).toString()) + setOption(2) } }, [gasConfig, gasOptions]) diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/InputTokenPanel.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/InputTokenPanel.tsx index 4c7ca72757b5..c8eac216cbba 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/InputTokenPanel.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/InputTokenPanel.tsx @@ -54,7 +54,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } color: isDashboard ? MaskColorVar.normalText : MaskColorVar.twitterSecond, }, selectedTokenChip: { - borderRadius: `22px!important`, + borderRadius: '22px!important', height: 'auto', backgroundColor: isDashboard ? MaskColorVar.input : theme.palette.background.input, [`& .${chipClasses.label}`]: { @@ -70,7 +70,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } height: '28px!important', }, noToken: { - borderRadius: `18px !important`, + borderRadius: '18px !important', backgroundColor: theme.palette.primary.main, [`& .${chipClasses.label}`]: { paddingTop: 9, diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx index 7c23dd0d4e35..18f74a201eeb 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx @@ -72,7 +72,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } cursor: 'pointer', }, reverseChevron: { - transform: `rotate(-180deg)`, + transform: 'rotate(-180deg)', transition: 'all 300ms', }, status: { @@ -109,7 +109,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } height: 'auto', }, selectedTokenChip: { - borderRadius: `22px!important`, + borderRadius: '22px!important', height: 'auto', backgroundColor: isDashboard ? MaskColorVar.input : theme.palette.background.input, [`& .${chipClasses.label}`]: { @@ -133,7 +133,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } bottom: -20, }, noToken: { - borderRadius: `18px !important`, + borderRadius: '18px !important', backgroundColor: theme.palette.primary.main, [`& .${chipClasses.label}`]: { paddingTop: 9, diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx index e09e12894a2a..04f7f3de6b93 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx @@ -467,10 +467,9 @@ export function Trader(props: TraderProps) { //#region if chain id be changed, reset the chain id on context, and reset gas config useEffect(() => { - if (chainId) { - setTargetChainId(chainId) - setGasConfig(undefined) - } + if (!chainId) return + setTargetChainId(chainId) + setGasConfig(undefined) }, [chainId]) //#endregion diff --git a/packages/mask/src/plugins/Trader/apis/coinmarketcap/index.ts b/packages/mask/src/plugins/Trader/apis/coinmarketcap/index.ts index 271cc01cf663..67e51cba5c2f 100644 --- a/packages/mask/src/plugins/Trader/apis/coinmarketcap/index.ts +++ b/packages/mask/src/plugins/Trader/apis/coinmarketcap/index.ts @@ -189,13 +189,7 @@ export interface HistoricalCoinInfo { symbol: string } -export async function getHistorical( - id: string, - currency: string, - startDate: Date, - endDate: Date, - interval: string = '1d', -) { +export async function getHistorical(id: string, currency: string, startDate: Date, endDate: Date, interval = '1d') { const params = new URLSearchParams('format=chart_crypto_details') params.append('convert', currency) params.append('id', id) diff --git a/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts b/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts index 93c1d5391364..dd59d68420f9 100644 --- a/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts +++ b/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts @@ -226,7 +226,7 @@ export async function fetchTokenData(address: string, blockNumber?: string) { ${TokenFields} ${PairFields} query tokens { - tokens(${blockNumber ? `block : {number: ${blockNumber}}` : ``} where: {id:"${address}"}) { + tokens(${blockNumber ? `block : {number: ${blockNumber}}` : ''} where: {id:"${address}"}) { ...TokenFields } pairs0: pairs(where: {token0: "${address}"}, first: 50, orderBy: reserveUSD, orderDirection: desc) { @@ -300,7 +300,7 @@ export async function fetchPairData(pairAddress: string, blockNumber?: string) { }>(` ${PairFields} query pairs { - pairs(${blockNumber ? `block : {number: ${blockNumber}}` : ``} where: { id: "${pairAddress}"} ) { + pairs(${blockNumber ? `block : {number: ${blockNumber}}` : ''} where: { id: "${pairAddress}"} ) { ...PairFields } } diff --git a/packages/mask/src/plugins/Trader/helpers/uniswap.ts b/packages/mask/src/plugins/Trader/helpers/uniswap.ts index 9ac7fba44ce8..02988cd00dd5 100644 --- a/packages/mask/src/plugins/Trader/helpers/uniswap.ts +++ b/packages/mask/src/plugins/Trader/helpers/uniswap.ts @@ -24,26 +24,26 @@ export function swapErrorToUserReadableMessage(error: any): string { switch (reason) { case 'UniswapV2Router: EXPIRED': - return `The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.` + return 'The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.' case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return `This transaction will not succeed either due to price movement or fee on transfer.` + return 'This transaction will not succeed either due to price movement or fee on transfer.' case 'TransferHelper: TRANSFER_FROM_FAILED': - return `The input token cannot be transferred. There may be an issue with the input token.` + return 'The input token cannot be transferred. There may be an issue with the input token.' case 'UniswapV2: TRANSFER_FAILED': - return `The output token cannot be transferred. There may be an issue with the output token.` + return 'The output token cannot be transferred. There may be an issue with the output token.' case 'UniswapV2: K': - return `The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.` + return 'The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.' case 'Too little received': case 'Too much requested': case 'STF': - return `This transaction will not succeed due to price movement.` + return 'This transaction will not succeed due to price movement.' case 'TF': - return `The output token cannot be transferred. There may be an issue with the output token.` + return 'The output token cannot be transferred. There may be an issue with the output token.' default: if (reason?.includes('undefined is not an object')) { console.error(error, reason) - return `An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading.` + return 'An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading.' } return `Unknown error${reason ? `: "${reason}"` : ''}.` } diff --git a/packages/mask/src/plugins/Trader/pipes.ts b/packages/mask/src/plugins/Trader/pipes.ts index d11709b6e30e..55e621b72e9d 100644 --- a/packages/mask/src/plugins/Trader/pipes.ts +++ b/packages/mask/src/plugins/Trader/pipes.ts @@ -159,10 +159,10 @@ export function resolveTradePairLink(tradeProvider: TradeProvider, address: stri return `https://pancakeswap.info/pool/${address}` case TradeProvider.BANCOR: // TODO - Bancor analytics should be available with V3 - return `` + return '' case TradeProvider.OPENOCEAN: // TODO - OpenOcean - return `` + return '' default: unreachable(tradeProvider) } diff --git a/packages/mask/src/plugins/Transak/SNSAdaptor/BuyTokenDialog.tsx b/packages/mask/src/plugins/Transak/SNSAdaptor/BuyTokenDialog.tsx index 58f680997e99..4508c00fe742 100644 --- a/packages/mask/src/plugins/Transak/SNSAdaptor/BuyTokenDialog.tsx +++ b/packages/mask/src/plugins/Transak/SNSAdaptor/BuyTokenDialog.tsx @@ -49,10 +49,9 @@ export function BuyTokenDialog(props: BuyTokenDialogProps) { //#region remote controlled buy token dialog const { open, closeDialog } = useRemoteControlledDialog(PluginTransakMessages.buyTokenDialogUpdated, (ev) => { - if (ev.open) { - setCode(ev.code ?? 'ETH') - setAddress(ev.address) - } + if (!ev.open) return + setCode(ev.code ?? 'ETH') + setAddress(ev.address) }) //#endregion diff --git a/packages/mask/src/plugins/UnlockProtocol/SNSAdaptor/UnlockProtocolInPost.tsx b/packages/mask/src/plugins/UnlockProtocol/SNSAdaptor/UnlockProtocolInPost.tsx index 216b144da8b1..7dfae647e3fe 100644 --- a/packages/mask/src/plugins/UnlockProtocol/SNSAdaptor/UnlockProtocolInPost.tsx +++ b/packages/mask/src/plugins/UnlockProtocol/SNSAdaptor/UnlockProtocolInPost.tsx @@ -28,30 +28,29 @@ export default function UnlockProtocolInPost(props: UnlockProtocolInPostProps) { const data: { locks: Record<string, object> } = { locks: {} } metadata.val.unlockLocks.forEach((locks) => { PluginUnlockProtocolRPC.verifyPurchase(address, locks.unlocklock, locks.chainid).then((res) => { - if (res) { - const requestData = { - lock: locks.unlocklock, - address: address, - chain: locks.chainid, - identifier: metadata.val.iv, - } - PluginUnlockProtocolRPC.getKey(requestData) - .catch((error) => { - if (error.code === -1) { - setContent(t('plugin_unlockprotocol_server_error')) - } - }) - .then((response) => { - setContent(response.message) - PluginUnlockProtocolRPC.decryptUnlockData( - metadata.val.iv, - response.post.unlockKey, - metadata.val.post, - ).then((content) => { - setContent(content.content) - }) - }) + if (!res) return + const requestData = { + lock: locks.unlocklock, + address: address, + chain: locks.chainid, + identifier: metadata.val.iv, } + PluginUnlockProtocolRPC.getKey(requestData) + .catch((error) => { + if (error.code === -1) { + setContent(t('plugin_unlockprotocol_server_error')) + } + }) + .then((response) => { + setContent(response.message) + PluginUnlockProtocolRPC.decryptUnlockData( + metadata.val.iv, + response.post.unlockKey, + metadata.val.post, + ).then((content) => { + setContent(content.content) + }) + }) }) data.locks[locks.unlocklock] = { network: locks.chainid } }) diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/GasSettingDialog/GasSetting1559.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/GasSettingDialog/GasSetting1559.tsx index cd269e4043da..8d8bd0c44759 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/GasSettingDialog/GasSetting1559.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/GasSettingDialog/GasSetting1559.tsx @@ -118,17 +118,16 @@ export const GasSetting1559: FC<GasSettingProps> = memo( //#region If the selected changed, set the value on the option to the form data useEffect(() => { - if (selectedGasOption !== null) { - clearErrors(['maxPriorityFeePerGas', 'maxFeePerGas']) - setValue( - 'maxPriorityFeePerGas', - new BigNumber(currentGasOption?.content?.suggestedMaxPriorityFeePerGas ?? 0).toString() ?? '', - ) - setValue( - 'maxFeePerGas', - new BigNumber(currentGasOption?.content?.suggestedMaxFeePerGas ?? 0).toString() ?? '', - ) - } + if (selectedGasOption === null) return + clearErrors(['maxPriorityFeePerGas', 'maxFeePerGas']) + setValue( + 'maxPriorityFeePerGas', + new BigNumber(currentGasOption?.content?.suggestedMaxPriorityFeePerGas ?? 0).toString() ?? '', + ) + setValue( + 'maxFeePerGas', + new BigNumber(currentGasOption?.content?.suggestedMaxFeePerGas ?? 0).toString() ?? '', + ) }, [currentGasOption, setValue, options]) //#endregion diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/RenameWalletDialog.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/RenameWalletDialog.tsx index 6ec223335c51..e03993550b4c 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/RenameWalletDialog.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/RenameWalletDialog.tsx @@ -25,10 +25,9 @@ export function WalletRenameWalletDialog() { const [wallet, setWallet] = useState<Wallet | null>(null) const { open, setDialog } = useRemoteControlledDialog(WalletMessages.events.walletRenameDialogUpdated) WalletMessages.events.walletRenameDialogUpdated.on((data) => { - if (data.open) { - setName(data.wallet?.name ?? '') - setWallet(data.wallet) - } + if (!data.open) return + setName(data.wallet?.name ?? '') + setWallet(data.wallet) }) const handleClose = useCallback(() => { setDialog({ diff --git a/packages/mask/src/plugins/Wallet/apis/nftscan.ts b/packages/mask/src/plugins/Wallet/apis/nftscan.ts index 8617cb119cac..5abae3b81d92 100644 --- a/packages/mask/src/plugins/Wallet/apis/nftscan.ts +++ b/packages/mask/src/plugins/Wallet/apis/nftscan.ts @@ -5,8 +5,8 @@ const NFTSCAN_SECRET = '21da1d638ef5d0bf76e37aa5c2da7fd789ade9e3' const NFTSCAN_URL = 'https://restapi.nftscan.com' const NFTSCAN_BASE_API = `${NFTSCAN_URL}/api/v1` -let token: string = '' -let token_expiration: number = 0 +let token = '' +let token_expiration = 0 async function getToken() { const params = new URLSearchParams() diff --git a/packages/mask/src/plugins/Wallet/services/wallet/index.ts b/packages/mask/src/plugins/Wallet/services/wallet/index.ts index 2a052e64cb6a..b1e91ce2a32a 100644 --- a/packages/mask/src/plugins/Wallet/services/wallet/index.ts +++ b/packages/mask/src/plugins/Wallet/services/wallet/index.ts @@ -174,6 +174,7 @@ export async function deriveWallet(name: string) { let latestDerivationPath = primaryWallet.latestDerivationPath ?? primaryWallet.derivationPath if (!latestDerivationPath) throw new Error('Failed to derive wallet without derivation path.') + // eslint-disable-next-line no-constant-condition while (true) { derivedTimes += 1 diff --git a/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx b/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx index 1069527c2cc9..abac8587ac08 100644 --- a/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx +++ b/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx @@ -64,10 +64,9 @@ export function InvestDialog() { //#region remote controlled dialog const { open, closeDialog } = useRemoteControlledDialog(PluginDHedgeMessages.InvestDialogUpdated, (ev) => { - if (ev.open) { - setPool(ev.pool) - setAllowedTokens(ev.tokens) - } + if (!ev.open) return + setPool(ev.pool) + setAllowedTokens(ev.tokens) }) const onClose = useCallback(() => { setPool(undefined) diff --git a/packages/mask/src/social-network-adaptor/facebook.com/ui-provider.ts b/packages/mask/src/social-network-adaptor/facebook.com/ui-provider.ts index b821b387c29e..8d81c39aab86 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/ui-provider.ts +++ b/packages/mask/src/social-network-adaptor/facebook.com/ui-provider.ts @@ -104,7 +104,7 @@ const facebookUI: SocialNetworkUI.Definition = { profilePage(profile) { // there is no PWA way on Facebook desktop. // mobile not tested - location.href = getProfilePageUrlAtFacebook(profile) + location.assign(getProfilePageUrlAtFacebook(profile)) }, newsFeed() { const homeLink = document.querySelector<HTMLAnchorElement>( @@ -114,7 +114,7 @@ const facebookUI: SocialNetworkUI.Definition = { ].join(','), ) if (homeLink) homeLink.click() - else if (location.pathname !== '/') location.pathname = '/' + else if (location.pathname !== '/') location.assign('/') }, }, maskCompositionDialog: { open: taskOpenComposeBoxFacebook }, diff --git a/packages/mask/src/social-network-adaptor/minds.com/automation/gotoNewsFeedPage.ts b/packages/mask/src/social-network-adaptor/minds.com/automation/gotoNewsFeedPage.ts index 74640bebe665..469a90056952 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/automation/gotoNewsFeedPage.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/automation/gotoNewsFeedPage.ts @@ -1,4 +1,5 @@ export function gotoNewsFeedPageMinds() { - if (location.pathname.includes('/newsfeed/subscriptions')) return - else location.pathname = '/newsfeed/subscriptions' + const path = '/newsfeed/subscriptions' + if (location.pathname.includes(path)) return + location.assign(path) } diff --git a/packages/mask/src/social-network-adaptor/minds.com/automation/gotoProfilePage.ts b/packages/mask/src/social-network-adaptor/minds.com/automation/gotoProfilePage.ts index 72d156d26916..6c714eaa50fe 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/automation/gotoProfilePage.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/automation/gotoProfilePage.ts @@ -5,6 +5,6 @@ export function gotoProfilePageMinds(profile: ProfileIdentifier) { ;(document.querySelector(`[href="${path}"]`) as HTMLElement | undefined)?.click() setTimeout(() => { // The classic way - if (!location.pathname.startsWith(path)) location.pathname = path + if (!location.pathname.startsWith(path)) location.assign(path) }, 400) } diff --git a/packages/mask/src/social-network-adaptor/minds.com/utils/fetch.ts b/packages/mask/src/social-network-adaptor/minds.com/utils/fetch.ts index 4d4cd56c9f90..15a55a574202 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/utils/fetch.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/utils/fetch.ts @@ -49,7 +49,7 @@ export const postContentMessageParser = (node: HTMLElement) => { const href = anchor.getAttribute('title') ?? anchor.getAttribute('href') const content = anchor.textContent if (!content) return makeTypedMessageEmpty() - return makeTypedMessageAnchor(resolve(content), href ?? 'javascript: void 0;', content) + return makeTypedMessageAnchor(resolve(content), href ?? '', content) } else if (node instanceof HTMLImageElement) { const image = node const src = image.getAttribute('src') diff --git a/packages/mask/src/social-network-adaptor/minds.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/minds.com/utils/selector.ts index 642130bc4221..37e03baffcf1 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/utils/selector.ts @@ -2,10 +2,7 @@ import { LiveSelector } from '@dimensiondev/holoflows-kit' type E = HTMLElement -const querySelector = <T extends E, SingleMode extends boolean = true>( - selector: string, - singleMode: boolean = true, -) => { +const querySelector = <T extends E, SingleMode extends boolean = true>(selector: string, singleMode = true) => { const ls = new LiveSelector<T, SingleMode>().querySelector<T>(selector) return (singleMode ? ls.enableSingleMode() : ls) as LiveSelector<T, SingleMode> } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoNewsFeedPage.ts b/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoNewsFeedPage.ts index 5a50f01f0ef7..b5e0c014cdb4 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoNewsFeedPage.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoNewsFeedPage.ts @@ -1,4 +1,4 @@ export function gotoNewsFeedPageTwitter() { if (location.pathname.includes('/home')) location.reload() - else location.pathname = '/home' + else location.assign('/home') } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoProfilePage.ts b/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoProfilePage.ts index e610fde05c1e..bb105a7a2ed7 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoProfilePage.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/automation/gotoProfilePage.ts @@ -5,6 +5,6 @@ export function gotoProfilePageTwitter(profile: ProfileIdentifier) { ;(document.querySelector(`[href="${path}"]`) as HTMLElement | undefined)?.click() setTimeout(() => { // The classic way - if (!location.pathname.startsWith(path)) location.pathname = path + if (!location.pathname.startsWith(path)) location.assign(path) }, 400) } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/encoding.ts b/packages/mask/src/social-network-adaptor/twitter.com/encoding.ts index 672d4cc2879e..1d49abb23240 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/encoding.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/encoding.ts @@ -52,7 +52,7 @@ export const twitterEncoding = { }, } -function regexMatchAll(str: string, regexp: RegExp, index: number = 1) { +function regexMatchAll(str: string, regexp: RegExp, index = 1) { const gPos = regexp.flags.indexOf('g') const withoutG = gPos >= 0 ? `${regexp.flags.slice(0, gPos)}${regexp.flags.slice(gPos + 1)}` : regexp.flags const o = new RegExp(regexp.source, withoutG) diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts index 849e623d8458..ccec1a55ae5d 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts @@ -90,7 +90,7 @@ export const postContentMessageParser = (node: HTMLElement) => { const href = anchor.getAttribute('title') ?? anchor.getAttribute('href') const content = anchor.textContent if (!content) return makeTypedMessageEmpty() - return makeTypedMessageAnchor(resolve(content), href ?? 'javascript: void 0;', content) + return makeTypedMessageAnchor(resolve(content), href ?? '', content) } else if (node instanceof HTMLImageElement) { const image = node const src = image.getAttribute('src') diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts index 090f5b1e3c20..874d4b16ca67 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts @@ -5,10 +5,7 @@ import { isCompose } from './postBox' type E = HTMLElement -const querySelector = <T extends E, SingleMode extends boolean = true>( - selector: string, - singleMode: boolean = true, -) => { +const querySelector = <T extends E, SingleMode extends boolean = true>(selector: string, singleMode = true) => { const ls = new LiveSelector<T, SingleMode>().querySelector<T>(selector) return (singleMode ? ls.enableSingleMode() : ls) as LiveSelector<T, SingleMode> } @@ -101,7 +98,7 @@ export const postEditorInTimelineSelector: () => LiveSelector<E, true> = () => export const postEditorDraftContentSelector = () => { if (location.pathname === '/compose/tweet') { return querySelector<HTMLDivElement>( - `[contenteditable][aria-label][spellcheck],textarea[aria-label][spellcheck]`, + '[contenteditable][aria-label][spellcheck],textarea[aria-label][spellcheck]', ) } return (isCompose() ? postEditorInPopupSelector() : postEditorInTimelineSelector()).querySelector<HTMLElement>( diff --git a/packages/mask/src/utils/components/Avatar.tsx b/packages/mask/src/utils/components/Avatar.tsx index 0afcfcde4018..5e4d64768f3c 100644 --- a/packages/mask/src/utils/components/Avatar.tsx +++ b/packages/mask/src/utils/components/Avatar.tsx @@ -9,7 +9,7 @@ export function mapContactAvatarColor(string: string, theme: 'light' | 'dark') { // eslint-disable-next-line no-bitwise return next & next }, 0) - return `hsl(${hash % 360}, ${theme === 'dark' ? `78%` : '98%'}, ${theme === 'dark' ? `50%` : '70%'})` + return `hsl(${hash % 360}, ${theme === 'dark' ? '78%' : '98%'}, ${theme === 'dark' ? '50%' : '70%'})` } interface Props extends AvatarProps { diff --git a/packages/mask/src/utils/dom.ts b/packages/mask/src/utils/dom.ts index 7435c8cc02ed..4fe4813f9c92 100644 --- a/packages/mask/src/utils/dom.ts +++ b/packages/mask/src/utils/dom.ts @@ -16,10 +16,9 @@ export function untilDomLoaded() { if (document.readyState !== 'loading') return Promise.resolve() return new Promise<void>((resolve) => { const callback = () => { - if (document.readyState !== 'loading') { - resolve() - document.removeEventListener('readystatechange', callback) - } + if (document.readyState === 'loading') return + resolve() + document.removeEventListener('readystatechange', callback) } document.addEventListener('readystatechange', callback, { passive: true }) }) @@ -29,10 +28,9 @@ export function untilDocumentReady() { if (document.readyState === 'complete') return Promise.resolve() return new Promise<void>((resolve) => { const callback = () => { - if (document.readyState === 'complete') { - resolve() - document.removeEventListener('readystatechange', callback) - } + if (document.readyState !== 'complete') return + resolve() + document.removeEventListener('readystatechange', callback) } document.addEventListener('readystatechange', callback, { passive: true }) }) diff --git a/packages/mask/utils-pure/assertion/index.ts b/packages/mask/utils-pure/assertion/index.ts index c0d624edc21b..516dc2d591d2 100644 --- a/packages/mask/utils-pure/assertion/index.ts +++ b/packages/mask/utils-pure/assertion/index.ts @@ -1,7 +1,7 @@ /** * Ensure a value not null or undefined. */ -export function assertNonNull<T>(val: T, message: string = 'Unexpected nil value detected') { +export function assertNonNull<T>(val: T, message = 'Unexpected nil value detected') { if (val === null || val === undefined) throw new Error(message) return val as NonNullable<T> } diff --git a/packages/mask/utils-ui/DOM/DocumentLoad.ts b/packages/mask/utils-ui/DOM/DocumentLoad.ts index 333d2879297b..4f42ab2f42ed 100644 --- a/packages/mask/utils-ui/DOM/DocumentLoad.ts +++ b/packages/mask/utils-ui/DOM/DocumentLoad.ts @@ -2,10 +2,9 @@ export function untilDomLoaded() { if (document.readyState !== 'loading') return Promise.resolve() return new Promise<void>((resolve) => { const callback = () => { - if (document.readyState !== 'loading') { - resolve() - document.removeEventListener('readystatechange', callback) - } + if (document.readyState === 'loading') return + resolve() + document.removeEventListener('readystatechange', callback) } document.addEventListener('readystatechange', callback, { passive: true }) }) @@ -15,10 +14,9 @@ export function untilDocumentReady() { if (document.readyState === 'complete') return Promise.resolve() return new Promise<void>((resolve) => { const callback = () => { - if (document.readyState === 'complete') { - resolve() - document.removeEventListener('readystatechange', callback) - } + if (document.readyState !== 'complete') return + resolve() + document.removeEventListener('readystatechange', callback) } document.addEventListener('readystatechange', callback, { passive: true }) }) diff --git a/packages/plugin-infra/src/manager/manage.ts b/packages/plugin-infra/src/manager/manage.ts index 78ac14bbd1af..ab1bfbf74a94 100644 --- a/packages/plugin-infra/src/manager/manage.ts +++ b/packages/plugin-infra/src/manager/manage.ts @@ -87,7 +87,7 @@ export function createManager< function verifyHostHooks() { if (!_host) throw new Error( - `[@masknet/plugin-infra] You must call configureHostHooks or startDaemon to configure host hooks.`, + '[@masknet/plugin-infra] You must call configureHostHooks or startDaemon to configure host hooks.', ) } diff --git a/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx b/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx index f98a1bd1f655..20c5f56b376c 100644 --- a/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx +++ b/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx @@ -19,7 +19,7 @@ export function createInjectHooksRenderer<PluginDefinition extends Plugin.Shared .filter((x) => x.ui) .map(({ key, name, ui }) => ( // TODO: i18n - <ErrorBoundary key={key} subject={`Plugin ` + name.fallback}> + <ErrorBoundary key={key} subject={'Plugin ' + name.fallback}> <Main UI={ui!} data={props} /> </ErrorBoundary> )) diff --git a/packages/plugins/FileService/src/Worker/arweave.ts b/packages/plugins/FileService/src/Worker/arweave.ts index ef86b2241789..1847d42a42f8 100644 --- a/packages/plugins/FileService/src/Worker/arweave.ts +++ b/packages/plugins/FileService/src/Worker/arweave.ts @@ -51,7 +51,7 @@ export interface LandingPageMetadata { } export async function uploadLandingPage(metadata: LandingPageMetadata) { - let linkPrefix: string = 'https://arweave.net' + let linkPrefix = 'https://arweave.net' if (metadata.useCDN) { linkPrefix = mesonPrefix } diff --git a/packages/shared-base/src/TypedMessage/binary-encode/decode.ts b/packages/shared-base/src/TypedMessage/binary-encode/decode.ts index be59298acff7..73bbd829abdb 100644 --- a/packages/shared-base/src/TypedMessage/binary-encode/decode.ts +++ b/packages/shared-base/src/TypedMessage/binary-encode/decode.ts @@ -3,7 +3,7 @@ import { Result } from 'ts-results' import { makeTypedMessageText, makeTypedMessageTuple, makeTypedMessageUnknown, TypedMessage } from '..' import { TypedMessageTypeEnum } from './type' -const HEAD = `[@masknet/shared-base] TypedMessage: ` +const HEAD = '[@masknet/shared-base] TypedMessage: ' export function decodeTypedMessageFromDocument(bin: Uint8Array) { return Result.wrap(() => { const doc = decode(bin) diff --git a/packages/shared-base/src/TypedMessage/binary-encode/encode.ts b/packages/shared-base/src/TypedMessage/binary-encode/encode.ts index 2b61ea96f4ea..401e5dff5758 100644 --- a/packages/shared-base/src/TypedMessage/binary-encode/encode.ts +++ b/packages/shared-base/src/TypedMessage/binary-encode/encode.ts @@ -9,7 +9,7 @@ import { import { encode } from '@msgpack/msgpack' import { TypedMessageTypeEnum } from './type' -const HEAD = `[@masknet/shared-base] TypedMessage: ` +const HEAD = '[@masknet/shared-base] TypedMessage: ' export function encodeTypedMessageToDocument(tm: SerializableTypedMessages) { const doc = [0, encodeTypedMessage(tm)] return encode(doc) diff --git a/packages/shared/src/UI/components/AssetPlayer/index.tsx b/packages/shared/src/UI/components/AssetPlayer/index.tsx index 9b8baa4b561d..b6efa3921629 100644 --- a/packages/shared/src/UI/components/AssetPlayer/index.tsx +++ b/packages/shared/src/UI/components/AssetPlayer/index.tsx @@ -119,10 +119,9 @@ export const AssetPlayer = memo<AssetPlayerProps>(({ url, type, options, iconPro setIframe() }} onResized={({ type }) => { - if (type !== 'init') { - cancel() - setPlayerState(AssetPlayerState.NORMAL) - } + if (type === 'init') return + cancel() + setPlayerState(AssetPlayerState.NORMAL) }} style={{ width: playerState !== AssetPlayerState.NORMAL ? 0 : undefined }} checkOrigin={false} diff --git a/packages/shared/src/UI/components/ErrorBoundary/CrashUI.tsx b/packages/shared/src/UI/components/ErrorBoundary/CrashUI.tsx index 2f8af2b79018..e3c0ad1abe08 100644 --- a/packages/shared/src/UI/components/ErrorBoundary/CrashUI.tsx +++ b/packages/shared/src/UI/components/ErrorBoundary/CrashUI.tsx @@ -37,7 +37,7 @@ export function CrashUI({ onRetry, subject, ...error }: CrashUIProps) { // crash report, will send to GitHub const reportTitle = `[Crash] ${error.type}: ${error.message}` - const reportBody: string = `<!--Thanks for the crash report! + const reportBody = `<!--Thanks for the crash report! Please write down what you're doing when the crash happened, that will help us to fix it easier!--> I was *doing something...*, then Mask reports an error. @@ -52,7 +52,7 @@ Error stack: const url = new URLSearchParams() url.set('title', reportTitle) url.set('body', reportBody) - return `https://github.com/DimensionDev/Maskbook/issues/new?` + url.toString() + return 'https://github.com/DimensionDev/Maskbook/issues/new?' + url.toString() }, [reportBody, reportTitle]) return ( <Root> diff --git a/packages/shared/src/UI/components/LoadingAnimation/index.tsx b/packages/shared/src/UI/components/LoadingAnimation/index.tsx index b643d13ff978..540807edca5d 100644 --- a/packages/shared/src/UI/components/LoadingAnimation/index.tsx +++ b/packages/shared/src/UI/components/LoadingAnimation/index.tsx @@ -13,7 +13,7 @@ const useStyles = makeStyles()({ transform: 'rotate(360deg)', }, }, - animation: `loadingAnimation 1.6s linear infinite`, + animation: 'loadingAnimation 1.6s linear infinite', }, }) diff --git a/packages/shared/src/utils/formatter.ts b/packages/shared/src/utils/formatter.ts index 620e3a8f13a0..919f1fba7940 100644 --- a/packages/shared/src/utils/formatter.ts +++ b/packages/shared/src/utils/formatter.ts @@ -1,4 +1,4 @@ -export function formatFingerprint(fingerprint: string, size: number = 0) { +export function formatFingerprint(fingerprint: string, size = 0) { if (size === 0) return fingerprint return `${fingerprint.substr(0, 2 + size)}...${fingerprint.substr(-size)}` } diff --git a/packages/test-serializer/index.js b/packages/test-serializer/index.js index d31d4fe31b53..472e7e7007a6 100644 --- a/packages/test-serializer/index.js +++ b/packages/test-serializer/index.js @@ -16,12 +16,12 @@ module.exports = { } if (isCryptoKey(val)) { // crypto.subtle.exportKey('jwk', val).then(console.log) - return `CryptoKey { [opaque crypto key material] }` + return 'CryptoKey { [opaque crypto key material] }' } const inner = printer(val.val, config, indentation, depth, refs) if (val.ok) return `Ok(${inner})` if (val.err) return `Err(${inner})` - if (val.none) return `None` + if (val.none) return 'None' if (val.some) return `Some(${inner})` }, test(val) { diff --git a/packages/theme/src/component-changes.ts b/packages/theme/src/component-changes.ts index 40acf95909b1..9e98120ba1c9 100644 --- a/packages/theme/src/component-changes.ts +++ b/packages/theme/src/component-changes.ts @@ -130,14 +130,14 @@ export const Dialog: Theme = (mode, colors): ThemeOptions => ({ MuiDialog: { styleOverrides: { root: { - [`& .dashboard-style`]: { + '& .dashboard-style': { backgroundColor: mode === 'dark' ? colors.primaryBackground : colors.secondaryBackground, }, // workaround for common component be used in dashboard and twitter - [`& .dashboard.token-list`]: { + '& .dashboard.token-list': { padding: 10, }, - [`& .dashboard.token-list-symbol`]: { + '& .dashboard.token-list-symbol': { color: mode === 'dark' ? 'rgba(255, 255, 255, 0.8)' : '#7B8192', fontSize: 12, }, diff --git a/packages/web3-providers/src/rarible/types.ts b/packages/web3-providers/src/rarible/types.ts index 672a023c8121..011d6282ec22 100644 --- a/packages/web3-providers/src/rarible/types.ts +++ b/packages/web3-providers/src/rarible/types.ts @@ -118,7 +118,7 @@ export interface Tag { } export interface RaribleCollectibleResponse { - ['@class']: string + '@class': string id: string name: string symbol: string diff --git a/packages/web3-shared/evm/hooks/useContract.ts b/packages/web3-shared/evm/hooks/useContract.ts index 267b76db93af..62ec14ef299f 100644 --- a/packages/web3-shared/evm/hooks/useContract.ts +++ b/packages/web3-shared/evm/hooks/useContract.ts @@ -21,7 +21,7 @@ export function createContract<T extends BaseContract>(web3: Web3, address: stri * @param ABI */ export function useContract<T extends BaseContract>( - address: string = '', + address = '', ABI: AbiItem[] = [], readonly = false, chainId?: ChainId, diff --git a/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts b/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts index 6a6ad20791ac..29774ba7c7ba 100644 --- a/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts +++ b/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts @@ -11,7 +11,7 @@ import type { ChainId } from '../types' export function useERC20TokensDetailedFromTokenLists( lists?: string[], - keyword: string = '', + keyword = '', additionalTokens: (ERC20TokenDetailed | NativeTokenDetailed)[] = [], targetChainId?: ChainId, ): AsyncStateRetry<(ERC20TokenDetailed | NativeTokenDetailed)[]> { diff --git a/packages/web3-shared/evm/hooks/useERC721TokenByIndex.ts b/packages/web3-shared/evm/hooks/useERC721TokenByIndex.ts index 4d30235a6e7a..52d3092f0a4c 100644 --- a/packages/web3-shared/evm/hooks/useERC721TokenByIndex.ts +++ b/packages/web3-shared/evm/hooks/useERC721TokenByIndex.ts @@ -3,7 +3,7 @@ import type { ERC721Token } from '../types' import { useERC721TokenContract } from '../contracts/useERC721TokenContract' import { useChainId } from './useChainId' -export function useERC721TokenByIndex(token?: ERC721Token, index: number = 0) { +export function useERC721TokenByIndex(token?: ERC721Token, index = 0) { const chainId = useChainId() const erc721Contract = useERC721TokenContract(token?.address) return useAsync(async () => { diff --git a/packages/web3-shared/evm/pipes/index.ts b/packages/web3-shared/evm/pipes/index.ts index 8b8c3aa4bdab..df0cf4bd4e6a 100644 --- a/packages/web3-shared/evm/pipes/index.ts +++ b/packages/web3-shared/evm/pipes/index.ts @@ -147,8 +147,8 @@ export function resolveDomainLink(domain?: string) { export function resolveCollectibleProviderLink(chainId: ChainId, provider: NonFungibleAssetProvider) { switch (provider) { case NonFungibleAssetProvider.OPENSEA: - if (chainId === ChainId.Rinkeby) return `https://testnets.opensea.io` - return `https://opensea.io` + if (chainId === ChainId.Rinkeby) return 'https://testnets.opensea.io' + return 'https://opensea.io' case NonFungibleAssetProvider.RARIBLE: return 'https://rarible.com' case NonFungibleAssetProvider.NFTSCAN: @@ -161,9 +161,9 @@ export function resolveCollectibleProviderLink(chainId: ChainId, provider: NonFu export function resolveCollectibleAssetLink(chainId: ChainId, provider: NonFungibleAssetProvider) { switch (provider) { case NonFungibleAssetProvider.OPENSEA: - if (chainId === ChainId.Rinkeby) return `https://testnets.opensea.io/assets` - if (chainId === ChainId.Matic) return `https://opensea.io/assets/matic` - return `https://opensea.io/assets` + if (chainId === ChainId.Rinkeby) return 'https://testnets.opensea.io/assets' + if (chainId === ChainId.Matic) return 'https://opensea.io/assets/matic' + return 'https://opensea.io/assets' case NonFungibleAssetProvider.RARIBLE: return '' case NonFungibleAssetProvider.NFTSCAN: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad19d3e016fa..bad111c8fe8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,6 +10,7 @@ importers: specifiers: '@commitlint/cli': ^16.0.0 '@commitlint/config-conventional': ^16.0.0 + '@dimensiondev/eslint-plugin': ^0.0.1-20211222115249-7984aa5 '@dimensiondev/kit': 0.0.0-20211215044858-27d964f '@dimensiondev/patch-package': ^6.5.0 '@emotion/cache': ^11.7.1 @@ -35,7 +36,6 @@ importers: eslint: 8.5.0 eslint-config-prettier: ^8.3.0 eslint-plugin-import: 2.25.3 - eslint-plugin-lodash: ^7.3.0 eslint-plugin-prettier: ^4.0.0 eslint-plugin-react: ^7.28.0 eslint-plugin-react-hooks: ^4.3.0 @@ -89,6 +89,7 @@ importers: devDependencies: '@commitlint/cli': 16.0.0 '@commitlint/config-conventional': 16.0.0 + '@dimensiondev/eslint-plugin': 0.0.1-20211222115249-7984aa5_eslint@8.5.0 '@dimensiondev/patch-package': 6.5.0 '@jest/globals': 27.4.4 '@magic-works/i18n-codegen': 0.0.6_typescript@4.6.0-dev.20211202 @@ -100,7 +101,6 @@ importers: eslint: 8.5.0 eslint-config-prettier: 8.3.0_eslint@8.5.0 eslint-plugin-import: 2.25.3_eslint@8.5.0 - eslint-plugin-lodash: 7.3.0_eslint@8.5.0 eslint-plugin-prettier: 4.0.0_94e1b6d3ce6ea916847122712570e9ae eslint-plugin-react: 7.28.0_eslint@8.5.0 eslint-plugin-react-hooks: 4.3.0_eslint@8.5.0 @@ -3431,6 +3431,18 @@ packages: '@msgpack/msgpack': 1.12.2 dev: false + /@dimensiondev/eslint-plugin/0.0.1-20211222115249-7984aa5_eslint@8.5.0: + resolution: {integrity: sha512-CcPs3cioDRhYs0Gpz+F4TKfL+rsgdulFd3zaBNU06Rq522opZX9VmpcrCDuW4f1EHNYKYIj1wEVGvBvSlbCMAg==, tarball: download/@dimensiondev/eslint-plugin/0.0.1-20211222115249-7984aa5/2641dcbec68ae0b51f1dc91e9c92abe14be0258740198e2c12d24888a5f1f338} + engines: {node: '>= 14'} + peerDependencies: + eslint: '>= 8' + dependencies: + eslint: 8.5.0 + lodash.set: 4.3.2 + dev: true + bundledDependencies: + - lodash.set + /@dimensiondev/holoflows-kit/0.9.0-20210902104757-7c3d0d0: resolution: {integrity: sha512-Vk22WLOTW20OECTHdLGulGmDsTFguURQYB9Oq8S+eDVrmWHCxKD/N+4OU5uCFrWCkqjl/n7vec3fVWUSunpBeA==, tarball: download/@dimensiondev/holoflows-kit/0.9.0-20210902104757-7c3d0d0/bce56871014284e7863fc97177b316aec94f6dfddf627312e690958400e958e8} peerDependencies: @@ -13150,16 +13162,6 @@ packages: tsconfig-paths: 3.12.0 dev: true - /eslint-plugin-lodash/7.3.0_eslint@8.5.0: - resolution: {integrity: sha512-FQM8HklruJzulPawX3uZqWbeyN3bQT4hjVCpFYMrWo0Hdz1qDCwp1v3JS4zjhdssAXdwCxdnyrNMCZJK70GeUQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: '>=2' - dependencies: - eslint: 8.5.0 - lodash: 4.17.21 - dev: true - /eslint-plugin-prettier/4.0.0_94e1b6d3ce6ea916847122712570e9ae: resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} engines: {node: '>=6.0.0'} @@ -17755,7 +17757,6 @@ packages: /lodash.set/4.3.2: resolution: {integrity: sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=} - dev: false /lodash.unescape/4.0.1: resolution: {integrity: sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=}