@lossless.org/nosqldb 10.3.0 → 10.5.0

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.
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "36dca185334f904cef212998118b6ac114d7bb5adb55eefe4a510ed595d2213c",
3
+ "binarySha256": "a2f4612af93f0ab25d3eb96a5b00757592425c4ff59077f80a9f8a11e9944c4a",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.3.0",
7
- "gitCommit": "4d06e6d9ea56329cdd3402d731c75dab19644979",
6
+ "projectVersion": "10.5.0",
7
+ "gitCommit": "90ec88ca54b51f16d21a0dfefe4b0624edd80d48",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-19T17:31:32.898Z",
10
- "tsrustVersion": "1.13.0",
9
+ "builtAt": "2026-09-22T16:54:01.963Z",
10
+ "tsrustVersion": "1.13.2",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_amd64"
13
13
  }
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "4968cf846beccaf7045176a4bb8ccc63df7fcb8e596c74a88c83d5c0efa25474",
3
+ "binarySha256": "8529bfaf78fdfce93d8c858abf4a4c8c57f7fb3cd2b2ecf3b2de818a6fbd64d7",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.3.0",
7
- "gitCommit": "4d06e6d9ea56329cdd3402d731c75dab19644979",
6
+ "projectVersion": "10.5.0",
7
+ "gitCommit": "90ec88ca54b51f16d21a0dfefe4b0624edd80d48",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-19T17:31:33.621Z",
10
- "tsrustVersion": "1.13.0",
9
+ "builtAt": "2026-09-22T16:54:02.755Z",
10
+ "tsrustVersion": "1.13.2",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_amd64_musl"
13
13
  }
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "3cb9ed2baea196408f7cb601f0e87c94460847f647791b668bd0c0ab16d9bc36",
3
+ "binarySha256": "e0acfecaca84a85b9aa9883ac66ca9c61bfe57e07c4623b6727318be70a82574",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.3.0",
7
- "gitCommit": "4d06e6d9ea56329cdd3402d731c75dab19644979",
6
+ "projectVersion": "10.5.0",
7
+ "gitCommit": "90ec88ca54b51f16d21a0dfefe4b0624edd80d48",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-19T17:31:33.262Z",
10
- "tsrustVersion": "1.13.0",
9
+ "builtAt": "2026-09-22T16:54:02.361Z",
10
+ "tsrustVersion": "1.13.2",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_arm64"
13
13
  }
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "c4217a046e3ef077b2fb4cbd55b2293065fcf0e5d19d02872d24944d7fb38d47",
3
+ "binarySha256": "70ccdb65bea25865b0b115917e46b568f92aff570a1563c1fd0b0a6d9c529844",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.3.0",
7
- "gitCommit": "4d06e6d9ea56329cdd3402d731c75dab19644979",
6
+ "projectVersion": "10.5.0",
7
+ "gitCommit": "90ec88ca54b51f16d21a0dfefe4b0624edd80d48",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-19T17:31:34.006Z",
10
- "tsrustVersion": "1.13.0",
9
+ "builtAt": "2026-09-22T16:54:03.157Z",
10
+ "tsrustVersion": "1.13.2",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_arm64_musl"
13
13
  }
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "76bbc0d282e60f4420de493d7d2ba9f8397c1369c77660a477523371285d4f1e",
3
+ "binarySha256": "5c9f76a4d3cc2e6c251a46850d1decf6a931abd1dcadf3d4a4f845d5875d2b58",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.3.0",
7
- "gitCommit": "4d06e6d9ea56329cdd3402d731c75dab19644979",
6
+ "projectVersion": "10.5.0",
7
+ "gitCommit": "90ec88ca54b51f16d21a0dfefe4b0624edd80d48",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-19T17:17:17.746Z",
10
- "tsrustVersion": "1.13.0",
9
+ "builtAt": "2026-09-22T16:40:00.585Z",
10
+ "tsrustVersion": "1.13.2",
11
11
  "binary": "rustdb",
12
12
  "target": "macos_amd64"
13
13
  }
Binary file
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "c186fb50d99d277a712483a44554f886592e4e5721afedf4fb06bc996212a778",
3
+ "binarySha256": "942950f7ecdbbbfbd361c2ffa5b55d2d90649874eeff3a3bb8e74c277eceeab6",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.3.0",
7
- "gitCommit": "4d06e6d9ea56329cdd3402d731c75dab19644979",
6
+ "projectVersion": "10.5.0",
7
+ "gitCommit": "90ec88ca54b51f16d21a0dfefe4b0624edd80d48",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-19T17:17:18.309Z",
10
- "tsrustVersion": "1.13.0",
9
+ "builtAt": "2026-09-22T16:40:01.298Z",
10
+ "tsrustVersion": "1.13.2",
11
11
  "binary": "rustdb",
12
12
  "target": "macos_arm64"
13
13
  }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/nosqldb',
6
- version: '10.3.0',
6
+ version: '10.5.0',
7
7
  description: 'A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHFIQUFxSDtDQUNuSSxDQUFBIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lossless.org/nosqldb",
3
- "version": "10.3.0",
3
+ "version": "10.5.0",
4
4
  "private": false,
5
5
  "description": "A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.",
6
6
  "exports": {
@@ -16,7 +16,7 @@
16
16
  "@design.estate/dees-element": "^2.2.4",
17
17
  "@git.zone/tsbuild": "^4.5.0",
18
18
  "@git.zone/tsbundle": "^2.13.0",
19
- "@git.zone/tsrust": "^1.13.0",
19
+ "@git.zone/tsrust": "^1.13.2",
20
20
  "@git.zone/tstest": "^6.1.1",
21
21
  "@lossless.org/client": "0.1.1",
22
22
  "@types/node": "26.5.1",
package/readme.md CHANGED
@@ -1325,6 +1325,12 @@ await collection.findOneAndReplace({ _id: id }, { name: 'Replaced' }, { returnDo
1325
1325
  { $currentDate: { lastModified: true } }
1326
1326
  ```
1327
1327
 
1328
+ Aggregation-pipeline updates are supported wherever the MongoDB driver accepts
1329
+ them (`updateOne`, `updateMany`, `findOneAndUpdate`, and upserts): the update
1330
+ may be an array of `$addFields`, `$set`, `$project`, `$unset`, `$replaceRoot`
1331
+ or `$replaceWith` stages, and any other stage is refused by name. The pipeline
1332
+ must produce exactly one document and cannot change `_id`.
1333
+
1328
1334
  ### Aggregation Pipeline
1329
1335
 
1330
1336
  ```typescript
@@ -1339,6 +1345,12 @@ const results = await collection.aggregate([
1339
1345
 
1340
1346
  **Supported stages:** `$match`, `$project`, `$group`, `$sort`, `$limit`, `$skip`, `$unwind`, `$lookup`, `$addFields`, `$count`, `$facet`, `$replaceRoot`, `$set`, `$unionWith`, `$out`, `$merge`
1341
1347
 
1348
+ **Supported expression operators:** `$eq`, `$and`, `$literal`, `$map`,
1349
+ `$objectToArray`, `$setEquals`, plus `$field` paths, `$$variable` references
1350
+ including `$$ROOT`, and documents or arrays of those. Every other operator is
1351
+ refused by name with `TypeMismatch` (code 14) before any document is read; the
1352
+ engine never treats an operator it cannot execute as a literal value.
1353
+
1342
1354
  `$lookup` supports the equality form and a bounded correlated pipeline form with
1343
1355
  `let`, an optional `$match` using `$expr`/`$and`/`$eq`, and an optional following
1344
1356
  `$limit`. Correlated string equality predicates can use a full-key or subset
@@ -1358,6 +1370,19 @@ is what lets `countDocuments(filter)` run against collections larger than it.
1358
1370
 
1359
1371
  **Group accumulators:** `$sum`, `$avg`, `$min`, `$max`, `$first`, `$last`, `$push`, `$addToSet`, `$count`
1360
1372
 
1373
+ `$group._id` accepts a literal (`null`, a number, a string), a `$field`
1374
+ reference, or a document of expressions: `{ _id: { owner: '$owner', repo:
1375
+ '$repo' } }` groups by the evaluated pair, one group per distinct composite
1376
+ key. Inside a composite `_id`, a member whose field is absent evaluates to
1377
+ `null` and stays part of the key, where MongoDB omits the member instead.
1378
+ Accumulator operands accept the same expression forms. A field reference
1379
+ resolves per document, and a missing field is not a value: `$sum`, `$avg`,
1380
+ `$min`, `$max`, `$push` and `$addToSet` skip it, while `$first` and `$last`
1381
+ record `null` for it. Every field beside `_id` must hold an accumulator
1382
+ document naming exactly one accumulator, such as `{ $sum: 1 }`, and an operator
1383
+ outside the two lists above is refused with `TypeMismatch` (code 14) when the
1384
+ stage is parsed.
1385
+
1361
1386
  ### Indexes
1362
1387
 
1363
1388
  ```typescript
@@ -1430,9 +1455,11 @@ Without a limit, exact counts continue to EOF. Hints, deadlines and empty-result
1430
1455
  shapes remain supported; signed BSON count overflow and resource exhaustion
1431
1456
  reject explicitly. Exact counts never substitute estimates, and transaction
1432
1457
  counts retain the snapshot admission limits described below.
1433
- Grouping accumulates one group at a time after an external sort; constant-key
1434
- groups stream directly. Group accumulator semantics follow the documented local
1435
- expression surface; this does not add the complete MongoDB aggregation language.
1458
+ Grouping accumulates one group at a time after an external sort over the group
1459
+ key; only keys with no field reference and no operator stream directly into a
1460
+ single group. Composite document keys sort and group like any other key. Group
1461
+ key and accumulator semantics follow the supported expression operators listed
1462
+ above; this does not add the complete MongoDB aggregation language.
1436
1463
  Unwind retains one input while expanding arrays across batches. Lookup scans
1437
1464
  bounded foreign pages or indexed candidates, then assembles one byte-bounded
1438
1465
  result document. Unindexed joins can still require repeated foreign scans.
@@ -1625,7 +1652,7 @@ const names = await collection.distinct('name');
1625
1652
  | **Indexes** | `createIndexes`, `dropIndexes`, `listIndexes` |
1626
1653
  | **Sessions** | `startSession`, `endSessions`, `killSessions` |
1627
1654
  | **Transactions** | `startTransaction`, `commitTransaction`, `abortTransaction` through driver sessions |
1628
- | **Admin** | `ping`, `listDatabases`, `listCollections`, `drop`, `dropDatabase`, `create`, `serverStatus`, `dbStats`, `collStats`, `connectionStatus`, `renameCollection` |
1655
+ | **Admin** | `ping`, `buildInfo`/`buildinfo`, `listDatabases`, `listCollections`, `drop`, `dropDatabase`, `create`, `serverStatus`, `dbStats`, `collStats`, `connectionStatus`, `renameCollection` |
1629
1656
 
1630
1657
  Advertises MongoDB wire protocol versions 0–21. The documented command surface is tested with the official `mongodb` Node.js driver version 7.5.x.
1631
1658
 
@@ -1659,6 +1686,63 @@ socket read. Large unread pipelines remain charged and are compacted only at
1659
1686
  geometric utilization thresholds; the budget is an encoded-input bound rather
1660
1687
  than a claim about exact allocator heap usage.
1661
1688
 
1689
+ ### Identifying the Engine
1690
+
1691
+ NoSQLDB speaks the MongoDB wire protocol, so it must also state plainly what it
1692
+ is. Every `hello`, `ismaster` and `isMaster` reply carries a self-contained
1693
+ `nosqldb` document, and so does `buildInfo`/`buildinfo`:
1694
+
1695
+ ```json
1696
+ {
1697
+ "product": "NoSQLDB",
1698
+ "vendor": "lossless.org",
1699
+ "version": "<the released package version>",
1700
+ "storageEngine": "native",
1701
+ "mongodbCompatibility": "7.0.0",
1702
+ "minWireVersion": 0,
1703
+ "maxWireVersion": 21
1704
+ }
1705
+ ```
1706
+
1707
+ `version` is the released `@lossless.org/nosqldb` version the running binary was
1708
+ built from: the Rust build compiles it in from the package manifest, so the
1709
+ answer belongs to the shipped artifact and cannot drift from it.
1710
+ `mongodbCompatibility` is the MongoDB release whose wire protocol and command
1711
+ semantics this engine implements — a compatibility statement, never a claim to
1712
+ be that build.
1713
+
1714
+ The handshake carries the identity unconditionally, before authentication, so a
1715
+ client can derive its backend from the connection it already has. `buildInfo` is
1716
+ available to **every authenticated connection**, including a `readWrite`-only
1717
+ tenant user and an allocation read grant; it requires no `clusterMonitor` role
1718
+ and creates no session state. `buildInfo` answers from build metadata alone and
1719
+ therefore still answers on a fenced or closed runtime, while `hello` fails
1720
+ closed. It answers in MongoDB's shape so existing tooling keeps working:
1721
+
1722
+ ```json
1723
+ {
1724
+ "version": "7.0.0",
1725
+ "versionArray": [7, 0, 0, 0],
1726
+ "gitVersion": "<source commit, or \"unknown\" when the build had no Git metadata>",
1727
+ "modules": [],
1728
+ "javascriptEngine": "none",
1729
+ "bits": 64,
1730
+ "debug": false,
1731
+ "maxBsonObjectSize": 16777216,
1732
+ "storageEngines": ["native"],
1733
+ "nosqldb": { "...": "the identity above" },
1734
+ "ok": 1
1735
+ }
1736
+ ```
1737
+
1738
+ `buildInfo.version` states the implemented compatibility level, exactly like
1739
+ `serverStatus.version`; the engine's own version is in `nosqldb.version`. A
1740
+ commit is never fabricated: `gitVersion` is either the exact source commit of
1741
+ the build or the literal `unknown`. `serverStatus` keeps every field it already
1742
+ reported, including `version` and `process: "rustdb"`, and now reports the same
1743
+ `nosqldb` identity beside them — but it remains a `clusterMonitor` command, so
1744
+ least-privilege connections use `hello` or `buildInfo`.
1745
+
1662
1746
  ### Read and Write Concerns and Wire Deadlines
1663
1747
 
1664
1748
  NoSQLDB serves every database from exactly one voting node and states its
@@ -1715,7 +1799,7 @@ replication.
1715
1799
  ### Unsupported Administrative Commands
1716
1800
 
1717
1801
  NoSQLDB returns `CommandNotFound` (code 59) for the wire commands `validate`,
1718
- legacy `authenticate`, `buildInfo`/`buildinfo`, `hostInfo`,
1802
+ legacy `authenticate`, `hostInfo`,
1719
1803
  `whatsmyuri`, `getLog`, `getCmdLineOpts`, `getParameter`, `setFreeMonitoring`,
1720
1804
  `currentOp`, `killOp`, `top`, `profile`, `compact`, `reIndex`, `fsync`, and
1721
1805
  `connPoolSync`. These commands previously had placeholder success responses but
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/nosqldb',
6
- version: '10.3.0',
6
+ version: '10.5.0',
7
7
  description: 'A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.'
8
8
  }