Skip to content

Commit 43a57e5

Browse files
authored
Merge pull request #2180 from dexie/breakout-yjs-to-addon
Breakout yjs to addon to its own module "y-dexie".
2 parents bf8cc05 + 1bda5a5 commit 43a57e5

90 files changed

Lines changed: 1675 additions & 906 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/main.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ jobs:
2323
- addons/Dexie.Observable/test
2424
- addons/Dexie.Syncable/test
2525
- addons/dexie-export-import/test
26+
- addons/y-dexie/test
2627
- libs/dexie-react-hooks/test
2728
fail-fast: true # If one test fails, abort the rest of the tests
28-
max-parallel: 5 # At least for browserstack, this seems to be needed to avoid timeouts
29+
max-parallel: 6 # At least for browserstack, this seems to be needed to avoid timeouts
2930
steps:
3031
- name: Checkout code
3132
uses: actions/checkout@v3

addons/dexie-cloud/package.json

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,50 @@
11
{
22
"name": "dexie-cloud-addon",
3-
"version": "4.1.0-beta.49",
3+
"version": "4.2.0-alpha.7",
44
"description": "Dexie addon that syncs with to Dexie Cloud",
5-
"main": "dist/umd/dexie-cloud-addon.js",
65
"type": "module",
7-
"module": "dist/modern/dexie-cloud-addon.js",
6+
"module": "dist/modern/dexie-cloud-addon.min.js",
87
"homepage": "https://dexie.org/cloud/docs/dexie-cloud-addon",
98
"exports": {
109
".": {
1110
"development": {
1211
"import": "./dist/modern/dexie-cloud-addon.js",
13-
"require": "./dist/umd/dexie-cloud-addon.js",
14-
"default": "./dist/umd/dexie-cloud-addon.js"
12+
"require": false,
13+
"types": "./dist/modern/dexie-cloud-addon.d.ts"
1514
},
1615
"production": {
1716
"import": "./dist/modern/dexie-cloud-addon.min.js",
18-
"require": "./dist/umd/dexie-cloud-addon.min.js",
19-
"default": "./dist/umd/dexie-cloud-addon.min.js"
17+
"require": false,
18+
"types": "./dist/modern/dexie-cloud-addon.d.ts"
2019
},
2120
"default": {
22-
"import": "./dist/modern/dexie-cloud-addon.js",
23-
"require": "./dist/umd/dexie-cloud-addon.js",
24-
"default": "./dist/umd/dexie-cloud-addon.js"
21+
"import": "./dist/modern/dexie-cloud-addon.min.js",
22+
"require": false,
23+
"types": "./dist/modern/dexie-cloud-addon.d.ts"
2524
}
2625
},
2726
"./service-worker": {
2827
"development": {
2928
"import": "./dist/modern/service-worker.js",
3029
"require": "./dist/umd/service-worker.js",
31-
"default": "./dist/umd/service-worker.js"
30+
"default": "./dist/umd/service-worker.js",
31+
"types": "./dist/modern/service-worker.d.ts"
3232
},
3333
"production": {
3434
"import": "./dist/modern/service-worker.min.js",
3535
"require": "./dist/umd/service-worker.min.js",
36-
"default": "./dist/umd/service-worker.min.js"
36+
"default": "./dist/umd/service-worker.min.js",
37+
"types": "./dist/modern/service-worker.d.ts"
3738
},
3839
"default": {
39-
"import": "./dist/modern/service-worker.js",
40-
"require": "./dist/umd/service-worker.js",
41-
"default": "./dist/umd/service-worker.js"
40+
"import": "./dist/modern/service-worker.min.js",
41+
"require": "./dist/umd/service-worker.min.js",
42+
"default": "./dist/umd/service-worker.min.js",
43+
"types": "./dist/modern/service-worker.d.ts"
4244
}
4345
}
4446
},
45-
"types": "dist/modern/dexie-cloud-client.d.ts",
47+
"types": "dist/modern/dexie-cloud-addon.d.ts",
4648
"engines": {
4749
"node": ">=14"
4850
},
@@ -89,11 +91,15 @@
8991
"rollup": "^4.1.4",
9092
"terser": "^5.20.0",
9193
"tslib": "*",
92-
"typescript": "^5.6.3"
94+
"typescript": "^5.6.3",
95+
"y-dexie": "workspace:>=4.2.0-alpha.1 <5.0.0"
9396
},
9497
"dependencies": {
9598
"dexie-cloud-common": "workspace:^",
96-
"rxjs": "^7.x"
99+
"y-dexie": "workspace:^",
100+
"rxjs": "^7.x",
101+
"yjs": "^13.6.27",
102+
"y-protocols": "^1.0.6"
97103
},
98104
"peerDependencies": {
99105
"dexie": "workspace:^"

addons/dexie-cloud/src/WSObservable.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ import type { YClientMessage, YServerMessage } from 'dexie-cloud-common';
77
import { DexieCloudDB } from './db/DexieCloudDB';
88
import { createYClientUpdateObservable } from './yjs/createYClientUpdateObservable';
99
import { applyYServerMessages } from './yjs/applyYMessages';
10-
import { DexieYProvider, Table, YSyncState } from 'dexie';
11-
import { getAwarenessLibrary, getDocAwareness } from './yjs/awareness';
10+
import { Table } from 'dexie';
11+
import { getDocAwareness } from './yjs/awareness';
12+
import * as awap from 'y-protocols/awareness';
1213
import { encodeYMessage, decodeYMessage } from 'dexie-cloud-common';
1314
import { UserLogin } from './dexie-cloud-client';
1415
import { isEagerSyncDisabled } from './isEagerSyncDisabled';
1516
import { getOpenDocSignal } from './yjs/reopenDocSignal';
1617
import { getUpdatesTable } from './yjs/getUpdatesTable';
1718
import { DEXIE_CLOUD_SYNCER_ID } from './sync/DEXIE_CLOUD_SYNCER_ID';
19+
import { DexieYProvider, YSyncState } from 'y-dexie';
1820

1921
const SERVER_PING_TIMEOUT = 20000;
2022
const CLIENT_PING_INTERVAL = 30000;
@@ -324,7 +326,6 @@ export class WSConnection extends Subscription {
324326
if (doc) {
325327
const awareness = getDocAwareness(doc);
326328
if (awareness) {
327-
const awap = getAwarenessLibrary(this.db);
328329
awap.applyAwarenessUpdate(
329330
awareness,
330331
msg.u,

addons/dexie-cloud/src/define-ydoc-trigger.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import Dexie, {
2-
DexieYProvider,
32
RangeSet,
4-
type YjsLib,
5-
type YUpdateRow,
63
type DBCore,
74
type Middleware,
85
type Table,
9-
type YjsDoc,
106
} from 'dexie';
7+
import { DexieYProvider, YUpdateRow } from 'y-dexie';
8+
import type { Doc as YjsDoc } from 'yjs';
119

1210
const ydocTriggers: {
1311
[ydocTable: string]: {

addons/dexie-cloud/src/dexie-cloud-client.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import { logout, _logout } from './authentication/logout';
4949
import { loadAccessToken } from './authentication/authenticate';
5050
import { isEagerSyncDisabled } from './isEagerSyncDisabled';
5151
import { createYHandler } from "./yjs/createYHandler";
52+
import { DexieYProvider } from 'y-dexie';
5253
export { DexieCloudTable } from './DexieCloudTable';
5354
export * from './getTiedRealmId';
5455
export {
@@ -393,9 +394,9 @@ export function dexieCloud(dexie: Dexie) {
393394
]));
394395

395396
const yHandler = createYHandler(db);
396-
db.dx.on('y', yHandler);
397+
DexieYProvider.on.new.subscribe(yHandler);
397398
db.dx.once('close', () => {
398-
db.dx.on.y?.unsubscribe(yHandler);
399+
DexieYProvider.on.new.unsubscribe(yHandler);
399400
});
400401
}
401402

@@ -504,6 +505,4 @@ dexieCloud.version = __VERSION__;
504505

505506
Dexie.Cloud = dexieCloud;
506507

507-
//Dexie.addons.push(dexieCloud);
508-
509508
export default dexieCloud;

addons/dexie-cloud/src/yjs/Y.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { YSyncState } from "dexie";
2-
1+
import type { YSyncState } from 'y-dexie';
32
export interface YDexieCloudSyncState extends YSyncState {
43
//serverRev: string;
54
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
import { EntityTable, YUpdateRow } from "dexie";
1+
import { EntityTable } from "dexie";
2+
import type { YUpdateRow } from "y-dexie";
23

3-
export type YTable = EntityTable<YUpdateRow, "i">;
4+
export type YTable = EntityTable<YUpdateRow, "i">;

addons/dexie-cloud/src/yjs/applyYMessages.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { cmp, DexieYProvider, InsertType, YSyncState, YUpdateRow } from 'dexie';
1+
import { cmp, InsertType } from 'dexie';
22
import { DexieCloudDB } from '../db/DexieCloudDB';
33
import { YServerMessage } from 'dexie-cloud-common';
44
import { DEXIE_CLOUD_SYNCER_ID } from '../sync/DEXIE_CLOUD_SYNCER_ID';
55
import { getUpdatesTable } from './getUpdatesTable';
6+
import { DexieYProvider, YSyncState, YUpdateRow } from 'y-dexie';
67

78
export async function applyYServerMessages(
89
yMessages: YServerMessage[],
@@ -91,7 +92,7 @@ export async function applyYServerMessages(
9192
m.prop
9293
);
9394
if (doc && !doc.isSynced) {
94-
doc.emit('sync', [true]);
95+
doc.emit('sync', [true, doc]);
9596
}
9697
break;
9798
}
Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
import Dexie from "dexie";
2-
import { type DexieCloudDB } from "../db/DexieCloudDB";
1+
import type { Awareness } from 'y-protocols/awareness';
32

4-
export function getAwarenessLibrary(db: DexieCloudDB): typeof import ('y-protocols/awareness') {
5-
if (!db.cloud.options?.awarenessProtocol) {
6-
throw new Dexie.MissingAPIError('awarenessProtocol was not provided to db.cloud.configure(). Please import * as awarenessProtocol from "y-protocols/awareness".');
7-
}
8-
return db.cloud.options?.awarenessProtocol;
9-
}
10-
11-
export const awarenessWeakMap = new WeakMap<any, import('y-protocols/awareness').Awareness>();
3+
export const awarenessWeakMap = new WeakMap<any, Awareness>();
124

135
export const getDocAwareness = (doc: any) => awarenessWeakMap.get(doc);
14-
15-

0 commit comments

Comments
 (0)