@lossless.org/nosqldb 10.7.2 → 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": "202b8b8f3c743e55897a1e24795e99fc758d41af0b09a02450d06270d9c63636",
3
+ "binarySha256": "bbfa10bcaa43f0beda9e67ce1046a99de9500a810d6d104056541d21f51680e3",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.2",
7
- "gitCommit": "51e2b018bac6b008f8ffb23170b5f3371fd38402",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-27T06:42:40.093Z",
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": "6305631b2bd32cb8e4243d4c48587302b919cab8f7dd2163e34a2fb7ac2a231b",
3
+ "binarySha256": "e0edf0d9bf8937b71802fa115f3ecca7d5d438fa896e873349ac863962298a64",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.2",
7
- "gitCommit": "51e2b018bac6b008f8ffb23170b5f3371fd38402",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-27T06:42:40.986Z",
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": "4ab038c4cb872473f3046a5f5c9885999789fcb0a6f5ae7bfa4e17e65aafe658",
3
+ "binarySha256": "5fa2b96061374c185072cf2943aee1c54b13c8a6977e19ac7e1107c1ba684eb6",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.2",
7
- "gitCommit": "51e2b018bac6b008f8ffb23170b5f3371fd38402",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-27T06:42:40.538Z",
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": "3293ead26a125239e01cedb02a5426656deca5acb6bb112b2c1a4af8c60e454c",
3
+ "binarySha256": "9c78460d631be6354936553d68ec1932fc9ed8b749763248fe42efa3c977bdb8",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.2",
7
- "gitCommit": "51e2b018bac6b008f8ffb23170b5f3371fd38402",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-27T06:42:41.429Z",
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": "328ce3d8bdf3d4521ad627d054a659617a59db664f7eff215d7e727e8398ddbb",
3
+ "binarySha256": "49f654b34560f807c5413cdde1cbc809c04f598e05c4df3a8441a95a26eed6b3",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.2",
7
- "gitCommit": "51e2b018bac6b008f8ffb23170b5f3371fd38402",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-27T06:26:41.032Z",
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": "618ad99857c7238c5e8c3ad49eb2e47329bccf2bc3ff17b560f84887a40a81f3",
3
+ "binarySha256": "4f2a3863d25386e79e33b6eb53a28cccaadba5282cb94af643097c09c724438d",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.7.2",
7
- "gitCommit": "51e2b018bac6b008f8ffb23170b5f3371fd38402",
6
+ "projectVersion": "10.7.3",
7
+ "gitCommit": "a347f08fa79361afadb09c24d6aff50baffcc0cf",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-27T06:26:41.629Z",
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.2',
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.2",
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.1",
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
@@ -592,13 +592,20 @@ unique index key wins, and the later writer is told at its own statement.
592
592
  finish. Writes to other documents are not delayed. A multi-document write
593
593
  outside a transaction stays all-or-nothing: it publishes nothing until it can
594
594
  publish every document.
595
- - After a transaction has been open for 60 seconds, its uncommitted writes no
596
- longer block others: the next writer that needs one of its documents aborts
597
- it, and it reports `NoSuchTransaction` (251) on its next statement or commit.
598
- The limit is fixed at MongoDB's default `transactionLifetimeLimitSeconds` and
599
- is not configurable. A transaction nobody contends with is not
600
- aborted by age alone. Ending or expiring the session, and stopping the
601
- 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.
602
609
  - TTL expiry is not a contending writer. It leaves out the documents an open
603
610
  transaction has written, deletes the other expired documents of the index
604
611
  and moves past the held ones. A later pass over the index expires those
@@ -1545,7 +1552,12 @@ NoSQLDB supports ascending and descending index keys with `name`, `unique`,
1545
1552
  `sparse`, `partialFilterExpression` and `expireAfterSeconds` options. It
1546
1553
  accepts `background` as a validated no-op and index version `v: 2`.
1547
1554
  Unsupported options, including `collation` and `hidden`, are rejected before
1548
- 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
1549
1561
  dates and date arrays in bounded batches, preserving publication holds and
1550
1562
  active snapshots.
1551
1563
 
@@ -1754,6 +1766,23 @@ time-series collections, clustered indexes, encrypted fields, and all general
1754
1766
  view pipelines remain unsupported and are rejected before the database or
1755
1767
  namespace is created.
1756
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
+
1757
1786
  ### Collection Validators
1758
1787
 
1759
1788
  `create` and `collMod` accept MongoDB's `validator`, `validationLevel`
@@ -1914,6 +1943,9 @@ const estimated = await collection.estimatedDocumentCount();
1914
1943
  const names = await collection.distinct('name');
1915
1944
  ```
1916
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
+
1917
1949
  ---
1918
1950
 
1919
1951
  ## Wire Protocol Commands
@@ -2051,8 +2083,7 @@ fields:
2051
2083
  waits, before `find`, `count`, and `distinct` materialize documents, between
2052
2084
  documents in `insert` and `delete` batches, and immediately before a
2053
2085
  transaction commit is handed to storage; expiry fails with `MaxTimeMSExpired`
2054
- (code 50). Database-permit waits keep their fixed internal timeout, and a
2055
- 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
2056
2087
  before the next check, so a write that expires after its first documents
2057
2088
  were published reports the expiry while those documents remain durable,
2058
2089
  exactly like an interrupted MongoDB batch. The official driver transmits a
@@ -2064,6 +2095,28 @@ fields:
2064
2095
  transaction. `getMore` rejects `maxTimeMS` with `BadValue` because NoSQLDB
2065
2096
  has no awaitData cursors, and a literal `maxCommitTimeMS` field is rejected
2066
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`.
2067
2120
 
2068
2121
  Callers may therefore rely on a successful NoSQLDB response as a durable,
2069
2122
  single-node acknowledgement. They must not read it as a replica-backed
@@ -2199,7 +2252,7 @@ The native distribution terms and qualified library requirements are recorded in
2199
2252
  extract and install these files independently of its compiled JavaScript bundle;
2200
2253
  NoSQLDB does not download engines at startup.
2201
2254
 
2202
- 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.
2203
2256
 
2204
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:
2205
2258
 
@@ -2212,7 +2265,7 @@ export NOSQLDB_RELEASE_MACOS_TEMP_ROOT="/absolute/dedicated/nosqldb-release"
2212
2265
 
2213
2266
  1. Builds the TypeScript package and debug UI bundle from the version commit.
2214
2267
  2. Transfers an exact Git bundle into isolated local Linux and SSH macOS worker workspaces and installs each frozen lockfile.
2215
- 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.
2216
2269
  4. Builds and executes GNU and musl Linux amd64/arm64 plus macOS arm64/amd64 binaries on their assigned workers.
2217
2270
  5. Retrieves bounded artifact sets and transactionally publishes the complete provenance-checked matrix into `dist_rust/`.
2218
2271
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/nosqldb',
6
- version: '10.7.2',
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
  }