@lossless.org/nosqldb 10.7.1 → 10.7.3

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": "6689710534aa0e5c913a0618bbb8d4a89894f326e817f251d4c832f145054ce3",
3
+ "binarySha256": "bbfa10bcaa43f0beda9e67ce1046a99de9500a810d6d104056541d21f51680e3",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.1",
7
- "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T20:40:36.475Z",
10
- "tsrustVersion": "1.15.1",
9
+ "builtAt": "2026-09-29T20:22:27.258Z",
10
+ "tsrustVersion": "2.0.0",
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": "3af6fbdca2d70ed8ba9b54045ff7bce223187a42a172cc080baadb68034a7d6a",
3
+ "binarySha256": "e0edf0d9bf8937b71802fa115f3ecca7d5d438fa896e873349ac863962298a64",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.1",
7
- "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T20:40:37.306Z",
10
- "tsrustVersion": "1.15.1",
9
+ "builtAt": "2026-09-29T20:22:28.300Z",
10
+ "tsrustVersion": "2.0.0",
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": "5f534b84c39d0013d4724a930ccae57842748d01d9f93f8a6c1c0ba416cb90ce",
3
+ "binarySha256": "5fa2b96061374c185072cf2943aee1c54b13c8a6977e19ac7e1107c1ba684eb6",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.1",
7
- "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T20:40:36.898Z",
10
- "tsrustVersion": "1.15.1",
9
+ "builtAt": "2026-09-29T20:22:27.716Z",
10
+ "tsrustVersion": "2.0.0",
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": "5d82aca1acb518acd86b8b879a3a1c8b68625f0793d8e96b3ce9d5c65e9e7297",
3
+ "binarySha256": "9c78460d631be6354936553d68ec1932fc9ed8b749763248fe42efa3c977bdb8",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.1",
7
- "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T20:40:37.725Z",
10
- "tsrustVersion": "1.15.1",
9
+ "builtAt": "2026-09-29T20:22:28.746Z",
10
+ "tsrustVersion": "2.0.0",
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": "2fd9b284e1b6a5a051a53645dc660e3e2accb4a15b25512072ed0196f1fe6c41",
3
+ "binarySha256": "49f654b34560f807c5413cdde1cbc809c04f598e05c4df3a8441a95a26eed6b3",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.1",
7
- "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T20:25:27.522Z",
10
- "tsrustVersion": "1.15.1",
9
+ "builtAt": "2026-09-29T20:05:09.004Z",
10
+ "tsrustVersion": "2.0.0",
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": "01ef95a56fe7b5944639eed54bdc964bd75c8251fbae17e003cb5b3afe543410",
3
+ "binarySha256": "4f2a3863d25386e79e33b6eb53a28cccaadba5282cb94af643097c09c724438d",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.1",
7
- "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T20:25:28.100Z",
10
- "tsrustVersion": "1.15.1",
9
+ "builtAt": "2026-09-29T20:05:09.730Z",
10
+ "tsrustVersion": "2.0.0",
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.7.1',
6
+ version: '10.7.3',
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.7.1",
3
+ "version": "10.7.3",
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": {
@@ -15,9 +15,9 @@
15
15
  "@api.global/typedserver": "^8.4.6",
16
16
  "@design.estate/dees-element": "^2.2.4",
17
17
  "@git.zone/tsbuild": "^5.0.0",
18
- "@git.zone/tsbundle": "^2.15.0",
19
- "@git.zone/tsrust": "^1.15.1",
20
- "@git.zone/tstest": "^6.3.0",
18
+ "@git.zone/tsbundle": "^3.1.0",
19
+ "@git.zone/tsrust": "^2.0.0",
20
+ "@git.zone/tstest": "^6.3.2",
21
21
  "@lossless.org/client": "0.1.1",
22
22
  "@types/node": "26.6.2",
23
23
  "mongodb": "^7.5.0"
package/readme.md CHANGED
@@ -382,11 +382,17 @@ generation bindings are validated before and after the batch; mutation,
382
382
  durability, cancellation and close checks remain enforced. No lease or resolved
383
383
  authorization is reused across requests or asynchronous suspensions.
384
384
 
385
- Compound indexes combine leading equality fields with a range on the next field.
386
- For example, `{ serverId: 1, timestamp: 1 }` seeks directly into the requested
387
- server's time interval. Inclusive/exclusive endpoints, descending components,
388
- trailing fields and reverse pagination retain their normal semantics. The full
389
- predicate is still checked for every selected candidate.
385
+ Compound indexes combine leading equality fields, if any, with a range on the
386
+ next field. For example, `{ serverId: 1, timestamp: 1 }` seeks directly into the
387
+ requested server's time interval. Inclusive/exclusive endpoints, descending
388
+ components, trailing fields and reverse pagination retain their normal
389
+ semantics. A range is built from `$gt`, `$gte`, `$lt` and `$lte`, and from
390
+ `$ne: null` or a `$nin` list holding null, which read only the non-null keys as
391
+ MongoDB's `[MinKey, undefined) ∪ (null, MaxKey]` bounds do: documents without
392
+ the field or with an explicit null are not examined. Ranges are built only on
393
+ complete, non-multikey indexes whose values all have a scalar order; other
394
+ indexes are not narrowed. The full predicate is still checked for every
395
+ selected candidate.
390
396
 
391
397
  For a query whose filter references only `_id` and whose projection is exactly
392
398
  `{ _id: 1 }`, the native primary index can supply the original BSON identity
@@ -586,13 +592,20 @@ unique index key wins, and the later writer is told at its own statement.
586
592
  finish. Writes to other documents are not delayed. A multi-document write
587
593
  outside a transaction stays all-or-nothing: it publishes nothing until it can
588
594
  publish every document.
589
- - After a transaction has been open for 60 seconds, its uncommitted writes no
590
- longer block others: the next writer that needs one of its documents aborts
591
- it, and it reports `NoSuchTransaction` (251) on its next statement or commit.
592
- The limit is fixed at MongoDB's default `transactionLifetimeLimitSeconds` and
593
- is not configurable. A transaction nobody contends with is not
594
- aborted by age alone. Ending or expiring the session, and stopping the
595
- server, release a transaction's writes as well.
595
+ - A transaction open for longer than 60 seconds is aborted, as by MongoDB's
596
+ transaction reaper: its staged writes are discarded and its cursors, write
597
+ claims, transaction capacity and database gates are released. The server
598
+ checks idle sessions once a second; a statement still executing when the
599
+ limit passes is not interrupted, and the transaction aborts when that
600
+ statement has finished (MongoDB instead interrupts that statement with
601
+ `TransactionExceededLifetimeLimitSeconds` (290)). Its later statements, `commitTransaction` and
602
+ `abortTransaction` report `NoSuchTransaction` (251); statements and
603
+ `commitTransaction` carry `TransientTransactionError`, so `withTransaction`
604
+ retries from the start. Before that abort, the next writer that needs one of
605
+ its documents aborts it too rather than wait. The limit is fixed at
606
+ MongoDB's default `transactionLifetimeLimitSeconds` and is not configurable.
607
+ Ending or expiring the session, and stopping the server, release a
608
+ transaction's writes as well.
596
609
  - TTL expiry is not a contending writer. It leaves out the documents an open
597
610
  transaction has written, deletes the other expired documents of the index
598
611
  and moves past the held ones. A later pass over the index expires those
@@ -625,6 +638,10 @@ and revalidate under exclusive admission before any publication.
625
638
 
626
639
  Logical sessions survive socket disconnects. Expiry, `endSessions` and
627
640
  `killSessions` drain active work and release cursors and namespace gates.
641
+ A `commitTransaction` or `abortTransaction` retried while its session is being
642
+ ended still replays the transaction's stored outcome, so a committed
643
+ transaction is never reported as aborted; a transaction that was still open
644
+ when its session ended publishes nothing and reports `NoSuchTransaction` (251).
628
645
  Rejected new transaction envelopes do not consume session capacity or reset
629
646
  existing sessions. See the native resource budgets below.
630
647
 
@@ -1535,7 +1552,12 @@ NoSQLDB supports ascending and descending index keys with `name`, `unique`,
1535
1552
  `sparse`, `partialFilterExpression` and `expireAfterSeconds` options. It
1536
1553
  accepts `background` as a validated no-op and index version `v: 2`.
1537
1554
  Unsupported options, including `collation` and `hidden`, are rejected before
1538
- any index in the request is created. Native maintenance expires eligible BSON
1555
+ any index in the request is created. A legacy `ns` field is accepted only when
1556
+ it names the target namespace. With `ignoreUnknownIndexOptions: true`,
1557
+ `createIndexes` removes the fields MongoDB 7 does not know as index options
1558
+ (and plugin-specific fields such as `weights` or `bits` on an ascending or
1559
+ descending key) before validation, as MongoDB does; options MongoDB knows but
1560
+ NoSQLDB does not implement are still rejected. Native maintenance expires eligible BSON
1539
1561
  dates and date arrays in bounded batches, preserving publication holds and
1540
1562
  active snapshots.
1541
1563
 
@@ -1744,6 +1766,23 @@ time-series collections, clustered indexes, encrypted fields, and all general
1744
1766
  view pipelines remain unsupported and are rejected before the database or
1745
1767
  namespace is created.
1746
1768
 
1769
+ `create` accepts an `idIndex` only when it describes the primary index every
1770
+ collection gets: key `{ _id: 1 }`, name `_id_`, optionally `v: 2` and an `ns`
1771
+ naming the new collection. Any other `idIndex` is `InvalidOptions` (72).
1772
+
1773
+ **Importing from MongoDB.** `mongorestore` (MongoDB Database Tools 100.x)
1774
+ restores a `mongodump` of ordinary collections with its default flags: the
1775
+ documents, validators and supported indexes (unique, compound, sparse,
1776
+ partial and TTL). It sends this `idIndex` with every `create` and
1777
+ `createIndexes` with each index's `ns` and `ignoreUnknownIndexOptions: true`,
1778
+ and it builds several collections' indexes in parallel, which queue on the
1779
+ database (see "Database waits" below). Exclude the `admin` and `config`
1780
+ namespaces (`--nsExclude 'admin.*' --nsExclude 'config.*'`) and create users
1781
+ through NoSQLDB's authentication options. Collections or indexes that use
1782
+ unsupported features (collation, text, geospatial, hashed or wildcard
1783
+ indexes, capped or time-series collections) fail the restore with the
1784
+ refusing command's error instead of being restored differently.
1785
+
1747
1786
  ### Collection Validators
1748
1787
 
1749
1788
  `create` and `collMod` accept MongoDB's `validator`, `validationLevel`
@@ -1904,6 +1943,9 @@ const estimated = await collection.estimatedDocumentCount();
1904
1943
  const names = await collection.distinct('name');
1905
1944
  ```
1906
1945
 
1946
+ The `count` command answers `n` as a 32-bit integer when the count fits and as
1947
+ a 64-bit integer above that, as MongoDB does.
1948
+
1907
1949
  ---
1908
1950
 
1909
1951
  ## Wire Protocol Commands
@@ -2041,8 +2083,7 @@ fields:
2041
2083
  waits, before `find`, `count`, and `distinct` materialize documents, between
2042
2084
  documents in `insert` and `delete` batches, and immediately before a
2043
2085
  transaction commit is handed to storage; expiry fails with `MaxTimeMSExpired`
2044
- (code 50). Database-permit waits keep their fixed internal timeout, and a
2045
- single storage step or an in-progress `update` batch runs to completion
2086
+ (code 50). A single storage step or an in-progress `update` batch runs to completion
2046
2087
  before the next check, so a write that expires after its first documents
2047
2088
  were published reports the expiry while those documents remain durable,
2048
2089
  exactly like an interrupted MongoDB batch. The official driver transmits a
@@ -2054,6 +2095,28 @@ fields:
2054
2095
  transaction. `getMore` rejects `maxTimeMS` with `BadValue` because NoSQLDB
2055
2096
  has no awaitData cursors, and a literal `maxCommitTimeMS` field is rejected
2056
2097
  with `InvalidOptions`.
2098
+ - **Database waits.** DDL (`create`, `createIndexes`, `drop`, `dropIndexes`,
2099
+ `collMod`, `dropDatabase`, `renameCollection`, `$out`/`$merge`) holds its
2100
+ database exclusively; other commands on that database wait for it, as they
2101
+ wait for a MongoDB collection or database lock. A command outside a
2102
+ transaction waits first in, first out for as long as it may run: until
2103
+ `maxTimeMS` (`MaxTimeMSExpired`, code 50), until its client disconnects or
2104
+ shuts down its sending side (the wait ends with `ClientDisconnect`, code
2105
+ 279, which a client that still reads receives before the connection closes)
2106
+ or until the server shuts down (`InterruptedAtShutdown`, code 91). A DDL
2107
+ command likewise waits for the open transactions on its database to commit
2108
+ or abort, and every command on that database that arrives after the DDL
2109
+ queues behind it, including reads of other collections. An open
2110
+ transaction therefore delays DDL and the commands behind it at most until
2111
+ the transaction lifetime limit (60 seconds, MongoDB's
2112
+ `transactionLifetimeLimitSeconds`) aborts it.
2113
+ A transaction statement that needs a further database keeps a fixed
2114
+ five-second limit and then fails with `IllegalOperation` (code 20,
2115
+ `EFENCE_BUSY: …`), so a transaction never waits without bound while it
2116
+ holds its databases; like any failed statement, it aborts the transaction
2117
+ and releases its databases. The service operations (export,
2118
+ import, tenant and publication fencing) keep the same limit and report
2119
+ `EFENCE_BUSY`.
2057
2120
 
2058
2121
  Callers may therefore rely on a successful NoSQLDB response as a durable,
2059
2122
  single-node acknowledgement. They must not read it as a replica-backed
@@ -2189,7 +2252,7 @@ The native distribution terms and qualified library requirements are recorded in
2189
2252
  extract and install these files independently of its compiled JavaScript bundle;
2190
2253
  NoSQLDB does not download engines at startup.
2191
2254
 
2192
- Normal `tsrust` builds select only the current host's partition from `targetsByHost`. Releases use `tsrust matrix` to coordinate both partitions after the version commit exists, then publish only after native verification passes and every exact-commit binary has executed and passed strict provenance assembly.
2255
+ A plain `tsrust` build, as run by `pnpm build` and before `pnpm test`, compiles only the configured targets of the host's own architecture (its GNU and musl engines on Linux); `tsrust --configured-targets` builds the host's complete partition from `targetsByHost`. The development suite checks the packaged engines of the host architecture. Releases use `tsrust matrix` to coordinate both partitions after the version commit exists, then publish only after native verification passes and every exact-commit binary has executed and passed strict provenance assembly.
2193
2256
 
2194
2257
  The release coordinator needs Git, Node.js, pnpm and SSH access to the configured macOS builder. The local Linux amd64 builder needs `aarch64-linux-gnu-gcc`, `x86_64-linux-musl-gcc` and `aarch64-linux-musl-gcc` and a registered Linux arm64 `binfmt` interpreter. Linux file storage requires kernel 5.6 or newer with `openat2` enabled. Cross-architecture file qualification requires a full-system Linux guest or a native host. A linux-user executable probe does not qualify secure filesystem syscalls such as `openat2`. The built-package acceptance script `test/verify-alpine.mjs` exercises authenticated nested document persistence and restart through Node and Deno on Alpine; run it on both Linux architectures before publication. The Apple Silicon builder needs Rosetta. The matrix qualifies macOS first and then Linux; both partitions must pass before artifact assembly. Set these environment variables to authorized builders and their dedicated temporary roots:
2195
2258
 
@@ -2202,7 +2265,7 @@ export NOSQLDB_RELEASE_MACOS_TEMP_ROOT="/absolute/dedicated/nosqldb-release"
2202
2265
 
2203
2266
  1. Builds the TypeScript package and debug UI bundle from the version commit.
2204
2267
  2. Transfers an exact Git bundle into isolated local Linux and SSH macOS worker workspaces and installs each frozen lockfile.
2205
- 3. Runs the configured `release:verify-native` command on each worker: the full Rust workspace, TypeScript test checks, public API suite, and explicit-engine authentication/ownership/rehearsal tests through the worker's other packaged architecture. Tests use short, private disposable filesystem roots under `/var/tmp` on Linux and canonical `/tmp` on macOS. Linux builders must provide `/var/tmp` on a native-supported durable filesystem; tmpfs is rejected. Failures retain diagnostics and prevent assembly.
2268
+ 3. Runs the configured `release:verify-native` command on each worker: the full Rust workspace, TypeScript test checks, a `tsrust --configured-targets` build of the worker's partition, the public API suite with the packaged-engine checks for both architectures, and explicit-engine authentication/ownership/rehearsal tests through the worker's other packaged architecture. Tests use short, private disposable filesystem roots under `/var/tmp` on Linux and canonical `/tmp` on macOS. Linux builders must provide `/var/tmp` on a native-supported durable filesystem; tmpfs is rejected. Failures retain diagnostics and prevent assembly.
2206
2269
  4. Builds and executes GNU and musl Linux amd64/arm64 plus macOS arm64/amd64 binaries on their assigned workers.
2207
2270
  5. Retrieves bounded artifact sets and transactionally publishes the complete provenance-checked matrix into `dist_rust/`.
2208
2271
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/nosqldb',
6
- version: '10.7.1',
6
+ version: '10.7.3',
7
7
  description: 'A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.'
8
8
  }