dexie-cloud-addon 4.0.0-beta.18 → 4.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modern/dexie-cloud-addon.js +41 -25
- package/dist/modern/dexie-cloud-addon.js.map +1 -1
- package/dist/modern/dexie-cloud-addon.min.js +1 -1
- package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
- package/dist/modern/service-worker.js +45 -26
- package/dist/modern/service-worker.js.map +1 -1
- package/dist/modern/service-worker.min.js +1 -1
- package/dist/modern/service-worker.min.js.map +1 -1
- package/dist/module-es5/dexie-cloud-addon.js +598 -568
- package/dist/module-es5/dexie-cloud-addon.js.map +1 -1
- package/dist/module-es5/dexie-cloud-addon.min.js +1 -1
- package/dist/module-es5/dexie-cloud-addon.min.js.map +1 -1
- package/dist/types/DexieCloudAPI.d.ts +17 -3
- package/dist/types/DexieCloudEntity.d.ts +8 -0
- package/dist/types/DexieCloudOptions.d.ts +2 -1
- package/dist/types/Invite.d.ts +2 -0
- package/dist/types/WebSocketStatus.d.ts +1 -0
- package/dist/types/createMyMembersObservable.d.ts +14 -0
- package/dist/types/currentUserObservable.d.ts +3 -0
- package/dist/types/db/entities/UserLogin.d.ts +0 -2
- package/dist/types/default-ui/Dialog.d.ts +2 -1
- package/dist/types/getInvitesObservable.d.ts +1 -23
- package/dist/types/helpers/BroadcastedLocalEvent.d.ts +8 -0
- package/dist/types/helpers/visibleState.d.ts +1 -0
- package/dist/types/permissionsLookup.d.ts +9 -0
- package/dist/types/permissionsLookupObservable.d.ts +14 -0
- package/dist/types/sync/globalizePrivateIds.d.ts +4 -0
- package/dist/types/sync/syncServerToClientOnly.d.ts +3 -0
- package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
- package/dist/types/types/ConnectionStatus.d.ts +0 -0
- package/dist/types/types/LoginState.d.ts +41 -0
- package/dist/types/types/SyncConnectionStatus.d.ts +1 -0
- package/dist/types/types/SyncFlowStatus.d.ts +6 -0
- package/dist/types/types/SyncStatus.d.ts +6 -0
- package/dist/umd/dexie-cloud-addon.js +598 -568
- package/dist/umd/dexie-cloud-addon.js.map +1 -1
- package/dist/umd/dexie-cloud-addon.min.js +1 -1
- package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
- package/dist/umd/service-worker.js +45 -26
- package/dist/umd/service-worker.js.map +1 -1
- package/dist/umd/service-worker.min.js +1 -1
- package/dist/umd/service-worker.min.js.map +1 -1
- package/dist/umd-modern/dexie-cloud-addon.js +38 -22
- package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
- package/package.json +3 -3
|
@@ -5179,16 +5179,19 @@ function syncIfPossible(db, cloudOptions, cloudSchema, options) {
|
|
|
5179
5179
|
function _syncIfPossible() {
|
|
5180
5180
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
5181
5181
|
try {
|
|
5182
|
-
if (db.cloud.
|
|
5183
|
-
|
|
5184
|
-
|
|
5185
|
-
}
|
|
5182
|
+
if (db.cloud.isServiceWorkerDB) {
|
|
5183
|
+
// We are the dedicated sync SW:
|
|
5184
|
+
yield sync(db, cloudOptions, cloudSchema, options);
|
|
5186
5185
|
}
|
|
5187
|
-
else {
|
|
5186
|
+
else if (!db.cloud.usingServiceWorker) {
|
|
5188
5187
|
// We use a flow that is better suited for the case when multiple workers want to
|
|
5189
5188
|
// do the same thing.
|
|
5190
5189
|
yield performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', () => sync(db, cloudOptions, cloudSchema, options));
|
|
5191
5190
|
}
|
|
5191
|
+
else {
|
|
5192
|
+
assert(false);
|
|
5193
|
+
throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
|
|
5194
|
+
}
|
|
5192
5195
|
ongoingSyncs.delete(db);
|
|
5193
5196
|
console.debug('Done sync');
|
|
5194
5197
|
}
|
|
@@ -5350,8 +5353,8 @@ const Styles = {
|
|
|
5350
5353
|
}
|
|
5351
5354
|
};
|
|
5352
5355
|
|
|
5353
|
-
function Dialog({ children }) {
|
|
5354
|
-
return (a$1("div",
|
|
5356
|
+
function Dialog({ children, className }) {
|
|
5357
|
+
return (a$1("div", { className: className },
|
|
5355
5358
|
a$1("div", { style: Styles.Darken }),
|
|
5356
5359
|
a$1("div", { style: Styles.DialogOuter },
|
|
5357
5360
|
a$1("div", { style: Styles.DialogInner }, children))));
|
|
@@ -5367,7 +5370,7 @@ function LoginDialog({ title, alerts, fields, onCancel, onSubmit, }) {
|
|
|
5367
5370
|
const [params, setParams] = l({});
|
|
5368
5371
|
const firstFieldRef = s();
|
|
5369
5372
|
h(() => { var _a; return (_a = firstFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, []);
|
|
5370
|
-
return (a$1(Dialog,
|
|
5373
|
+
return (a$1(Dialog, { className: "dxc-login-dlg" },
|
|
5371
5374
|
a$1(y, null,
|
|
5372
5375
|
a$1("h3", { style: Styles.WindowHeader }, title),
|
|
5373
5376
|
alerts.map((alert) => (a$1("p", { style: Styles.Alert[alert.type] }, resolveText(alert)))),
|
|
@@ -5781,7 +5784,18 @@ const getInvitesObservable = associate((db) => {
|
|
|
5781
5784
|
const reducer = (result, m) => (Object.assign(Object.assign({}, result), { [m.id]: Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }) }));
|
|
5782
5785
|
const emailMembersById = membersByEmail.reduce(reducer, {});
|
|
5783
5786
|
const membersById = accessControl.selfMembers.reduce(reducer, emailMembersById);
|
|
5784
|
-
return Object.values(membersById)
|
|
5787
|
+
return Object.values(membersById)
|
|
5788
|
+
.filter((invite) => !invite.accepted && !invite.rejected)
|
|
5789
|
+
.map((invite) => (Object.assign(Object.assign({}, invite), { accept() {
|
|
5790
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
5791
|
+
yield db.members.update(invite.id, { accepted: new Date() });
|
|
5792
|
+
});
|
|
5793
|
+
},
|
|
5794
|
+
reject() {
|
|
5795
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
5796
|
+
yield db.members.update(invite.id, { rejected: new Date() });
|
|
5797
|
+
});
|
|
5798
|
+
} })));
|
|
5785
5799
|
})), []);
|
|
5786
5800
|
});
|
|
5787
5801
|
|
|
@@ -5822,10 +5836,9 @@ function dexieCloud(dexie) {
|
|
|
5822
5836
|
currentUserEmitter.next(UNAUTHORIZED_USER);
|
|
5823
5837
|
});
|
|
5824
5838
|
dexie.cloud = {
|
|
5825
|
-
version: '4.0.0-beta.
|
|
5839
|
+
version: '4.0.0-beta.21',
|
|
5826
5840
|
options: Object.assign({}, DEFAULT_OPTIONS),
|
|
5827
5841
|
schema: null,
|
|
5828
|
-
serverState: null,
|
|
5829
5842
|
get currentUserId() {
|
|
5830
5843
|
return currentUserEmitter.value.userId || UNAUTHORIZED_USER.userId;
|
|
5831
5844
|
},
|
|
@@ -5914,15 +5927,17 @@ function dexieCloud(dexie) {
|
|
|
5914
5927
|
dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
|
|
5915
5928
|
dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
|
|
5916
5929
|
function onDbReady(dexie) {
|
|
5917
|
-
var _a, _b, _c, _d, _e, _f;
|
|
5930
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
5918
5931
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
5919
5932
|
closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
|
|
5920
5933
|
const db = DexieCloudDB(dexie);
|
|
5921
5934
|
// Setup default GUI:
|
|
5922
|
-
if (
|
|
5935
|
+
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
5923
5936
|
if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
|
|
5924
5937
|
subscriptions.push(setupDefaultGUI(dexie));
|
|
5925
5938
|
}
|
|
5939
|
+
}
|
|
5940
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
5926
5941
|
subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
|
|
5927
5942
|
}
|
|
5928
5943
|
//verifyConfig(db.cloud.options); Not needed (yet at least!)
|
|
@@ -5934,7 +5949,7 @@ function dexieCloud(dexie) {
|
|
|
5934
5949
|
? yield navigator.serviceWorker.getRegistrations()
|
|
5935
5950
|
: [];
|
|
5936
5951
|
const initiallySynced = yield db.transaction('rw', db.$syncState, () => __awaiter$1(this, void 0, void 0, function* () {
|
|
5937
|
-
var
|
|
5952
|
+
var _h, _j;
|
|
5938
5953
|
const { options, schema } = db.cloud;
|
|
5939
5954
|
const [persistedOptions, persistedSchema, persistedSyncState] = yield Promise.all([
|
|
5940
5955
|
db.getOptions(),
|
|
@@ -5953,7 +5968,7 @@ function dexieCloud(dexie) {
|
|
|
5953
5968
|
throw new Error(`Internal error`); // options cannot be null if configuredProgramatically is set.
|
|
5954
5969
|
yield db.$syncState.put(options, 'options');
|
|
5955
5970
|
}
|
|
5956
|
-
if (((
|
|
5971
|
+
if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
|
|
5957
5972
|
'serviceWorker' in navigator &&
|
|
5958
5973
|
swRegistrations.length > 0 &&
|
|
5959
5974
|
!DISABLE_SERVICEWORKER_STRATEGY) {
|
|
@@ -5967,7 +5982,8 @@ function dexieCloud(dexie) {
|
|
|
5967
5982
|
// Not configured for using service worker or no service worker
|
|
5968
5983
|
// registration exists. Don't rely on service worker to do any job.
|
|
5969
5984
|
// Use LocalSyncWorker instead.
|
|
5970
|
-
if (((
|
|
5985
|
+
if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
|
|
5986
|
+
!db.cloud.isServiceWorkerDB) {
|
|
5971
5987
|
console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
|
|
5972
5988
|
? 'No SW registrations found.'
|
|
5973
5989
|
: 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
|
|
@@ -6015,7 +6031,7 @@ function dexieCloud(dexie) {
|
|
|
6015
6031
|
}
|
|
6016
6032
|
// Manage CurrentUser observable:
|
|
6017
6033
|
throwIfClosed();
|
|
6018
|
-
if (!
|
|
6034
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
6019
6035
|
subscriptions.push(liveQuery(() => db.getCurrentUser()).subscribe(currentUserEmitter));
|
|
6020
6036
|
// Manage PersistendSyncState observable:
|
|
6021
6037
|
subscriptions.push(liveQuery(() => db.getPersistedSyncState()).subscribe(db.cloud.persistedSyncState));
|
|
@@ -6042,7 +6058,7 @@ function dexieCloud(dexie) {
|
|
|
6042
6058
|
}
|
|
6043
6059
|
else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
|
|
6044
6060
|
db.cloud.schema &&
|
|
6045
|
-
!
|
|
6061
|
+
!db.cloud.isServiceWorkerDB) {
|
|
6046
6062
|
// There's no SW. Start SyncWorker instead.
|
|
6047
6063
|
localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
|
|
6048
6064
|
localSyncWorker.start();
|
|
@@ -6050,7 +6066,7 @@ function dexieCloud(dexie) {
|
|
|
6050
6066
|
}
|
|
6051
6067
|
// Listen to online event and do sync.
|
|
6052
6068
|
throwIfClosed();
|
|
6053
|
-
if (!
|
|
6069
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
6054
6070
|
subscriptions.push(fromEvent(self, 'online').subscribe(() => {
|
|
6055
6071
|
console.debug('online!');
|
|
6056
6072
|
db.syncStateChangedEvent.next({
|
|
@@ -6064,16 +6080,16 @@ function dexieCloud(dexie) {
|
|
|
6064
6080
|
});
|
|
6065
6081
|
}));
|
|
6066
6082
|
}
|
|
6067
|
-
// Connect WebSocket
|
|
6068
|
-
if (
|
|
6069
|
-
!
|
|
6070
|
-
|
|
6083
|
+
// Connect WebSocket unless we
|
|
6084
|
+
if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
|
|
6085
|
+
!((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
|
|
6086
|
+
!IS_SERVICE_WORKER) {
|
|
6071
6087
|
subscriptions.push(connectWebSocket(db));
|
|
6072
6088
|
}
|
|
6073
6089
|
});
|
|
6074
6090
|
}
|
|
6075
6091
|
}
|
|
6076
|
-
dexieCloud.version = '4.0.0-beta.
|
|
6092
|
+
dexieCloud.version = '4.0.0-beta.21';
|
|
6077
6093
|
Dexie.Cloud = dexieCloud;
|
|
6078
6094
|
|
|
6079
6095
|
// In case the SW lives for a while, let it reuse already opened connections:
|
|
@@ -6110,12 +6126,15 @@ function syncDB(dbName, purpose) {
|
|
|
6110
6126
|
console.debug('Dexie Cloud SW: Creating new Dexie instance for', dbName);
|
|
6111
6127
|
const dexie = new Dexie(dbName, { addons: [dexieCloud] });
|
|
6112
6128
|
db = DexieCloudDB(dexie);
|
|
6129
|
+
db.cloud.isServiceWorkerDB = true;
|
|
6113
6130
|
dexie.on('versionchange', stopManagingDB);
|
|
6114
6131
|
yield db.dx.open(); // Makes sure db.cloud.options and db.cloud.schema are read from db,
|
|
6115
|
-
if (
|
|
6132
|
+
if (managedDBs.get(dbName)) {
|
|
6116
6133
|
// Avoid race conditions.
|
|
6117
|
-
|
|
6134
|
+
db.close();
|
|
6135
|
+
return yield _syncDB(dbName, purpose);
|
|
6118
6136
|
}
|
|
6137
|
+
managedDBs.set(dbName, db);
|
|
6119
6138
|
}
|
|
6120
6139
|
if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl)) {
|
|
6121
6140
|
console.error(`Dexie Cloud: No databaseUrl configured`);
|