@lossless.org/nosqldb 10.6.1 → 10.7.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.
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "45c8b46b088226aabaf6b260d1b4cd33f630b9f350f412fc9526f63754ebf8ed",
3
+ "binarySha256": "6689710534aa0e5c913a0618bbb8d4a89894f326e817f251d4c832f145054ce3",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.6.1",
7
- "gitCommit": "8a382123c5eb00f062a89c786c87f0588332f0a7",
6
+ "projectVersion": "10.7.1",
7
+ "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T11:38:26.096Z",
9
+ "builtAt": "2026-09-26T20:40:36.475Z",
10
10
  "tsrustVersion": "1.15.1",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_amd64"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "69c2b52877d8d92145f105263807d1ee7e5c41fab58ffe6adcc8ad6f4c9a6e30",
3
+ "binarySha256": "3af6fbdca2d70ed8ba9b54045ff7bce223187a42a172cc080baadb68034a7d6a",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.6.1",
7
- "gitCommit": "8a382123c5eb00f062a89c786c87f0588332f0a7",
6
+ "projectVersion": "10.7.1",
7
+ "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T11:38:26.947Z",
9
+ "builtAt": "2026-09-26T20:40:37.306Z",
10
10
  "tsrustVersion": "1.15.1",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_amd64_musl"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "bdb5b22a9d6d338e0a8474fec47233fa0da53f7a7e4771958ce32e75e6102da7",
3
+ "binarySha256": "5f534b84c39d0013d4724a930ccae57842748d01d9f93f8a6c1c0ba416cb90ce",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.6.1",
7
- "gitCommit": "8a382123c5eb00f062a89c786c87f0588332f0a7",
6
+ "projectVersion": "10.7.1",
7
+ "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T11:38:26.518Z",
9
+ "builtAt": "2026-09-26T20:40:36.898Z",
10
10
  "tsrustVersion": "1.15.1",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_arm64"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "e08e92879b6a3c1f8f5e91a90bb0c26cf5a6500af87bbf129f4c0833a1c21a61",
3
+ "binarySha256": "5d82aca1acb518acd86b8b879a3a1c8b68625f0793d8e96b3ce9d5c65e9e7297",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.6.1",
7
- "gitCommit": "8a382123c5eb00f062a89c786c87f0588332f0a7",
6
+ "projectVersion": "10.7.1",
7
+ "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T11:38:27.390Z",
9
+ "builtAt": "2026-09-26T20:40:37.725Z",
10
10
  "tsrustVersion": "1.15.1",
11
11
  "binary": "rustdb",
12
12
  "target": "linux_arm64_musl"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "bc8d7bed405a7aea9281f786c2cb845836c109a577882403dff5cae1ddab2e3b",
3
+ "binarySha256": "2fd9b284e1b6a5a051a53645dc660e3e2accb4a15b25512072ed0196f1fe6c41",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.6.1",
7
- "gitCommit": "8a382123c5eb00f062a89c786c87f0588332f0a7",
6
+ "projectVersion": "10.7.1",
7
+ "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T11:22:15.998Z",
9
+ "builtAt": "2026-09-26T20:25:27.522Z",
10
10
  "tsrustVersion": "1.15.1",
11
11
  "binary": "rustdb",
12
12
  "target": "macos_amd64"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "f7b402ccadcdf3e272b82c07f1af67ebbc1556d5b6d7c974383771b643cb8f14",
3
+ "binarySha256": "01ef95a56fe7b5944639eed54bdc964bd75c8251fbae17e003cb5b3afe543410",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/nosqldb",
6
- "projectVersion": "10.6.1",
7
- "gitCommit": "8a382123c5eb00f062a89c786c87f0588332f0a7",
6
+ "projectVersion": "10.7.1",
7
+ "gitCommit": "fbc2af3b9b2791db6f0896f6b990038e1f733722",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-09-26T11:22:16.581Z",
9
+ "builtAt": "2026-09-26T20:25:28.100Z",
10
10
  "tsrustVersion": "1.15.1",
11
11
  "binary": "rustdb",
12
12
  "target": "macos_arm64"
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/nosqldb',
6
- version: '10.6.1',
6
+ version: '10.7.1',
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=
@@ -282,6 +282,12 @@ export interface INoSqlDbDeleteDatabaseTenantResult {
282
282
  }
283
283
  export interface INoSqlDbDatabaseExportCollection {
284
284
  name: string;
285
+ /**
286
+ * Collection options exactly as `listCollections` reports them
287
+ * (`validator`, `validationLevel`, `validationAction`). Present only when
288
+ * the collection has options; engines up to 10.6.1 refuse such an export.
289
+ */
290
+ options?: Record<string, any>;
285
291
  documents: Record<string, any>[];
286
292
  indexes: Record<string, any>[];
287
293
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lossless.org/nosqldb",
3
- "version": "10.6.1",
3
+ "version": "10.7.1",
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": {
package/readme.md CHANGED
@@ -1353,6 +1353,9 @@ await collection.findOneAndReplace({ _id: id }, { name: 'Replaced' }, { returnDo
1353
1353
  // Array
1354
1354
  { tags: { $all: ['mongodb', 'database'] } }
1355
1355
  { scores: { $elemMatch: { $gte: 80, $lt: 90 } } }
1356
+ { labels: { $not: { $elemMatch: { $nin: ['linux', 'gpu'] } } } }
1357
+ { items: { $elemMatch: { sku: 'a', qty: { $gt: 2 } } } }
1358
+ { items: { $all: [{ $elemMatch: { sku: 'a' } }, { $elemMatch: { qty: 0 } }] } }
1356
1359
  { tags: { $size: 3 } }
1357
1360
 
1358
1361
  // Regex
@@ -1367,6 +1370,14 @@ await collection.findOneAndReplace({ _id: id }, { name: 'Replaced' }, { returnDo
1367
1370
  code or an array of them, and matches an array field through its elements as
1368
1371
  well as `'array'` itself.
1369
1372
 
1373
+ `$elemMatch` has MongoDB's two forms. An operand whose first key is a query
1374
+ operator applies its operators (`$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`,
1375
+ `$in`, `$nin`, `$exists`, `$type`, `$regex`, `$size`, `$mod`, `$all`, `$not`,
1376
+ `$elemMatch`) to each element as a whole; any other operand is a query over
1377
+ each embedded document, and a nested array is matched as a document keyed by
1378
+ index. A dotted path tests every array it reaches on its own. `$expr` inside
1379
+ `$elemMatch` is refused with `BadValue` (2), as on MongoDB.
1380
+
1370
1381
  `$expr` evaluates an aggregation expression per document in `find`, `count`,
1371
1382
  `distinct`, `update`, `delete`, `findAndModify` and a `$match` stage, and
1372
1383
  matches when the result is truthy. It accepts the operators listed under
@@ -1727,10 +1738,101 @@ await admin.ping();
1727
1738
  await admin.serverStatus();
1728
1739
  ```
1729
1740
 
1730
- NoSQLDB creates ordinary collections and one deliberately restricted view form.
1731
- Capped collections, validators, collation, time-series collections, clustered
1732
- indexes, encrypted fields, and all general view pipelines remain unsupported and
1733
- are rejected before the database or namespace is created.
1741
+ NoSQLDB creates ordinary collections, collections with document validators (see
1742
+ below) and one deliberately restricted view form. Capped collections, collation,
1743
+ time-series collections, clustered indexes, encrypted fields, and all general
1744
+ view pipelines remain unsupported and are rejected before the database or
1745
+ namespace is created.
1746
+
1747
+ ### Collection Validators
1748
+
1749
+ `create` and `collMod` accept MongoDB's `validator`, `validationLevel`
1750
+ (`strict`, `moderate`, `off`) and `validationAction` (`error`, `warn`), and
1751
+ `listCollections` reports them under `options` exactly as set:
1752
+
1753
+ ```typescript
1754
+ await db.createCollection('ffb_ci_v2_runners', {
1755
+ validator: {
1756
+ $jsonSchema: {
1757
+ bsonType: 'object',
1758
+ required: ['revokedAt'],
1759
+ properties: { revokedAt: { bsonType: ['date', 'null'] } },
1760
+ },
1761
+ },
1762
+ validationLevel: 'strict',
1763
+ validationAction: 'error',
1764
+ });
1765
+ await db.command({ collMod: 'ffb_ci_v2_runners', validationLevel: 'moderate' });
1766
+ ```
1767
+
1768
+ A validator is a query document. Its top level may hold one `$jsonSchema`;
1769
+ every other clause is an ordinary query predicate evaluated by the query
1770
+ engine, `$expr` with the command's `$$NOW` included. The `$jsonSchema` subset
1771
+ is `bsonType` (every BSON alias and `number`), `type` (`object`, `array`,
1772
+ `number`, `boolean`, `string`, `null`), `required`, `properties`,
1773
+ `additionalProperties` (boolean), `minProperties`, `maxProperties`, `enum`,
1774
+ `minimum`, `maximum`, `exclusiveMinimum`, `exclusiveMaximum`, `minLength`,
1775
+ `maxLength`, `pattern`, `items` (one schema), `minItems`, `maxItems`, `title`
1776
+ and `description`, with MongoDB's semantics: a keyword applies only to values
1777
+ of its kind and not at all when `bsonType`/`type` excludes that kind, `enum`
1778
+ compares numbers by value and embedded documents regardless of field order,
1779
+ NaN fails `minimum` and `maximum`, and lengths count code points. Everything
1780
+ else is refused when the validator is set, never ignored: `patternProperties`,
1781
+ `additionalItems`, `uniqueItems`, `dependencies`, `allOf`, `anyOf`, `oneOf`,
1782
+ `not`, `multipleOf`, `encrypt`, `encryptMetadata`, `items` as an array and
1783
+ `additionalProperties` as a schema answer `FailedToParse` (9) `$jsonSchema
1784
+ keyword '…' is not currently supported`, as MongoDB answers for `$ref`,
1785
+ `format`, `default`, `definitions`, `id` and `$schema`; `$jsonSchema` below the
1786
+ top level answers `BadValue` (2). Malformed validators answer MongoDB's codes
1787
+ (2, 9, 14, `Location51091` for an invalid `pattern`). `pattern` uses the same
1788
+ regular-expression dialect as `$regex`; constructs only PCRE supports are
1789
+ refused as invalid.
1790
+
1791
+ Every insert and update is validated: inserts, upserts, update operators,
1792
+ replacements, pipeline updates, `findAndModify`, bulk writes, `$merge` and
1793
+ `$out` output, inside and outside transactions. `strict` validates every
1794
+ written document; `moderate` skips updates to documents that did not satisfy
1795
+ the validator before the update; `off` validates nothing; a no-op update and a
1796
+ delete are never validated. A refused document answers
1797
+ `DocumentValidationFailure` (121), `errmsg: "Document failed validation"`, and
1798
+ MongoDB's `errInfo: { failingDocumentId, details }` — as a write error of
1799
+ `insert`/`update`, keeping ordered and unordered batch semantics, and as the
1800
+ command error of `findAndModify` and `aggregate`. A refused statement aborts
1801
+ its transaction. `details` has MongoDB's shape for every `$jsonSchema` keyword
1802
+ above and for `$and`, `$or`, `$nor`, `$not`, `$eq`, `$ne`, `$gt`, `$gte`,
1803
+ `$lt`, `$lte`, `$exists`, `$type`, `$in`, `$nin`, `$regex`, `$size`, `$all`,
1804
+ `$elemMatch`, `$mod` and `$expr`; other operators report only `operatorName`
1805
+ and `specifiedAs`. `validationAction: 'warn'` writes the document and logs a
1806
+ `Document would fail validation` warning with the namespace and `errInfo`.
1807
+ `bypassDocumentValidation` (a boolean or number) on `insert`, `update`,
1808
+ `findAndModify` and writing `aggregate` skips validation; with authentication
1809
+ it requires `dbAdmin` on the written database, as `collMod` does — `readWrite`
1810
+ alone is refused with `Unauthorized` (13), as in MongoDB's built-in roles.
1811
+
1812
+ `collMod` changes only the options it names; `validator: {}` removes the
1813
+ validator; a `null` option is absent; `collMod` without options answers
1814
+ `{ ok: 1 }`. A missing collection answers `NamespaceNotFound` (26), a view or
1815
+ `system.*` collection `InvalidOptions` (72), MongoDB's other `collMod` options
1816
+ (`index`, `viewOn`, `pipeline`, `expireAfterSeconds`, `timeseries`,
1817
+ `changeStreamPreAndPostImages`, `dryRun`, `cappedSize`, `cappedMax`, …)
1818
+ `InvalidOptions` (72) by name, and unknown fields `IDLUnknownField` (40415).
1819
+ Options persist with the collection, survive restarts and `renameCollection`,
1820
+ and `$out` keeps its target's options. The encoded options are limited to
1821
+ 60 KiB (MongoDB has no separate limit); larger ones answer `InvalidOptions`
1822
+ (72). Canonical export writes a collection's `options` beside its documents and
1823
+ indexes only when it has options, import restores them, and the database
1824
+ content digest includes them only then, so digests of collections without
1825
+ options are unchanged. Engines up to 10.6.1 refuse a storage root or an export
1826
+ holding collection options instead of silently not enforcing them.
1827
+
1828
+ Differences from MongoDB 7: `create` on an existing collection answers
1829
+ `NamespaceExists` (48) even when the options are identical (MongoDB answers
1830
+ `ok`); a validator together with `viewOn` is refused (MongoDB ignores it); an
1831
+ invalid `pattern` at the schema root is refused (MongoDB never compiles it
1832
+ there);
1833
+ command errors say `Document failed validation` without MongoDB's
1834
+ `Plan executor error during …` prefix; the `warn` log carries `errInfo`, not
1835
+ the whole document.
1734
1836
 
1735
1837
  ### Restricted Deny-All Views
1736
1838
 
@@ -1814,7 +1916,7 @@ const names = await collection.distinct('name');
1814
1916
  | **Indexes** | `createIndexes`, `dropIndexes`, `listIndexes` |
1815
1917
  | **Sessions** | `startSession`, `endSessions`, `killSessions` |
1816
1918
  | **Transactions** | `startTransaction`, `commitTransaction`, `abortTransaction` through driver sessions |
1817
- | **Admin** | `ping`, `buildInfo`/`buildinfo`, `listDatabases`, `listCollections`, `drop`, `dropDatabase`, `create`, `serverStatus`, `dbStats`, `collStats`, `connectionStatus`, `renameCollection` |
1919
+ | **Admin** | `ping`, `buildInfo`/`buildinfo`, `listDatabases`, `listCollections`, `drop`, `dropDatabase`, `create`, `collMod` (validation options), `serverStatus`, `dbStats`, `collStats`, `connectionStatus`, `renameCollection` |
1818
1920
 
1819
1921
  Advertises MongoDB wire protocol versions 0–21. The documented command surface is tested with the official `mongodb` Node.js driver version 7.5.x.
1820
1922
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/nosqldb',
6
- version: '10.6.1',
6
+ version: '10.7.1',
7
7
  description: 'A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.'
8
8
  }
@@ -414,6 +414,12 @@ export interface INoSqlDbDeleteDatabaseTenantResult {
414
414
 
415
415
  export interface INoSqlDbDatabaseExportCollection {
416
416
  name: string;
417
+ /**
418
+ * Collection options exactly as `listCollections` reports them
419
+ * (`validator`, `validationLevel`, `validationAction`). Present only when
420
+ * the collection has options; engines up to 10.6.1 refuse such an export.
421
+ */
422
+ options?: Record<string, any>;
417
423
  documents: Record<string, any>[];
418
424
  indexes: Record<string, any>[];
419
425
  }