mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-22 04:26:23 +08:00
feat(core): new worker workspace engine (#9257)
This commit is contained in:
@@ -41,7 +41,7 @@ export type NativeDBApis = {
|
||||
id: string,
|
||||
peer: string,
|
||||
docId: string
|
||||
): Promise<DocClock>;
|
||||
): Promise<DocClock | null>;
|
||||
setPeerRemoteClock(
|
||||
id: string,
|
||||
peer: string,
|
||||
@@ -53,7 +53,7 @@ export type NativeDBApis = {
|
||||
id: string,
|
||||
peer: string,
|
||||
docId: string
|
||||
): Promise<DocClock>;
|
||||
): Promise<DocClock | null>;
|
||||
setPeerPulledRemoteClock(
|
||||
id: string,
|
||||
peer: string,
|
||||
@@ -65,7 +65,7 @@ export type NativeDBApis = {
|
||||
id: string,
|
||||
peer: string,
|
||||
docId: string
|
||||
): Promise<DocClock>;
|
||||
): Promise<DocClock | null>;
|
||||
setPeerPushedClock(
|
||||
id: string,
|
||||
peer: string,
|
||||
|
||||
@@ -7,7 +7,6 @@ export * from './blob';
|
||||
export { bindNativeDBApis, type NativeDBApis } from './db';
|
||||
export * from './doc';
|
||||
export * from './sync';
|
||||
export * from './v1';
|
||||
|
||||
export const sqliteStorages = [
|
||||
SqliteDocStorage,
|
||||
|
||||
@@ -7,6 +7,7 @@ import { apis } from './db';
|
||||
* @deprecated readonly
|
||||
*/
|
||||
export class SqliteV1BlobStorage extends BlobStorageBase {
|
||||
static identifier = 'SqliteV1BlobStorage';
|
||||
override connection = new DummyConnection();
|
||||
|
||||
constructor(private readonly options: { type: SpaceType; id: string }) {
|
||||
|
||||
@@ -4,6 +4,8 @@ import {
|
||||
DocStorageBase,
|
||||
type DocUpdate,
|
||||
} from '../../../storage';
|
||||
import { getIdConverter, type IdConverter } from '../../../utils/id-converter';
|
||||
import { isEmptyUpdate } from '../../../utils/is-empty-update';
|
||||
import type { SpaceType } from '../../../utils/universal-id';
|
||||
import { apis } from './db';
|
||||
|
||||
@@ -14,8 +16,14 @@ export class SqliteV1DocStorage extends DocStorageBase<{
|
||||
type: SpaceType;
|
||||
id: string;
|
||||
}> {
|
||||
static identifier = 'SqliteV1DocStorage';
|
||||
cachedIdConverter: Promise<IdConverter> | null = null;
|
||||
override connection = new DummyConnection();
|
||||
|
||||
constructor(options: { type: SpaceType; id: string }) {
|
||||
super({ ...options, readonlyMode: true });
|
||||
}
|
||||
|
||||
private get db() {
|
||||
if (!apis) {
|
||||
throw new Error('Not in electron context.');
|
||||
@@ -26,17 +34,21 @@ export class SqliteV1DocStorage extends DocStorageBase<{
|
||||
|
||||
override async pushDocUpdate(update: DocUpdate) {
|
||||
// no more writes
|
||||
|
||||
return { docId: update.docId, timestamp: new Date() };
|
||||
}
|
||||
|
||||
override async getDoc(docId: string) {
|
||||
const idConverter = await this.getIdConverter();
|
||||
const bin = await this.db.getDocAsUpdates(
|
||||
this.options.type,
|
||||
this.options.id,
|
||||
docId
|
||||
idConverter.newIdToOldId(docId)
|
||||
);
|
||||
|
||||
if (isEmptyUpdate(bin)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
docId,
|
||||
bin,
|
||||
@@ -71,4 +83,37 @@ export class SqliteV1DocStorage extends DocStorageBase<{
|
||||
protected override async markUpdatesMerged(): Promise<number> {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private async getIdConverter() {
|
||||
if (this.cachedIdConverter) {
|
||||
return await this.cachedIdConverter;
|
||||
}
|
||||
this.cachedIdConverter = getIdConverter(
|
||||
{
|
||||
getDocBuffer: async id => {
|
||||
if (!this.db) {
|
||||
return null;
|
||||
}
|
||||
const updates = await this.db.getDocAsUpdates(
|
||||
this.options.type,
|
||||
this.options.id,
|
||||
id
|
||||
);
|
||||
|
||||
if (isEmptyUpdate(updates)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!updates) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return updates;
|
||||
},
|
||||
},
|
||||
this.spaceId
|
||||
);
|
||||
|
||||
return await this.cachedIdConverter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
import type { StorageConstructor } from '../..';
|
||||
import { SqliteV1BlobStorage } from './blob';
|
||||
import { SqliteV1DocStorage } from './doc';
|
||||
|
||||
export * from './blob';
|
||||
export { bindNativeDBV1Apis } from './db';
|
||||
export * from './doc';
|
||||
|
||||
export const sqliteV1Storages = [
|
||||
SqliteV1DocStorage,
|
||||
SqliteV1BlobStorage,
|
||||
] satisfies StorageConstructor[];
|
||||
|
||||
Reference in New Issue
Block a user