From afe9662d678a42bd30dca1b9dfc2a83e64e7ec66 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 23 Feb 2022 17:44:19 +0800 Subject: [PATCH 1/3] chore: upgrade dimension/kit --- package.json | 2 +- .../Restore/RestoreFromMnemonic.tsx | 3 +- .../Restore/RestoreFromPrivateKey.tsx | 3 +- .../dashboard/src/hooks/useCreatePersonaV2.ts | 2 +- .../pages/Personas/hooks/useCreatePersona.ts | 2 +- .../pages/SignUp/steps/PersonaRecovery.tsx | 3 +- .../database/avatar-cache/avatar.ts | 3 +- .../DecryptedPost/DecryptedPost.tsx | 9 +-- .../SteganographyTextPayload.ts | 3 +- packages/mask/src/crypto/crypto-alpha-40.ts | 10 +++- .../CryptoServices/decryptFrom.ts | 9 +-- .../background-script/CryptoServices/utils.ts | 4 +- .../EthereumServices/provider.ts | 2 +- .../EthereumServices/providers/Fortmatic.ts | 2 +- .../EthereumServices/providers/Injected.ts | 2 +- .../EthereumServices/providers/MetaMask.ts | 2 +- .../EthereumServices/request.ts | 2 +- .../HelperService/storage.ts | 2 +- .../background-script/IdentityService.ts | 4 +- .../IdentityServices/sign.ts | 3 +- .../background-script/SocialNetworkService.ts | 3 +- .../background-script/WelcomeService.ts | 4 +- .../WelcomeServices/generateBackupJSON.ts | 3 +- .../plugins/NextID/components/BindDialog.tsx | 2 +- .../NextID/components/UnbindDialog.tsx | 2 +- .../mask/src/plugins/Pets/hooks/useNfts.ts | 2 +- .../Trader/SNSAdaptor/trader/Trader.tsx | 2 +- .../SNSAdaptor/ConnectWalletDialog/index.tsx | 3 +- .../Wallet/SNSAdaptor/SelectTokenDialog.tsx | 2 +- .../Wallet/SNSAdaptor/SelectWalletDialog.tsx | 3 +- packages/mask/src/settings/createSettings.ts | 2 +- .../facebook.com/automation/openComposeBox.ts | 6 +- .../automation/pasteTextToComposition.ts | 58 +------------------ .../automation/pasteToCommentBoxFacebook.ts | 2 +- .../facebook.com/collecting/identity.ts | 3 +- .../injection/NFT/ProfileNFTAvatar.tsx | 9 ++- .../instagram.com/collecting/identity.ts | 3 +- .../minds.com/automation/openComposeBox.ts | 6 +- .../automation/pasteTextToComposition.ts | 12 ++-- .../automation/pasteToCommentBoxMinds.ts | 2 +- .../minds.com/collecting/identity.ts | 5 +- .../minds.com/utils/fetch.ts | 2 +- .../automation/pasteTextToComposition.ts | 12 ++-- .../twitter.com/collecting/identity.ts | 3 +- .../twitter.com/injection/MaskIcon.tsx | 2 +- .../injection/NFT/ProfileNFTAvatar.tsx | 3 +- .../automation/AttachImageToComposition.ts | 6 +- packages/mask/src/social-network/ui.ts | 12 +--- packages/mask/src/utils/dom.ts | 24 -------- packages/mask/src/utils/utils.ts | 3 +- .../src/web3/UI/EthereumChainBoundary.tsx | 2 +- packages/mask/utils-pure/assertion/index.ts | 7 --- packages/mask/utils-pure/index.ts | 2 - packages/mask/utils-pure/memoize.ts | 27 --------- packages/mask/utils-pure/type/index.ts | 4 -- packages/mask/utils-ui/DOM/DocumentLoad.ts | 23 -------- packages/mask/utils-ui/DOM/index.ts | 1 - packages/mask/utils-ui/index.ts | 2 +- .../src/SNSAdaptor/components/Upload.tsx | 4 +- .../src/SNSAdaptor/components/Uploading.tsx | 2 +- .../Blob.prototype.arrayBuffer.ts | 21 +++++++ .../implementation/EventTarget.constructor.ts | 28 +++++---- packages/polyfills/web-apis/worker.ts | 1 + packages/shared-base/src/kv-storage/index.ts | 2 +- packages/shared-base/src/kv-storage/proxy.ts | 2 +- packages/shared-base/src/utils/abortSignal.ts | 19 ------ packages/shared-base/src/utils/defer.ts | 12 ---- packages/shared-base/src/utils/delay.ts | 8 --- packages/shared-base/src/utils/enum.ts | 6 -- packages/shared-base/src/utils/index.ts | 5 -- packages/shared-base/src/utils/timeout.ts | 18 ------ .../stories/atoms/LoadingButton.stories.tsx | 5 -- pnpm-lock.yaml | 16 ++--- 73 files changed, 142 insertions(+), 348 deletions(-) delete mode 100644 packages/mask/utils-pure/assertion/index.ts delete mode 100644 packages/mask/utils-pure/memoize.ts delete mode 100644 packages/mask/utils-ui/DOM/DocumentLoad.ts delete mode 100644 packages/mask/utils-ui/DOM/index.ts create mode 100644 packages/polyfills/web-apis/implementation/Blob.prototype.arrayBuffer.ts delete mode 100644 packages/shared-base/src/utils/abortSignal.ts delete mode 100644 packages/shared-base/src/utils/defer.ts delete mode 100644 packages/shared-base/src/utils/delay.ts delete mode 100644 packages/shared-base/src/utils/enum.ts delete mode 100644 packages/shared-base/src/utils/timeout.ts diff --git a/package.json b/package.json index d1ecb4da63ec..2a8292b499b4 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "spellcheck": "cspell lint --no-must-find-files" }, "dependencies": { - "@dimensiondev/kit": "0.0.0-20211215044858-27d964f", + "@dimensiondev/kit": "0.0.0-20220223091404-a336005", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.7.1", "@emotion/serialize": "^1.0.2", diff --git a/packages/dashboard/src/components/Restore/RestoreFromMnemonic.tsx b/packages/dashboard/src/components/Restore/RestoreFromMnemonic.tsx index 0183a771b83f..083b473dcf6f 100644 --- a/packages/dashboard/src/components/Restore/RestoreFromMnemonic.tsx +++ b/packages/dashboard/src/components/Restore/RestoreFromMnemonic.tsx @@ -8,11 +8,12 @@ import { MaskAlert } from '../MaskAlert' import { ButtonContainer } from '../RegisterFrame/ButtonContainer' import { Services } from '../../API' import { PersonaContext } from '../../pages/Personas/hooks/usePersonaContext' -import { DashboardRoutes, delay } from '@masknet/shared-base' +import { DashboardRoutes } from '@masknet/shared-base' import { useNavigate } from 'react-router-dom' import { useState } from 'react' import { SignUpRoutePath } from '../../pages/SignUp/routePath' import { LoadingButton } from '../LoadingButton' +import { delay } from '@dimensiondev/kit' const useStyles = makeStyles()((theme) => ({ error: { diff --git a/packages/dashboard/src/components/Restore/RestoreFromPrivateKey.tsx b/packages/dashboard/src/components/Restore/RestoreFromPrivateKey.tsx index ff0738ddd69a..7144977f78ac 100644 --- a/packages/dashboard/src/components/Restore/RestoreFromPrivateKey.tsx +++ b/packages/dashboard/src/components/Restore/RestoreFromPrivateKey.tsx @@ -10,8 +10,9 @@ import { PersonaContext } from '../../pages/Personas/hooks/usePersonaContext' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { useNavigate } from 'react-router-dom' -import { DashboardRoutes, delay } from '@masknet/shared-base' +import { DashboardRoutes } from '@masknet/shared-base' import { SignUpRoutePath } from '../../pages/SignUp/routePath' +import { delay } from '@dimensiondev/kit' type FormInputs = { privateKey: string } diff --git a/packages/dashboard/src/hooks/useCreatePersonaV2.ts b/packages/dashboard/src/hooks/useCreatePersonaV2.ts index f334a912c1a8..0c5fe164e417 100644 --- a/packages/dashboard/src/hooks/useCreatePersonaV2.ts +++ b/packages/dashboard/src/hooks/useCreatePersonaV2.ts @@ -1,4 +1,4 @@ -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { Messages, Services } from '../API' export function useCreatePersonaV2() { diff --git a/packages/dashboard/src/pages/Personas/hooks/useCreatePersona.ts b/packages/dashboard/src/pages/Personas/hooks/useCreatePersona.ts index d1d7b57e55ee..22dad6dec080 100644 --- a/packages/dashboard/src/pages/Personas/hooks/useCreatePersona.ts +++ b/packages/dashboard/src/pages/Personas/hooks/useCreatePersona.ts @@ -1,6 +1,6 @@ import { useAsyncFn } from 'react-use' import { Messages, Services } from '../../../API' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import type { AsyncFnReturn } from 'react-use/lib/useAsyncFn' export function useCreatePersona(): AsyncFnReturn<(nickName: string) => Promise> { diff --git a/packages/dashboard/src/pages/SignUp/steps/PersonaRecovery.tsx b/packages/dashboard/src/pages/SignUp/steps/PersonaRecovery.tsx index 85fa12b3845a..14335daceead 100644 --- a/packages/dashboard/src/pages/SignUp/steps/PersonaRecovery.tsx +++ b/packages/dashboard/src/pages/SignUp/steps/PersonaRecovery.tsx @@ -1,7 +1,7 @@ import { useCallback, useState } from 'react' import { useLocation, useNavigate } from 'react-router-dom' import { useCustomSnackbar } from '@masknet/theme' -import { DashboardRoutes, delay } from '@masknet/shared-base' +import { DashboardRoutes } from '@masknet/shared-base' import { useDashboardI18N } from '../../../locales' import { SignUpRoutePath } from '../routePath' import { Services } from '../../../API' @@ -9,6 +9,7 @@ import { PersonaNameUI } from './PersonaNameUI' import { useCreatePersonaByPrivateKey, useCreatePersonaV2 } from '../../../hooks/useCreatePersonaV2' import { PersonaContext } from '../../Personas/hooks/usePersonaContext' import { useAsync } from 'react-use' +import { delay } from '@dimensiondev/kit' export const PersonaRecovery = () => { const t = useDashboardI18N() diff --git a/packages/mask/background/database/avatar-cache/avatar.ts b/packages/mask/background/database/avatar-cache/avatar.ts index ea63fb5794c5..c9d534f8b1f6 100644 --- a/packages/mask/background/database/avatar-cache/avatar.ts +++ b/packages/mask/background/database/avatar-cache/avatar.ts @@ -1,8 +1,7 @@ import { ProfileIdentifier } from '@masknet/shared-base' import { queryAvatarDB, isAvatarOutdatedDB, storeAvatarDB, IdentifierWithAvatar, createAvatarDBAccess } from './db' -import { memoizePromise } from '../../../utils-pure' import { MaskMessages } from '../../../shared' -import { blobToDataURL } from '@dimensiondev/kit' +import { blobToDataURL, memoizePromise } from '@dimensiondev/kit' import { createTransaction } from '../utils/openDB' /** diff --git a/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx b/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx index 681fc8c0e428..3dee957c9a9d 100644 --- a/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx +++ b/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx @@ -1,11 +1,5 @@ import { Fragment, useEffect, useMemo, useReducer } from 'react' -import { - delay, - makeTypedMessageTuple, - TypedMessageTuple, - type ProfileIdentifier, - type Payload, -} from '@masknet/shared-base' +import { makeTypedMessageTuple, TypedMessageTuple, type ProfileIdentifier, type Payload } from '@masknet/shared-base' import { or } from '@masknet/theme' import { ServicesWithProgress } from '../../../extension/service' @@ -25,6 +19,7 @@ import { usePostInfo, } from '../../DataSource/usePostInfo' import { asyncIteratorWithResult } from '../../../utils/type-transform/asyncIteratorHelpers' +import { delay } from '@dimensiondev/kit' function progressReducer( state: { key: string; progress: SuccessDecryption | FailureDecryption | DecryptionProgress }[], diff --git a/packages/mask/src/components/InjectedComponents/SteganographyTextPayload.ts b/packages/mask/src/components/InjectedComponents/SteganographyTextPayload.ts index b509473db0c8..b3be455def07 100644 --- a/packages/mask/src/components/InjectedComponents/SteganographyTextPayload.ts +++ b/packages/mask/src/components/InjectedComponents/SteganographyTextPayload.ts @@ -1,4 +1,3 @@ -import { blobToArrayBuffer } from '@dimensiondev/kit' import { GrayscaleAlgorithm, type ImageTemplateTypes } from '@masknet/encryption' import Services from '../../extension/service' import { ImagePayloadURLs } from '../../resources/image-payload' @@ -7,7 +6,7 @@ import { downloadUrl } from '../../utils/utils' export async function SteganographyTextPayload(template: ImageTemplateTypes, text: string) { const pass = activatedSocialNetworkUI.configuration.steganography?.password?.() || 'mask' - const blankImage = await downloadUrl(ImagePayloadURLs[template]).then(blobToArrayBuffer) + const blankImage = await downloadUrl(ImagePayloadURLs[template]).then((x) => x.arrayBuffer()) const secretImage = await Services.Crypto.steganographyEncodeImage(new Uint8Array(blankImage), { text, pass, diff --git a/packages/mask/src/crypto/crypto-alpha-40.ts b/packages/mask/src/crypto/crypto-alpha-40.ts index d5293eddf7ff..475e0ecdec93 100644 --- a/packages/mask/src/crypto/crypto-alpha-40.ts +++ b/packages/mask/src/crypto/crypto-alpha-40.ts @@ -3,8 +3,14 @@ * @deprecated This version of payload is not in use. * Please goto Crypto alpha v38 */ -import { encodeText, encodeArrayBuffer, decodeArrayBuffer, decodeText, concatArrayBuffer } from '@dimensiondev/kit' -import { memoizePromise } from '../../utils-pure' +import { + encodeText, + encodeArrayBuffer, + decodeArrayBuffer, + decodeText, + concatArrayBuffer, + memoizePromise, +} from '@dimensiondev/kit' import { i18n } from '../../shared-ui/locales_legacy' import { CryptoWorker } from '../modules/workers' import { EC_Private_JsonWebKey, EC_Public_JsonWebKey, AESJsonWebKey, makeTypedMessageText } from '@masknet/shared-base' diff --git a/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts b/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts index aad3bd56dacf..12308a80d8cb 100644 --- a/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts +++ b/packages/mask/src/extension/background-script/CryptoServices/decryptFrom.ts @@ -1,10 +1,10 @@ import * as Alpha40 from '../../../crypto/crypto-alpha-40' import * as Alpha39 from '../../../crypto/crypto-alpha-39' -import { decodeArrayBuffer, decodeText, encodeArrayBuffer } from '@dimensiondev/kit' +import { decodeArrayBuffer, decodeText, encodeArrayBuffer, delay, abortSignalTimeout } from '@dimensiondev/kit' import { deconstructPayload } from '../../../utils/type-transform/Payload' import { i18n } from '../../../../shared-ui/locales_legacy' import { queryPersonaRecord, queryLocalKey } from '../../../database' -import { ProfileIdentifier, PostIVIdentifier, delay, EC_Public_CryptoKey } from '@masknet/shared-base' +import { ProfileIdentifier, PostIVIdentifier, EC_Public_CryptoKey } from '@masknet/shared-base' import { PostRecord, queryPostDB, updatePostDB } from '../../../../background/database/post' import { getNetworkWorker, getNetworkWorkerUninitialized } from '../../../social-network/worker' import { cryptoProviderTable } from './cryptoProviderTable' @@ -216,15 +216,12 @@ async function* decryptFromPayloadWithProgress_raw( if (result === null) return makeError(i18n.t('service_not_share_target')) aesKeyEncrypted.push(result) } else if (version === -39 || version === -38) { - const controller = new AbortController() - setTimeout(() => controller.abort(), 2000) - const collector = GUN_queryPostKey_version39Or38( version, new Uint8Array(decodeArrayBuffer(iv)), await minePublic, authorNetworkWorker.val.gunNetworkHint, - controller.signal, + abortSignalTimeout(2000), ) try { for await (const key of collector) aesKeyEncrypted.push(key) diff --git a/packages/mask/src/extension/background-script/CryptoServices/utils.ts b/packages/mask/src/extension/background-script/CryptoServices/utils.ts index 6d690e5f4b88..5f090e403f09 100644 --- a/packages/mask/src/extension/background-script/CryptoServices/utils.ts +++ b/packages/mask/src/extension/background-script/CryptoServices/utils.ts @@ -1,7 +1,7 @@ -import { blobToArrayBuffer, memoizePromise } from '@dimensiondev/kit' +import { memoizePromise } from '@dimensiondev/kit' import { downloadUrl } from '../../../utils/utils' export const steganographyDownloadImage = memoizePromise( - async (url: string) => blobToArrayBuffer(await downloadUrl(url)), + async (url: string) => (await downloadUrl(url)).arrayBuffer(), void 0, ) diff --git a/packages/mask/src/extension/background-script/EthereumServices/provider.ts b/packages/mask/src/extension/background-script/EthereumServices/provider.ts index 0bfe766b8cdb..32d8cd321bcd 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/provider.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/provider.ts @@ -1,5 +1,5 @@ import { first } from 'lodash-unified' -import { defer } from '@masknet/shared-base' +import { defer } from '@dimensiondev/kit' import type { ChainId, NetworkType, ProviderType } from '@masknet/web3-shared-evm' import * as MaskWallet from './providers/MaskWallet' import * as MetaMask from './providers/MetaMask' diff --git a/packages/mask/src/extension/background-script/EthereumServices/providers/Fortmatic.ts b/packages/mask/src/extension/background-script/EthereumServices/providers/Fortmatic.ts index 2e218245ba9c..2116fb6d9127 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/providers/Fortmatic.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/providers/Fortmatic.ts @@ -1,7 +1,7 @@ import Web3 from 'web3' import type { RequestArguments } from 'web3-core' import type { JsonRpcPayload, JsonRpcResponse } from 'web3-core-helpers' -import { defer } from '@masknet/shared-base' +import { defer } from '@dimensiondev/kit' import { ChainId, EthereumMethodType } from '@masknet/web3-shared-evm' import { EVM_Messages } from '../../../../plugins/EVM/messages' import { resetAccount } from '../../../../plugins/Wallet/services' diff --git a/packages/mask/src/extension/background-script/EthereumServices/providers/Injected.ts b/packages/mask/src/extension/background-script/EthereumServices/providers/Injected.ts index 9bead5fe485d..461e7e6c6089 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/providers/Injected.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/providers/Injected.ts @@ -1,5 +1,5 @@ import { first } from 'lodash-unified' -import { defer } from '@masknet/shared-base' +import { defer } from '@dimensiondev/kit' import Web3 from 'web3' import type { RequestArguments } from 'web3-core' import type { JsonRpcPayload, JsonRpcResponse } from 'web3-core-helpers' diff --git a/packages/mask/src/extension/background-script/EthereumServices/providers/MetaMask.ts b/packages/mask/src/extension/background-script/EthereumServices/providers/MetaMask.ts index 24fe1c7523fd..212c5f70c6f9 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/providers/MetaMask.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/providers/MetaMask.ts @@ -3,7 +3,7 @@ import type { provider as Provider } from 'web3-core' import { first } from 'lodash-unified' import createMetaMaskProvider, { MetaMaskInpageProvider } from '@dimensiondev/metamask-extension-provider' import { ChainId, ProviderType } from '@masknet/web3-shared-evm' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { updateAccount } from '../../../../plugins/Wallet/services' import { currentChainIdSettings, currentProviderSettings } from '../../../../plugins/Wallet/settings' import { replaceRecentTransaction } from '../../../../plugins/Wallet/services/transaction/database' diff --git a/packages/mask/src/extension/background-script/EthereumServices/request.ts b/packages/mask/src/extension/background-script/EthereumServices/request.ts index 2af7d6f08bc7..6fa0ea996c15 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/request.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/request.ts @@ -19,7 +19,7 @@ import { } from '../../../plugins/Wallet/settings' import { WalletRPC } from '../../../plugins/Wallet/messages' import { INTERNAL_nativeSend, INTERNAL_send } from './send' -import { defer } from '@masknet/shared-base' +import { defer } from '@dimensiondev/kit' import { hasNativeAPI, nativeAPI } from '../../../../shared/native-rpc' import { openPopupWindow } from '../HelperService' import Services from '../../service' diff --git a/packages/mask/src/extension/background-script/HelperService/storage.ts b/packages/mask/src/extension/background-script/HelperService/storage.ts index cc2dd0d52f79..fcd9bb082045 100644 --- a/packages/mask/src/extension/background-script/HelperService/storage.ts +++ b/packages/mask/src/extension/background-script/HelperService/storage.ts @@ -1,5 +1,5 @@ import { merge } from 'lodash-unified' -import { timeout } from '@masknet/shared-base' +import { timeout } from '@dimensiondev/kit' /** * Make sure that the storage is used serially. diff --git a/packages/mask/src/extension/background-script/IdentityService.ts b/packages/mask/src/extension/background-script/IdentityService.ts index d68718dd774c..a4318c880273 100644 --- a/packages/mask/src/extension/background-script/IdentityService.ts +++ b/packages/mask/src/extension/background-script/IdentityService.ts @@ -1,7 +1,7 @@ import * as bip39 from 'bip39' import { validateMnemonic } from 'bip39' import { decode, encode } from '@msgpack/msgpack' -import { blobToArrayBuffer, decodeArrayBuffer, decodeText, encodeArrayBuffer } from '@dimensiondev/kit' +import { decodeArrayBuffer, decodeText, encodeArrayBuffer } from '@dimensiondev/kit' import { createPersonaByJsonWebKey, loginPersona, @@ -373,7 +373,7 @@ export const updateCurrentPersonaAvatar = async (avatar: Blob) => { const identifier = await getCurrentPersonaIdentifier() if (identifier) { - await storeAvatar(identifier, await blobToArrayBuffer(avatar)) + await storeAvatar(identifier, await avatar.arrayBuffer()) MaskMessages.events.ownPersonaChanged.sendToAll(undefined) } } diff --git a/packages/mask/src/extension/background-script/IdentityServices/sign.ts b/packages/mask/src/extension/background-script/IdentityServices/sign.ts index 41eae54dfd2f..addd20e8d91a 100644 --- a/packages/mask/src/extension/background-script/IdentityServices/sign.ts +++ b/packages/mask/src/extension/background-script/IdentityServices/sign.ts @@ -9,9 +9,10 @@ import { ECDSASignature, } from 'ethereumjs-util' import { MaskMessages } from '../../../utils' -import { delay, PersonaIdentifier, fromBase64URL, PopupRoutes } from '@masknet/shared-base' +import { PersonaIdentifier, fromBase64URL, PopupRoutes } from '@masknet/shared-base' import { queryPersonasWithPrivateKey } from '../../../../background/database/persona/db' import { openPopupWindow } from '../HelperService' +import { delay } from '@dimensiondev/kit' export interface SignRequest { /** Use that who to sign this message. */ identifier?: string diff --git a/packages/mask/src/extension/background-script/SocialNetworkService.ts b/packages/mask/src/extension/background-script/SocialNetworkService.ts index d4f7b953f20f..7761972e6172 100644 --- a/packages/mask/src/extension/background-script/SocialNetworkService.ts +++ b/packages/mask/src/extension/background-script/SocialNetworkService.ts @@ -5,7 +5,8 @@ import { requestSNSAdaptorPermission } from '../../social-network/utils/permissi import { currentSetupGuideStatus } from '../../settings/settings' import stringify from 'json-stable-stringify' import { SetupGuideStep } from '../../components/InjectedComponents/SetupGuide' -import { PersonaIdentifier, delay } from '@masknet/shared-base' +import type { PersonaIdentifier } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' export async function getDefinedSocialNetworkUIs() { return [...definedSocialNetworkUIs.values()].map(({ networkIdentifier }) => { diff --git a/packages/mask/src/extension/background-script/WelcomeService.ts b/packages/mask/src/extension/background-script/WelcomeService.ts index 4ef43878ca32..f60257f3feb3 100644 --- a/packages/mask/src/extension/background-script/WelcomeService.ts +++ b/packages/mask/src/extension/background-script/WelcomeService.ts @@ -1,5 +1,5 @@ -import { encodeText } from '@dimensiondev/kit' -import { delay, type DashboardRoutes, PopupRoutes } from '@masknet/shared-base' +import { encodeText, delay } from '@dimensiondev/kit' +import { type DashboardRoutes, PopupRoutes } from '@masknet/shared-base' import { recover_ECDH_256k1_KeyPair_ByMnemonicWord } from '../../utils/mnemonic-code' import { createPersonaByJsonWebKey } from '../../database' import { attachProfileDB, LinkedProfileDetails } from '../../../background/database/persona/db' diff --git a/packages/mask/src/extension/background-script/WelcomeServices/generateBackupJSON.ts b/packages/mask/src/extension/background-script/WelcomeServices/generateBackupJSON.ts index e7ac385854ec..2becd9acf9af 100644 --- a/packages/mask/src/extension/background-script/WelcomeServices/generateBackupJSON.ts +++ b/packages/mask/src/extension/background-script/WelcomeServices/generateBackupJSON.ts @@ -9,7 +9,7 @@ import { queryPostsDB } from '../../../../background/database/post' import { PersonaRecordToJSONFormat } from '../../../utils/type-transform/BackupFormat/JSON/DBRecord-JSON/PersonaRecord' import { ProfileRecordToJSONFormat } from '../../../utils/type-transform/BackupFormat/JSON/DBRecord-JSON/ProfileRecord' import { PostRecordToJSONFormat } from '../../../utils/type-transform/BackupFormat/JSON/DBRecord-JSON/PostRecord' -import { Identifier, PersonaIdentifier, ProfileIdentifier, timeout } from '@masknet/shared-base' +import { Identifier, PersonaIdentifier, ProfileIdentifier } from '@masknet/shared-base' import { exportMnemonic, exportPrivateKey, getLegacyWallets, getWallets } from '../../../plugins/Wallet/services' import { LegacyWalletRecordToJSONFormat, @@ -17,6 +17,7 @@ import { } from '../../../utils/type-transform/BackupFormat/JSON/DBRecord-JSON/WalletRecord' import { activatedPluginsWorker } from '@masknet/plugin-infra' import { RelationRecordToJSONFormat } from '../../../utils/type-transform/BackupFormat/JSON/DBRecord-JSON/RelationRecord' +import { timeout } from '@dimensiondev/kit' export type { BackupPreview } from '../../../utils/type-transform/BackupFormat/JSON/latest' export interface BackupOptions { diff --git a/packages/mask/src/plugins/NextID/components/BindDialog.tsx b/packages/mask/src/plugins/NextID/components/BindDialog.tsx index edbebed611b4..f494d3687b22 100644 --- a/packages/mask/src/plugins/NextID/components/BindDialog.tsx +++ b/packages/mask/src/plugins/NextID/components/BindDialog.tsx @@ -8,7 +8,7 @@ import type { Binding } from '../types' import { BindPanelUI } from './BindPanelUI' import { useAccount } from '@masknet/plugin-infra' import { useCustomSnackbar } from '@masknet/theme' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { useBindPayload } from '../hooks/useBindPayload' import { usePersonaSign } from '../hooks/usePersonaSign' import { useWalletSign } from '../hooks/useWalletSign' diff --git a/packages/mask/src/plugins/NextID/components/UnbindDialog.tsx b/packages/mask/src/plugins/NextID/components/UnbindDialog.tsx index 50131804e746..01da663f65a5 100644 --- a/packages/mask/src/plugins/NextID/components/UnbindDialog.tsx +++ b/packages/mask/src/plugins/NextID/components/UnbindDialog.tsx @@ -9,7 +9,7 @@ import { useCustomSnackbar } from '@masknet/theme' import { usePersonaSign } from '../hooks/usePersonaSign' import { useWalletSign } from '../hooks/useWalletSign' import { useBindPayload } from '../hooks/useBindPayload' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { UnbindPanelUI } from './UnbindPanelUI' interface VerifyWalletDialogProps { diff --git a/packages/mask/src/plugins/Pets/hooks/useNfts.ts b/packages/mask/src/plugins/Pets/hooks/useNfts.ts index ac767c43a89e..19fd26b2b4ac 100644 --- a/packages/mask/src/plugins/Pets/hooks/useNfts.ts +++ b/packages/mask/src/plugins/Pets/hooks/useNfts.ts @@ -12,7 +12,7 @@ import { } from '@masknet/web3-shared-evm' import { Constant, transform } from '@masknet/web3-shared-evm/constants/utils' import { cloneDeep, findLastIndex } from 'lodash-unified' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import type { User, FilterContract } from '../types' import { Punk3D } from '../constants' diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx index f0d4b95cdca3..bca743e72367 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx @@ -16,7 +16,7 @@ import { useWallet, } from '@masknet/web3-shared-evm' import { useRemoteControlledDialog } from '@masknet/shared' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { useGasConfig } from './hooks/useGasConfig' import type { Coin } from '../../types' import { TokenPanelType, TradeInfo } from '../../types' diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/index.tsx index e11412753984..0798c1e03eb5 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/index.tsx @@ -2,7 +2,7 @@ import { useCallback, useState } from 'react' import { useAsyncRetry } from 'react-use' import { DialogContent } from '@mui/material' import { makeStyles, useStylesExtends } from '@masknet/theme' -import { safeUnreachable } from '@dimensiondev/kit' +import { safeUnreachable, delay } from '@dimensiondev/kit' import { ChainId, getChainDetailedCAIP, @@ -13,7 +13,6 @@ import { resolveProviderName, } from '@masknet/web3-shared-evm' import { useRemoteControlledDialog } from '@masknet/shared' -import { delay } from '@masknet/shared-base' import { InjectedDialog } from '../../../../components/shared/InjectedDialog' import { WalletMessages, WalletRPC } from '../../messages' import { ConnectionProgress } from './ConnectionProgress' diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectTokenDialog.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectTokenDialog.tsx index 86ffc1816e4a..2375beec1602 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectTokenDialog.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectTokenDialog.tsx @@ -8,7 +8,7 @@ import { InjectedDialog } from '../../../components/shared/InjectedDialog' import { WalletMessages } from '../../Wallet/messages' import { useI18N } from '../../../utils' import { ERC20TokenList, ERC20TokenListProps, useRemoteControlledDialog } from '@masknet/shared' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { MINDS_ID } from '../../../social-network-adaptor/minds.com/base' import { activatedSocialNetworkUI } from '../../../social-network' diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectWalletDialog.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectWalletDialog.tsx index 0bd9144a6a57..5647d3a54eef 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectWalletDialog.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectWalletDialog.tsx @@ -5,12 +5,13 @@ import { makeStyles, useStylesExtends } from '@masknet/theme' import { isEnvironment, Environment } from '@dimensiondev/holoflows-kit' import { ProviderType, useWallets, useWallet, NetworkType } from '@masknet/web3-shared-evm' import { useRemoteControlledDialog } from '@masknet/shared' -import { DashboardRoutes, delay } from '@masknet/shared-base' +import { DashboardRoutes } from '@masknet/shared-base' import { useI18N } from '../../../utils' import { WalletMessages, WalletRPC } from '../messages' import { WalletInList } from '../../../components/shared/SelectWallet/WalletInList' import Services from '../../../extension/service' import { InjectedDialog } from '../../../components/shared/InjectedDialog' +import { delay } from '@dimensiondev/kit' const useStyles = makeStyles()({ content: { diff --git a/packages/mask/src/settings/createSettings.ts b/packages/mask/src/settings/createSettings.ts index 5e9e0174430f..4c515a96b30e 100644 --- a/packages/mask/src/settings/createSettings.ts +++ b/packages/mask/src/settings/createSettings.ts @@ -1,7 +1,7 @@ import { ValueRef, isEnvironment, Environment } from '@dimensiondev/holoflows-kit' import Services from '../extension/service' import { MaskMessages } from '../utils/messages' -import { defer } from '@masknet/shared-base' +import { defer } from '@dimensiondev/kit' export interface SettingsTexts { primary: () => string diff --git a/packages/mask/src/social-network-adaptor/facebook.com/automation/openComposeBox.ts b/packages/mask/src/social-network-adaptor/facebook.com/automation/openComposeBox.ts index 4783c9b38c0a..bf623963d3cf 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/automation/openComposeBox.ts +++ b/packages/mask/src/social-network-adaptor/facebook.com/automation/openComposeBox.ts @@ -1,8 +1,8 @@ import { LiveSelector } from '@dimensiondev/holoflows-kit' import { MaskMessages, CompositionRequest } from '../../../utils/messages' import { i18n } from '../../../../shared-ui/locales_legacy' -import { untilDocumentReady } from '../../../utils/dom' -import { makeTypedMessageText, TypedMessage, delay } from '@masknet/shared-base' +import { makeTypedMessageText, TypedMessage } from '@masknet/shared-base' +import { delay, waitDocumentReadyState } from '@dimensiondev/kit' const nativeComposeButtonSelector = () => new LiveSelector() @@ -38,7 +38,7 @@ export async function taskOpenComposeBoxFacebook( content: string | TypedMessage, options?: CompositionRequest['options'], ) { - await untilDocumentReady() + await waitDocumentReadyState('interactive') await delay(200) // active the compose dialog diff --git a/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteTextToComposition.ts b/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteTextToComposition.ts index 6d7c48b87bdc..f7fd46c3dd43 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteTextToComposition.ts +++ b/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteTextToComposition.ts @@ -1,61 +1,9 @@ -import { IntervalWatcher, LiveSelector, MutationObserverWatcher } from '@dimensiondev/holoflows-kit' -import { delay, timeout } from '@masknet/shared-base' +import { LiveSelector } from '@dimensiondev/holoflows-kit' import { isMobileFacebook } from '../utils/isMobile' import type { SocialNetworkUI } from '../../../social-network/types' -import { untilDocumentReady } from '../../../utils/dom' import { MaskMessages } from '../../../utils/messages' import { inputText, pasteText } from '@masknet/injected-script' - -async function openPostDialogFacebook() { - await untilDocumentReady() - const notActivated = isMobileFacebook - ? new LiveSelector().querySelector('[role="textbox"]') - : new LiveSelector() - .querySelector('[role="region"]') - .querySelector('textarea, [aria-multiline="true"]') - .closest(1) - const activated = new LiveSelector().querySelector( - isMobileFacebook ? 'form textarea' : '.notranslate', - ) - const dialog = new LiveSelector().querySelector('[role=main] [role=dialog]') - if (notActivated.evaluate()[0]) { - if (isMobileFacebook) { - try { - notActivated.evaluate()[0].click() - await timeout(new MutationObserverWatcher(activated), 2000) - await delay(1000) - } catch (error) { - clickFailed(error) - } - } else { - try { - console.log('Awaiting to click the post box') - const [dom1] = await timeout(new MutationObserverWatcher(notActivated), 1000) - dom1.click() - console.log('Non-activated post box found Stage 1', dom1) - const [dom2] = await timeout(new IntervalWatcher(notActivated.clone().filter((x) => x !== dom1)), 3000) - console.log('Non-activated post box found Stage 2', dom2) - dom2.click() - await timeout(new MutationObserverWatcher(activated), 1000) - if (!dialog.evaluate()[0]) throw new Error('Click not working') - } catch (error) { - clickFailed(error) - } - console.log('Awaiting dialog') - } - } - await delay(500) - try { - await timeout(new MutationObserverWatcher(isMobileFacebook ? activated : dialog), 2000) - console.log('Dialog appeared') - } catch { - // ignore - } - function clickFailed(error: unknown) { - console.warn(error) - if (!dialog.evaluate()[0]) alert('Click the input box, please.') - } -} +import { delay, waitDocumentReadyState } from '@dimensiondev/kit' /** * Access: https://(www|m).facebook.com/ @@ -65,7 +13,7 @@ export async function pasteTextToCompositionFacebook( options: SocialNetworkUI.AutomationCapabilities.NativeCompositionAttachTextOptions, ) { const { recover } = options - await untilDocumentReady() + await waitDocumentReadyState('interactive') // Save the scrolling position const scrolling = document.scrollingElement || document.documentElement const scrollBack = ( diff --git a/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteToCommentBoxFacebook.ts b/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteToCommentBoxFacebook.ts index 11ae029b24a9..e0cb86aa8cfe 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteToCommentBoxFacebook.ts +++ b/packages/mask/src/social-network-adaptor/facebook.com/automation/pasteToCommentBoxFacebook.ts @@ -1,5 +1,5 @@ import { selectElementContents } from '../../../utils/utils' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { isMobileFacebook } from '../utils/isMobile' import { MaskMessages } from '../../../utils/messages' import type { PostInfo } from '../../../social-network/PostInfo' diff --git a/packages/mask/src/social-network-adaptor/facebook.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/facebook.com/collecting/identity.ts index 38bb967fe7cf..86d2d722d25d 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/facebook.com/collecting/identity.ts @@ -3,9 +3,10 @@ import { LiveSelector, MutationObserverWatcher, ValueRef } from '@dimensiondev/h import { creator, SocialNetworkUI } from '../../../social-network' import { getProfileIdentifierAtFacebook, getUserID } from '../utils/getProfileIdentifier' import { isMobileFacebook } from '../utils/isMobile' -import { delay, ProfileIdentifier } from '@masknet/shared-base' +import { ProfileIdentifier } from '@masknet/shared-base' import { searchAvatarSelector, searchUserIdOnMobileSelector } from '../utils/selector' import { getAvatar, getBioDescription, getFacebookId, getNickName } from '../utils/user' +import { delay } from '@dimensiondev/kit' export const IdentityProviderFacebook: SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: true, diff --git a/packages/mask/src/social-network-adaptor/facebook.com/injection/NFT/ProfileNFTAvatar.tsx b/packages/mask/src/social-network-adaptor/facebook.com/injection/NFT/ProfileNFTAvatar.tsx index 81fd1b9818fd..ed67fc974e72 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/injection/NFT/ProfileNFTAvatar.tsx +++ b/packages/mask/src/social-network-adaptor/facebook.com/injection/NFT/ProfileNFTAvatar.tsx @@ -2,7 +2,6 @@ import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' import { makeStyles } from '@masknet/theme' import { createReactRootShadowed, MaskMessages, startWatch } from '../../../../utils' import { NFTAvatar } from '../../../../plugins/Avatar/SNSAdaptor/NFTAvatar' -import { blobToArrayBuffer } from '@dimensiondev/kit' import { hookInputUploadOnce } from '@masknet/injected-script' import { searchFacebookAvatarListSelector, @@ -43,15 +42,15 @@ export async function injectProfileNFTAvatarInFaceBook(signal: AbortSignal) { createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() } -const useStyles = makeStyles()((theme) => ({ +const useStyles = makeStyles()({ root: { padding: '8px 0', margin: '0 16px', }, -})) +}) async function changeImageToActiveElements(image: File | Blob): Promise { - const imageBuffer = await blobToArrayBuffer(image) + const imageBuffer = await image.arrayBuffer() hookInputUploadOnce('image/png', 'avatar.png', new Uint8Array(imageBuffer)) searchFacebookAvatarOpenFilesSelector().evaluate()?.click() } @@ -112,7 +111,7 @@ function NFTAvatarInFacebookSecondStep() { } async function changeImageToActiveElementsOnMobile(image: File | Blob): Promise { - const imageBuffer = await blobToArrayBuffer(image) + const imageBuffer = await image.arrayBuffer() const input = searchFacebookAvatarOpenFilesOnMobileSelector().evaluate() diff --git a/packages/mask/src/social-network-adaptor/instagram.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/instagram.com/collecting/identity.ts index 707d5242f814..133de4edac69 100644 --- a/packages/mask/src/social-network-adaptor/instagram.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/instagram.com/collecting/identity.ts @@ -1,5 +1,6 @@ import { LiveSelector, MutationObserverWatcher } from '@dimensiondev/holoflows-kit' -import { ProfileIdentifier, delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' +import { ProfileIdentifier } from '@masknet/shared-base' import { creator, SocialNetworkUI as Next } from '../../../social-network' import { instagramBase } from '../base' import { searchAvatarSelector } from '../utils/selector' diff --git a/packages/mask/src/social-network-adaptor/minds.com/automation/openComposeBox.ts b/packages/mask/src/social-network-adaptor/minds.com/automation/openComposeBox.ts index 5529f09ad44b..d912933678b5 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/automation/openComposeBox.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/automation/openComposeBox.ts @@ -1,11 +1,11 @@ -import { makeTypedMessageText, TypedMessage, delay } from '@masknet/shared-base' -import { untilDocumentReady } from '../../../utils/dom' +import { delay, waitDocumentReadyState } from '@dimensiondev/kit' +import { makeTypedMessageText, TypedMessage } from '@masknet/shared-base' import { i18n } from '../../../../shared-ui/locales_legacy' import { MaskMessages, CompositionRequest } from '../../../utils/messages' import { composeButtonSelector, composeDialogIndicatorSelector, composeTextareaSelector } from '../utils/selector' export async function openComposeBoxMinds(content: string | TypedMessage, options?: CompositionRequest['options']) { - await untilDocumentReady() + await waitDocumentReadyState('interactive') await delay(800) // active the compose dialog diff --git a/packages/mask/src/social-network-adaptor/minds.com/automation/pasteTextToComposition.ts b/packages/mask/src/social-network-adaptor/minds.com/automation/pasteTextToComposition.ts index 6ed1c9718b9a..7000c4d6401d 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/automation/pasteTextToComposition.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/automation/pasteTextToComposition.ts @@ -2,7 +2,7 @@ import type { SocialNetworkUI } from '../../../social-network' import { untilElementAvailable } from '../../../utils/dom' import { MaskMessages } from '../../../utils/messages' import { selectElementContents } from '../../../utils/utils' -import { delay } from '@masknet/shared-base' +import { abortSignalTimeout, delay } from '@dimensiondev/kit' import { inputText } from '@masknet/injected-script' import { getEditorContent, hasEditor, hasFocus, isCompose } from '../utils/postBox' import { composeButtonSelector, postEditorDraftContentSelector } from '../utils/selector' @@ -15,9 +15,9 @@ export const pasteTextToCompositionMinds: SocialNetworkUI.AutomationCapabilities (text, opt) => { const interval = 500 const timeout = 5000 - const worker = async function (abort: AbortController) { + const worker = async function (abort: AbortSignal) { const checkSignal = () => { - if (abort.signal.aborted) throw new Error('Aborted') + if (abort.aborted) throw new Error('Aborted') } if (!isCompose() && !hasEditor()) { @@ -54,9 +54,5 @@ export const pasteTextToCompositionMinds: SocialNetworkUI.AutomationCapabilities throw e } - const abortCtr = new AbortController() - setTimeout(() => { - abortCtr.abort() - }, timeout) - worker(abortCtr).then(undefined, (error) => fail(error)) + worker(abortSignalTimeout(timeout)).then(undefined, (error) => fail(error)) } diff --git a/packages/mask/src/social-network-adaptor/minds.com/automation/pasteToCommentBoxMinds.ts b/packages/mask/src/social-network-adaptor/minds.com/automation/pasteToCommentBoxMinds.ts index 19aa77a9568a..9d5b6bb277e9 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/automation/pasteToCommentBoxMinds.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/automation/pasteToCommentBoxMinds.ts @@ -1,6 +1,6 @@ import type { PostInfo } from '../../../social-network/PostInfo' import { MaskMessages } from '../../../utils/messages' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import { selectElementContents } from '../../../utils/utils' import { pasteText } from '@masknet/injected-script' diff --git a/packages/mask/src/social-network-adaptor/minds.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/minds.com/collecting/identity.ts index 1ad979ed5a62..7967a8d47d75 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/minds.com/collecting/identity.ts @@ -1,6 +1,7 @@ +import { waitDocumentReadyState } from '@dimensiondev/kit' import { ProfileIdentifier } from '@masknet/shared-base' import { creator, SocialNetworkUI as Next } from '../../../social-network' -import { untilDocumentReady, untilElementAvailable } from '../../../utils/dom' +import { untilElementAvailable } from '../../../utils/dom' import { mindsBase } from '../base' import { handleSelector, selfInfoSelectors } from '../utils/selector' @@ -8,7 +9,7 @@ async function resolveLastRecognizedIdentityInner( ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], cancel: AbortSignal, ) { - await untilDocumentReady() + await waitDocumentReadyState('interactive') await untilElementAvailable(handleSelector()) const handle = selfInfoSelectors().handle.evaluate() const avatar = selfInfoSelectors().avatar.evaluate() 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 15a55a574202..f9a31fc56401 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 @@ -8,7 +8,7 @@ import { TypedMessage, TypedMessageText, } from '@masknet/shared-base' -import { assertNonNull } from '../../../../utils-pure' +import { assertNonNull } from '@dimensiondev/kit' const parseNameArea = (nameArea: HTMLAnchorElement) => { const displayNameNode = nameArea.querySelector('strong') diff --git a/packages/mask/src/social-network-adaptor/twitter.com/automation/pasteTextToComposition.ts b/packages/mask/src/social-network-adaptor/twitter.com/automation/pasteTextToComposition.ts index 069688a4831c..cba151084488 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/automation/pasteTextToComposition.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/automation/pasteTextToComposition.ts @@ -1,4 +1,4 @@ -import { delay } from '@masknet/shared-base' +import { abortSignalTimeout, delay } from '@dimensiondev/kit' import { inputText, pasteText } from '@masknet/injected-script' import { postEditorDraftContentSelector, newPostButtonSelector } from '../utils/selector' import type { SocialNetworkUI } from '../../../social-network' @@ -15,9 +15,9 @@ export const pasteTextToCompositionTwitter: SocialNetworkUI.AutomationCapabiliti (text, opt) => { const interval = 500 const timeout = 5000 - const worker = async function (abort: AbortController) { + const worker = async function (abort: AbortSignal) { const checkSignal = () => { - if (abort.signal.aborted) throw new Error('Aborted') + if (abort.aborted) throw new Error('Aborted') } if (!isCompose() && !hasEditor()) { // open tweet window @@ -48,9 +48,5 @@ export const pasteTextToCompositionTwitter: SocialNetworkUI.AutomationCapabiliti throw e } - const abortCtr = new AbortController() - setTimeout(() => { - abortCtr.abort() - }, timeout) - worker(abortCtr).then(undefined, (error) => fail(error)) + worker(abortSignalTimeout(timeout)).then(undefined, (error) => fail(error)) } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts index d31724838889..fec6fc39ee07 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts @@ -1,11 +1,12 @@ import { isNil } from 'lodash-unified' import { LiveSelector, MutationObserverWatcher } from '@dimensiondev/holoflows-kit' import { selfInfoSelectors, searchAvatarSelector, searchAvatarMetaSelector } from '../utils/selector' -import { ProfileIdentifier, delay } from '@masknet/shared-base' +import { ProfileIdentifier } from '@masknet/shared-base' import { creator, SocialNetworkUI as Next } from '../../../social-network' import Services from '../../../extension/service' import { twitterBase } from '../base' import { getAvatar, getBioDescription, getNickname, getTwitterId, getPersonalHomepage } from '../utils/user' +import { delay } from '@dimensiondev/kit' function resolveLastRecognizedIdentityInner( ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/MaskIcon.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/MaskIcon.tsx index 72a41a0bbf74..e8574be42766 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/MaskIcon.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/MaskIcon.tsx @@ -5,7 +5,7 @@ import Services from '../../../extension/service' import { ProfileIdentifier } from '@masknet/shared-base' import { MaskIcon } from '../../../resources/MaskIcon' import { createReactRootShadowed } from '../../../utils/shadow-root/renderInShadowRoot' -import { memoizePromise } from '../../../../utils-pure' +import { memoizePromise } from '@dimensiondev/kit' import { Flags } from '../../../../shared' import { startWatch } from '../../../utils/watcher' diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx index d4d9edf6afea..d39e4bd21547 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx @@ -1,7 +1,6 @@ import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' import { makeStyles } from '@masknet/theme' import { useEffect, useState } from 'react' -import { blobToArrayBuffer } from '@dimensiondev/kit' import { createReactRootShadowed, MaskMessages, NFTAvatarEvent, startWatch } from '../../../../utils' import { searchTwitterAvatarOpenFilesSelector, @@ -56,7 +55,7 @@ function getStyles() { } async function changeImageToActiveElements(image: File | Blob): Promise { - const imageBuffer = await blobToArrayBuffer(image) + const imageBuffer = await image.arrayBuffer() hookInputUploadOnce('image/png', 'avatar.png', new Uint8Array(imageBuffer)) ;(searchTwitterAvatarOpenFilesSelector().evaluate()[0]?.parentElement?.children[0] as HTMLElement)?.click() } diff --git a/packages/mask/src/social-network/defaults/automation/AttachImageToComposition.ts b/packages/mask/src/social-network/defaults/automation/AttachImageToComposition.ts index 6fb644d284ca..c2a4ca2f1d72 100644 --- a/packages/mask/src/social-network/defaults/automation/AttachImageToComposition.ts +++ b/packages/mask/src/social-network/defaults/automation/AttachImageToComposition.ts @@ -1,5 +1,5 @@ -import { downloadUrl, MaskMessages, pasteImageToActiveElements, untilDocumentReady } from '../../../utils' -import { delay } from '@masknet/shared-base' +import { downloadUrl, MaskMessages, pasteImageToActiveElements } from '../../../utils' +import { delay, waitDocumentReadyState } from '@dimensiondev/kit' import type { SocialNetworkUI } from '../../types' import { activatedSocialNetworkUI } from '../../ui' @@ -9,7 +9,7 @@ export function pasteImageToCompositionDefault(hasSucceed: () => Promise() export let activatedSocialNetworkUI: SocialNetworkUI.Definition = { @@ -65,7 +59,7 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. activateSocialNetworkUIInner(ui_deferred) }) } - await untilDomLoaded() + await waitDocumentReadyState('interactive') i18nOverwrite() const state = await ui.init(signal) diff --git a/packages/mask/src/utils/dom.ts b/packages/mask/src/utils/dom.ts index 4fe4813f9c92..05b6589526c2 100644 --- a/packages/mask/src/utils/dom.ts +++ b/packages/mask/src/utils/dom.ts @@ -12,30 +12,6 @@ export const untilElementAvailable = async (ls: LiveSelector((resolve) => { - const callback = () => { - if (document.readyState === 'loading') return - resolve() - document.removeEventListener('readystatechange', callback) - } - document.addEventListener('readystatechange', callback, { passive: true }) - }) -} - -export function untilDocumentReady() { - if (document.readyState === 'complete') return Promise.resolve() - return new Promise((resolve) => { - const callback = () => { - if (document.readyState !== 'complete') return - resolve() - document.removeEventListener('readystatechange', callback) - } - document.addEventListener('readystatechange', callback, { passive: true }) - }) -} - export function nthChild(n: HTMLElement, ...childrenIndex: number[]) { let r = n for (const v of childrenIndex) { diff --git a/packages/mask/src/utils/utils.ts b/packages/mask/src/utils/utils.ts index 1a348748199d..2b1cb36e7635 100644 --- a/packages/mask/src/utils/utils.ts +++ b/packages/mask/src/utils/utils.ts @@ -5,7 +5,6 @@ import { pasteImage } from '@masknet/injected-script' import { isNull } from 'lodash-unified' import Services from '../extension/service' -import { blobToArrayBuffer } from '@dimensiondev/kit' /** * Download given url return as Blob */ @@ -25,7 +24,7 @@ export async function downloadUrl(url: string) { * @param image */ export async function pasteImageToActiveElements(image: File | Blob): Promise { - pasteImage(new Uint8Array(await blobToArrayBuffer(image))) + pasteImage(new Uint8Array(await image.arrayBuffer())) } /** diff --git a/packages/mask/src/web3/UI/EthereumChainBoundary.tsx b/packages/mask/src/web3/UI/EthereumChainBoundary.tsx index 921366067f72..5f5ceaa350e9 100644 --- a/packages/mask/src/web3/UI/EthereumChainBoundary.tsx +++ b/packages/mask/src/web3/UI/EthereumChainBoundary.tsx @@ -17,7 +17,7 @@ import { useChainId, } from '@masknet/web3-shared-evm' import { useValueRef, useRemoteControlledDialog } from '@masknet/shared' -import { delay } from '@masknet/shared-base' +import { delay } from '@dimensiondev/kit' import ActionButton, { ActionButtonPromise, ActionButtonPromiseProps, diff --git a/packages/mask/utils-pure/assertion/index.ts b/packages/mask/utils-pure/assertion/index.ts deleted file mode 100644 index 516dc2d591d2..000000000000 --- a/packages/mask/utils-pure/assertion/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Ensure a value not null or undefined. - */ -export function assertNonNull(val: T, message = 'Unexpected nil value detected') { - if (val === null || val === undefined) throw new Error(message) - return val as NonNullable -} diff --git a/packages/mask/utils-pure/index.ts b/packages/mask/utils-pure/index.ts index 494bc58315e1..6ba5881a1d04 100644 --- a/packages/mask/utils-pure/index.ts +++ b/packages/mask/utils-pure/index.ts @@ -1,6 +1,4 @@ export * from './type' -export * from './assertion' -export * from './memoize' export * from './misc' export * from './hmr' export * from './crypto' diff --git a/packages/mask/utils-pure/memoize.ts b/packages/mask/utils-pure/memoize.ts deleted file mode 100644 index c252df0eef2b..000000000000 --- a/packages/mask/utils-pure/memoize.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { memoize } from 'lodash-unified' -/** - * The promise version of lodash-es/memoize - * @param f An async function - * @param resolver If the function has 1 param, it can be undefined - * as `x => x`. If it has more than 1 param, you must specify a function - * to map the param the memoize key. - */ -export function memoizePromise Promise, Args extends any[]>( - f: T, - resolver: Args[1] extends undefined ? undefined | ((...args: Args) => unknown) : (...args: Args) => unknown, -): T & { cache: Map } { - if (resolver === undefined) resolver = ((x: T) => x) as unknown as typeof resolver - const memorizedFunction = memoize( - async function (...args: Args) { - try { - // ? DO NOT remove "await" here - return await f(...args) - } catch (error) { - memorizedFunction.cache.delete(resolver!(...args)) - throw error - } - } as unknown as T, - resolver, - ) - return memorizedFunction as any -} diff --git a/packages/mask/utils-pure/type/index.ts b/packages/mask/utils-pure/type/index.ts index 09432d5be21e..d982fb2ad153 100644 --- a/packages/mask/utils-pure/type/index.ts +++ b/packages/mask/utils-pure/type/index.ts @@ -3,7 +3,3 @@ export function assert(x: any, ...args: any): asserts x { console.assert(x, ...args) if (!x) throw new Error('Assert failed!') } - -export function nonNullable(x: undefined | null | T): x is T { - return x !== undefined && x !== null -} diff --git a/packages/mask/utils-ui/DOM/DocumentLoad.ts b/packages/mask/utils-ui/DOM/DocumentLoad.ts deleted file mode 100644 index 4f42ab2f42ed..000000000000 --- a/packages/mask/utils-ui/DOM/DocumentLoad.ts +++ /dev/null @@ -1,23 +0,0 @@ -export function untilDomLoaded() { - if (document.readyState !== 'loading') return Promise.resolve() - return new Promise((resolve) => { - const callback = () => { - if (document.readyState === 'loading') return - resolve() - document.removeEventListener('readystatechange', callback) - } - document.addEventListener('readystatechange', callback, { passive: true }) - }) -} - -export function untilDocumentReady() { - if (document.readyState === 'complete') return Promise.resolve() - return new Promise((resolve) => { - const callback = () => { - if (document.readyState !== 'complete') return - resolve() - document.removeEventListener('readystatechange', callback) - } - document.addEventListener('readystatechange', callback, { passive: true }) - }) -} diff --git a/packages/mask/utils-ui/DOM/index.ts b/packages/mask/utils-ui/DOM/index.ts deleted file mode 100644 index 2b51698b08a9..000000000000 --- a/packages/mask/utils-ui/DOM/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './DocumentLoad' diff --git a/packages/mask/utils-ui/index.ts b/packages/mask/utils-ui/index.ts index 9e8848bbd0f9..336ce12bb910 100644 --- a/packages/mask/utils-ui/index.ts +++ b/packages/mask/utils-ui/index.ts @@ -1 +1 @@ -export * from './DOM' +export {} diff --git a/packages/plugins/FileService/src/SNSAdaptor/components/Upload.tsx b/packages/plugins/FileService/src/SNSAdaptor/components/Upload.tsx index f53f99370a61..c01d0a839be4 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/components/Upload.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/components/Upload.tsx @@ -1,5 +1,5 @@ import { Attachment } from '@dimensiondev/common-protocols' -import { blobToArrayBuffer, encodeArrayBuffer } from '@dimensiondev/kit' +import { encodeArrayBuffer } from '@dimensiondev/kit' import { Checkbox, Radio, FormControlLabel, Link, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' import { isNil } from 'lodash-unified' @@ -81,7 +81,7 @@ export const Upload: React.FC = () => { if (encrypted) { key = makeFileKey() } - const block = new Uint8Array(await blobToArrayBuffer(file)) + const block = new Uint8Array(await file.arrayBuffer()) const checksum = encodeArrayBuffer(await Attachment.checksum(block)) const item = await PluginFileServiceRPC.getFileInfo(checksum) if (isNil(item)) { diff --git a/packages/plugins/FileService/src/SNSAdaptor/components/Uploading.tsx b/packages/plugins/FileService/src/SNSAdaptor/components/Uploading.tsx index bead54c7fea1..bf6db5721a8f 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/components/Uploading.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/components/Uploading.tsx @@ -5,7 +5,7 @@ import { File } from 'react-feather' import { useHistory, useLocation } from 'react-router-dom' import { useAsync } from 'react-use' import { useI18N } from '../../locales/i18n_generated' -import { timeout } from '@masknet/shared-base' +import { timeout } from '@dimensiondev/kit' import { FileRouter } from '../../constants' import type { FileInfo, Provider } from '../../types' import { PluginFileServiceRPC, PluginFileServiceRPCGenerator } from '../../Worker/rpc' diff --git a/packages/polyfills/web-apis/implementation/Blob.prototype.arrayBuffer.ts b/packages/polyfills/web-apis/implementation/Blob.prototype.arrayBuffer.ts new file mode 100644 index 000000000000..1eb09f908f40 --- /dev/null +++ b/packages/polyfills/web-apis/implementation/Blob.prototype.arrayBuffer.ts @@ -0,0 +1,21 @@ +// Remove this file after iOS 14- is dropped. +try { + if (typeof Blob === 'function') { + if (!Blob.prototype.arrayBuffer) shim() + } + function shim() { + // FileReader is not available in Worker on Safari + if (typeof FileReader === 'undefined') throw new Error('FileReader is undefined') + Blob.prototype.arrayBuffer = function () { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.addEventListener('load', () => resolve(reader.result as ArrayBuffer)) + reader.addEventListener('error', () => reject(reader.error)) + reader.readAsArrayBuffer(this) + }) + } + } +} catch (err) { + console.warn('Failed to polyfill Blob.prototype.arrayBuffer:', err) +} +export {} diff --git a/packages/polyfills/web-apis/implementation/EventTarget.constructor.ts b/packages/polyfills/web-apis/implementation/EventTarget.constructor.ts index e7555484f052..18f89d31101c 100644 --- a/packages/polyfills/web-apis/implementation/EventTarget.constructor.ts +++ b/packages/polyfills/web-apis/implementation/EventTarget.constructor.ts @@ -1,16 +1,20 @@ // Remove this file after iOS 14- is dropped. -if (typeof globalThis.EventTarget?.call === 'function') { - try { - new EventTarget() - } catch { - shim() +try { + if (typeof globalThis.EventTarget?.call === 'function') { + try { + new EventTarget() + } catch { + shim() + } } -} -function shim() { - globalThis.EventTarget = new Proxy(EventTarget, { - construct() { - return new AbortController().signal - }, - }) + function shim() { + globalThis.EventTarget = new Proxy(EventTarget, { + construct() { + return new AbortController().signal + }, + }) + } +} catch (err) { + console.warn('Failed to polyfill EventTarget.constructor:', err) } export {} diff --git a/packages/polyfills/web-apis/worker.ts b/packages/polyfills/web-apis/worker.ts index 7a3842d89239..f36db668bfec 100644 --- a/packages/polyfills/web-apis/worker.ts +++ b/packages/polyfills/web-apis/worker.ts @@ -1 +1,2 @@ import './implementation/EventTarget.constructor' +import './implementation/Blob.prototype.arrayBuffer' diff --git a/packages/shared-base/src/kv-storage/index.ts b/packages/shared-base/src/kv-storage/index.ts index 3b731d3b5b49..8de4dd1851f7 100644 --- a/packages/shared-base/src/kv-storage/index.ts +++ b/packages/shared-base/src/kv-storage/index.ts @@ -1,6 +1,6 @@ import type { UnboundedRegistry as MessageChannel } from '@dimensiondev/holoflows-kit' +import { combineAbortSignal } from '@dimensiondev/kit' import type { Subscription } from 'use-subscription' -import { combineAbortSignal } from '../utils/abortSignal' import type { KVStorageBackend } from './types' export { createInMemoryKVStorageBackend } from './in-memory' diff --git a/packages/shared-base/src/kv-storage/proxy.ts b/packages/shared-base/src/kv-storage/proxy.ts index 093b43722249..97e224a1365b 100644 --- a/packages/shared-base/src/kv-storage/proxy.ts +++ b/packages/shared-base/src/kv-storage/proxy.ts @@ -1,5 +1,5 @@ import type { KVStorageBackend } from './types' -import { defer } from '../utils/defer' +import { defer } from '@dimensiondev/kit' export interface ProxiedKVStorageBackend extends KVStorageBackend { replaceBackend(backend: KVStorageBackend): void diff --git a/packages/shared-base/src/utils/abortSignal.ts b/packages/shared-base/src/utils/abortSignal.ts deleted file mode 100644 index 21070def5aae..000000000000 --- a/packages/shared-base/src/utils/abortSignal.ts +++ /dev/null @@ -1,19 +0,0 @@ -type HasNonNullableAbortSignal = false extends ( - T extends [infer Head, ...infer Rest] ? (Head extends AbortSignal ? true : HasNonNullableAbortSignal) : false -) - ? false - : true - -export function combineAbortSignal( - ..._: T -): HasNonNullableAbortSignal extends true ? AbortSignal : AbortSignal | undefined { - const args: (AbortSignal | undefined | null)[] = _.filter(Boolean) - if (args.length === 0) return undefined! - if (args.length === 1) return args[0] ?? undefined! - const controller = new AbortController() - const abort = () => controller.abort() - for (const each of args) { - each!.addEventListener('abort', abort, { signal: controller.signal }) - } - return controller.signal -} diff --git a/packages/shared-base/src/utils/defer.ts b/packages/shared-base/src/utils/defer.ts deleted file mode 100644 index 6d6b00e77ff0..000000000000 --- a/packages/shared-base/src/utils/defer.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * !!!! Please use the Promise constructor if possible - * If you don't understand https://groups.google.com/forum/#!topic/bluebird-js/mUiX2-vXW2s - */ -export function defer(): [promise: Promise, resolver: (val: T) => void, reject: (err: E) => void] { - let a!: (val: T) => void, b!: (err: E) => void - const p = new Promise((x, y) => { - a = x - b = y - }) - return [p, a, b] -} diff --git a/packages/shared-base/src/utils/delay.ts b/packages/shared-base/src/utils/delay.ts deleted file mode 100644 index 7985ce9f1321..000000000000 --- a/packages/shared-base/src/utils/delay.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Return a promise that resolved after `time` ms. - * If `time` is `Infinity`, it will never resolve. - * @param time - Time to sleep. In `ms`. - */ -export function delay(time: number) { - return new Promise((resolve) => (Number.isFinite(time) ? setTimeout(resolve, time) : void 0)) -} diff --git a/packages/shared-base/src/utils/enum.ts b/packages/shared-base/src/utils/enum.ts deleted file mode 100644 index 50760138cc22..000000000000 --- a/packages/shared-base/src/utils/enum.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function getEnumAsObject(enumArray: T[], getKey: (v: T) => string) { - return enumArray.reduce>((accumulator, x) => { - accumulator[getKey(x)] = x - return accumulator - }, {}) -} diff --git a/packages/shared-base/src/utils/index.ts b/packages/shared-base/src/utils/index.ts index 43f88377d70b..72ecac83030b 100644 --- a/packages/shared-base/src/utils/index.ts +++ b/packages/shared-base/src/utils/index.ts @@ -1,12 +1,7 @@ -export * from './defer' -export * from './delay' export * from './detect' -export * from './timeout' -export * from './enum' export * from './getLocalImplementation' export * from './parseURL' export * from './pollingTask' export * from './sessionStorageCache' export * from './subscription' -export * from './abortSignal' export * from './getAssetAsBlobURL' diff --git a/packages/shared-base/src/utils/timeout.ts b/packages/shared-base/src/utils/timeout.ts deleted file mode 100644 index 55174b95ed56..000000000000 --- a/packages/shared-base/src/utils/timeout.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Accept a promise and then set a timeout on it. After `time` ms, it will reject. - * @param promise - The promise that you want to set time limit on. - * @param time - Time before timeout. In `ms`. - * @param rejectReason - When reject, show a reason. Defaults to `"timeout"` - */ -export function timeout(promise: PromiseLike, time: number, rejectReason?: string): Promise { - if (!Number.isFinite(time)) return (async () => promise)() - let timer: any - const race = Promise.race([ - promise, - new Promise((r, reject) => { - timer = setTimeout(() => reject(new Error(rejectReason ?? 'timeout')), time) - }), - ]) - race.finally(() => clearTimeout(timer)) - return race -} diff --git a/packages/theme/stories/atoms/LoadingButton.stories.tsx b/packages/theme/stories/atoms/LoadingButton.stories.tsx index b1f44797c170..90dad2c9d8d0 100644 --- a/packages/theme/stories/atoms/LoadingButton.stories.tsx +++ b/packages/theme/stories/atoms/LoadingButton.stories.tsx @@ -4,11 +4,6 @@ import { Save } from '@mui/icons-material' const { meta, of } = story(MaskLoadingButton) -function delay(time: number) { - return new Promise(function (resolve) { - setTimeout(resolve.bind(null), time) - }) -} const f = () => delay(3000) export default meta({ title: 'Atoms/LoadingButton', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d67aaf5c1783..98371f583bff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@dimensiondev/eslint-plugin': ^0.0.1-20220117062517-fd3cb01 - '@dimensiondev/kit': 0.0.0-20211215044858-27d964f + '@dimensiondev/kit': 0.0.0-20220223091404-a336005 '@dimensiondev/patch-package': ^6.5.0 '@emotion/cache': ^11.7.1 '@emotion/react': ^11.7.1 @@ -63,7 +63,7 @@ importers: web3-core-method: 1.5.2 webpack: 5.68.0 dependencies: - '@dimensiondev/kit': 0.0.0-20211215044858-27d964f_8495c1478c7f1d196df61d0bdcd91148 + '@dimensiondev/kit': 0.0.0-20220223091404-a336005 '@emotion/cache': 11.7.1 '@emotion/react': 11.7.1_6b5db35eea36630b01cb5c8dd65e2365 '@emotion/serialize': 1.0.2 @@ -3808,18 +3808,10 @@ packages: webextension-polyfill: 0.8.0 dev: false - /@dimensiondev/kit/0.0.0-20211215044858-27d964f_8495c1478c7f1d196df61d0bdcd91148: - resolution: {integrity: sha512-gUyTWUPIAIQ5oeoKVcKE9nvdpTwof3Mu3kqax2Z60IWUFIUsN+8GdcanuU91SYY+8W4f1slkO4GycmhN37pWpQ==, tarball: download/@dimensiondev/kit/0.0.0-20211215044858-27d964f/ffae2c70fb4f65a1a0cadbb52d96977097c3cc3a4e1efb3f588d26969e7d5858} - peerDependencies: - react: ^17 || ^18 - react-router: ^5 || ^6 + /@dimensiondev/kit/0.0.0-20220223091404-a336005: + resolution: {integrity: sha512-QG9b1RzfKb7ENeJxfNup6mFsteVZNHDBHoLUcfg9SZWbra235TfBqCwidN8FonAwQlsqXH5tA25bFiFAsQ/ccA==, tarball: download/@dimensiondev/kit/0.0.0-20220223091404-a336005/e1bcd800ea61c2a0536fef9b1c522b3aa7e6d0b5efebe6ea6a890b156cb2546c} dependencies: - lodash: 4.17.21 lodash-es: 4.17.21 - lodash-unified: 1.0.1_da03a4540fbd16bbaafbb96724306afd - react: 18.0.0-rc.0 - transitivePeerDependencies: - - '@types/lodash-es' dev: false /@dimensiondev/mask-wallet-core/0.1.0-20211013082857-eb62e5f_protobufjs@6.11.2: From 3f40b07dcf8cfce9fb6beac233bb24df1b1441e2 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 23 Feb 2022 17:49:13 +0800 Subject: [PATCH 2/3] fix: missing import --- packages/theme/stories/atoms/LoadingButton.stories.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/theme/stories/atoms/LoadingButton.stories.tsx b/packages/theme/stories/atoms/LoadingButton.stories.tsx index 90dad2c9d8d0..03f5ea489b31 100644 --- a/packages/theme/stories/atoms/LoadingButton.stories.tsx +++ b/packages/theme/stories/atoms/LoadingButton.stories.tsx @@ -1,6 +1,7 @@ import { story } from '../utils' import { MaskLoadingButton } from '../../src' import { Save } from '@mui/icons-material' +import { delay } from '@dimensiondev/kit' const { meta, of } = story(MaskLoadingButton) From aa9aa2548cb3662aeb52ca53be8da4d02f7b0306 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 23 Feb 2022 18:13:01 +0800 Subject: [PATCH 3/3] fix: missing import --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2a8292b499b4..c13aba45e43c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "spellcheck": "cspell lint --no-must-find-files" }, "dependencies": { - "@dimensiondev/kit": "0.0.0-20220223091404-a336005", + "@dimensiondev/kit": "0.0.0-20220223101101-4e6f3b9", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.7.1", "@emotion/serialize": "^1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98371f583bff..44722d9ab429 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@dimensiondev/eslint-plugin': ^0.0.1-20220117062517-fd3cb01 - '@dimensiondev/kit': 0.0.0-20220223091404-a336005 + '@dimensiondev/kit': 0.0.0-20220223101101-4e6f3b9 '@dimensiondev/patch-package': ^6.5.0 '@emotion/cache': ^11.7.1 '@emotion/react': ^11.7.1 @@ -63,7 +63,7 @@ importers: web3-core-method: 1.5.2 webpack: 5.68.0 dependencies: - '@dimensiondev/kit': 0.0.0-20220223091404-a336005 + '@dimensiondev/kit': 0.0.0-20220223101101-4e6f3b9 '@emotion/cache': 11.7.1 '@emotion/react': 11.7.1_6b5db35eea36630b01cb5c8dd65e2365 '@emotion/serialize': 1.0.2 @@ -3808,8 +3808,8 @@ packages: webextension-polyfill: 0.8.0 dev: false - /@dimensiondev/kit/0.0.0-20220223091404-a336005: - resolution: {integrity: sha512-QG9b1RzfKb7ENeJxfNup6mFsteVZNHDBHoLUcfg9SZWbra235TfBqCwidN8FonAwQlsqXH5tA25bFiFAsQ/ccA==, tarball: download/@dimensiondev/kit/0.0.0-20220223091404-a336005/e1bcd800ea61c2a0536fef9b1c522b3aa7e6d0b5efebe6ea6a890b156cb2546c} + /@dimensiondev/kit/0.0.0-20220223101101-4e6f3b9: + resolution: {integrity: sha512-xk9rACwU2Iu+81BfnL1ykGofG+HuR/aMmYo4GZ1zyv32vZwe73B21z1GNGLq6XbYVjqNGa3puWoHZwDizAP4SA==, tarball: download/@dimensiondev/kit/0.0.0-20220223101101-4e6f3b9/a1b996a27d8d62c75d54a4a9d6b6544b45fe464288c83df31fccbbd2685b3a54} dependencies: lodash-es: 4.17.21 dev: false