dexie 4.4.0 → 4.4.1

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/README.md CHANGED
@@ -12,7 +12,7 @@ But also:
12
12
 
13
13
  * Dexie.js is widely used by 100,000 of web sites, apps and other projects and supports all browsers, Electron for Desktop apps, Capacitor for iOS / Android apps and of course pure PWAs.
14
14
  * Dexie.js works around bugs in the IndexedDB implementations, giving a more stable user experience.
15
- * It's an easy step to [make it sync](https://dexie.org/#sync).
15
+ * Need sync? [Dexie Cloud](https://dexie.org/cloud/) adds real-time sync, auth, and collaboration on top of Dexie.js — no backend needed.
16
16
 
17
17
  #### Hello World (vanilla JS)
18
18
 
@@ -213,11 +213,39 @@ This is a mix of methods from [WhereClause](https://dexie.org/docs/WhereClause/W
213
213
 
214
214
  ## Dexie Cloud
215
215
 
216
- [Dexie Cloud](https://dexie.org/cloud/) is a commercial offering that can be used as an add-on to Dexie.js. It syncs a Dexie database with a server and enables developers to build apps without having to care about backend or database layer else than the frontend code with Dexie.js as the sole database layer.
216
+ [Dexie Cloud](https://dexie.org/cloud/) is the easiest way to add sync, authentication, and real-time collaboration to your Dexie app. You keep writing frontend code with Dexie.js — Dexie Cloud handles the rest.
217
217
 
218
- Source for a sample Dexie Cloud app: [Dexie Cloud To-do app](https://github.com/dexie/Dexie.js/tree/master/samples/dexie-cloud-todo-app)
218
+ **What you get:**
219
+ - 🔄 **Sync across devices** — changes propagate in real time, no polling needed
220
+ - 🔐 **Authentication** — built-in user auth, no identity provider required
221
+ - 🛡️ **Access control** — share data between users with fine-grained permissions
222
+ - 📁 **File & blob storage** — store attachments alongside your structured data
223
+ - ✈️ **Offline-first** — works fully offline, syncs when back online
219
224
 
220
- See the sample Dexie Cloud app in action: https://dexie.github.io/Dexie.js/dexie-cloud-todo-app/
225
+ **Getting started is just a few lines:**
226
+
227
+ ```bash
228
+ npm install dexie-cloud-addon
229
+ ```
230
+
231
+ ```ts
232
+ import Dexie from 'dexie';
233
+ import dexieCloud from 'dexie-cloud-addon';
234
+
235
+ const db = new Dexie('MyDatabase', { addons: [dexieCloud] });
236
+ db.version(1).stores({ items: '@id, title' });
237
+ db.cloud.configure({ databaseUrl: 'https://<your-db>.dexie.cloud' });
238
+ ```
239
+
240
+ That's it. Your existing Dexie app now syncs. Hosted cloud or self-hosted on your own infrastructure. 👋
241
+
242
+ → [Quickstart guide](https://dexie.org/cloud/docs/quickstart)
243
+
244
+ **Sample app:**
245
+
246
+ Source: [Dexie Cloud To-do app](https://github.com/dexie/Dexie.js/tree/master/samples/dexie-cloud-todo-app)
247
+
248
+ Live demo: https://dexie.github.io/Dexie.js/dexie-cloud-todo-app/
221
249
 
222
250
  ## Samples
223
251
 
package/dist/dexie.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * By David Fahlander, david.fahlander@gmail.com
6
6
  *
7
- * Version 4.4.0, Wed Mar 18 2026
7
+ * Version 4.4.1, Wed Mar 25 2026
8
8
  *
9
9
  * https://dexie.org
10
10
  *
package/dist/dexie.js CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * By David Fahlander, david.fahlander@gmail.com
6
6
  *
7
- * Version 4.4.0, Wed Mar 18 2026
7
+ * Version 4.4.1, Wed Mar 25 2026
8
8
  *
9
9
  * https://dexie.org
10
10
  *
@@ -228,12 +228,6 @@
228
228
  }
229
229
  return rv;
230
230
  }
231
- function objectIsEmpty(o) {
232
- for (var k in o)
233
- if (hasOwn(o, k))
234
- return false;
235
- return true;
236
- }
237
231
  var circularRefs = null;
238
232
  function deepClone(any) {
239
233
  circularRefs = new WeakMap();
@@ -1144,7 +1138,7 @@
1144
1138
  }
1145
1139
  }
1146
1140
 
1147
- var DEXIE_VERSION = '4.4.0';
1141
+ var DEXIE_VERSION = '4.4.1';
1148
1142
  var maxString = String.fromCharCode(65535);
1149
1143
  var minKey = -Infinity;
1150
1144
  var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.";
@@ -5862,22 +5856,32 @@
5862
5856
  signal: abortController.signal,
5863
5857
  requery: doQuery,
5864
5858
  querier: querier,
5865
- trans: null
5859
+ trans: null,
5866
5860
  };
5867
5861
  var ret = execute(ctx);
5862
+ if (!startedListening) {
5863
+ globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);
5864
+ startedListening = true;
5865
+ }
5868
5866
  Promise.resolve(ret).then(function (result) {
5869
5867
  hasValue = true;
5870
5868
  currentValue = result;
5871
5869
  if (closed || ctx.signal.aborted) {
5872
5870
  return;
5873
5871
  }
5874
- accumMuts = {};
5875
- currentObs = subscr;
5876
- if (!objectIsEmpty(currentObs) && !startedListening) {
5877
- globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);
5878
- startedListening = true;
5872
+ if (shouldNotify()) {
5873
+ doQuery();
5874
+ }
5875
+ else {
5876
+ currentObs = subscr;
5877
+ if (shouldNotify()) {
5878
+ doQuery();
5879
+ }
5880
+ else {
5881
+ accumMuts = {};
5882
+ execInGlobalContext(function () { return !closed && observer.next && observer.next(result); });
5883
+ }
5879
5884
  }
5880
- execInGlobalContext(function () { return !closed && observer.next && observer.next(result); });
5881
5885
  }, function (err) {
5882
5886
  hasValue = false;
5883
5887
  if (!['DatabaseClosedError', 'AbortError'].includes(err === null || err === void 0 ? void 0 : err.name)) {