js-bao 0.7.0-alpha.1 → 0.7.0-alpha.10

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
@@ -793,9 +793,7 @@ const results = await Product.query({
793
793
  - **Text**: `$startsWith`, `$endsWith`, `$containsText` (case-insensitive by default)
794
794
  - **Existence**: `$exists`
795
795
 
796
- **Absent fields.** `$ne`, `$nin` and `{ field: null }` **match records where the field is absent** — a record that never wrote the field is not equal to any value, as in MongoDB. Equality with a value, the comparison operators and `$in` **match only records that carry the field**. Presence is `$exists`, whose handling of an explicitly stored null is path-dependent: the server counts a **stored JSON null** as present, while the browser and Swift replicas keep each field in a typed column where a stored null is indistinguishable from absence.
797
-
798
- **Breaking change (#3166).** `$ne`/`$nin` used to exclude records lacking the field. A negative-operator filter used to *exclude* records by a possibly-absent field — including hook-injected access filters and write conditions — now matches those records too. To keep the old result set, exclude the missing case with a `null` entry in `$nin` — `{ deleted: { $nin: [null, true] } }`, which matches only records carrying a non-null value other than the excluded one, on every path. `$exists: true` alongside the negative operator is not equivalent: the server counts an explicitly stored JSON null as present, so `{ deleted: { $ne: true, $exists: true } }` still matches a null-valued record the old filter excluded.
796
+ **Absent fields (#3166).** `$ne`, `$nin` and `{ field: null }` match records that never wrote the field; equality, the comparison operators and `$in` match only records that carry it. To keep excluding the missing case, put `null` in the `$nin` list: `{ deleted: { $nin: [null, true] } }`. Full semantics, including `$exists` and how a stored null differs by path: [Documents guide, §Absent fields](../../primitive-docs/guides/latest/AGENT_GUIDE_TO_PRIMITIVE_DOCUMENTS.ts.md#absent-fields).
799
797
 
800
798
  ### Sorting and Pagination
801
799
 
@@ -1555,3 +1553,19 @@ See the `examples/` directory for complete working examples:
1555
1553
 
1556
1554
  - `examples/simple-node-test.mjs` - Basic Node.js usage without models
1557
1555
  - `examples/node-example.mjs` - Complete Node.js example with models
1556
+
1557
+ ## Release notes
1558
+
1559
+ Changes to the on-disk behaviour of `js-bao/cloudflare/do` (`DurableObjectEngine`)
1560
+ that a store's owner can observe. Newest first.
1561
+
1562
+ - **`_indexes.created_at` reports the first registration** (#3875). Re-registering
1563
+ a field index whose `field_type` and `is_unique` are unchanged no longer
1564
+ rewrites its `_indexes` row: it writes no row, and `created_at` keeps the time
1565
+ of the first registration. A registration that changes either column still
1566
+ rewrites the row and refreshes `created_at`, as before.
1567
+ - **`replaceWithStringSets` is internal** (#3875). The engine gained
1568
+ `replaceWithStringSets` / `replaceWithStringSetsRaw`, a guarded replace used
1569
+ only by the platform's plain-document projection rebuild. They are marked
1570
+ `@internal` and are not a public API; saves keep the merging
1571
+ `insertWithStringSets`.