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
@@ -5186,16 +5186,19 @@
5186
5186
  function _syncIfPossible() {
5187
5187
  return __awaiter$1(this, void 0, void 0, function* () {
5188
5188
  try {
5189
- if (db.cloud.usingServiceWorker) {
5190
- if (IS_SERVICE_WORKER) {
5191
- yield sync(db, cloudOptions, cloudSchema, options);
5192
- }
5189
+ if (db.cloud.isServiceWorkerDB) {
5190
+ // We are the dedicated sync SW:
5191
+ yield sync(db, cloudOptions, cloudSchema, options);
5193
5192
  }
5194
- else {
5193
+ else if (!db.cloud.usingServiceWorker) {
5195
5194
  // We use a flow that is better suited for the case when multiple workers want to
5196
5195
  // do the same thing.
5197
5196
  yield performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', () => sync(db, cloudOptions, cloudSchema, options));
5198
5197
  }
5198
+ else {
5199
+ assert(false);
5200
+ throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
5201
+ }
5199
5202
  ongoingSyncs.delete(db);
5200
5203
  console.debug('Done sync');
5201
5204
  }
@@ -5829,7 +5832,7 @@
5829
5832
  currentUserEmitter.next(UNAUTHORIZED_USER);
5830
5833
  });
5831
5834
  dexie.cloud = {
5832
- version: '4.0.0-beta.18',
5835
+ version: '4.0.0-beta.19',
5833
5836
  options: Object.assign({}, DEFAULT_OPTIONS),
5834
5837
  schema: null,
5835
5838
  serverState: null,
@@ -5921,15 +5924,17 @@
5921
5924
  dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
5922
5925
  dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
5923
5926
  function onDbReady(dexie) {
5924
- var _a, _b, _c, _d, _e, _f;
5927
+ var _a, _b, _c, _d, _e, _f, _g;
5925
5928
  return __awaiter$1(this, void 0, void 0, function* () {
5926
5929
  closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
5927
5930
  const db = DexieCloudDB(dexie);
5928
5931
  // Setup default GUI:
5929
- if (!IS_SERVICE_WORKER) {
5932
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
5930
5933
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
5931
5934
  subscriptions.push(setupDefaultGUI(dexie));
5932
5935
  }
5936
+ }
5937
+ if (!db.cloud.isServiceWorkerDB) {
5933
5938
  subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
5934
5939
  }
5935
5940
  //verifyConfig(db.cloud.options); Not needed (yet at least!)
@@ -5941,7 +5946,7 @@
5941
5946
  ? yield navigator.serviceWorker.getRegistrations()
5942
5947
  : [];
5943
5948
  const initiallySynced = yield db.transaction('rw', db.$syncState, () => __awaiter$1(this, void 0, void 0, function* () {
5944
- var _g, _h;
5949
+ var _h, _j;
5945
5950
  const { options, schema } = db.cloud;
5946
5951
  const [persistedOptions, persistedSchema, persistedSyncState] = yield Promise.all([
5947
5952
  db.getOptions(),
@@ -5960,7 +5965,7 @@
5960
5965
  throw new Error(`Internal error`); // options cannot be null if configuredProgramatically is set.
5961
5966
  yield db.$syncState.put(options, 'options');
5962
5967
  }
5963
- if (((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.tryUseServiceWorker) &&
5968
+ if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
5964
5969
  'serviceWorker' in navigator &&
5965
5970
  swRegistrations.length > 0 &&
5966
5971
  !DISABLE_SERVICEWORKER_STRATEGY) {
@@ -5974,7 +5979,8 @@
5974
5979
  // Not configured for using service worker or no service worker
5975
5980
  // registration exists. Don't rely on service worker to do any job.
5976
5981
  // Use LocalSyncWorker instead.
5977
- if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) && !IS_SERVICE_WORKER) {
5982
+ if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
5983
+ !db.cloud.isServiceWorkerDB) {
5978
5984
  console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
5979
5985
  ? 'No SW registrations found.'
5980
5986
  : 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
@@ -6022,7 +6028,7 @@
6022
6028
  }
6023
6029
  // Manage CurrentUser observable:
6024
6030
  throwIfClosed();
6025
- if (!IS_SERVICE_WORKER) {
6031
+ if (!db.cloud.isServiceWorkerDB) {
6026
6032
  subscriptions.push(Dexie.liveQuery(() => db.getCurrentUser()).subscribe(currentUserEmitter));
6027
6033
  // Manage PersistendSyncState observable:
6028
6034
  subscriptions.push(Dexie.liveQuery(() => db.getPersistedSyncState()).subscribe(db.cloud.persistedSyncState));
@@ -6049,7 +6055,7 @@
6049
6055
  }
6050
6056
  else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
6051
6057
  db.cloud.schema &&
6052
- !IS_SERVICE_WORKER) {
6058
+ !db.cloud.isServiceWorkerDB) {
6053
6059
  // There's no SW. Start SyncWorker instead.
6054
6060
  localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
6055
6061
  localSyncWorker.start();
@@ -6057,7 +6063,7 @@
6057
6063
  }
6058
6064
  // Listen to online event and do sync.
6059
6065
  throwIfClosed();
6060
- if (!IS_SERVICE_WORKER) {
6066
+ if (!db.cloud.isServiceWorkerDB) {
6061
6067
  subscriptions.push(rxjs.fromEvent(self, 'online').subscribe(() => {
6062
6068
  console.debug('online!');
6063
6069
  db.syncStateChangedEvent.next({
@@ -6071,16 +6077,16 @@
6071
6077
  });
6072
6078
  }));
6073
6079
  }
6074
- // Connect WebSocket only if we're a browser window
6075
- if (typeof window !== 'undefined' &&
6076
- !IS_SERVICE_WORKER &&
6077
- ((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl)) {
6080
+ // Connect WebSocket unless we
6081
+ if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
6082
+ !((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
6083
+ !IS_SERVICE_WORKER) {
6078
6084
  subscriptions.push(connectWebSocket(db));
6079
6085
  }
6080
6086
  });
6081
6087
  }
6082
6088
  }
6083
- dexieCloud.version = '4.0.0-beta.18';
6089
+ dexieCloud.version = '4.0.0-beta.19';
6084
6090
  Dexie__default["default"].Cloud = dexieCloud;
6085
6091
 
6086
6092
  // In case the SW lives for a while, let it reuse already opened connections:
@@ -6117,12 +6123,15 @@
6117
6123
  console.debug('Dexie Cloud SW: Creating new Dexie instance for', dbName);
6118
6124
  const dexie = new Dexie__default["default"](dbName, { addons: [dexieCloud] });
6119
6125
  db = DexieCloudDB(dexie);
6126
+ db.cloud.isServiceWorkerDB = true;
6120
6127
  dexie.on('versionchange', stopManagingDB);
6121
6128
  yield db.dx.open(); // Makes sure db.cloud.options and db.cloud.schema are read from db,
6122
- if (!managedDBs.get(dbName)) {
6129
+ if (managedDBs.get(dbName)) {
6123
6130
  // Avoid race conditions.
6124
- managedDBs.set(dbName, db);
6131
+ db.close();
6132
+ return yield _syncDB(dbName, purpose);
6125
6133
  }
6134
+ managedDBs.set(dbName, db);
6126
6135
  }
6127
6136
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl)) {
6128
6137
  console.error(`Dexie Cloud: No databaseUrl configured`);