From eaa1bc6bf10dbfe16ab6d15f3395207141e6b279 Mon Sep 17 00:00:00 2001 From: EYHN Date: Thu, 24 Apr 2025 10:06:11 +0000 Subject: [PATCH] refactor(core): adjust effect api (#11935) --- packages/common/infra/src/livedata/effect/index.ts | 7 ------- .../electron/src/main/shared-storage/json-file.ts | 5 ++--- .../components/providers/workspace-side-effects.tsx | 12 ++---------- .../core/src/desktop/pages/subscribe/index.tsx | 4 ++-- .../services/navigation-gesture.ts | 3 +-- .../core/src/modules/ai-button/services/ai-button.ts | 9 +-------- .../core/src/modules/backup/services/index.ts | 5 ++--- .../modules/blob-management/entity/unused-blobs.ts | 6 ++---- .../src/modules/cloud/entities/cloud-doc-meta.ts | 5 ++--- .../core/src/modules/cloud/entities/invoices.ts | 5 ++--- .../core/src/modules/cloud/entities/server.ts | 5 ++--- .../core/src/modules/cloud/entities/session.ts | 5 ++--- .../core/src/modules/cloud/entities/subscription.ts | 5 ++--- .../src/modules/cloud/entities/user-copilot-quota.ts | 5 ++--- .../core/src/modules/cloud/entities/user-feature.ts | 5 ++--- .../core/src/modules/cloud/entities/user-quota.ts | 5 ++--- .../src/modules/cloud/entities/workspace-invoices.ts | 5 ++--- .../modules/cloud/entities/workspace-subscription.ts | 5 ++--- .../core/src/modules/cloud/services/captcha.ts | 8 +++----- .../core/src/modules/cloud/services/invitation.ts | 5 ++--- .../core/src/modules/cloud/services/public-user.ts | 5 ++--- .../cloud/services/selfhost-generate-license.ts | 5 ++--- .../src/modules/cloud/services/selfhost-license.ts | 6 ++---- .../core/src/modules/cloud/services/user-settings.ts | 5 ++--- .../frontend/core/src/modules/i18n/entities/i18n.ts | 5 ++--- .../modules/import-template/entities/downloader.ts | 5 ++--- .../modules/integration/entities/readwise-crawler.ts | 5 ++--- .../core/src/modules/media/entities/audio-media.ts | 3 +-- .../core/src/modules/notification/services/count.ts | 5 ++--- .../core/src/modules/notification/services/list.ts | 8 +++----- .../core/src/modules/permissions/entities/members.ts | 5 ++--- .../src/modules/permissions/entities/permission.ts | 5 ++--- .../permissions/services/doc-granted-users.ts | 6 ++---- .../core/src/modules/permissions/services/guard.ts | 7 ++----- .../modules/permissions/services/member-search.ts | 6 ++---- .../core/src/modules/quicksearch/impls/docs.ts | 5 ++--- .../core/src/modules/quota/entities/quota.ts | 5 ++--- .../modules/share-doc/entities/share-docs-list.ts | 5 ++--- .../modules/share-setting/entities/share-setting.ts | 5 ++--- .../core/src/modules/workspace-engine/impls/cloud.ts | 5 ++--- .../core/src/modules/workspace/entities/profile.ts | 5 ++--- 41 files changed, 79 insertions(+), 146 deletions(-) diff --git a/packages/common/infra/src/livedata/effect/index.ts b/packages/common/infra/src/livedata/effect/index.ts index 48df960bb9..0ec34c8c5e 100644 --- a/packages/common/infra/src/livedata/effect/index.ts +++ b/packages/common/infra/src/livedata/effect/index.ts @@ -95,13 +95,6 @@ export function effect(...args: any[]) { function subscribe() { subscription = subject$.pipe.apply(subject$, args as any).subscribe({ - next(value) { - const error = new EffectError('should not emit value', value); - // make a uncaught exception - setTimeout(() => { - throw error; - }, 0); - }, complete() { const error = new EffectError('effect unexpected complete'); // make a uncaught exception diff --git a/packages/frontend/apps/electron/src/main/shared-storage/json-file.ts b/packages/frontend/apps/electron/src/main/shared-storage/json-file.ts index cd5412a768..c11e30ae47 100644 --- a/packages/frontend/apps/electron/src/main/shared-storage/json-file.ts +++ b/packages/frontend/apps/electron/src/main/shared-storage/json-file.ts @@ -7,7 +7,7 @@ import { exhaustMapWithTrailing, fromPromise, } from '@toeverything/infra'; -import { debounceTime, EMPTY, mergeMap, Observable, timeout } from 'rxjs'; +import { debounceTime, Observable, timeout } from 'rxjs'; import { logger } from '../logger'; @@ -127,8 +127,7 @@ export class PersistentJSONFileStorage implements Memento { timeout(5000), backoffRetry({ count: Infinity, - }), - mergeMap(() => EMPTY) + }) ); }) ); diff --git a/packages/frontend/core/src/components/providers/workspace-side-effects.tsx b/packages/frontend/core/src/components/providers/workspace-side-effects.tsx index 71bb110ef7..884c2efa99 100644 --- a/packages/frontend/core/src/components/providers/workspace-side-effects.tsx +++ b/packages/frontend/core/src/components/providers/workspace-side-effects.tsx @@ -44,14 +44,7 @@ import { } from '@toeverything/infra'; import { useSetAtom } from 'jotai'; import { useEffect } from 'react'; -import { - catchError, - EMPTY, - finalize, - mergeMap, - switchMap, - timeout, -} from 'rxjs'; +import { catchError, EMPTY, finalize, switchMap, tap, timeout } from 'rxjs'; /** * @deprecated just for legacy code, will be removed in the future @@ -88,12 +81,11 @@ export const WorkspaceSideEffects = () => { return { doc, mode }; }).pipe( timeout(10000 /* 10s */), - mergeMap(({ mode, doc }) => { + tap(({ mode, doc }) => { if (doc) { docsList.setPrimaryMode(doc.id, mode as DocMode); workbench.openDoc(doc.id); } - return EMPTY; }), onStart(() => { pushGlobalLoadingEvent({ diff --git a/packages/frontend/core/src/desktop/pages/subscribe/index.tsx b/packages/frontend/core/src/desktop/pages/subscribe/index.tsx index 5b29400078..35f67a7ed7 100644 --- a/packages/frontend/core/src/desktop/pages/subscribe/index.tsx +++ b/packages/frontend/core/src/desktop/pages/subscribe/index.tsx @@ -11,7 +11,7 @@ import { effect, fromPromise, useServices } from '@toeverything/infra'; import { nanoid } from 'nanoid'; import { useEffect, useMemo, useState } from 'react'; import { useSearchParams } from 'react-router-dom'; -import { EMPTY, mergeMap, switchMap } from 'rxjs'; +import { switchMap } from 'rxjs'; import { generateSubscriptionCallbackLink } from '../../../components/hooks/affine/use-subscription-notify'; import { @@ -162,7 +162,7 @@ export const Component = () => { const e = UserFriendlyError.fromAny(err); setMessage(e.message); } - }).pipe(mergeMap(() => EMPTY)); + }); }) ); diff --git a/packages/frontend/core/src/mobile/modules/navigation-gesture/services/navigation-gesture.ts b/packages/frontend/core/src/mobile/modules/navigation-gesture/services/navigation-gesture.ts index 6222de9616..0aee79d924 100644 --- a/packages/frontend/core/src/mobile/modules/navigation-gesture/services/navigation-gesture.ts +++ b/packages/frontend/core/src/mobile/modules/navigation-gesture/services/navigation-gesture.ts @@ -6,7 +6,7 @@ import { LiveData, Service, } from '@toeverything/infra'; -import { catchError, distinctUntilChanged, EMPTY, mergeMap } from 'rxjs'; +import { catchError, distinctUntilChanged, EMPTY } from 'rxjs'; import type { NavigationGestureProvider } from '../providers/navigation-gesture'; @@ -35,7 +35,6 @@ export class NavigationGestureService extends Service { } return; }).pipe( - mergeMap(() => EMPTY), catchError(err => { logger.error('navigationGestureProvider error', err); return EMPTY; diff --git a/packages/frontend/core/src/modules/ai-button/services/ai-button.ts b/packages/frontend/core/src/modules/ai-button/services/ai-button.ts index 807afe4563..3df2529773 100644 --- a/packages/frontend/core/src/modules/ai-button/services/ai-button.ts +++ b/packages/frontend/core/src/modules/ai-button/services/ai-button.ts @@ -5,13 +5,7 @@ import { fromPromise, Service, } from '@toeverything/infra'; -import { - catchError, - distinctUntilChanged, - EMPTY, - mergeMap, - throttleTime, -} from 'rxjs'; +import { catchError, distinctUntilChanged, EMPTY, throttleTime } from 'rxjs'; import type { AIButtonProvider } from '../provider/ai-button'; @@ -37,7 +31,6 @@ export class AIButtonService extends Service { } return; }).pipe( - mergeMap(() => EMPTY), catchError(err => { logger.error('presentAIButton error', err); return EMPTY; diff --git a/packages/frontend/core/src/modules/backup/services/index.ts b/packages/frontend/core/src/modules/backup/services/index.ts index aea5817c2f..fd2e6e9585 100644 --- a/packages/frontend/core/src/modules/backup/services/index.ts +++ b/packages/frontend/core/src/modules/backup/services/index.ts @@ -7,7 +7,7 @@ import { onStart, Service, } from '@toeverything/infra'; -import { EMPTY, mergeMap, switchMap } from 'rxjs'; +import { switchMap, tap } from 'rxjs'; import type { DesktopApiService } from '../../desktop-api'; import type { WorkspacesService } from '../../workspace'; @@ -37,9 +37,8 @@ export class BackupService extends Service { fromPromise(async () => { return this.desktopApiService.handler.workspace.getBackupWorkspaces(); }).pipe( - mergeMap(data => { + tap(data => { this.pageBackupWorkspaces$.setValue(data); - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isLoading$.setValue(true)), diff --git a/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts b/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts index 0849741a21..6f8067f7cf 100644 --- a/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts +++ b/packages/frontend/core/src/modules/blob-management/entity/unused-blobs.ts @@ -9,14 +9,13 @@ import { } from '@toeverything/infra'; import { fileTypeFromBuffer } from 'file-type'; import { - EMPTY, filter, firstValueFrom, fromEvent, map, - mergeMap, switchMap, takeUntil, + tap, } from 'rxjs'; import type { DocsSearchService } from '../../docs-search'; @@ -46,9 +45,8 @@ export class UnusedBlobs extends Entity { fromPromise(async () => { return await this.getUnusedBlobs(); }).pipe( - mergeMap(data => { + tap(data => { this.unusedBlobs$.setValue(data); - return EMPTY; }), onStart(() => this.isLoading$.setValue(true)), onComplete(() => this.isLoading$.setValue(false)) diff --git a/packages/frontend/core/src/modules/cloud/entities/cloud-doc-meta.ts b/packages/frontend/core/src/modules/cloud/entities/cloud-doc-meta.ts index 7ebbb714cc..a812264e45 100644 --- a/packages/frontend/core/src/modules/cloud/entities/cloud-doc-meta.ts +++ b/packages/frontend/core/src/modules/cloud/entities/cloud-doc-meta.ts @@ -10,7 +10,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import type { DocService } from '../../doc'; import type { GlobalCache } from '../../storage'; @@ -47,9 +47,8 @@ export class CloudDocMeta extends Entity { this.store.fetchCloudDocMeta(this.workspaceId, this.docId) ).pipe( smartRetry(), - mergeMap(meta => { + tap(meta => { this.cache.set(this.cacheKey, meta); - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/entities/invoices.ts b/packages/frontend/core/src/modules/cloud/entities/invoices.ts index 5e462ea7f8..5eb5c56efa 100644 --- a/packages/frontend/core/src/modules/cloud/entities/invoices.ts +++ b/packages/frontend/core/src/modules/cloud/entities/invoices.ts @@ -10,7 +10,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, map, mergeMap } from 'rxjs'; +import { map, tap } from 'rxjs'; import type { InvoicesStore } from '../stores/invoices'; @@ -44,10 +44,9 @@ export class Invoices extends Entity { signal ); }).pipe( - mergeMap(data => { + tap(data => { this.invoiceCount$.setValue(data.invoiceCount); this.pageInvoices$.setValue(data.invoices); - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/cloud/entities/server.ts b/packages/frontend/core/src/modules/cloud/entities/server.ts index f8af875be5..aa6d425a33 100644 --- a/packages/frontend/core/src/modules/cloud/entities/server.ts +++ b/packages/frontend/core/src/modules/cloud/entities/server.ts @@ -8,7 +8,7 @@ import { onComplete, onStart, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, map, mergeMap } from 'rxjs'; +import { exhaustMap, map, tap } from 'rxjs'; import { ServerScope } from '../scopes/server'; import { AuthService } from '../services/auth'; @@ -77,7 +77,7 @@ export class Server extends Entity<{ backoffRetry({ count: Infinity, }), - mergeMap(config => { + tap(config => { this.serverListStore.updateServerConfig(this.serverMetadata.id, { credentialsRequirement: config.credentialsRequirement, features: config.features, @@ -87,7 +87,6 @@ export class Server extends Entity<{ version: config.version, initialized: config.initialized, }); - return EMPTY; }), onStart(() => { this.isConfigRevalidating$.next(true); diff --git a/packages/frontend/core/src/modules/cloud/entities/session.ts b/packages/frontend/core/src/modules/cloud/entities/session.ts index 9b3cad1ea5..83e2d05885 100644 --- a/packages/frontend/core/src/modules/cloud/entities/session.ts +++ b/packages/frontend/core/src/modules/cloud/entities/session.ts @@ -10,7 +10,7 @@ import { onStart, } from '@toeverything/infra'; import { isEqual } from 'lodash-es'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import { validateAndReduceImage } from '../../../utils/reduce-image'; import type { AccountProfile, AuthStore } from '../stores/auth'; @@ -78,11 +78,10 @@ export class AuthSession extends Entity { backoffRetry({ count: Infinity, }), - mergeMap(sessionInfo => { + tap(sessionInfo => { if (!isEqual(this.store.getCachedAuthSession(), sessionInfo)) { this.store.setCachedAuthSession(sessionInfo); } - return EMPTY; }), onStart(() => { this.isRevalidating$.next(true); diff --git a/packages/frontend/core/src/modules/cloud/entities/subscription.ts b/packages/frontend/core/src/modules/cloud/entities/subscription.ts index a62bda9c1d..50b21b5bbe 100644 --- a/packages/frontend/core/src/modules/cloud/entities/subscription.ts +++ b/packages/frontend/core/src/modules/cloud/entities/subscription.ts @@ -15,7 +15,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, map, mergeMap } from 'rxjs'; +import { map, tap } from 'rxjs'; import type { AuthService } from '../services/auth'; import type { ServerService } from '../services/server'; @@ -122,7 +122,7 @@ export class Subscription extends Entity { }; }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data) { this.store.setCachedSubscriptions( data.userId, @@ -132,7 +132,6 @@ export class Subscription extends Entity { } else { this.subscription$.next(undefined); } - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/entities/user-copilot-quota.ts b/packages/frontend/core/src/modules/cloud/entities/user-copilot-quota.ts index bf37b298aa..868a324a9d 100644 --- a/packages/frontend/core/src/modules/cloud/entities/user-copilot-quota.ts +++ b/packages/frontend/core/src/modules/cloud/entities/user-copilot-quota.ts @@ -9,7 +9,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, map, mergeMap } from 'rxjs'; +import { map, tap } from 'rxjs'; import type { AuthService } from '../services/auth'; import type { ServerService } from '../services/server'; @@ -54,7 +54,7 @@ export class UserCopilotQuota extends Entity { return aiQuota; }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data) { const { limit, used } = data; this.copilotActionUsed$.next(used); @@ -65,7 +65,6 @@ export class UserCopilotQuota extends Entity { this.copilotActionUsed$.next(null); this.copilotActionLimit$.next(null); } - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/entities/user-feature.ts b/packages/frontend/core/src/modules/cloud/entities/user-feature.ts index d1e44126d5..eb13fa3dac 100644 --- a/packages/frontend/core/src/modules/cloud/entities/user-feature.ts +++ b/packages/frontend/core/src/modules/cloud/entities/user-feature.ts @@ -10,7 +10,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, map, mergeMap } from 'rxjs'; +import { map, tap } from 'rxjs'; import type { AuthService } from '../services/auth'; import type { UserFeatureStore } from '../stores/user-feature'; @@ -64,13 +64,12 @@ export class UserFeature extends Entity { }; }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data) { this.features$.next(data.features); } else { this.features$.next(null); } - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/entities/user-quota.ts b/packages/frontend/core/src/modules/cloud/entities/user-quota.ts index b2031b7b50..68451ddc89 100644 --- a/packages/frontend/core/src/modules/cloud/entities/user-quota.ts +++ b/packages/frontend/core/src/modules/cloud/entities/user-quota.ts @@ -12,7 +12,7 @@ import { } from '@toeverything/infra'; import { cssVar } from '@toeverything/theme'; import bytes from 'bytes'; -import { EMPTY, map, mergeMap } from 'rxjs'; +import { map, tap } from 'rxjs'; import type { AuthService } from '../services/auth'; import type { UserQuotaStore } from '../stores/user-quota'; @@ -79,7 +79,7 @@ export class UserQuota extends Entity { return { quota, used }; }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data) { const { quota, used } = data; this.quota$.next(quota); @@ -88,7 +88,6 @@ export class UserQuota extends Entity { this.quota$.next(null); this.used$.next(null); } - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/entities/workspace-invoices.ts b/packages/frontend/core/src/modules/cloud/entities/workspace-invoices.ts index 89a5d6d54e..ff7f2d53d2 100644 --- a/packages/frontend/core/src/modules/cloud/entities/workspace-invoices.ts +++ b/packages/frontend/core/src/modules/cloud/entities/workspace-invoices.ts @@ -10,7 +10,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, map, mergeMap } from 'rxjs'; +import { map, tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { WorkspaceServerService } from '../services/workspace-server'; @@ -55,10 +55,9 @@ export class WorkspaceInvoices extends Entity { signal ); }).pipe( - mergeMap(data => { + tap(data => { this.invoiceCount$.setValue(data.invoiceCount); this.pageInvoices$.setValue(data.invoices); - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/cloud/entities/workspace-subscription.ts b/packages/frontend/core/src/modules/cloud/entities/workspace-subscription.ts index d946d01e54..233b727aa1 100644 --- a/packages/frontend/core/src/modules/cloud/entities/workspace-subscription.ts +++ b/packages/frontend/core/src/modules/cloud/entities/workspace-subscription.ts @@ -11,7 +11,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { WorkspaceServerService } from '../services/workspace-server'; @@ -123,7 +123,7 @@ export class WorkspaceSubscription extends Entity { }; }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data && data.subscription && data.workspaceId && this.store) { this.store.setCachedWorkspaceSubscription( data.workspaceId, @@ -133,7 +133,6 @@ export class WorkspaceSubscription extends Entity { } else { this.subscription$.next(undefined); } - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/services/captcha.ts b/packages/frontend/core/src/modules/cloud/services/captcha.ts index f891891abd..fde5659978 100644 --- a/packages/frontend/core/src/modules/cloud/services/captcha.ts +++ b/packages/frontend/core/src/modules/cloud/services/captcha.ts @@ -7,7 +7,7 @@ import { onStart, Service, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, mergeMap, switchMap } from 'rxjs'; +import { exhaustMap, switchMap, tap } from 'rxjs'; import type { ValidatorProvider } from '../provider/validator'; import type { FetchService } from './fetch'; @@ -58,11 +58,10 @@ export class CaptchaService extends Service { } return { challenge: data.challenge, token: undefined }; }).pipe( - mergeMap(({ challenge, token }) => { + tap(({ challenge, token }) => { this.verifyToken$.next(token); this.challenge$.next(challenge); this.resetAfter5min(); - return EMPTY; }), catchErrorInto(this.error$), onStart(() => { @@ -83,11 +82,10 @@ export class CaptchaService extends Service { }); return true; }).pipe( - mergeMap(_ => { + tap(_ => { this.challenge$.next(undefined); this.verifyToken$.next(undefined); this.isLoading$.next(false); - return EMPTY; }) ); }) diff --git a/packages/frontend/core/src/modules/cloud/services/invitation.ts b/packages/frontend/core/src/modules/cloud/services/invitation.ts index 072c29589f..1326b14ef6 100644 --- a/packages/frontend/core/src/modules/cloud/services/invitation.ts +++ b/packages/frontend/core/src/modules/cloud/services/invitation.ts @@ -9,7 +9,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap, switchMap } from 'rxjs'; +import { EMPTY, switchMap, tap } from 'rxjs'; import type { AcceptInviteStore } from '../stores/accept-invite'; import type { InviteInfoStore } from '../stores/invite-info'; @@ -36,9 +36,8 @@ export class InvitationService extends Service { return fromPromise(async () => { return await this.inviteInfoStore.getInviteInfo(inviteId); }).pipe( - mergeMap(res => { + tap(res => { this.inviteInfo$.setValue(res); - return EMPTY; }), smartRetry({ count: 1, diff --git a/packages/frontend/core/src/modules/cloud/services/public-user.ts b/packages/frontend/core/src/modules/cloud/services/public-user.ts index 29aa9496bc..2e5b30e29d 100644 --- a/packages/frontend/core/src/modules/cloud/services/public-user.ts +++ b/packages/frontend/core/src/modules/cloud/services/public-user.ts @@ -7,7 +7,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { catchError, EMPTY, exhaustMap, groupBy, mergeMap } from 'rxjs'; +import { catchError, EMPTY, exhaustMap, groupBy, mergeMap, tap } from 'rxjs'; import type { PublicUserStore } from '../stores/public-user'; @@ -98,10 +98,9 @@ export class PublicUserService extends Service { this.setError(id, error); return EMPTY; }), - mergeMap(user => { + tap(user => { this.setPublicUser(id, user); this.setError(id, null); // clear error - return EMPTY; }), onStart(() => this.setLoading(id, true)), onComplete(() => this.setLoading(id, false)) diff --git a/packages/frontend/core/src/modules/cloud/services/selfhost-generate-license.ts b/packages/frontend/core/src/modules/cloud/services/selfhost-generate-license.ts index 2dca1567ed..334acb4ed6 100644 --- a/packages/frontend/core/src/modules/cloud/services/selfhost-generate-license.ts +++ b/packages/frontend/core/src/modules/cloud/services/selfhost-generate-license.ts @@ -9,7 +9,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { exhaustMap, tap } from 'rxjs'; import type { SelfhostGenerateLicenseStore } from '../stores/selfhost-generate-license'; @@ -27,9 +27,8 @@ export class SelfhostGenerateLicenseService extends Service { return await this.store.generateKey(sessionId); }).pipe( smartRetry(), - mergeMap(key => { + tap(key => { this.licenseKey$.next(key); - return EMPTY; }), catchErrorInto(this.error$), onStart(() => { diff --git a/packages/frontend/core/src/modules/cloud/services/selfhost-license.ts b/packages/frontend/core/src/modules/cloud/services/selfhost-license.ts index 23108722b2..241eca8a15 100644 --- a/packages/frontend/core/src/modules/cloud/services/selfhost-license.ts +++ b/packages/frontend/core/src/modules/cloud/services/selfhost-license.ts @@ -10,7 +10,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { SelfhostLicenseStore } from '../stores/selfhost-license'; @@ -36,12 +36,10 @@ export class SelfhostLicenseService extends Service { return await this.store.getLicense(currentWorkspaceId, signal); }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data) { this.license$.next(data); } - - return EMPTY; }), catchErrorInto(this.error$), onStart(() => this.isRevalidating$.next(true)), diff --git a/packages/frontend/core/src/modules/cloud/services/user-settings.ts b/packages/frontend/core/src/modules/cloud/services/user-settings.ts index 15cd26b9c2..33126a036f 100644 --- a/packages/frontend/core/src/modules/cloud/services/user-settings.ts +++ b/packages/frontend/core/src/modules/cloud/services/user-settings.ts @@ -8,7 +8,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { catchError, EMPTY, mergeMap } from 'rxjs'; +import { catchError, EMPTY, tap } from 'rxjs'; import type { UpdateUserSettingsInput, @@ -33,9 +33,8 @@ export class UserSettingsService extends Service { return this.store.getUserSettings(); }).pipe( smartRetry(), - mergeMap(settings => { + tap(settings => { this.userSettings$.value = settings; - return EMPTY; }), catchError(error => { this.error$.value = error; diff --git a/packages/frontend/core/src/modules/i18n/entities/i18n.ts b/packages/frontend/core/src/modules/i18n/entities/i18n.ts index a343c7cd83..00f0488d25 100644 --- a/packages/frontend/core/src/modules/i18n/entities/i18n.ts +++ b/packages/frontend/core/src/modules/i18n/entities/i18n.ts @@ -7,7 +7,7 @@ import { SUPPORTED_LANGUAGES, } from '@affine/i18n'; import { effect, Entity, fromPromise, LiveData } from '@toeverything/infra'; -import { catchError, EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { catchError, EMPTY, exhaustMap } from 'rxjs'; import type { GlobalCache } from '../../storage'; @@ -76,8 +76,7 @@ export class I18n extends Entity { logger.error('Failed to change language', error); return EMPTY; - }), - mergeMap(() => EMPTY) + }) ) ) ); diff --git a/packages/frontend/core/src/modules/import-template/entities/downloader.ts b/packages/frontend/core/src/modules/import-template/entities/downloader.ts index 63a10bac35..42be805951 100644 --- a/packages/frontend/core/src/modules/import-template/entities/downloader.ts +++ b/packages/frontend/core/src/modules/import-template/entities/downloader.ts @@ -8,7 +8,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap, switchMap } from 'rxjs'; +import { switchMap, tap } from 'rxjs'; import type { TemplateDownloaderStore } from '../store/downloader'; @@ -24,9 +24,8 @@ export class TemplateDownloader extends Entity { readonly download = effect( switchMap(({ snapshotUrl }: { snapshotUrl: string }) => { return fromPromise(() => this.store.download(snapshotUrl)).pipe( - mergeMap(({ data }) => { + tap(({ data }) => { this.data$.next(data); - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/integration/entities/readwise-crawler.ts b/packages/frontend/core/src/modules/integration/entities/readwise-crawler.ts index e764cc6f3f..1afaf39868 100644 --- a/packages/frontend/core/src/modules/integration/entities/readwise-crawler.ts +++ b/packages/frontend/core/src/modules/integration/entities/readwise-crawler.ts @@ -5,7 +5,7 @@ import { onComplete, onStart, } from '@toeverything/infra'; -import { catchError, EMPTY, mergeMap, Observable, switchMap } from 'rxjs'; +import { catchError, EMPTY, Observable, switchMap, tap } from 'rxjs'; import type { ReadwiseStore } from '../store/readwise'; import type { @@ -129,9 +129,8 @@ export class ReadwiseCrawler extends Entity { abortController?.abort(); }; }).pipe( - mergeMap(data => { + tap(data => { this.data$.next(data); - return EMPTY; }), catchError(err => { this.error$.next(err); diff --git a/packages/frontend/core/src/modules/media/entities/audio-media.ts b/packages/frontend/core/src/modules/media/entities/audio-media.ts index 9ecd619e7a..95b160a4dc 100644 --- a/packages/frontend/core/src/modules/media/entities/audio-media.ts +++ b/packages/frontend/core/src/modules/media/entities/audio-media.ts @@ -10,7 +10,7 @@ import { onStart, } from '@toeverything/infra'; import { clamp } from 'lodash-es'; -import { EMPTY, mergeMap, switchMap } from 'rxjs'; +import { mergeMap, switchMap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; @@ -194,7 +194,6 @@ export class AudioMedia extends Entity { `Calculate audio stats time: ${performance.now() - startTime}ms` ); }), - mergeMap(() => EMPTY), onStart(() => this.loading$.setValue(true)), onComplete(() => { this.loading$.setValue(false); diff --git a/packages/frontend/core/src/modules/notification/services/count.ts b/packages/frontend/core/src/modules/notification/services/count.ts index 1861f039ad..dc33115fff 100644 --- a/packages/frontend/core/src/modules/notification/services/count.ts +++ b/packages/frontend/core/src/modules/notification/services/count.ts @@ -10,7 +10,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap, switchMap, timer } from 'rxjs'; +import { switchMap, tap, timer } from 'rxjs'; import { AccountChanged, type AuthService } from '../../cloud'; import { ServerStarted } from '../../cloud/events/server-started'; @@ -45,9 +45,8 @@ export class NotificationCountService extends Service { } return this.store.getNotificationCount(signal); }).pipe( - mergeMap(result => { + tap(result => { this.setCount(result ?? 0); - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/notification/services/list.ts b/packages/frontend/core/src/modules/notification/services/list.ts index 293a226f9f..9e860b885a 100644 --- a/packages/frontend/core/src/modules/notification/services/list.ts +++ b/packages/frontend/core/src/modules/notification/services/list.ts @@ -8,7 +8,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { EMPTY, exhaustMap, tap } from 'rxjs'; import type { Notification, NotificationStore } from '../stores/notification'; import type { NotificationCountService } from './count'; @@ -43,10 +43,10 @@ export class NotificationListService extends Service { signal ) ).pipe( - mergeMap(result => { + tap(result => { if (!result) { // If the user is not logged in, we just ignore the result. - return EMPTY; + return; } const { edges, pageInfo, totalCount } = result; this.notifications$.next([ @@ -59,8 +59,6 @@ export class NotificationListService extends Service { this.hasMore$.next(pageInfo.hasNextPage); this.nextCursor$.next(pageInfo.endCursor ?? undefined); - - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/permissions/entities/members.ts b/packages/frontend/core/src/modules/permissions/entities/members.ts index 3287c67633..ba09106c4a 100644 --- a/packages/frontend/core/src/modules/permissions/entities/members.ts +++ b/packages/frontend/core/src/modules/permissions/entities/members.ts @@ -9,7 +9,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, map, mergeMap, switchMap } from 'rxjs'; +import { map, switchMap, tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { WorkspaceMembersStore } from '../stores/members'; @@ -45,10 +45,9 @@ export class WorkspaceMembers extends Entity { signal ); }).pipe( - mergeMap(data => { + tap(data => { this.memberCount$.setValue(data.memberCount); this.pageMembers$.setValue(data.members); - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/permissions/entities/permission.ts b/packages/frontend/core/src/modules/permissions/entities/permission.ts index 3200abae01..62c43ba0cb 100644 --- a/packages/frontend/core/src/modules/permissions/entities/permission.ts +++ b/packages/frontend/core/src/modules/permissions/entities/permission.ts @@ -8,7 +8,7 @@ import { onComplete, onStart, } from '@toeverything/infra'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { WorkspacePermissionStore } from '../stores/permission'; @@ -51,13 +51,12 @@ export class WorkspacePermission extends Entity { backoffRetry({ count: Infinity, }), - mergeMap(({ isOwner, isAdmin, isTeam }) => { + tap(({ isOwner, isAdmin, isTeam }) => { this.store.setWorkspacePermissionCache({ isOwner, isAdmin, isTeam, }); - return EMPTY; }), onStart(() => this.isRevalidating$.setValue(true)), onComplete(() => this.isRevalidating$.setValue(false)) diff --git a/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts b/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts index afef6bc86c..eee86bb8a6 100644 --- a/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts +++ b/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts @@ -9,7 +9,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { EMPTY, exhaustMap, tap } from 'rxjs'; import type { DocService } from '../../doc'; import type { WorkspaceService } from '../../workspace'; @@ -52,7 +52,7 @@ export class DocGrantedUsersService extends Service { signal ); }).pipe( - mergeMap(({ edges, pageInfo, totalCount }) => { + tap(({ edges, pageInfo, totalCount }) => { this.grantedUsers$.next([ ...this.grantedUsers$.value, ...edges.map(edge => edge.node), @@ -61,8 +61,6 @@ export class DocGrantedUsersService extends Service { this.grantedUserCount$.next(totalCount); this.hasMore$.next(pageInfo.hasNextPage); this.nextCursor$.next(pageInfo.endCursor ?? undefined); - - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/permissions/services/guard.ts b/packages/frontend/core/src/modules/permissions/services/guard.ts index a02e8bf18b..d3e9582450 100644 --- a/packages/frontend/core/src/modules/permissions/services/guard.ts +++ b/packages/frontend/core/src/modules/permissions/services/guard.ts @@ -8,7 +8,6 @@ import { } from '@toeverything/infra'; import { combineLatest, - EMPTY, exhaustMap, groupBy, map, @@ -145,8 +144,7 @@ export class GuardService extends Service { fromPromise(() => this.guardStore.getWorkspacePermissions()).pipe( backoffRetry({ count: Infinity, - }), - mergeMap(() => EMPTY) + }) ) ) ); @@ -159,8 +157,7 @@ export class GuardService extends Service { fromPromise(() => this.loadDocPermission(docId)).pipe( backoffRetry({ count: Infinity, - }), - mergeMap(() => EMPTY) + }) ) ) ) diff --git a/packages/frontend/core/src/modules/permissions/services/member-search.ts b/packages/frontend/core/src/modules/permissions/services/member-search.ts index 4f4cf89215..b5a2f7c760 100644 --- a/packages/frontend/core/src/modules/permissions/services/member-search.ts +++ b/packages/frontend/core/src/modules/permissions/services/member-search.ts @@ -8,7 +8,7 @@ import { Service, smartRetry, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { EMPTY, exhaustMap, tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { Member } from '../entities/members'; @@ -43,11 +43,9 @@ export class MemberSearchService extends Service { signal ); }).pipe( - mergeMap(data => { + tap(data => { this.result$.setValue([...this.result$.value, ...data.members]); this.hasMore$.setValue(data.members.length === this.PAGE_SIZE); - - return EMPTY; }), smartRetry(), catchErrorInto(this.error$), diff --git a/packages/frontend/core/src/modules/quicksearch/impls/docs.ts b/packages/frontend/core/src/modules/quicksearch/impls/docs.ts index 93580a6e94..bdd736b6f8 100644 --- a/packages/frontend/core/src/modules/quicksearch/impls/docs.ts +++ b/packages/frontend/core/src/modules/quicksearch/impls/docs.ts @@ -6,7 +6,7 @@ import { onStart, } from '@toeverything/infra'; import { truncate } from 'lodash-es'; -import { EMPTY, map, mergeMap, of, switchMap, throttleTime } from 'rxjs'; +import { map, of, switchMap, tap, throttleTime } from 'rxjs'; import type { DocRecord, DocsService } from '../../doc'; import type { DocDisplayMetaService } from '../../doc-display-meta'; @@ -97,10 +97,9 @@ export class DocsQuickSearchSession ); } return out.pipe( - mergeMap((items: QuickSearchItem<'docs', DocsPayload>[]) => { + tap((items: QuickSearchItem<'docs', DocsPayload>[]) => { this.items$.next(items); this.isQueryLoading$.next(false); - return EMPTY; }), onStart(() => { this.items$.next([]); diff --git a/packages/frontend/core/src/modules/quota/entities/quota.ts b/packages/frontend/core/src/modules/quota/entities/quota.ts index 8009fd942f..0cac2c2c4f 100644 --- a/packages/frontend/core/src/modules/quota/entities/quota.ts +++ b/packages/frontend/core/src/modules/quota/entities/quota.ts @@ -13,7 +13,7 @@ import { } from '@toeverything/infra'; import { cssVarV2 } from '@toeverything/theme/v2'; import bytes from 'bytes'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { WorkspaceQuotaStore } from '../stores/quota'; @@ -76,7 +76,7 @@ export class WorkspaceQuota extends Entity { return { quota: data, used: data.usedStorageQuota }; }).pipe( smartRetry(), - mergeMap(data => { + tap(data => { if (data) { const { quota, used } = data; this.quota$.next(quota); @@ -85,7 +85,6 @@ export class WorkspaceQuota extends Entity { this.quota$.next(null); this.used$.next(null); } - return EMPTY; }), catchErrorInto(this.error$, error => { logger.error('Failed to fetch workspace quota', error); diff --git a/packages/frontend/core/src/modules/share-doc/entities/share-docs-list.ts b/packages/frontend/core/src/modules/share-doc/entities/share-docs-list.ts index 8af65ac946..c85fddc34a 100644 --- a/packages/frontend/core/src/modules/share-doc/entities/share-docs-list.ts +++ b/packages/frontend/core/src/modules/share-doc/entities/share-docs-list.ts @@ -11,7 +11,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, mergeMap } from 'rxjs'; +import { tap } from 'rxjs'; import type { GlobalCache } from '../../storage'; import type { WorkspaceService } from '../../workspace'; @@ -43,9 +43,8 @@ export class ShareDocsList extends Entity { ); }).pipe( smartRetry(), - mergeMap(list => { + tap(list => { this.cache.set('share-docs', list); - return EMPTY; }), catchErrorInto(this.error$, err => logger.error('revalidate share docs error', err) diff --git a/packages/frontend/core/src/modules/share-setting/entities/share-setting.ts b/packages/frontend/core/src/modules/share-setting/entities/share-setting.ts index c04a560f83..aabfeb0058 100644 --- a/packages/frontend/core/src/modules/share-setting/entities/share-setting.ts +++ b/packages/frontend/core/src/modules/share-setting/entities/share-setting.ts @@ -10,7 +10,7 @@ import { onStart, smartRetry, } from '@toeverything/infra'; -import { EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { exhaustMap, tap } from 'rxjs'; import type { WorkspaceService } from '../../workspace'; import type { WorkspaceShareSettingStore } from '../stores/share-setting'; @@ -45,13 +45,12 @@ export class WorkspaceShareSetting extends Entity { ) ).pipe( smartRetry(), - mergeMap(value => { + tap(value => { if (value) { this.enableAi$.next(value.enableAi); this.enableUrlPreview$.next(value.enableUrlPreview); this.inviteLink$.next(value.inviteLink); } - return EMPTY; }), catchErrorInto(this.error$, error => { logger.error('Failed to fetch enableUrlPreview', error); diff --git a/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts b/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts index 973862ba39..c7276b059b 100644 --- a/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts +++ b/packages/frontend/core/src/modules/workspace-engine/impls/cloud.ts @@ -45,7 +45,7 @@ import { Service, } from '@toeverything/infra'; import { isEqual } from 'lodash-es'; -import { EMPTY, map, mergeMap, Observable, switchMap } from 'rxjs'; +import { map, Observable, switchMap, tap } from 'rxjs'; import { type Doc as YDoc, encodeStateAsUpdate } from 'yjs'; import type { Server, ServersService } from '../../cloud'; @@ -254,7 +254,7 @@ class CloudWorkspaceFlavourProvider implements WorkspaceFlavourProvider { })), }; }).pipe( - mergeMap(data => { + tap(data => { if (data) { const { accountId, workspaces } = data; const sorted = workspaces.sort((a, b) => { @@ -270,7 +270,6 @@ class CloudWorkspaceFlavourProvider implements WorkspaceFlavourProvider { } else { this.workspaces$.next([]); } - return EMPTY; }), catchErrorInto(this.error$, err => { logger.error('error to revalidate cloud workspaces', err); diff --git a/packages/frontend/core/src/modules/workspace/entities/profile.ts b/packages/frontend/core/src/modules/workspace/entities/profile.ts index e621055fa1..50922e7f7d 100644 --- a/packages/frontend/core/src/modules/workspace/entities/profile.ts +++ b/packages/frontend/core/src/modules/workspace/entities/profile.ts @@ -8,7 +8,7 @@ import { onStart, } from '@toeverything/infra'; import { isEqual } from 'lodash-es'; -import { catchError, EMPTY, exhaustMap, mergeMap } from 'rxjs'; +import { catchError, EMPTY, exhaustMap, tap } from 'rxjs'; import type { WorkspaceMetadata } from '../metadata'; import type { WorkspaceFlavourProvider } from '../providers/flavour'; @@ -76,11 +76,10 @@ export class WorkspaceProfile extends Entity<{ metadata: WorkspaceMetadata }> { return fromPromise(signal => provider.getWorkspaceProfile(this.props.metadata.id, signal) ).pipe( - mergeMap(info => { + tap(info => { if (info) { this.setProfile({ ...this.profile$.value, ...info }); } - return EMPTY; }), catchError(err => { logger.error(err);