dexie-cloud-addon 4.0.0-beta.18 → 4.0.0-beta.19

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.
Files changed (41) hide show
  1. package/dist/modern/dexie-cloud-addon.js +26 -20
  2. package/dist/modern/dexie-cloud-addon.js.map +1 -1
  3. package/dist/modern/dexie-cloud-addon.min.js +1 -1
  4. package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
  5. package/dist/modern/service-worker.js +30 -21
  6. package/dist/modern/service-worker.js.map +1 -1
  7. package/dist/modern/service-worker.min.js +1 -1
  8. package/dist/modern/service-worker.min.js.map +1 -1
  9. package/dist/module-es5/dexie-cloud-addon.js +571 -564
  10. package/dist/module-es5/dexie-cloud-addon.js.map +1 -1
  11. package/dist/module-es5/dexie-cloud-addon.min.js +1 -1
  12. package/dist/module-es5/dexie-cloud-addon.min.js.map +1 -1
  13. package/dist/types/DexieCloudAPI.d.ts +1 -0
  14. package/dist/types/DexieCloudEntity.d.ts +8 -0
  15. package/dist/types/DexieCloudOptions.d.ts +1 -0
  16. package/dist/types/WebSocketStatus.d.ts +1 -0
  17. package/dist/types/createMyMembersObservable.d.ts +14 -0
  18. package/dist/types/currentUserObservable.d.ts +3 -0
  19. package/dist/types/helpers/BroadcastedLocalEvent.d.ts +8 -0
  20. package/dist/types/helpers/visibleState.d.ts +1 -0
  21. package/dist/types/permissionsLookup.d.ts +9 -0
  22. package/dist/types/permissionsLookupObservable.d.ts +14 -0
  23. package/dist/types/sync/globalizePrivateIds.d.ts +4 -0
  24. package/dist/types/sync/syncServerToClientOnly.d.ts +3 -0
  25. package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
  26. package/dist/types/types/ConnectionStatus.d.ts +0 -0
  27. package/dist/types/types/LoginState.d.ts +41 -0
  28. package/dist/types/types/SyncConnectionStatus.d.ts +1 -0
  29. package/dist/types/types/SyncFlowStatus.d.ts +6 -0
  30. package/dist/types/types/SyncStatus.d.ts +6 -0
  31. package/dist/umd/dexie-cloud-addon.js +571 -564
  32. package/dist/umd/dexie-cloud-addon.js.map +1 -1
  33. package/dist/umd/dexie-cloud-addon.min.js +1 -1
  34. package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
  35. package/dist/umd/service-worker.js +30 -21
  36. package/dist/umd/service-worker.js.map +1 -1
  37. package/dist/umd/service-worker.min.js +1 -1
  38. package/dist/umd/service-worker.min.js.map +1 -1
  39. package/dist/umd-modern/dexie-cloud-addon.js +23 -17
  40. package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
  41. package/package.json +1 -1
@@ -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.usingServiceWorker) {
5183
- if (IS_SERVICE_WORKER) {
5184
- yield sync(db, cloudOptions, cloudSchema, options);
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
  }
@@ -5822,7 +5825,7 @@ function dexieCloud(dexie) {
5822
5825
  currentUserEmitter.next(UNAUTHORIZED_USER);
5823
5826
  });
5824
5827
  dexie.cloud = {
5825
- version: '4.0.0-beta.18',
5828
+ version: '4.0.0-beta.19',
5826
5829
  options: Object.assign({}, DEFAULT_OPTIONS),
5827
5830
  schema: null,
5828
5831
  serverState: null,
@@ -5914,15 +5917,17 @@ function dexieCloud(dexie) {
5914
5917
  dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
5915
5918
  dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
5916
5919
  function onDbReady(dexie) {
5917
- var _a, _b, _c, _d, _e, _f;
5920
+ var _a, _b, _c, _d, _e, _f, _g;
5918
5921
  return __awaiter$1(this, void 0, void 0, function* () {
5919
5922
  closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
5920
5923
  const db = DexieCloudDB(dexie);
5921
5924
  // Setup default GUI:
5922
- if (!IS_SERVICE_WORKER) {
5925
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
5923
5926
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
5924
5927
  subscriptions.push(setupDefaultGUI(dexie));
5925
5928
  }
5929
+ }
5930
+ if (!db.cloud.isServiceWorkerDB) {
5926
5931
  subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
5927
5932
  }
5928
5933
  //verifyConfig(db.cloud.options); Not needed (yet at least!)
@@ -5934,7 +5939,7 @@ function dexieCloud(dexie) {
5934
5939
  ? yield navigator.serviceWorker.getRegistrations()
5935
5940
  : [];
5936
5941
  const initiallySynced = yield db.transaction('rw', db.$syncState, () => __awaiter$1(this, void 0, void 0, function* () {
5937
- var _g, _h;
5942
+ var _h, _j;
5938
5943
  const { options, schema } = db.cloud;
5939
5944
  const [persistedOptions, persistedSchema, persistedSyncState] = yield Promise.all([
5940
5945
  db.getOptions(),
@@ -5953,7 +5958,7 @@ function dexieCloud(dexie) {
5953
5958
  throw new Error(`Internal error`); // options cannot be null if configuredProgramatically is set.
5954
5959
  yield db.$syncState.put(options, 'options');
5955
5960
  }
5956
- if (((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.tryUseServiceWorker) &&
5961
+ if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
5957
5962
  'serviceWorker' in navigator &&
5958
5963
  swRegistrations.length > 0 &&
5959
5964
  !DISABLE_SERVICEWORKER_STRATEGY) {
@@ -5967,7 +5972,8 @@ function dexieCloud(dexie) {
5967
5972
  // Not configured for using service worker or no service worker
5968
5973
  // registration exists. Don't rely on service worker to do any job.
5969
5974
  // Use LocalSyncWorker instead.
5970
- if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) && !IS_SERVICE_WORKER) {
5975
+ if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
5976
+ !db.cloud.isServiceWorkerDB) {
5971
5977
  console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
5972
5978
  ? 'No SW registrations found.'
5973
5979
  : 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
@@ -6015,7 +6021,7 @@ function dexieCloud(dexie) {
6015
6021
  }
6016
6022
  // Manage CurrentUser observable:
6017
6023
  throwIfClosed();
6018
- if (!IS_SERVICE_WORKER) {
6024
+ if (!db.cloud.isServiceWorkerDB) {
6019
6025
  subscriptions.push(liveQuery(() => db.getCurrentUser()).subscribe(currentUserEmitter));
6020
6026
  // Manage PersistendSyncState observable:
6021
6027
  subscriptions.push(liveQuery(() => db.getPersistedSyncState()).subscribe(db.cloud.persistedSyncState));
@@ -6042,7 +6048,7 @@ function dexieCloud(dexie) {
6042
6048
  }
6043
6049
  else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
6044
6050
  db.cloud.schema &&
6045
- !IS_SERVICE_WORKER) {
6051
+ !db.cloud.isServiceWorkerDB) {
6046
6052
  // There's no SW. Start SyncWorker instead.
6047
6053
  localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
6048
6054
  localSyncWorker.start();
@@ -6050,7 +6056,7 @@ function dexieCloud(dexie) {
6050
6056
  }
6051
6057
  // Listen to online event and do sync.
6052
6058
  throwIfClosed();
6053
- if (!IS_SERVICE_WORKER) {
6059
+ if (!db.cloud.isServiceWorkerDB) {
6054
6060
  subscriptions.push(fromEvent(self, 'online').subscribe(() => {
6055
6061
  console.debug('online!');
6056
6062
  db.syncStateChangedEvent.next({
@@ -6064,16 +6070,16 @@ function dexieCloud(dexie) {
6064
6070
  });
6065
6071
  }));
6066
6072
  }
6067
- // Connect WebSocket only if we're a browser window
6068
- if (typeof window !== 'undefined' &&
6069
- !IS_SERVICE_WORKER &&
6070
- ((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl)) {
6073
+ // Connect WebSocket unless we
6074
+ if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
6075
+ !((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
6076
+ !IS_SERVICE_WORKER) {
6071
6077
  subscriptions.push(connectWebSocket(db));
6072
6078
  }
6073
6079
  });
6074
6080
  }
6075
6081
  }
6076
- dexieCloud.version = '4.0.0-beta.18';
6082
+ dexieCloud.version = '4.0.0-beta.19';
6077
6083
  Dexie.Cloud = dexieCloud;
6078
6084
 
6079
6085
  // In case the SW lives for a while, let it reuse already opened connections:
@@ -6110,12 +6116,15 @@ function syncDB(dbName, purpose) {
6110
6116
  console.debug('Dexie Cloud SW: Creating new Dexie instance for', dbName);
6111
6117
  const dexie = new Dexie(dbName, { addons: [dexieCloud] });
6112
6118
  db = DexieCloudDB(dexie);
6119
+ db.cloud.isServiceWorkerDB = true;
6113
6120
  dexie.on('versionchange', stopManagingDB);
6114
6121
  yield db.dx.open(); // Makes sure db.cloud.options and db.cloud.schema are read from db,
6115
- if (!managedDBs.get(dbName)) {
6122
+ if (managedDBs.get(dbName)) {
6116
6123
  // Avoid race conditions.
6117
- managedDBs.set(dbName, db);
6124
+ db.close();
6125
+ return yield _syncDB(dbName, purpose);
6118
6126
  }
6127
+ managedDBs.set(dbName, db);
6119
6128
  }
6120
6129
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl)) {
6121
6130
  console.error(`Dexie Cloud: No databaseUrl configured`);