From 164d357487a1ce0ce2da8499947ba829a757b4d6 Mon Sep 17 00:00:00 2001 From: Himself65 Date: Wed, 5 Apr 2023 21:01:12 -0500 Subject: [PATCH] fix: indexeddb provider (#1827) --- apps/electron/yarn.lock | 14 +-------- apps/web/package.json | 1 - packages/workspace/package.json | 1 - packages/workspace/src/providers/index.ts | 37 ++++++++++++++--------- yarn.lock | 15 +-------- 5 files changed, 24 insertions(+), 44 deletions(-) diff --git a/apps/electron/yarn.lock b/apps/electron/yarn.lock index b3c3eb6b52..9d2175dbef 100644 --- a/apps/electron/yarn.lock +++ b/apps/electron/yarn.lock @@ -196,7 +196,6 @@ __metadata: react: ^18.2.0 react-dom: ^18.2.0 ws: ^8.13.0 - y-indexeddb: ^9.0.10 y-protocols: ^1.0.5 yjs: ^13.5.52 zod: ^3.21.4 @@ -12007,7 +12006,7 @@ __metadata: languageName: node linkType: hard -"lib0@npm:^0.2.35, lib0@npm:^0.2.42, lib0@npm:^0.2.68, lib0@npm:^0.2.72, lib0@npm:^0.2.73": +"lib0@npm:^0.2.42, lib0@npm:^0.2.68, lib0@npm:^0.2.72, lib0@npm:^0.2.73": version: 0.2.73 resolution: "lib0@npm:0.2.73" dependencies: @@ -17045,17 +17044,6 @@ __metadata: languageName: node linkType: hard -"y-indexeddb@npm:^9.0.10": - version: 9.0.10 - resolution: "y-indexeddb@npm:9.0.10" - dependencies: - lib0: ^0.2.35 - peerDependencies: - yjs: ^13.0.0 - checksum: 6a57825b599cdf77da7c9857b1acc0f782492fc41531618bd7392bdfbcf11c783ff1a30b82ae080b050a5ebafd54754a978de7a6ac42144ec59eb1fbdebd090b - languageName: node - linkType: hard - "y-protocols@npm:^1.0.5": version: 1.0.5 resolution: "y-protocols@npm:1.0.5" diff --git a/apps/web/package.json b/apps/web/package.json index e8360cd537..9487d18dd4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -39,7 +39,6 @@ "react-dom": "^18.2.0", "react-is": "^18.2.0", "swr": "^2.1.2", - "y-indexeddb": "^9.0.10", "y-protocols": "^1.0.5", "yjs": "^13.5.52", "zod": "^3.21.4" diff --git a/packages/workspace/package.json b/packages/workspace/package.json index 8d456d018e..b368581c82 100644 --- a/packages/workspace/package.json +++ b/packages/workspace/package.json @@ -27,7 +27,6 @@ "lib0": "^0.2.73", "react": "^18.2.0", "react-dom": "^18.2.0", - "y-indexeddb": "^9.0.10", "y-protocols": "^1.0.5", "yjs": "^13.5.52", "zod": "^3.21.4" diff --git a/packages/workspace/src/providers/index.ts b/packages/workspace/src/providers/index.ts index 69e3d37adb..9378505657 100644 --- a/packages/workspace/src/providers/index.ts +++ b/packages/workspace/src/providers/index.ts @@ -8,7 +8,10 @@ import type { } from '@affine/workspace/type'; import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; import { assertExists } from '@blocksuite/store'; -import { IndexeddbPersistence } from 'y-indexeddb'; +import { + createIndexedDBProvider as create, + EarlyDisconnectError, +} from '@toeverything/y-indexeddb'; import { createBroadCastChannelProvider } from './broad-cast-channel'; import { localProviderLogger } from './logger'; @@ -57,7 +60,10 @@ const createAffineWebSocketProvider = ( const createIndexedDBProvider = ( blockSuiteWorkspace: BlockSuiteWorkspace ): LocalIndexedDBProvider => { - let indexeddbProvider: IndexeddbPersistence | null = null; + const indexeddbProvider = create( + blockSuiteWorkspace.id, + blockSuiteWorkspace.doc + ); const callbacks = new Set<() => void>(); return { flavour: 'local-indexeddb', @@ -65,23 +71,25 @@ const createIndexedDBProvider = ( // fixme: remove background long polling background: true, cleanup: () => { - assertExists(indexeddbProvider); - indexeddbProvider.clearData(); - callbacks.clear(); - indexeddbProvider = null; + // todo: cleanup data }, connect: () => { localProviderLogger.info( 'connect indexeddb provider', blockSuiteWorkspace.id ); - indexeddbProvider = new IndexeddbPersistence( - blockSuiteWorkspace.id, - blockSuiteWorkspace.doc - ); - indexeddbProvider.whenSynced.then(() => { - callbacks.forEach(cb => cb()); - }); + indexeddbProvider.connect(); + indexeddbProvider.whenSynced + .then(() => { + callbacks.forEach(cb => cb()); + }) + .catch(error => { + if (error instanceof EarlyDisconnectError) { + return; + } else { + throw error; + } + }); }, disconnect: () => { assertExists(indexeddbProvider); @@ -89,8 +97,7 @@ const createIndexedDBProvider = ( 'disconnect indexeddb provider', blockSuiteWorkspace.id ); - indexeddbProvider.destroy(); - indexeddbProvider = null; + indexeddbProvider.disconnect(); }, }; }; diff --git a/yarn.lock b/yarn.lock index 6baf7917b9..31cfcdc822 100644 --- a/yarn.lock +++ b/yarn.lock @@ -207,7 +207,6 @@ __metadata: swr: ^2.1.2 typescript: ^5.0.3 webpack: ^5.77.0 - y-indexeddb: ^9.0.10 y-protocols: ^1.0.5 yjs: ^13.5.52 zod: ^3.21.4 @@ -234,7 +233,6 @@ __metadata: react: ^18.2.0 react-dom: ^18.2.0 ws: ^8.13.0 - y-indexeddb: ^9.0.10 y-protocols: ^1.0.5 yjs: ^13.5.52 zod: ^3.21.4 @@ -13611,7 +13609,7 @@ __metadata: languageName: node linkType: hard -"lib0@npm:^0.2.35, lib0@npm:^0.2.42, lib0@npm:^0.2.68, lib0@npm:^0.2.72, lib0@npm:^0.2.73": +"lib0@npm:^0.2.42, lib0@npm:^0.2.68, lib0@npm:^0.2.72, lib0@npm:^0.2.73": version: 0.2.73 resolution: "lib0@npm:0.2.73" dependencies: @@ -19280,17 +19278,6 @@ __metadata: languageName: node linkType: hard -"y-indexeddb@npm:^9.0.10": - version: 9.0.10 - resolution: "y-indexeddb@npm:9.0.10" - dependencies: - lib0: ^0.2.35 - peerDependencies: - yjs: ^13.0.0 - checksum: 6a57825b599cdf77da7c9857b1acc0f782492fc41531618bd7392bdfbcf11c783ff1a30b82ae080b050a5ebafd54754a978de7a6ac42144ec59eb1fbdebd090b - languageName: node - linkType: hard - "y-protocols@npm:^1.0.5": version: 1.0.5 resolution: "y-protocols@npm:1.0.5"