@atscript/db-mongo 0.1.83 → 0.1.85

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/dist/index.cjs CHANGED
@@ -1278,9 +1278,17 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1278
1278
  createValidator: (opts) => this._table.createValidator(opts)
1279
1279
  };
1280
1280
  }
1281
- async nativePatch(filter, patch, ops) {
1282
- const mongoFilter = require_mongo_filter.buildMongoFilter(filter);
1283
- const { updateFilter, updateOptions } = new CollectionPatcher(this.getPatcherContext(), patch, ops).preparePatch();
1281
+ async nativePatch(filter, patch, ops, expectedVersion) {
1282
+ const mongoFilter = this._buildCasFilter(filter, expectedVersion, "nativePatch");
1283
+ const versionColumn = this._table.versionColumn;
1284
+ const effectiveOps = versionColumn !== void 0 ? {
1285
+ ...ops,
1286
+ inc: {
1287
+ ...ops?.inc,
1288
+ [versionColumn]: 1
1289
+ }
1290
+ } : ops;
1291
+ const { updateFilter, updateOptions } = new CollectionPatcher(this.getPatcherContext(), patch, effectiveOps).preparePatch();
1284
1292
  this._log("updateOne (patch)", mongoFilter, updateFilter);
1285
1293
  const result = await this.collection.updateOne(mongoFilter, updateFilter, {
1286
1294
  ...updateOptions,
@@ -1477,6 +1485,18 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1477
1485
  }
1478
1486
  }
1479
1487
  /**
1488
+ * Builds a Mongo filter for CAS-aware writes. Throws when `expectedVersion`
1489
+ * is supplied for a non-versioned table — fail loud at the adapter boundary
1490
+ * rather than silently dropping the CAS predicate.
1491
+ */
1492
+ _buildCasFilter(filter, expectedVersion, op) {
1493
+ const versionColumn = this._table.versionColumn;
1494
+ if (expectedVersion !== void 0 && versionColumn === void 0) throw new Error(`${op}: expectedVersion requires versionColumn`);
1495
+ const mongoFilter = require_mongo_filter.buildMongoFilter(filter);
1496
+ if (expectedVersion !== void 0 && versionColumn !== void 0) mongoFilter[versionColumn] = expectedVersion;
1497
+ return mongoFilter;
1498
+ }
1499
+ /**
1480
1500
  * Wraps an async operation to catch MongoDB duplicate key errors
1481
1501
  * (code 11000) and rethrow as structured `DbError`.
1482
1502
  */
@@ -1492,6 +1512,8 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1492
1512
  }
1493
1513
  }
1494
1514
  async insertOne(data) {
1515
+ const versionColumn = this._table.versionColumn;
1516
+ if (versionColumn !== void 0 && !(versionColumn in data)) data[versionColumn] = 0;
1495
1517
  if (this._incrementFields.size > 0) {
1496
1518
  const fields = this._fieldsNeedingIncrement(data);
1497
1519
  if (fields.length > 0) {
@@ -1504,6 +1526,10 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1504
1526
  return { insertedId: this._resolveInsertedId(data, result.insertedId) };
1505
1527
  }
1506
1528
  async insertMany(data) {
1529
+ const versionColumn = this._table.versionColumn;
1530
+ if (versionColumn !== void 0) {
1531
+ for (const item of data) if (!(versionColumn in item)) item[versionColumn] = 0;
1532
+ }
1507
1533
  if (this._incrementFields.size > 0) {
1508
1534
  const allFields = /* @__PURE__ */ new Set();
1509
1535
  for (const item of data) for (const f of this._fieldsNeedingIncrement(item)) allFields.add(f);
@@ -1544,9 +1570,9 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1544
1570
  ...this._getSessionOpts()
1545
1571
  });
1546
1572
  }
1547
- async updateOne(filter, data, ops) {
1548
- const mongoFilter = require_mongo_filter.buildMongoFilter(filter);
1549
- const updateDoc = buildMongoUpdateDoc(data, ops);
1573
+ async updateOne(filter, data, ops, expectedVersion) {
1574
+ const mongoFilter = this._buildCasFilter(filter, expectedVersion, "updateOne");
1575
+ const updateDoc = buildMongoUpdateDoc(data, ops, this._table.versionColumn);
1550
1576
  this._log("updateOne", mongoFilter, updateDoc);
1551
1577
  const result = await this.collection.updateOne(mongoFilter, updateDoc, this._getSessionOpts());
1552
1578
  return {
@@ -1554,10 +1580,18 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1554
1580
  modifiedCount: result.modifiedCount
1555
1581
  };
1556
1582
  }
1557
- async replaceOne(filter, data) {
1558
- const mongoFilter = require_mongo_filter.buildMongoFilter(filter);
1583
+ async replaceOne(filter, data, expectedVersion) {
1584
+ const mongoFilter = this._buildCasFilter(filter, expectedVersion, "replaceOne");
1585
+ const versionColumn = this._table.versionColumn;
1559
1586
  this._log("replaceOne", mongoFilter, data);
1560
- const result = await this._wrapDuplicateKeyError(() => this.collection.replaceOne(mongoFilter, data, this._getSessionOpts()));
1587
+ let result;
1588
+ if (versionColumn !== void 0) {
1589
+ const pipeline = [{ $replaceWith: {
1590
+ ...data,
1591
+ [versionColumn]: { $add: [`$${versionColumn}`, 1] }
1592
+ } }];
1593
+ result = await this._wrapDuplicateKeyError(() => this.collection.updateOne(mongoFilter, pipeline, this._getSessionOpts()));
1594
+ } else result = await this._wrapDuplicateKeyError(() => this.collection.replaceOne(mongoFilter, data, this._getSessionOpts()));
1561
1595
  return {
1562
1596
  matchedCount: result.matchedCount,
1563
1597
  modifiedCount: result.modifiedCount
@@ -1569,8 +1603,9 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1569
1603
  return { deletedCount: (await this.collection.deleteOne(mongoFilter, this._getSessionOpts())).deletedCount };
1570
1604
  }
1571
1605
  async updateMany(filter, data, ops) {
1606
+ const versionColumn = this._table.versionColumn;
1572
1607
  const mongoFilter = require_mongo_filter.buildMongoFilter(filter);
1573
- const updateDoc = buildMongoUpdateDoc(data, ops);
1608
+ const updateDoc = buildMongoUpdateDoc(data, ops, versionColumn);
1574
1609
  this._log("updateMany", mongoFilter, updateDoc);
1575
1610
  const result = await this.collection.updateMany(mongoFilter, updateDoc, this._getSessionOpts());
1576
1611
  return {
@@ -1580,8 +1615,9 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1580
1615
  }
1581
1616
  async replaceMany(filter, data) {
1582
1617
  const mongoFilter = require_mongo_filter.buildMongoFilter(filter);
1583
- this._log("replaceMany", mongoFilter, { $set: data });
1584
- const result = await this.collection.updateMany(mongoFilter, { $set: data }, this._getSessionOpts());
1618
+ const updateDoc = buildMongoUpdateDoc(data, void 0, this._table.versionColumn);
1619
+ this._log("replaceMany", mongoFilter, updateDoc);
1620
+ const result = await this.collection.updateMany(mongoFilter, updateDoc, this._getSessionOpts());
1585
1621
  return {
1586
1622
  matchedCount: result.matchedCount,
1587
1623
  modifiedCount: result.modifiedCount
@@ -1781,9 +1817,11 @@ var MongoAdapter = class MongoAdapter extends _atscript_db.BaseDbAdapter {
1781
1817
  /**
1782
1818
  * Builds a MongoDB update document from a data object that may contain
1783
1819
  * field ops (`{ $inc: N }`, `{ $dec: N }`, `{ $mul: N }`).
1784
- * Regular fields go into `$set`, ops go into `$inc` / `$mul`.
1820
+ * Regular fields go into `$set`, ops go into `$inc` / `$mul`. When
1821
+ * `versionColumn` is supplied, an auto-bump (`$inc: { <col>: 1 }`) is merged
1822
+ * in so versioned tables increment monotonically on every successful update.
1785
1823
  */
1786
- function buildMongoUpdateDoc(data, ops) {
1824
+ function buildMongoUpdateDoc(data, ops, versionColumn) {
1787
1825
  const updateDoc = {};
1788
1826
  let hasData = false;
1789
1827
  for (const _ in data) {
@@ -1791,7 +1829,11 @@ function buildMongoUpdateDoc(data, ops) {
1791
1829
  break;
1792
1830
  }
1793
1831
  if (hasData) updateDoc.$set = data;
1794
- if (ops?.inc) updateDoc.$inc = ops.inc;
1832
+ if (ops?.inc || versionColumn !== void 0) {
1833
+ const inc = { ...ops?.inc };
1834
+ if (versionColumn !== void 0) inc[versionColumn] = 1;
1835
+ updateDoc.$inc = inc;
1836
+ }
1795
1837
  if (ops?.mul) updateDoc.$mul = ops.mul;
1796
1838
  return updateDoc;
1797
1839
  }
package/dist/index.d.cts CHANGED
@@ -254,7 +254,7 @@ declare class MongoAdapter extends BaseDbAdapter {
254
254
  loadRelations(rows: Array<Record<string, unknown>>, withRelations: WithRelation[], relations: ReadonlyMap<string, TDbRelation>, foreignKeys: ReadonlyMap<string, TDbForeignKey>, tableResolver?: TTableResolver): Promise<void>;
255
255
  /** Returns the context object used by CollectionPatcher. */
256
256
  getPatcherContext(): TCollectionPatcherContext;
257
- nativePatch(filter: FilterExpr, patch: unknown, ops?: TFieldOps): Promise<TDbUpdateResult>;
257
+ nativePatch(filter: FilterExpr, patch: unknown, ops?: TFieldOps, expectedVersion?: number): Promise<TDbUpdateResult>;
258
258
  onBeforeFlatten(_type: unknown): void;
259
259
  onFieldScanned(field: string, _type: unknown, metadata: TMetadataMap<AtscriptMetadata>): void;
260
260
  getMetadataOverrides(meta: TableMetadata): TMetadataOverrides;
@@ -283,6 +283,12 @@ declare class MongoAdapter extends BaseDbAdapter {
283
283
  }>;
284
284
  collectionExists(): Promise<boolean>;
285
285
  ensureCollectionExists(): Promise<void>;
286
+ /**
287
+ * Builds a Mongo filter for CAS-aware writes. Throws when `expectedVersion`
288
+ * is supplied for a non-versioned table — fail loud at the adapter boundary
289
+ * rather than silently dropping the CAS predicate.
290
+ */
291
+ private _buildCasFilter;
286
292
  /**
287
293
  * Wraps an async operation to catch MongoDB duplicate key errors
288
294
  * (code 11000) and rethrow as structured `DbError`.
@@ -293,8 +299,8 @@ declare class MongoAdapter extends BaseDbAdapter {
293
299
  findOne(query: DbQuery): Promise<Record<string, unknown> | null>;
294
300
  findMany(query: DbQuery): Promise<Array<Record<string, unknown>>>;
295
301
  count(query: DbQuery): Promise<number>;
296
- updateOne(filter: FilterExpr, data: Record<string, unknown>, ops?: TFieldOps): Promise<TDbUpdateResult>;
297
- replaceOne(filter: FilterExpr, data: Record<string, unknown>): Promise<TDbUpdateResult>;
302
+ updateOne(filter: FilterExpr, data: Record<string, unknown>, ops?: TFieldOps, expectedVersion?: number): Promise<TDbUpdateResult>;
303
+ replaceOne(filter: FilterExpr, data: Record<string, unknown>, expectedVersion?: number): Promise<TDbUpdateResult>;
298
304
  deleteOne(filter: FilterExpr): Promise<TDbDeleteResult>;
299
305
  updateMany(filter: FilterExpr, data: Record<string, unknown>, ops?: TFieldOps): Promise<TDbUpdateResult>;
300
306
  replaceMany(filter: FilterExpr, data: Record<string, unknown>): Promise<TDbUpdateResult>;
package/dist/index.d.mts CHANGED
@@ -254,7 +254,7 @@ declare class MongoAdapter extends BaseDbAdapter {
254
254
  loadRelations(rows: Array<Record<string, unknown>>, withRelations: WithRelation[], relations: ReadonlyMap<string, TDbRelation>, foreignKeys: ReadonlyMap<string, TDbForeignKey>, tableResolver?: TTableResolver): Promise<void>;
255
255
  /** Returns the context object used by CollectionPatcher. */
256
256
  getPatcherContext(): TCollectionPatcherContext;
257
- nativePatch(filter: FilterExpr, patch: unknown, ops?: TFieldOps): Promise<TDbUpdateResult>;
257
+ nativePatch(filter: FilterExpr, patch: unknown, ops?: TFieldOps, expectedVersion?: number): Promise<TDbUpdateResult>;
258
258
  onBeforeFlatten(_type: unknown): void;
259
259
  onFieldScanned(field: string, _type: unknown, metadata: TMetadataMap<AtscriptMetadata>): void;
260
260
  getMetadataOverrides(meta: TableMetadata): TMetadataOverrides;
@@ -283,6 +283,12 @@ declare class MongoAdapter extends BaseDbAdapter {
283
283
  }>;
284
284
  collectionExists(): Promise<boolean>;
285
285
  ensureCollectionExists(): Promise<void>;
286
+ /**
287
+ * Builds a Mongo filter for CAS-aware writes. Throws when `expectedVersion`
288
+ * is supplied for a non-versioned table — fail loud at the adapter boundary
289
+ * rather than silently dropping the CAS predicate.
290
+ */
291
+ private _buildCasFilter;
286
292
  /**
287
293
  * Wraps an async operation to catch MongoDB duplicate key errors
288
294
  * (code 11000) and rethrow as structured `DbError`.
@@ -293,8 +299,8 @@ declare class MongoAdapter extends BaseDbAdapter {
293
299
  findOne(query: DbQuery): Promise<Record<string, unknown> | null>;
294
300
  findMany(query: DbQuery): Promise<Array<Record<string, unknown>>>;
295
301
  count(query: DbQuery): Promise<number>;
296
- updateOne(filter: FilterExpr, data: Record<string, unknown>, ops?: TFieldOps): Promise<TDbUpdateResult>;
297
- replaceOne(filter: FilterExpr, data: Record<string, unknown>): Promise<TDbUpdateResult>;
302
+ updateOne(filter: FilterExpr, data: Record<string, unknown>, ops?: TFieldOps, expectedVersion?: number): Promise<TDbUpdateResult>;
303
+ replaceOne(filter: FilterExpr, data: Record<string, unknown>, expectedVersion?: number): Promise<TDbUpdateResult>;
298
304
  deleteOne(filter: FilterExpr): Promise<TDbDeleteResult>;
299
305
  updateMany(filter: FilterExpr, data: Record<string, unknown>, ops?: TFieldOps): Promise<TDbUpdateResult>;
300
306
  replaceMany(filter: FilterExpr, data: Record<string, unknown>): Promise<TDbUpdateResult>;
package/dist/index.mjs CHANGED
@@ -1277,9 +1277,17 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1277
1277
  createValidator: (opts) => this._table.createValidator(opts)
1278
1278
  };
1279
1279
  }
1280
- async nativePatch(filter, patch, ops) {
1281
- const mongoFilter = buildMongoFilter(filter);
1282
- const { updateFilter, updateOptions } = new CollectionPatcher(this.getPatcherContext(), patch, ops).preparePatch();
1280
+ async nativePatch(filter, patch, ops, expectedVersion) {
1281
+ const mongoFilter = this._buildCasFilter(filter, expectedVersion, "nativePatch");
1282
+ const versionColumn = this._table.versionColumn;
1283
+ const effectiveOps = versionColumn !== void 0 ? {
1284
+ ...ops,
1285
+ inc: {
1286
+ ...ops?.inc,
1287
+ [versionColumn]: 1
1288
+ }
1289
+ } : ops;
1290
+ const { updateFilter, updateOptions } = new CollectionPatcher(this.getPatcherContext(), patch, effectiveOps).preparePatch();
1283
1291
  this._log("updateOne (patch)", mongoFilter, updateFilter);
1284
1292
  const result = await this.collection.updateOne(mongoFilter, updateFilter, {
1285
1293
  ...updateOptions,
@@ -1476,6 +1484,18 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1476
1484
  }
1477
1485
  }
1478
1486
  /**
1487
+ * Builds a Mongo filter for CAS-aware writes. Throws when `expectedVersion`
1488
+ * is supplied for a non-versioned table — fail loud at the adapter boundary
1489
+ * rather than silently dropping the CAS predicate.
1490
+ */
1491
+ _buildCasFilter(filter, expectedVersion, op) {
1492
+ const versionColumn = this._table.versionColumn;
1493
+ if (expectedVersion !== void 0 && versionColumn === void 0) throw new Error(`${op}: expectedVersion requires versionColumn`);
1494
+ const mongoFilter = buildMongoFilter(filter);
1495
+ if (expectedVersion !== void 0 && versionColumn !== void 0) mongoFilter[versionColumn] = expectedVersion;
1496
+ return mongoFilter;
1497
+ }
1498
+ /**
1479
1499
  * Wraps an async operation to catch MongoDB duplicate key errors
1480
1500
  * (code 11000) and rethrow as structured `DbError`.
1481
1501
  */
@@ -1491,6 +1511,8 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1491
1511
  }
1492
1512
  }
1493
1513
  async insertOne(data) {
1514
+ const versionColumn = this._table.versionColumn;
1515
+ if (versionColumn !== void 0 && !(versionColumn in data)) data[versionColumn] = 0;
1494
1516
  if (this._incrementFields.size > 0) {
1495
1517
  const fields = this._fieldsNeedingIncrement(data);
1496
1518
  if (fields.length > 0) {
@@ -1503,6 +1525,10 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1503
1525
  return { insertedId: this._resolveInsertedId(data, result.insertedId) };
1504
1526
  }
1505
1527
  async insertMany(data) {
1528
+ const versionColumn = this._table.versionColumn;
1529
+ if (versionColumn !== void 0) {
1530
+ for (const item of data) if (!(versionColumn in item)) item[versionColumn] = 0;
1531
+ }
1506
1532
  if (this._incrementFields.size > 0) {
1507
1533
  const allFields = /* @__PURE__ */ new Set();
1508
1534
  for (const item of data) for (const f of this._fieldsNeedingIncrement(item)) allFields.add(f);
@@ -1543,9 +1569,9 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1543
1569
  ...this._getSessionOpts()
1544
1570
  });
1545
1571
  }
1546
- async updateOne(filter, data, ops) {
1547
- const mongoFilter = buildMongoFilter(filter);
1548
- const updateDoc = buildMongoUpdateDoc(data, ops);
1572
+ async updateOne(filter, data, ops, expectedVersion) {
1573
+ const mongoFilter = this._buildCasFilter(filter, expectedVersion, "updateOne");
1574
+ const updateDoc = buildMongoUpdateDoc(data, ops, this._table.versionColumn);
1549
1575
  this._log("updateOne", mongoFilter, updateDoc);
1550
1576
  const result = await this.collection.updateOne(mongoFilter, updateDoc, this._getSessionOpts());
1551
1577
  return {
@@ -1553,10 +1579,18 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1553
1579
  modifiedCount: result.modifiedCount
1554
1580
  };
1555
1581
  }
1556
- async replaceOne(filter, data) {
1557
- const mongoFilter = buildMongoFilter(filter);
1582
+ async replaceOne(filter, data, expectedVersion) {
1583
+ const mongoFilter = this._buildCasFilter(filter, expectedVersion, "replaceOne");
1584
+ const versionColumn = this._table.versionColumn;
1558
1585
  this._log("replaceOne", mongoFilter, data);
1559
- const result = await this._wrapDuplicateKeyError(() => this.collection.replaceOne(mongoFilter, data, this._getSessionOpts()));
1586
+ let result;
1587
+ if (versionColumn !== void 0) {
1588
+ const pipeline = [{ $replaceWith: {
1589
+ ...data,
1590
+ [versionColumn]: { $add: [`$${versionColumn}`, 1] }
1591
+ } }];
1592
+ result = await this._wrapDuplicateKeyError(() => this.collection.updateOne(mongoFilter, pipeline, this._getSessionOpts()));
1593
+ } else result = await this._wrapDuplicateKeyError(() => this.collection.replaceOne(mongoFilter, data, this._getSessionOpts()));
1560
1594
  return {
1561
1595
  matchedCount: result.matchedCount,
1562
1596
  modifiedCount: result.modifiedCount
@@ -1568,8 +1602,9 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1568
1602
  return { deletedCount: (await this.collection.deleteOne(mongoFilter, this._getSessionOpts())).deletedCount };
1569
1603
  }
1570
1604
  async updateMany(filter, data, ops) {
1605
+ const versionColumn = this._table.versionColumn;
1571
1606
  const mongoFilter = buildMongoFilter(filter);
1572
- const updateDoc = buildMongoUpdateDoc(data, ops);
1607
+ const updateDoc = buildMongoUpdateDoc(data, ops, versionColumn);
1573
1608
  this._log("updateMany", mongoFilter, updateDoc);
1574
1609
  const result = await this.collection.updateMany(mongoFilter, updateDoc, this._getSessionOpts());
1575
1610
  return {
@@ -1579,8 +1614,9 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1579
1614
  }
1580
1615
  async replaceMany(filter, data) {
1581
1616
  const mongoFilter = buildMongoFilter(filter);
1582
- this._log("replaceMany", mongoFilter, { $set: data });
1583
- const result = await this.collection.updateMany(mongoFilter, { $set: data }, this._getSessionOpts());
1617
+ const updateDoc = buildMongoUpdateDoc(data, void 0, this._table.versionColumn);
1618
+ this._log("replaceMany", mongoFilter, updateDoc);
1619
+ const result = await this.collection.updateMany(mongoFilter, updateDoc, this._getSessionOpts());
1584
1620
  return {
1585
1621
  matchedCount: result.matchedCount,
1586
1622
  modifiedCount: result.modifiedCount
@@ -1780,9 +1816,11 @@ var MongoAdapter = class MongoAdapter extends BaseDbAdapter {
1780
1816
  /**
1781
1817
  * Builds a MongoDB update document from a data object that may contain
1782
1818
  * field ops (`{ $inc: N }`, `{ $dec: N }`, `{ $mul: N }`).
1783
- * Regular fields go into `$set`, ops go into `$inc` / `$mul`.
1819
+ * Regular fields go into `$set`, ops go into `$inc` / `$mul`. When
1820
+ * `versionColumn` is supplied, an auto-bump (`$inc: { <col>: 1 }`) is merged
1821
+ * in so versioned tables increment monotonically on every successful update.
1784
1822
  */
1785
- function buildMongoUpdateDoc(data, ops) {
1823
+ function buildMongoUpdateDoc(data, ops, versionColumn) {
1786
1824
  const updateDoc = {};
1787
1825
  let hasData = false;
1788
1826
  for (const _ in data) {
@@ -1790,7 +1828,11 @@ function buildMongoUpdateDoc(data, ops) {
1790
1828
  break;
1791
1829
  }
1792
1830
  if (hasData) updateDoc.$set = data;
1793
- if (ops?.inc) updateDoc.$inc = ops.inc;
1831
+ if (ops?.inc || versionColumn !== void 0) {
1832
+ const inc = { ...ops?.inc };
1833
+ if (versionColumn !== void 0) inc[versionColumn] = 1;
1834
+ updateDoc.$inc = inc;
1835
+ }
1794
1836
  if (ops?.mul) updateDoc.$mul = ops.mul;
1795
1837
  return updateDoc;
1796
1838
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atscript/db-mongo",
3
- "version": "0.1.83",
3
+ "version": "0.1.85",
4
4
  "description": "Mongodb plugin for atscript.",
5
5
  "keywords": [
6
6
  "atscript",
@@ -49,13 +49,14 @@
49
49
  "@atscript/core": "^0.1.59",
50
50
  "@atscript/typescript": "^0.1.59",
51
51
  "mongodb": "^6.17.0",
52
+ "mongodb-memory-server-core": "^10.0.0",
52
53
  "unplugin-atscript": "^0.1.59"
53
54
  },
54
55
  "peerDependencies": {
55
56
  "@atscript/core": "^0.1.59",
56
57
  "@atscript/typescript": "^0.1.59",
57
58
  "mongodb": "^6.17.0",
58
- "@atscript/db": "^0.1.83"
59
+ "@atscript/db": "^0.1.85"
59
60
  },
60
61
  "scripts": {
61
62
  "postinstall": "asc -f dts",