equipped 5.0.16 → 5.0.18
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/CHANGELOG.md +4 -0
- package/dist/cjs/dbs/base/{_instance.cjs → changes.cjs} +4 -22
- package/dist/cjs/dbs/base/changes.cjs.map +1 -0
- package/dist/cjs/dbs/base/changes.min.cjs +2 -0
- package/dist/cjs/dbs/base/changes.min.cjs.map +1 -0
- package/dist/cjs/dbs/base/db.cjs +13 -0
- package/dist/cjs/dbs/base/db.cjs.map +1 -0
- package/dist/cjs/dbs/base/db.min.cjs +2 -0
- package/dist/cjs/dbs/base/db.min.cjs.map +1 -0
- package/dist/cjs/dbs/index.cjs +3 -3
- package/dist/cjs/dbs/index.cjs.map +1 -1
- package/dist/cjs/dbs/index.min.cjs +1 -1
- package/dist/cjs/dbs/index.min.cjs.map +1 -1
- package/dist/cjs/dbs/mongo/changes.cjs +6 -5
- package/dist/cjs/dbs/mongo/changes.cjs.map +1 -1
- package/dist/cjs/dbs/mongo/changes.min.cjs +1 -1
- package/dist/cjs/dbs/mongo/changes.min.cjs.map +1 -1
- package/dist/cjs/dbs/mongo/db.cjs +210 -0
- package/dist/cjs/dbs/mongo/db.cjs.map +1 -0
- package/dist/cjs/dbs/mongo/db.min.cjs +2 -0
- package/dist/cjs/dbs/mongo/db.min.cjs.map +1 -0
- package/dist/cjs/instance/index.cjs +7 -7
- package/dist/cjs/instance/index.cjs.map +1 -1
- package/dist/cjs/instance/index.min.cjs +3 -3
- package/dist/cjs/instance/index.min.cjs.map +1 -1
- package/dist/cjs/server/impls/base.cjs +1 -1
- package/dist/cjs/server/impls/base.cjs.map +1 -1
- package/dist/cjs/server/impls/base.min.cjs +1 -1
- package/dist/cjs/server/impls/base.min.cjs.map +1 -1
- package/dist/cjs/server/pipes.cjs.map +1 -1
- package/dist/cjs/server/pipes.min.cjs.map +1 -1
- package/dist/esm/dbs/base/changes.min.mjs +2 -0
- package/dist/esm/dbs/base/changes.min.mjs.map +1 -0
- package/dist/esm/dbs/base/{_instance.mjs → changes.mjs} +3 -21
- package/dist/esm/dbs/base/changes.mjs.map +1 -0
- package/dist/esm/dbs/base/db.min.mjs +2 -0
- package/dist/esm/dbs/base/db.min.mjs.map +1 -0
- package/dist/esm/dbs/base/db.mjs +13 -0
- package/dist/esm/dbs/base/db.mjs.map +1 -0
- package/dist/esm/dbs/index.min.mjs +1 -1
- package/dist/esm/dbs/index.min.mjs.map +1 -1
- package/dist/esm/dbs/index.mjs +2 -2
- package/dist/esm/dbs/index.mjs.map +1 -1
- package/dist/esm/dbs/mongo/changes.min.mjs +1 -1
- package/dist/esm/dbs/mongo/changes.min.mjs.map +1 -1
- package/dist/esm/dbs/mongo/changes.mjs +4 -3
- package/dist/esm/dbs/mongo/changes.mjs.map +1 -1
- package/dist/esm/dbs/mongo/db.min.mjs +2 -0
- package/dist/esm/dbs/mongo/db.min.mjs.map +1 -0
- package/dist/esm/dbs/mongo/db.mjs +210 -0
- package/dist/esm/dbs/mongo/db.mjs.map +1 -0
- package/dist/esm/instance/index.min.mjs +3 -3
- package/dist/esm/instance/index.min.mjs.map +1 -1
- package/dist/esm/instance/index.mjs +7 -7
- package/dist/esm/instance/index.mjs.map +1 -1
- package/dist/esm/server/impls/base.min.mjs +1 -1
- package/dist/esm/server/impls/base.min.mjs.map +1 -1
- package/dist/esm/server/impls/base.mjs +1 -1
- package/dist/esm/server/impls/base.mjs.map +1 -1
- package/dist/esm/server/pipes.min.mjs.map +1 -1
- package/dist/esm/server/pipes.mjs.map +1 -1
- package/dist/types/{index-CfuXekZB.d.ts → db-Kss5l53t.d.ts} +32 -33
- package/dist/types/dbs/base/{_instance.js → changes.js} +2 -20
- package/dist/types/dbs/base/db.js +12 -0
- package/dist/types/dbs/index.d.ts +5 -5
- package/dist/types/dbs/index.js +2 -2
- package/dist/types/dbs/mongo/changes.js +4 -3
- package/dist/types/dbs/mongo/db.js +209 -0
- package/dist/types/{index-BS53hVyq.d.ts → index-EDi2UvAe.d.ts} +6 -6
- package/dist/types/index.d.ts +2 -2
- package/dist/types/instance/index.d.ts +2 -2
- package/dist/types/instance/index.js +7 -7
- package/dist/types/server/impls/base.js +1 -1
- package/dist/types/server/index.d.ts +3 -3
- package/package.json +7 -7
- package/dist/cjs/dbs/base/_instance.cjs.map +0 -1
- package/dist/cjs/dbs/base/_instance.min.cjs +0 -2
- package/dist/cjs/dbs/base/_instance.min.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/api.cjs +0 -152
- package/dist/cjs/dbs/mongo/api.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/api.min.cjs +0 -2
- package/dist/cjs/dbs/mongo/api.min.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/index.cjs +0 -71
- package/dist/cjs/dbs/mongo/index.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/index.min.cjs +0 -2
- package/dist/cjs/dbs/mongo/index.min.cjs.map +0 -1
- package/dist/esm/dbs/base/_instance.min.mjs +0 -2
- package/dist/esm/dbs/base/_instance.min.mjs.map +0 -1
- package/dist/esm/dbs/base/_instance.mjs.map +0 -1
- package/dist/esm/dbs/mongo/api.min.mjs +0 -2
- package/dist/esm/dbs/mongo/api.min.mjs.map +0 -1
- package/dist/esm/dbs/mongo/api.mjs +0 -152
- package/dist/esm/dbs/mongo/api.mjs.map +0 -1
- package/dist/esm/dbs/mongo/index.min.mjs +0 -2
- package/dist/esm/dbs/mongo/index.min.mjs.map +0 -1
- package/dist/esm/dbs/mongo/index.mjs +0 -71
- package/dist/esm/dbs/mongo/index.mjs.map +0 -1
- package/dist/types/dbs/mongo/api.js +0 -151
- package/dist/types/dbs/mongo/index.js +0 -70
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [5.0.18](https://github.com/kevinand11/equipped/compare/v5.0.17...v5.0.18) (2025-07-07)
|
|
6
|
+
|
|
7
|
+
### [5.0.17](https://github.com/kevinand11/equipped/compare/v5.0.16...v5.0.17) (2025-07-07)
|
|
8
|
+
|
|
5
9
|
### [5.0.16](https://github.com/kevinand11/equipped/compare/v5.0.15...v5.0.16) (2025-07-06)
|
|
6
10
|
|
|
7
11
|
|
|
@@ -1,28 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);
|
|
2
2
|
var _indexcjs = require('../../errors/index.cjs');
|
|
3
|
-
var _indexcjs3 = require('../../instance/index.cjs');
|
|
4
3
|
const TopicPrefix = "db-changes";
|
|
5
|
-
class Db {
|
|
6
|
-
constructor(config) {
|
|
7
|
-
this.config = config;
|
|
8
|
-
}
|
|
9
|
-
getScopedDb(db) {
|
|
10
|
-
return _indexcjs3.Instance.get().getScopedName(db).replaceAll(".", "-");
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
4
|
class DbChange {
|
|
14
5
|
constructor(config, callbacks, mapper) {
|
|
15
6
|
this.config = config;
|
|
16
|
-
this
|
|
17
|
-
this
|
|
18
|
-
}
|
|
19
|
-
#callbacks = {};
|
|
20
|
-
#mapper;
|
|
21
|
-
get callbacks() {
|
|
22
|
-
return Object.freeze(this.#callbacks);
|
|
23
|
-
}
|
|
24
|
-
get mapper() {
|
|
25
|
-
return this.#mapper;
|
|
7
|
+
this.callbacks = callbacks;
|
|
8
|
+
this.mapper = mapper;
|
|
26
9
|
}
|
|
27
10
|
async configureConnector(key, data) {
|
|
28
11
|
const instance = _axios2.default.create({ baseURL: this.config.debeziumUrl });
|
|
@@ -47,6 +30,5 @@ class DbChange {
|
|
|
47
30
|
|
|
48
31
|
|
|
49
32
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
//# sourceMappingURL=_instance.cjs.map
|
|
33
|
+
exports.DbChange = DbChange; exports.TopicPrefix = TopicPrefix;
|
|
34
|
+
//# sourceMappingURL=changes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/base/changes.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/base/changes.cjs"],"names":[],"mappings":"AAAA,61BAAkB;AAIlB,kDAA8B;AAEvB,MAAM,YAAA,EAAc,YAAA;AAEpB,MAAe,SAA4E;AAAA,EACjG,WAAA,CACW,MAAA,EACA,SAAA,EACA,MAAA,EACT;AAHS,IAAA,IAAA,CAAA,OAAA,EAAA,MAAA;AACA,IAAA,IAAA,CAAA,UAAA,EAAA,SAAA;AACA,IAAA,IAAA,CAAA,OAAA,EAAA,MAAA;AAAA,EACR;AAAA,EAEH,MAAgB,kBAAA,CAAmB,GAAA,EAAa,IAAA,EAA8B;AAC7E,IAAA,MAAM,SAAA,EAAW,eAAA,CAAM,MAAA,CAAO,EAAE,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,YAAY,CAAC,CAAA;AAClE,IAAA,OAAO,MAAM,QAAA,CACX,GAAA,CAAI,CAAA,YAAA,EAAe,GAAG,CAAA,OAAA,CAAA,EAAW;AAAA,MACjC,cAAA,EAAgB,WAAA;AAAA,MAChB,uBAAA,EAAyB,OAAA;AAAA,MACzB,2CAAA,EAA6C,CAAA,EAAA,CAAA;AAAA,MAC7C,mCAAA,EAAqC,IAAA;AAAA,MACrC,eAAA,EAAiB,6CAAA;AAAA,MACjB,8BAAA,EAAgC,OAAA;AAAA,MAChC,iBAAA,EAAmB,6CAAA;AAAA,MACnB,gCAAA,EAAkC,OAAA;AAAA,MAClC,GAAG;AAAA,IACJ,CAAC,CAAA,CACA,IAAA,CAAK,MAAA,CAAA,EAAA,GAAY;AACjB,MAAA,MAAM,OAAA,EAAS,MAAM,QAAA,CAAS,GAAA,CAAI,CAAA,YAAA,EAAe,GAAG,CAAA,OAAA,CAAS,CAAA;AAC7D,MAAA,wCAAO,MAAA,mBAAO,IAAA,qBAAK,GAAG,CAAA,6BAAG,MAAA,6BAAQ,QAAA,0BAAA,CAAW,GAAG,GAAA,UAAK,OAAA;AAAA,IACrD,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,EAAA,GAAQ;AACf,MAAA,MAAM,IAAI,4BAAA,CAAc,CAAA,2BAAA,CAAA,EAA+B,EAAE,IAAI,CAAA,EAAG,GAAG,CAAA;AAAA,IACpE,CAAC,CAAA;AAAA,EACH;AACD;ACRA;AACE;AACA;AACF,+DAAC","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/base/changes.cjs","sourcesContent":["import axios from 'axios'\n\nimport * as core from './core'\nimport { DbChangeConfig } from './types'\nimport { EquippedError } from '../../errors'\n\nexport const TopicPrefix = 'db-changes'\n\nexport abstract class DbChange<Model extends core.Model<core.IdType>, Entity extends core.Entity> {\n\tconstructor(\n\t\tprotected config: DbChangeConfig,\n\t\tprotected callbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tprotected mapper: (model: Model) => Entity,\n\t) {}\n\n\tprotected async configureConnector(key: string, data: Record<string, string>) {\n\t\tconst instance = axios.create({ baseURL: this.config.debeziumUrl })\n\t\treturn await instance\n\t\t\t.put(`/connectors/${key}/config`, {\n\t\t\t\t'topic.prefix': TopicPrefix,\n\t\t\t\t'topic.creation.enable': 'false',\n\t\t\t\t'topic.creation.default.replication.factor': `-1`,\n\t\t\t\t'topic.creation.default.partitions': '-1',\n\t\t\t\t'key.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'key.converter.schemas.enable': 'false',\n\t\t\t\t'value.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'value.converter.schemas.enable': 'false',\n\t\t\t\t...data,\n\t\t\t})\n\t\t\t.then(async () => {\n\t\t\t\tconst topics = await instance.get(`/connectors/${key}/topics`)\n\t\t\t\treturn topics.data[key]?.topics?.includes?.(key) ?? false\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthrow new EquippedError(`Failed to configure watcher`, { key }, err)\n\t\t\t})\n\t}\n}\n",null]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _indexmincjs = require('../../errors/index.min.cjs');const a="db-changes";class g{constructor(e,o,t){this.config=e;this.callbacks=o;this.mapper=t}async configureConnector(e,o){const t=_axios2.default.create({baseURL:this.config.debeziumUrl});return await t.put(`/connectors/${e}/config`,{"topic.prefix":a,"topic.creation.enable":"false","topic.creation.default.replication.factor":"-1","topic.creation.default.partitions":"-1","key.converter":"org.apache.kafka.connect.json.JsonConverter","key.converter.schemas.enable":"false","value.converter":"org.apache.kafka.connect.json.JsonConverter","value.converter.schemas.enable":"false",...o}).then(async()=>await _asyncNullishCoalesce(await _asyncOptionalChain([(await t.get(`/connectors/${e}/topics`)), 'access', async _ => _.data, 'access', async _2 => _2[e], 'optionalAccess', async _3 => _3.topics, 'optionalAccess', async _4 => _4.includes, 'optionalCall', async _5 => _5(e)]), async () => (!1))).catch(c=>{throw new (0, _indexmincjs.EquippedError)("Failed to configure watcher",{key:e},c)})}}exports.DbChange = g; exports.TopicPrefix = a;
|
|
2
|
+
//# sourceMappingURL=changes.min.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/base/changes.ts"],"names":["config","callbacks","mapper","axios","instance","key","TopicPrefix","err","EquippedError"],"mappings":"AAAA,q4BAAkB,yDAMS,MAEpB,CAAA,CAAA,YACN,CAAA,MACWA,CACAC,CAAAA,WADA,CAAA,CAAA,CAAA,CAAA,CAAAD,CAAAA,CACA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAAC,IACA,CAAA,SAAAC,CACR,CAEH,CAAA,IAAA,CAAgB,MAAA,CAAA,CAAA,CAAA,MAAA,kBACEC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,MAAS,CAAA,CAAA,eAAA,CAAA,MAAc,CAAA,CAAA,OAAO,CAAA,IAAA,CAAA,MACrD,CAAA,WAAO,CAAMC,CAAAA,CACX,OAAI,MAAA,CAAA,CAAA,GAAA,CAAeC,CAAG,YACtB,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAgBC,cAChB,CAAA,CAAA,CAAA,uBACA,CAAA,OAAA,CAAA,2CACA,CAAA,IAAA,CAAA,mCACA,CAAA,IAAA,CAAA,eAAiB,CAAA,6CACjB,CAAA,8BACA,CAAA,OAAA,CAAA,iBAAmB,CAAA,6CACnB,CAAA,gCAEA,CACA,OAAK,CAAA,GAAA,CAAA,CAAA,CAAA,CACU,IAAA,CAAA,KAAe,CAAA,CAAI,yDAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAeD,CAAG,YACtC,EAAA,CAAA,CAAA,OAAW,CAAA,CAAA,CAAA,yBAAA,IAAQ,2BAAA,CAAA,CAAA,mCAAA,MAAc,mCAAK,QAEpD,gCAAOE,CAAAA,CAAAA,GAAQ,eACf,CAAA,GAAA,CAAA,CAAA,KAAUC,CAAAA,CAAc,EAAA,CAAA,MAAA,IAAA,+BAAA,CAAA,6BAG5B,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,8CAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/base/changes.min.cjs","sourcesContent":["import axios from 'axios'\n\nimport * as core from './core'\nimport { DbChangeConfig } from './types'\nimport { EquippedError } from '../../errors'\n\nexport const TopicPrefix = 'db-changes'\n\nexport abstract class DbChange<Model extends core.Model<core.IdType>, Entity extends core.Entity> {\n\tconstructor(\n\t\tprotected config: DbChangeConfig,\n\t\tprotected callbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tprotected mapper: (model: Model) => Entity,\n\t) {}\n\n\tprotected async configureConnector(key: string, data: Record<string, string>) {\n\t\tconst instance = axios.create({ baseURL: this.config.debeziumUrl })\n\t\treturn await instance\n\t\t\t.put(`/connectors/${key}/config`, {\n\t\t\t\t'topic.prefix': TopicPrefix,\n\t\t\t\t'topic.creation.enable': 'false',\n\t\t\t\t'topic.creation.default.replication.factor': `-1`,\n\t\t\t\t'topic.creation.default.partitions': '-1',\n\t\t\t\t'key.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'key.converter.schemas.enable': 'false',\n\t\t\t\t'value.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'value.converter.schemas.enable': 'false',\n\t\t\t\t...data,\n\t\t\t})\n\t\t\t.then(async () => {\n\t\t\t\tconst topics = await instance.get(`/connectors/${key}/topics`)\n\t\t\t\treturn topics.data[key]?.topics?.includes?.(key) ?? false\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthrow new EquippedError(`Failed to configure watcher`, { key }, err)\n\t\t\t})\n\t}\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _indexcjs = require('../../instance/index.cjs');
|
|
2
|
+
class Db {
|
|
3
|
+
constructor(config) {
|
|
4
|
+
this.config = config;
|
|
5
|
+
}
|
|
6
|
+
getScopedDb(db) {
|
|
7
|
+
return _indexcjs.Instance.get().getScopedName(db).replaceAll(".", "-");
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.Db = Db;
|
|
13
|
+
//# sourceMappingURL=db.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/base/db.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/base/db.cjs"],"names":[],"mappings":"AAEA,6HAAyB;AAIlB,MAAe,GAA8B;AAAA,EACnD,WAAA,CAAsB,MAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,OAAA,EAAA,MAAA;AAAA,EAAmB;AAAA,EAE/B,WAAA,CAAY,EAAA,EAAY;AACjC,IAAA,OAAO,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,EAAE,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AAAA,EAC5D;AAKD;ACPA;AACE;AACF,gBAAC","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/base/db.cjs","sourcesContent":["import * as core from './core'\nimport { DbConfig } from './types'\nimport { Instance } from '../../instance'\n\nexport type TableOptions = { skipAudit?: boolean }\n\nexport abstract class Db<IdKey extends core.IdType> {\n\tconstructor(protected config: DbConfig) {}\n\n\tprotected getScopedDb(db: string) {\n\t\treturn Instance.get().getScopedName(db).replaceAll('.', '-')\n\t}\n\n\tabstract use<Model extends core.Model<IdKey>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t): core.Table<IdKey, Model, Entity>\n}\n",null]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _indexmincjs = require('../../instance/index.min.cjs');class i{constructor(e){this.config=e}getScopedDb(e){return _indexmincjs.Instance.get().getScopedName(e).replaceAll(".","-")}}exports.Db = i;
|
|
2
|
+
//# sourceMappingURL=db.min.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/base/db.ts"],"names":["config","db"],"mappings":"AAEA,oIAKC,MAAsBA,CAAkB,CAAlB,WAAA,CAAAA,CAAmB,CAE/B,CAAA,IAAA,CAAA,MAAYC,CAAAA,CAAY,CACjC,WAAgB,CAAA,CAAI,CAAA,CAAE,OAAA,qBAAA,CAAA,GAAA,CAAA,CAAcA,CAAE,aAAa,CAAA,CAAA,CAAA,CAAK,UAM1D,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,eAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/base/db.min.cjs","sourcesContent":["import * as core from './core'\nimport { DbConfig } from './types'\nimport { Instance } from '../../instance'\n\nexport type TableOptions = { skipAudit?: boolean }\n\nexport abstract class Db<IdKey extends core.IdType> {\n\tconstructor(protected config: DbConfig) {}\n\n\tprotected getScopedDb(db: string) {\n\t\treturn Instance.get().getScopedName(db).replaceAll('.', '-')\n\t}\n\n\tabstract use<Model extends core.Model<IdKey>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t): core.Table<IdKey, Model, Entity>\n}\n"]}
|
package/dist/cjs/dbs/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var
|
|
2
|
-
var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var _corecjs = require('./base/core.cjs'); _createStarExport(_corecjs);
|
|
2
|
+
var _dbcjs = require('./base/db.cjs'); _createStarExport(_dbcjs);
|
|
3
3
|
var _typescjs = require('./base/types.cjs'); _createStarExport(_typescjs);
|
|
4
4
|
var _changescjs = require('./mongo/changes.cjs'); _createStarExport(_changescjs);
|
|
5
|
-
var
|
|
5
|
+
var _dbcjs3 = require('./mongo/db.cjs'); _createStarExport(_dbcjs3);
|
|
6
6
|
var _pipescjs = require('./pipes.cjs'); _createStarExport(_pipescjs);
|
|
7
7
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/dbs/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/dbs/index.ts"],"names":[],"mappings":"AAAA,waAAc;AACd,iEAAc;AACd,0EAAc;AACd,iFAAc;AACd,oEAAc;AACd,qEAAc","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/index.cjs","sourcesContent":["export * from './base/core'\nexport * from './base/db'\nexport * from './base/types'\nexport * from './mongo/changes'\nexport * from './mongo/db'\nexport * from './pipes'\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var _coremincjs = require('./base/core.min.cjs'); _createStarExport(_coremincjs);var _dbmincjs = require('./base/db.min.cjs'); _createStarExport(_dbmincjs);var _typesmincjs = require('./base/types.min.cjs'); _createStarExport(_typesmincjs);var _changesmincjs = require('./mongo/changes.min.cjs'); _createStarExport(_changesmincjs);var _dbmincjs3 = require('./mongo/db.min.cjs'); _createStarExport(_dbmincjs3);var _pipesmincjs = require('./pipes.min.cjs'); _createStarExport(_pipesmincjs);
|
|
2
2
|
//# sourceMappingURL=index.min.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/dbs/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/dbs/index.ts"],"names":[],"mappings":"AAAA,kbACA,2EACc,oFACA,2FAEA,8EAAA,+EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/index.min.cjs","sourcesContent":["export * from './base/core'\nexport * from './base/db'\nexport * from './base/types'\nexport * from './mongo/changes'\nexport * from './mongo/db'\nexport * from './pipes'\n"]}
|
|
@@ -3,17 +3,19 @@ var _valleyed = require('valleyed');
|
|
|
3
3
|
var _indexcjs = require('../../errors/index.cjs');
|
|
4
4
|
var _indexcjs3 = require('../../instance/index.cjs');
|
|
5
5
|
var _indexcjs5 = require('../../utilities/index.cjs');
|
|
6
|
-
var
|
|
7
|
-
class MongoDbChange extends
|
|
6
|
+
var _changescjs = require('../base/changes.cjs');
|
|
7
|
+
class MongoDbChange extends _changescjs.DbChange {
|
|
8
8
|
#started = false;
|
|
9
|
-
constructor(config, change,
|
|
9
|
+
constructor(config, change, collection, callbacks, mapper) {
|
|
10
10
|
super(change, callbacks, mapper);
|
|
11
11
|
const hydrate = (data) => data._id ? {
|
|
12
12
|
...data,
|
|
13
13
|
_id: makeId(_nullishCoalesce(data._id["$oid"], () => ( data._id)))
|
|
14
14
|
} : void 0;
|
|
15
|
+
const dbName = collection.dbName;
|
|
16
|
+
const colName = collection.collectionName;
|
|
15
17
|
const dbColName = `${dbName}.${colName}`;
|
|
16
|
-
const topic = `${
|
|
18
|
+
const topic = `${_changescjs.TopicPrefix}.${dbColName}`;
|
|
17
19
|
const hexId = "5f5f65717569707065645f5f";
|
|
18
20
|
const TestId = makeId(hexId);
|
|
19
21
|
const condition = { _id: TestId };
|
|
@@ -50,7 +52,6 @@ class MongoDbChange extends __instancecjs.DbChange {
|
|
|
50
52
|
async () => {
|
|
51
53
|
if (this.#started) return;
|
|
52
54
|
this.#started = true;
|
|
53
|
-
const collection = client.db(dbName).collection(colName);
|
|
54
55
|
await _indexcjs5.retry.call(void 0,
|
|
55
56
|
async () => {
|
|
56
57
|
const started = await this.configureConnector(topic, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/dbs/mongo/changes.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/mongo/changes.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs"],"names":[],"mappings":"AAAA,mtBAA6C;AAC7C,oCAAuB;AAEvB,kDAA8B;AAC9B,qDAAyB;AACzB,sDAAsB;AACtB,iDAAsC;AAK/B,MAAM,cAAA,QAA6F,qBAAwB;AAAA,EACjI,CAAA,QAAA,EAAW,KAAA;AAAA,EAEX,WAAA,CACC,MAAA,EACA,MAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACC;AACD,IAAA,KAAA,CAAM,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAE/B,IAAA,MAAM,QAAA,EAAU,CAAC,IAAA,EAAA,GAChB,IAAA,CAAK,IAAA,EACF;AAAA,MACA,GAAG,IAAA;AAAA,MACH,GAAA,EAAK,MAAA,kBAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,UAAK,IAAA,CAAK,KAAG;AAAA,IACzC,EAAA,EACC,KAAA,CAAA;AAEJ,IAAA,MAAM,OAAA,EAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,MAAM,QAAA,EAAU,UAAA,CAAW,cAAA;AAC3B,IAAA,MAAM,UAAA,EAAY,CAAA,EAAA;AACD,IAAA;AAEH,IAAA;AACC,IAAA;AACG,IAAA;AAEF,IAAA;AACf,MAAA;AACkC,MAAA;AACtB,QAAA;AAEE,QAAA;AACD,QAAA;AAEA,QAAA;AACD,QAAA;AACC,QAAA;AAED,QAAA;AACC,UAAA;AACF,YAAA;AACD,YAAA;AACP,UAAA;AACO,QAAA;AACG,UAAA;AACF,YAAA;AACD,YAAA;AACE,YAAA;AACT,UAAA;AACO,QAAA;AACG,UAAA;AACF,YAAA;AACD,YAAA;AACP,UAAA;AACH,MAAA;AACa,MAAA;AACd,IAAA;AAES,IAAA;AACR,MAAA;AACY,MAAA;AACF,QAAA;AACJ,QAAA;AAEC,QAAA;AACO,UAAA;AACL,YAAA;AACL,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AAEG,YAAA;AACE,YAAA;AACA,YAAA;AACG,YAAA;AACA,YAAA;AACV,UAAA;AACA,UAAA;AACA,UAAA;AACQ,QAAA;AACV,MAAA;AACA,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAQ+B;AAC1B,EAAA;AACQ,IAAA;AACJ,EAAA;AACA,IAAA;AACR,EAAA;AACD;AC/BuB;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs","sourcesContent":["import { Collection, Filter, ObjectId } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { retry } from '../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport { DbChangeConfig } from '../base/types'\nimport { MongoDbConfig } from '../pipes'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: makeId(data._id['$oid'] ?? data._id),\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst hexId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst TestId = makeId(hexId)\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.createSubscriber(\n\t\t\ttopic as never,\n\t\t\tasync (data: DbDocumentChange) => {\n\t\t\t\tconst op = data.op\n\n\t\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\t\tif (before) before = hydrate(before)\n\t\t\t\tif (after) after = hydrate(after)\n\t\t\t\tif (before?.__id === TestId || after?.__id === TestId) return\n\n\t\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\t\tbefore: null,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: null,\n\t\t\t\t\t})\n\t\t\t},\n\t\t\t{ skipScope: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tif (this.#started) return\n\t\t\t\tthis.#started = true\n\n\t\t\t\tawait retry(\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\t\treturn { done: false }\n\t\t\t\t\t},\n\t\t\t\t\t6,\n\t\t\t\t\t10_000,\n\t\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n\nconst makeId = (id: string) => {\n\ttry {\n\t\treturn new ObjectId(id)\n\t} catch {\n\t\treturn id\n\t}\n}\n",null]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _mongodb = require('mongodb');var _valleyed = require('valleyed');var _indexmincjs = require('../../errors/index.min.cjs');var _indexmincjs3 = require('../../instance/index.min.cjs');var _indexmincjs5 = require('../../utilities/index.min.cjs');var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _mongodb = require('mongodb');var _valleyed = require('valleyed');var _indexmincjs = require('../../errors/index.min.cjs');var _indexmincjs3 = require('../../instance/index.min.cjs');var _indexmincjs5 = require('../../utilities/index.min.cjs');var _changesmincjs = require('../base/changes.min.cjs');class z extends _changesmincjs.DbChange{#e=!1;constructor(h,d,r,g,_){super(d,g,_);const l=e=>e._id?{...e,_id:b(_nullishCoalesce(e._id.$oid, () => (e._id)))}:void 0,C=r.dbName,f=r.collectionName,n=`${C}.${f}`,m=`${_changesmincjs.TopicPrefix}.${n}`,a=b("5f5f65717569707065645f5f"),p={_id:a};d.eventBus.createSubscriber(m,async e=>{const s=e.op;let t=JSON.parse(_nullishCoalesce(e.before, () => ("null"))),o=JSON.parse(_nullishCoalesce(e.after, () => ("null")));t&&(t=l(t)),o&&(o=l(o)),!(_optionalChain([t, 'optionalAccess', _2 => _2.__id])===a||_optionalChain([o, 'optionalAccess', _3 => _3.__id])===a)&&(s==="c"&&this.callbacks.created&&o?await this.callbacks.created({before:null,after:this.mapper(o)}):s==="u"&&this.callbacks.updated&&t&&o?await this.callbacks.updated({before:this.mapper(t),after:this.mapper(o),changes:_valleyed.differ.from(_valleyed.differ.diff(t,o))}):s==="d"&&this.callbacks.deleted&&t&&await this.callbacks.deleted({before:this.mapper(t),after:null}))},{skipScope:!0}),_indexmincjs3.Instance.on("start",async()=>{this.#e||(this.#e=!0,await _indexmincjs5.retry.call(void 0, async()=>await this.configureConnector(m,{"connector.class":"io.debezium.connector.mongodb.MongoDbConnector","capture.mode":"change_streams_update_full_with_pre_image","mongodb.connection.string":h.uri,"collection.include.list":n,"snapshot.mode":"when_needed"})?{done:!0,value:!0}:(await r.findOneAndUpdate(p,{$set:{colName:f}},{upsert:!0}),await r.findOneAndDelete(p),_indexmincjs3.Instance.get().log.warn(`Waiting for db changes for ${n} to start...`),{done:!1}),6,1e4).catch(e=>_indexmincjs3.Instance.crash(new (0, _indexmincjs.EquippedError)("Failed to start db changes",{dbColName:n},e))))},10)}}const b=i=>{try{return new (0, _mongodb.ObjectId)(i)}catch (e2){return i}};exports.MongoDbChange = z;
|
|
2
2
|
//# sourceMappingURL=changes.min.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/dbs/mongo/changes.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/mongo/changes.ts"],"names":["change","data","colName","collection","topic","dbColName","TestId"],"mappings":"AAAA,mtBAA6C,oCACtB,yDAGd,4DACa,6DACgB,wDAe9BA,MAEN,EAAA,QAAiBC,uBAChBA,CAAAA,CAAK,CAAA,CAAA,CAAA,CACF,CACA,WACYA,CAAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAWA,KAAQ,CACzC,CAAA,CACC,CAAA,CAAA,CAAA,CAAA,CAAA,MAEsB,CAAA,CAAA,CAAA,EAAA,CAAA,CACpBC,GAAUC,CAAW,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,kBAAA,CAAA,CAAA,GACT,CAAA,IAAS,SAAA,CAAID,CAAO,KAChCE,CAAAA,CAAQ,CAAA,KAAc,CAAA,CAAIC,CAAS,CAAA,CAAA,CAGnCC,MADQ,CAAA,CAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.min.cjs","sourcesContent":["import { Collection, Filter, ObjectId } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { retry } from '../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport { DbChangeConfig } from '../base/types'\nimport { MongoDbConfig } from '../pipes'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: makeId(data._id['$oid'] ?? data._id),\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst hexId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst TestId = makeId(hexId)\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.createSubscriber(\n\t\t\ttopic as never,\n\t\t\tasync (data: DbDocumentChange) => {\n\t\t\t\tconst op = data.op\n\n\t\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\t\tif (before) before = hydrate(before)\n\t\t\t\tif (after) after = hydrate(after)\n\t\t\t\tif (before?.__id === TestId || after?.__id === TestId) return\n\n\t\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\t\tbefore: null,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: null,\n\t\t\t\t\t})\n\t\t\t},\n\t\t\t{ skipScope: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tif (this.#started) return\n\t\t\t\tthis.#started = true\n\n\t\t\t\tawait retry(\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\t\treturn { done: false }\n\t\t\t\t\t},\n\t\t\t\t\t6,\n\t\t\t\t\t10_000,\n\t\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n\nconst makeId = (id: string) => {\n\ttry {\n\t\treturn new ObjectId(id)\n\t} catch {\n\t\treturn id\n\t}\n}\n"]}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _mongodb = require('mongodb');
|
|
2
|
+
var _changescjs = require('./changes.cjs');
|
|
3
|
+
var _querycjs = require('./query.cjs');
|
|
4
|
+
var _indexcjs = require('../../errors/index.cjs');
|
|
5
|
+
var _indexcjs3 = require('../../instance/index.cjs');
|
|
6
|
+
var _dbcjs = require('../base/db.cjs');
|
|
7
|
+
const idKey = "_id";
|
|
8
|
+
class MongoDb extends _dbcjs.Db {
|
|
9
|
+
constructor(mongoConfig, dbConfig) {
|
|
10
|
+
super(dbConfig);
|
|
11
|
+
this.mongoConfig = mongoConfig;
|
|
12
|
+
this.client = new (0, _mongodb.MongoClient)(mongoConfig.uri);
|
|
13
|
+
_indexcjs3.Instance.on(
|
|
14
|
+
"start",
|
|
15
|
+
async () => {
|
|
16
|
+
await this.client.connect();
|
|
17
|
+
const grouped = this.#cols.reduce((acc, cur) => {
|
|
18
|
+
if (!acc[cur.db]) acc[cur.db] = [];
|
|
19
|
+
acc[cur.db].push(cur.col);
|
|
20
|
+
return acc;
|
|
21
|
+
}, {});
|
|
22
|
+
const options = {
|
|
23
|
+
changeStreamPreAndPostImages: { enabled: true }
|
|
24
|
+
};
|
|
25
|
+
await Promise.all(
|
|
26
|
+
Object.entries(grouped).map(async ([dbName, colNames]) => {
|
|
27
|
+
const db = this.client.db(dbName);
|
|
28
|
+
const collections = await db.listCollections().toArray();
|
|
29
|
+
return colNames.map(async (colName) => {
|
|
30
|
+
const existing = collections.find((collection) => collection.name === colName);
|
|
31
|
+
if (existing) {
|
|
32
|
+
if (_optionalChain([existing, 'access', _ => _.options, 'optionalAccess', _2 => _2.changeStreamPreAndPostImages, 'optionalAccess', _3 => _3.enabled]) !== options.changeStreamPreAndPostImages.enabled)
|
|
33
|
+
await db.command({ collMod: colName, ...options });
|
|
34
|
+
} else await db.createCollection(colName, options);
|
|
35
|
+
});
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
},
|
|
39
|
+
3
|
|
40
|
+
);
|
|
41
|
+
_indexcjs3.Instance.on("close", async () => this.client.close(), 1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#cols = [];
|
|
45
|
+
async session(callback) {
|
|
46
|
+
return this.client.withSession(callback);
|
|
47
|
+
}
|
|
48
|
+
id() {
|
|
49
|
+
return new (0, _mongodb.ObjectId)();
|
|
50
|
+
}
|
|
51
|
+
use(config) {
|
|
52
|
+
const db = this.getScopedDb(config.db);
|
|
53
|
+
this.#cols.push({ db, col: config.col });
|
|
54
|
+
return this.#getTable(config, this.client.db(db).collection(config.col));
|
|
55
|
+
}
|
|
56
|
+
#getTable(config, collection) {
|
|
57
|
+
async function transform(doc) {
|
|
58
|
+
const docs = Array.isArray(doc) ? doc : [doc];
|
|
59
|
+
const mapped = docs.map((d) => config.mapper(d));
|
|
60
|
+
return Array.isArray(doc) ? mapped : mapped[0];
|
|
61
|
+
}
|
|
62
|
+
function prepInsertValue(value, id, now, skipUpdate) {
|
|
63
|
+
const base = {
|
|
64
|
+
[idKey]: id,
|
|
65
|
+
..._optionalChain([config, 'access', _4 => _4.options, 'optionalAccess', _5 => _5.skipAudit]) ? {} : {
|
|
66
|
+
createdAt: now.getTime(),
|
|
67
|
+
...skipUpdate ? {} : { updatedAt: now.getTime() }
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
...value,
|
|
72
|
+
...base
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function prepUpdateValue(value, now, upsert = false) {
|
|
76
|
+
return {
|
|
77
|
+
...value,
|
|
78
|
+
$set: {
|
|
79
|
+
...value.$set,
|
|
80
|
+
...upsert || Object.keys(value).length > 0 && !_optionalChain([config, 'access', _6 => _6.options, 'optionalAccess', _7 => _7.skipAudit]) ? { updatedAt: now.getTime() } : {}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const dbThis = this;
|
|
85
|
+
const table = {
|
|
86
|
+
config,
|
|
87
|
+
extras: { collection },
|
|
88
|
+
query: async (params) => {
|
|
89
|
+
const results = await _querycjs.parseMongodbQueryParams.call(void 0, collection, params);
|
|
90
|
+
return {
|
|
91
|
+
...results,
|
|
92
|
+
results: await transform(results.results)
|
|
93
|
+
};
|
|
94
|
+
},
|
|
95
|
+
findMany: async (filter, options = {}) => {
|
|
96
|
+
const sortArray = Array.isArray(options.sort) ? options.sort : options.sort ? [options.sort] : [];
|
|
97
|
+
const sort = sortArray.map((p) => [p.field, p.desc ? "desc" : "asc"]);
|
|
98
|
+
const docs = await collection.find(filter, {
|
|
99
|
+
session: options.session,
|
|
100
|
+
limit: options.limit,
|
|
101
|
+
sort
|
|
102
|
+
}).toArray();
|
|
103
|
+
return transform(docs);
|
|
104
|
+
},
|
|
105
|
+
findOne: async (filter, options = {}) => {
|
|
106
|
+
const result = await table.findMany(filter, { ...options, limit: 1 });
|
|
107
|
+
return _nullishCoalesce(result.at(0), () => ( null));
|
|
108
|
+
},
|
|
109
|
+
findById: async (id, options = {}) => {
|
|
110
|
+
const result = await table.findOne({ [idKey]: id }, options);
|
|
111
|
+
return result;
|
|
112
|
+
},
|
|
113
|
+
insertMany: async (values, options = {}) => {
|
|
114
|
+
const now = _nullishCoalesce(_optionalChain([options, 'access', _8 => _8.getTime, 'optionalCall', _9 => _9()]), () => ( /* @__PURE__ */ new Date()));
|
|
115
|
+
const payload = values.map((value, i) => prepInsertValue(value, _nullishCoalesce(_optionalChain([options, 'access', _10 => _10.makeId, 'optionalCall', _11 => _11(i)]), () => ( new (0, _mongodb.ObjectId)().toString())), now));
|
|
116
|
+
await collection.insertMany(payload, { session: options.session });
|
|
117
|
+
const insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey], options)));
|
|
118
|
+
return insertedData.filter((value) => !!value);
|
|
119
|
+
},
|
|
120
|
+
insertOne: async (values, options = {}) => {
|
|
121
|
+
const result = await table.insertMany([values], options);
|
|
122
|
+
return result[0];
|
|
123
|
+
},
|
|
124
|
+
updateMany: async (filter, values, options = {}) => {
|
|
125
|
+
const now = _nullishCoalesce(_optionalChain([options, 'access', _12 => _12.getTime, 'optionalCall', _13 => _13()]), () => ( /* @__PURE__ */ new Date()));
|
|
126
|
+
await collection.updateMany(filter, prepUpdateValue(values, now), { session: options.session });
|
|
127
|
+
return table.findMany(filter, options);
|
|
128
|
+
},
|
|
129
|
+
updateOne: async (filter, values, options = {}) => {
|
|
130
|
+
const now = _nullishCoalesce(_optionalChain([options, 'access', _14 => _14.getTime, 'optionalCall', _15 => _15()]), () => ( /* @__PURE__ */ new Date()));
|
|
131
|
+
const doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {
|
|
132
|
+
returnDocument: "after",
|
|
133
|
+
session: options.session
|
|
134
|
+
});
|
|
135
|
+
return doc ? transform(doc) : null;
|
|
136
|
+
},
|
|
137
|
+
updateById: async (id, values, options = {}) => {
|
|
138
|
+
const result = await table.updateOne({ [idKey]: id }, values, options);
|
|
139
|
+
return result;
|
|
140
|
+
},
|
|
141
|
+
upsertOne: async (filter, values, options = {}) => {
|
|
142
|
+
const now = _nullishCoalesce(_optionalChain([options, 'access', _16 => _16.getTime, 'optionalCall', _17 => _17()]), () => ( /* @__PURE__ */ new Date()));
|
|
143
|
+
const doc = await collection.findOneAndUpdate(
|
|
144
|
+
filter,
|
|
145
|
+
{
|
|
146
|
+
...prepUpdateValue("update" in values ? values.update : {}, now, true),
|
|
147
|
+
// @ts-expect-error fighting ts
|
|
148
|
+
$setOnInsert: prepInsertValue(values.insert, _nullishCoalesce(_optionalChain([options, 'access', _18 => _18.makeId, 'optionalCall', _19 => _19()]), () => ( new (0, _mongodb.ObjectId)().toString())), now, true)
|
|
149
|
+
},
|
|
150
|
+
{ returnDocument: "after", session: options.session, upsert: true }
|
|
151
|
+
);
|
|
152
|
+
return transform(doc);
|
|
153
|
+
},
|
|
154
|
+
deleteMany: async (filter, options = {}) => {
|
|
155
|
+
const docs = await table.findMany(filter, options);
|
|
156
|
+
await collection.deleteMany(filter, { session: options.session });
|
|
157
|
+
return docs;
|
|
158
|
+
},
|
|
159
|
+
deleteOne: async (filter, options) => {
|
|
160
|
+
const doc = await collection.findOneAndDelete(filter, { session: _optionalChain([options, 'optionalAccess', _20 => _20.session]) });
|
|
161
|
+
return doc ? transform(doc) : null;
|
|
162
|
+
},
|
|
163
|
+
deleteById: async (id, options) => {
|
|
164
|
+
const result = await table.deleteOne({ [idKey]: id }, options);
|
|
165
|
+
return result;
|
|
166
|
+
},
|
|
167
|
+
bulkWrite: async (operations, options = {}) => {
|
|
168
|
+
const bulk = collection.initializeUnorderedBulkOp({ session: options.session });
|
|
169
|
+
const now = _nullishCoalesce(_optionalChain([options, 'access', _21 => _21.getTime, 'optionalCall', _22 => _22()]), () => ( /* @__PURE__ */ new Date()));
|
|
170
|
+
operations.forEach((operation, i) => {
|
|
171
|
+
switch (operation.op) {
|
|
172
|
+
case "insert":
|
|
173
|
+
bulk.insert(prepInsertValue(operation.value, _nullishCoalesce(_optionalChain([operation, 'access', _23 => _23.makeId, 'optionalCall', _24 => _24(i)]), () => ( new (0, _mongodb.ObjectId)().toString())), now));
|
|
174
|
+
break;
|
|
175
|
+
case "delete":
|
|
176
|
+
bulk.find(operation.filter).delete();
|
|
177
|
+
break;
|
|
178
|
+
case "update":
|
|
179
|
+
bulk.find(operation.filter).update(prepUpdateValue(operation.value, now));
|
|
180
|
+
break;
|
|
181
|
+
case "upsert":
|
|
182
|
+
bulk.find(operation.filter).upsert().update({
|
|
183
|
+
...prepUpdateValue("update" in operation ? operation.update : {}, now, true),
|
|
184
|
+
$setOnInsert: prepInsertValue(
|
|
185
|
+
operation.insert,
|
|
186
|
+
_nullishCoalesce(_optionalChain([operation, 'access', _25 => _25.makeId, 'optionalCall', _26 => _26(i)]), () => ( new (0, _mongodb.ObjectId)().toString())),
|
|
187
|
+
now,
|
|
188
|
+
true
|
|
189
|
+
)
|
|
190
|
+
});
|
|
191
|
+
break;
|
|
192
|
+
default:
|
|
193
|
+
throw new (0, _indexcjs.EquippedError)(`Unknown bulkWrite operation`, { operation });
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
await bulk.execute({ session: options.session });
|
|
197
|
+
},
|
|
198
|
+
watch(callbacks) {
|
|
199
|
+
if (!dbThis.config.changes)
|
|
200
|
+
_indexcjs3.Instance.crash(new (0, _indexcjs.EquippedError)("Db changes are not enabled in the configuration.", { config }));
|
|
201
|
+
return new (0, _changescjs.MongoDbChange)(dbThis.mongoConfig, dbThis.config.changes, collection, callbacks, config.mapper);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
return table;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
exports.MongoDb = MongoDb;
|
|
210
|
+
//# sourceMappingURL=db.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/mongo/db.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/db.cjs"],"names":[],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/db.cjs","sourcesContent":["import { ClientSession, Collection, CollectionInfo, MongoClient, ObjectId, OptionalUnlessRequiredId, SortDirection, WithId } from 'mongodb'\n\nimport { MongoDbConfig, QueryParams } from '../pipes'\nimport { MongoDbChange } from './changes'\nimport { parseMongodbQueryParams } from './query'\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport * as core from '../base/core'\nimport { Db } from '../base/db'\nimport { DbConfig } from '../base/types'\n\nconst idKey = '_id'\ntype IdType = { _id: string }\n\nexport class MongoDb extends Db<{ _id: string }> {\n\tclient: MongoClient\n\t#cols: { db: string; col: string }[] = []\n\n\tconstructor(\n\t\tprivate mongoConfig: MongoDbConfig,\n\t\tdbConfig: DbConfig,\n\t) {\n\t\tsuper(dbConfig)\n\t\tthis.client = new MongoClient(mongoConfig.uri)\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.client.connect()\n\n\t\t\t\tconst grouped = this.#cols.reduce<Record<string, string[]>>((acc, cur) => {\n\t\t\t\t\tif (!acc[cur.db]) acc[cur.db] = []\n\t\t\t\t\tacc[cur.db].push(cur.col)\n\t\t\t\t\treturn acc\n\t\t\t\t}, {})\n\n\t\t\t\tconst options = {\n\t\t\t\t\tchangeStreamPreAndPostImages: { enabled: true },\n\t\t\t\t}\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tObject.entries(grouped).map(async ([dbName, colNames]) => {\n\t\t\t\t\t\tconst db = this.client.db(dbName)\n\t\t\t\t\t\tconst collections = await db.listCollections<CollectionInfo>().toArray()\n\t\t\t\t\t\treturn colNames.map(async (colName) => {\n\t\t\t\t\t\t\tconst existing = collections.find((collection) => collection.name === colName)\n\t\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\texisting.options?.changeStreamPreAndPostImages?.enabled !== options.changeStreamPreAndPostImages.enabled\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tawait db.command({ collMod: colName, ...options })\n\t\t\t\t\t\t\t} else await db.createCollection(colName, options)\n\t\t\t\t\t\t})\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t},\n\t\t\t3,\n\t\t)\n\t\tInstance.on('close', async () => this.client.close(), 1)\n\t}\n\n\tasync session<T>(callback: (session: ClientSession) => Promise<T>) {\n\t\treturn this.client.withSession(callback)\n\t}\n\n\tid() {\n\t\treturn new ObjectId()\n\t}\n\n\tuse<Model extends core.Model<{ _id: string }>, Entity extends core.Entity>(config: core.Config<Model, Entity>) {\n\t\tconst db = this.getScopedDb(config.db)\n\t\tthis.#cols.push({ db, col: config.col })\n\t\treturn this.#getTable(config, this.client.db(db).collection<Model>(config.col))\n\t}\n\n\t#getTable<Model extends core.Model<IdType>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t\tcollection: Collection<Model>,\n\t) {\n\t\ttype WI = Model | WithId<Model>\n\t\tasync function transform(doc: WI): Promise<Entity>\n\t\t// eslint-disable-next-line no-redeclare\n\t\tasync function transform(doc: WI[]): Promise<Entity[]>\n\t\t// eslint-disable-next-line no-redeclare\n\t\tasync function transform(doc: WI | WI[]) {\n\t\t\tconst docs = Array.isArray(doc) ? doc : [doc]\n\t\t\tconst mapped = docs.map((d) => config.mapper(d as Model))\n\t\t\treturn Array.isArray(doc) ? mapped : mapped[0]\n\t\t}\n\n\t\tfunction prepInsertValue(value: core.CreateInput<Model>, id: string, now: Date, skipUpdate?: boolean) {\n\t\t\tconst base: core.Model<IdType> = {\n\t\t\t\t[idKey]: id,\n\t\t\t\t...(config.options?.skipAudit\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcreatedAt: now.getTime(),\n\t\t\t\t\t\t\t...(skipUpdate ? {} : { updatedAt: now.getTime() }),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t...base,\n\t\t\t} as unknown as OptionalUnlessRequiredId<Model>\n\t\t}\n\n\t\tfunction prepUpdateValue(value: core.UpdateInput<Model>, now: Date, upsert = false) {\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t$set: {\n\t\t\t\t\t...value.$set,\n\t\t\t\t\t...(upsert || (Object.keys(value).length > 0 && !config.options?.skipAudit) ? { updatedAt: now.getTime() } : {}),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst dbThis = this\n\n\t\tconst table: core.Table<IdType, Model, Entity, { collection: Collection<Model> }> = {\n\t\t\tconfig,\n\t\t\textras: { collection },\n\n\t\t\tquery: async (params: QueryParams) => {\n\t\t\t\tconst results = await parseMongodbQueryParams(collection, params)\n\t\t\t\treturn {\n\t\t\t\t\t...results,\n\t\t\t\t\tresults: (await transform(results.results as any)) as any,\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfindMany: async (filter, options = {}) => {\n\t\t\t\tconst sortArray = Array.isArray(options.sort) ? options.sort : options.sort ? [options.sort] : []\n\t\t\t\tconst sort = sortArray.map((p) => [p.field, p.desc ? 'desc' : 'asc'] as [string, SortDirection])\n\t\t\t\tconst docs = await collection\n\t\t\t\t\t.find(filter, {\n\t\t\t\t\t\tsession: options.session,\n\t\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\t\tsort,\n\t\t\t\t\t})\n\t\t\t\t\t.toArray()\n\t\t\t\treturn transform(docs)\n\t\t\t},\n\n\t\t\tfindOne: async (filter, options = {}) => {\n\t\t\t\tconst result = await table.findMany(filter, { ...options, limit: 1 })\n\t\t\t\treturn result.at(0) ?? null\n\t\t\t},\n\n\t\t\tfindById: async (id, options = {}) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tinsertMany: async (values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst payload = values.map((value, i) => prepInsertValue(value, options.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\tawait collection.insertMany(payload, { session: options.session })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any, options)))\n\t\t\t\treturn insertedData.filter((value) => !!value)\n\t\t\t},\n\n\t\t\tinsertOne: async (values, options = {}) => {\n\t\t\t\tconst result = await table.insertMany([values], options)\n\t\t\t\treturn result[0]\n\t\t\t},\n\n\t\t\tupdateMany: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tawait collection.updateMany(filter, prepUpdateValue(values, now), { session: options.session })\n\t\t\t\treturn table.findMany(filter, options)\n\t\t\t},\n\n\t\t\tupdateOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {\n\t\t\t\t\treturnDocument: 'after',\n\t\t\t\t\tsession: options.session,\n\t\t\t\t})\n\t\t\t\treturn doc ? transform(doc) : null\n\t\t\t},\n\n\t\t\tupdateById: async (id, values, options = {}) => {\n\t\t\t\tconst result = await table.updateOne({ [idKey]: id } as core.Filter<Model>, values, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tupsertOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\n\t\t\t\tconst doc = await collection.findOneAndUpdate(\n\t\t\t\t\tfilter,\n\t\t\t\t\t{\n\t\t\t\t\t\t...prepUpdateValue('update' in values ? values.update : {}, now, true),\n\t\t\t\t\t\t// @ts-expect-error fighting ts\n\t\t\t\t\t\t$setOnInsert: prepInsertValue(values.insert, options.makeId?.() ?? new ObjectId().toString(), now, true),\n\t\t\t\t\t},\n\t\t\t\t\t{ returnDocument: 'after', session: options.session, upsert: true },\n\t\t\t\t)\n\n\t\t\t\treturn transform(doc)\n\t\t\t},\n\n\t\t\tdeleteMany: async (filter, options = {}) => {\n\t\t\t\tconst docs = await table.findMany(filter, options)\n\t\t\t\tawait collection.deleteMany(filter, { session: options.session })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter, options) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: options?.session })\n\t\t\t\treturn doc ? transform(doc) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id, options) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tbulkWrite: async (operations, options = {}) => {\n\t\t\t\tconst bulk = collection.initializeUnorderedBulkOp({ session: options.session })\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\toperations.forEach((operation, i) => {\n\t\t\t\t\tswitch (operation.op) {\n\t\t\t\t\t\tcase 'insert':\n\t\t\t\t\t\t\tbulk.insert(prepInsertValue(operation.value, operation.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t\tbulk.find(operation.filter).delete()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'update':\n\t\t\t\t\t\t\tbulk.find(operation.filter).update(prepUpdateValue(operation.value, now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'upsert':\n\t\t\t\t\t\t\tbulk.find(operation.filter)\n\t\t\t\t\t\t\t\t.upsert()\n\t\t\t\t\t\t\t\t.update({\n\t\t\t\t\t\t\t\t\t...prepUpdateValue('update' in operation ? operation.update : {}, now, true),\n\t\t\t\t\t\t\t\t\t$setOnInsert: prepInsertValue(\n\t\t\t\t\t\t\t\t\t\toperation.insert as any,\n\t\t\t\t\t\t\t\t\t\toperation.makeId?.(i) ?? new ObjectId().toString(),\n\t\t\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new EquippedError(`Unknown bulkWrite operation`, { operation })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tawait bulk.execute({ session: options.session })\n\t\t\t},\n\n\t\t\twatch(callbacks) {\n\t\t\t\tif (!dbThis.config.changes)\n\t\t\t\t\tInstance.crash(new EquippedError('Db changes are not enabled in the configuration.', { config }))\n\t\t\t\treturn new MongoDbChange<Model, Entity>(dbThis.mongoConfig, dbThis.config.changes, collection, callbacks, config.mapper)\n\t\t\t},\n\t\t}\n\n\t\treturn table\n\t}\n}\n",null]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _mongodb = require('mongodb');var _changesmincjs = require('./changes.min.cjs');var _querymincjs = require('./query.min.cjs');var _indexmincjs = require('../../errors/index.min.cjs');var _indexmincjs3 = require('../../instance/index.min.cjs');var _dbmincjs = require('../base/db.min.cjs');const f="_id";class V extends _dbmincjs.Db{constructor(i,a){super(a);this.mongoConfig=i;this.client=new (0, _mongodb.MongoClient)(i.uri),_indexmincjs3.Instance.on("start",async()=>{await this.client.connect();const y=this.#e.reduce((d,l)=>(d[l.db]||(d[l.db]=[]),d[l.db].push(l.col),d),{}),u={changeStreamPreAndPostImages:{enabled:!0}};await Promise.all(Object.entries(y).map(async([d,l])=>{const o=this.client.db(d),t=await o.listCollections().toArray();return l.map(async e=>{const n=t.find(s=>s.name===e);n?_optionalChain([n, 'access', _ => _.options, 'optionalAccess', _2 => _2.changeStreamPreAndPostImages, 'optionalAccess', _3 => _3.enabled])!==u.changeStreamPreAndPostImages.enabled&&await o.command({collMod:e,...u}):await o.createCollection(e,u)})}))},3),_indexmincjs3.Instance.on("close",async()=>this.client.close(),1)}#e=[];async session(i){return this.client.withSession(i)}id(){return new _mongodb.ObjectId}use(i){const a=this.getScopedDb(i.db);return this.#e.push({db:a,col:i.col}),this.#t(i,this.client.db(a).collection(i.col))}#t(i,a){async function y(t){const n=(Array.isArray(t)?t:[t]).map(s=>i.mapper(s));return Array.isArray(t)?n:n[0]}function u(t,e,n,s){const r={[f]:e,..._optionalChain([i, 'access', _4 => _4.options, 'optionalAccess', _5 => _5.skipAudit])?{}:{createdAt:n.getTime(),...s?{}:{updatedAt:n.getTime()}}};return{...t,...r}}function d(t,e,n=!1){return{...t,$set:{...t.$set,...n||Object.keys(t).length>0&&!_optionalChain([i, 'access', _6 => _6.options, 'optionalAccess', _7 => _7.skipAudit])?{updatedAt:e.getTime()}:{}}}}const l=this,o={config:i,extras:{collection:a},query:async t=>{const e=await _querymincjs.parseMongodbQueryParams.call(void 0, a,t);return{...e,results:await y(e.results)}},findMany:async(t,e={})=>{const s=(Array.isArray(e.sort)?e.sort:e.sort?[e.sort]:[]).map(c=>[c.field,c.desc?"desc":"asc"]),r=await a.find(t,{session:e.session,limit:e.limit,sort:s}).toArray();return y(r)},findOne:async(t,e={})=>await _asyncNullishCoalesce((await o.findMany(t,{...e,limit:1})).at(0), async () => (null)),findById:async(t,e={})=>await o.findOne({[f]:t},e),insertMany:async(t,e={})=>{const n=_nullishCoalesce(_optionalChain([e, 'access', _8 => _8.getTime, 'optionalCall', _9 => _9()]), () => (new Date)),s=t.map((c,g)=>u(c,_nullishCoalesce(_optionalChain([e, 'access', _10 => _10.makeId, 'optionalCall', _11 => _11(g)]), () => (new (0, _mongodb.ObjectId)().toString())),n));return await a.insertMany(s,{session:e.session}),(await Promise.all(s.map(async c=>await o.findById(c[f],e)))).filter(c=>!!c)},insertOne:async(t,e={})=>(await o.insertMany([t],e))[0],updateMany:async(t,e,n={})=>{const s=_nullishCoalesce(_optionalChain([n, 'access', _12 => _12.getTime, 'optionalCall', _13 => _13()]), () => (new Date));return await a.updateMany(t,d(e,s),{session:n.session}),o.findMany(t,n)},updateOne:async(t,e,n={})=>{const s=_nullishCoalesce(_optionalChain([n, 'access', _14 => _14.getTime, 'optionalCall', _15 => _15()]), () => (new Date)),r=await a.findOneAndUpdate(t,d(e,s),{returnDocument:"after",session:n.session});return r?y(r):null},updateById:async(t,e,n={})=>await o.updateOne({[f]:t},e,n),upsertOne:async(t,e,n={})=>{const s=_nullishCoalesce(_optionalChain([n, 'access', _16 => _16.getTime, 'optionalCall', _17 => _17()]), () => (new Date)),r=await a.findOneAndUpdate(t,{...d("update"in e?e.update:{},s,!0),$setOnInsert:u(e.insert,_nullishCoalesce(_optionalChain([n, 'access', _18 => _18.makeId, 'optionalCall', _19 => _19()]), () => (new (0, _mongodb.ObjectId)().toString())),s,!0)},{returnDocument:"after",session:n.session,upsert:!0});return y(r)},deleteMany:async(t,e={})=>{const n=await o.findMany(t,e);return await a.deleteMany(t,{session:e.session}),n},deleteOne:async(t,e)=>{const n=await a.findOneAndDelete(t,{session:_optionalChain([e, 'optionalAccess', _20 => _20.session])});return n?y(n):null},deleteById:async(t,e)=>await o.deleteOne({[f]:t},e),bulkWrite:async(t,e={})=>{const n=a.initializeUnorderedBulkOp({session:e.session}),s=_nullishCoalesce(_optionalChain([e, 'access', _21 => _21.getTime, 'optionalCall', _22 => _22()]), () => (new Date));t.forEach((r,c)=>{switch(r.op){case"insert":n.insert(u(r.value,_nullishCoalesce(_optionalChain([r, 'access', _23 => _23.makeId, 'optionalCall', _24 => _24(c)]), () => (new (0, _mongodb.ObjectId)().toString())),s));break;case"delete":n.find(r.filter).delete();break;case"update":n.find(r.filter).update(d(r.value,s));break;case"upsert":n.find(r.filter).upsert().update({...d("update"in r?r.update:{},s,!0),$setOnInsert:u(r.insert,_nullishCoalesce(_optionalChain([r, 'access', _25 => _25.makeId, 'optionalCall', _26 => _26(c)]), () => (new (0, _mongodb.ObjectId)().toString())),s,!0)});break;default:throw new (0, _indexmincjs.EquippedError)("Unknown bulkWrite operation",{operation:r})}}),await n.execute({session:e.session})},watch(t){return l.config.changes||_indexmincjs3.Instance.crash(new (0, _indexmincjs.EquippedError)("Db changes are not enabled in the configuration.",{config:i})),new (0, _changesmincjs.MongoDbChange)(l.mongoConfig,l.config.changes,a,t,i.mapper)}};return o}}exports.MongoDb = V;
|
|
2
|
+
//# sourceMappingURL=db.min.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/dbs/mongo/db.ts"],"names":["Instance","grouped","acc","cur","options","collections","db","colName","existing","#cols","config","#getTable","transform","doc","mapped","d","prepInsertValue","value","id","now","base","skipUpdate","prepUpdateValue","upsert","dbThis","results","collection","params","filter","p","docs","sort","table","idKey","i","payload","data","values","operations","operation","bulk","ObjectId","EquippedError"],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/db.min.cjs","sourcesContent":["import { ClientSession, Collection, CollectionInfo, MongoClient, ObjectId, OptionalUnlessRequiredId, SortDirection, WithId } from 'mongodb'\n\nimport { MongoDbConfig, QueryParams } from '../pipes'\nimport { MongoDbChange } from './changes'\nimport { parseMongodbQueryParams } from './query'\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport * as core from '../base/core'\nimport { Db } from '../base/db'\nimport { DbConfig } from '../base/types'\n\nconst idKey = '_id'\ntype IdType = { _id: string }\n\nexport class MongoDb extends Db<{ _id: string }> {\n\tclient: MongoClient\n\t#cols: { db: string; col: string }[] = []\n\n\tconstructor(\n\t\tprivate mongoConfig: MongoDbConfig,\n\t\tdbConfig: DbConfig,\n\t) {\n\t\tsuper(dbConfig)\n\t\tthis.client = new MongoClient(mongoConfig.uri)\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.client.connect()\n\n\t\t\t\tconst grouped = this.#cols.reduce<Record<string, string[]>>((acc, cur) => {\n\t\t\t\t\tif (!acc[cur.db]) acc[cur.db] = []\n\t\t\t\t\tacc[cur.db].push(cur.col)\n\t\t\t\t\treturn acc\n\t\t\t\t}, {})\n\n\t\t\t\tconst options = {\n\t\t\t\t\tchangeStreamPreAndPostImages: { enabled: true },\n\t\t\t\t}\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tObject.entries(grouped).map(async ([dbName, colNames]) => {\n\t\t\t\t\t\tconst db = this.client.db(dbName)\n\t\t\t\t\t\tconst collections = await db.listCollections<CollectionInfo>().toArray()\n\t\t\t\t\t\treturn colNames.map(async (colName) => {\n\t\t\t\t\t\t\tconst existing = collections.find((collection) => collection.name === colName)\n\t\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\texisting.options?.changeStreamPreAndPostImages?.enabled !== options.changeStreamPreAndPostImages.enabled\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tawait db.command({ collMod: colName, ...options })\n\t\t\t\t\t\t\t} else await db.createCollection(colName, options)\n\t\t\t\t\t\t})\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t},\n\t\t\t3,\n\t\t)\n\t\tInstance.on('close', async () => this.client.close(), 1)\n\t}\n\n\tasync session<T>(callback: (session: ClientSession) => Promise<T>) {\n\t\treturn this.client.withSession(callback)\n\t}\n\n\tid() {\n\t\treturn new ObjectId()\n\t}\n\n\tuse<Model extends core.Model<{ _id: string }>, Entity extends core.Entity>(config: core.Config<Model, Entity>) {\n\t\tconst db = this.getScopedDb(config.db)\n\t\tthis.#cols.push({ db, col: config.col })\n\t\treturn this.#getTable(config, this.client.db(db).collection<Model>(config.col))\n\t}\n\n\t#getTable<Model extends core.Model<IdType>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t\tcollection: Collection<Model>,\n\t) {\n\t\ttype WI = Model | WithId<Model>\n\t\tasync function transform(doc: WI): Promise<Entity>\n\t\t// eslint-disable-next-line no-redeclare\n\t\tasync function transform(doc: WI[]): Promise<Entity[]>\n\t\t// eslint-disable-next-line no-redeclare\n\t\tasync function transform(doc: WI | WI[]) {\n\t\t\tconst docs = Array.isArray(doc) ? doc : [doc]\n\t\t\tconst mapped = docs.map((d) => config.mapper(d as Model))\n\t\t\treturn Array.isArray(doc) ? mapped : mapped[0]\n\t\t}\n\n\t\tfunction prepInsertValue(value: core.CreateInput<Model>, id: string, now: Date, skipUpdate?: boolean) {\n\t\t\tconst base: core.Model<IdType> = {\n\t\t\t\t[idKey]: id,\n\t\t\t\t...(config.options?.skipAudit\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcreatedAt: now.getTime(),\n\t\t\t\t\t\t\t...(skipUpdate ? {} : { updatedAt: now.getTime() }),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t...base,\n\t\t\t} as unknown as OptionalUnlessRequiredId<Model>\n\t\t}\n\n\t\tfunction prepUpdateValue(value: core.UpdateInput<Model>, now: Date, upsert = false) {\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t$set: {\n\t\t\t\t\t...value.$set,\n\t\t\t\t\t...(upsert || (Object.keys(value).length > 0 && !config.options?.skipAudit) ? { updatedAt: now.getTime() } : {}),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst dbThis = this\n\n\t\tconst table: core.Table<IdType, Model, Entity, { collection: Collection<Model> }> = {\n\t\t\tconfig,\n\t\t\textras: { collection },\n\n\t\t\tquery: async (params: QueryParams) => {\n\t\t\t\tconst results = await parseMongodbQueryParams(collection, params)\n\t\t\t\treturn {\n\t\t\t\t\t...results,\n\t\t\t\t\tresults: (await transform(results.results as any)) as any,\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfindMany: async (filter, options = {}) => {\n\t\t\t\tconst sortArray = Array.isArray(options.sort) ? options.sort : options.sort ? [options.sort] : []\n\t\t\t\tconst sort = sortArray.map((p) => [p.field, p.desc ? 'desc' : 'asc'] as [string, SortDirection])\n\t\t\t\tconst docs = await collection\n\t\t\t\t\t.find(filter, {\n\t\t\t\t\t\tsession: options.session,\n\t\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\t\tsort,\n\t\t\t\t\t})\n\t\t\t\t\t.toArray()\n\t\t\t\treturn transform(docs)\n\t\t\t},\n\n\t\t\tfindOne: async (filter, options = {}) => {\n\t\t\t\tconst result = await table.findMany(filter, { ...options, limit: 1 })\n\t\t\t\treturn result.at(0) ?? null\n\t\t\t},\n\n\t\t\tfindById: async (id, options = {}) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tinsertMany: async (values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst payload = values.map((value, i) => prepInsertValue(value, options.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\tawait collection.insertMany(payload, { session: options.session })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any, options)))\n\t\t\t\treturn insertedData.filter((value) => !!value)\n\t\t\t},\n\n\t\t\tinsertOne: async (values, options = {}) => {\n\t\t\t\tconst result = await table.insertMany([values], options)\n\t\t\t\treturn result[0]\n\t\t\t},\n\n\t\t\tupdateMany: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tawait collection.updateMany(filter, prepUpdateValue(values, now), { session: options.session })\n\t\t\t\treturn table.findMany(filter, options)\n\t\t\t},\n\n\t\t\tupdateOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {\n\t\t\t\t\treturnDocument: 'after',\n\t\t\t\t\tsession: options.session,\n\t\t\t\t})\n\t\t\t\treturn doc ? transform(doc) : null\n\t\t\t},\n\n\t\t\tupdateById: async (id, values, options = {}) => {\n\t\t\t\tconst result = await table.updateOne({ [idKey]: id } as core.Filter<Model>, values, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tupsertOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\n\t\t\t\tconst doc = await collection.findOneAndUpdate(\n\t\t\t\t\tfilter,\n\t\t\t\t\t{\n\t\t\t\t\t\t...prepUpdateValue('update' in values ? values.update : {}, now, true),\n\t\t\t\t\t\t// @ts-expect-error fighting ts\n\t\t\t\t\t\t$setOnInsert: prepInsertValue(values.insert, options.makeId?.() ?? new ObjectId().toString(), now, true),\n\t\t\t\t\t},\n\t\t\t\t\t{ returnDocument: 'after', session: options.session, upsert: true },\n\t\t\t\t)\n\n\t\t\t\treturn transform(doc)\n\t\t\t},\n\n\t\t\tdeleteMany: async (filter, options = {}) => {\n\t\t\t\tconst docs = await table.findMany(filter, options)\n\t\t\t\tawait collection.deleteMany(filter, { session: options.session })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter, options) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: options?.session })\n\t\t\t\treturn doc ? transform(doc) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id, options) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tbulkWrite: async (operations, options = {}) => {\n\t\t\t\tconst bulk = collection.initializeUnorderedBulkOp({ session: options.session })\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\toperations.forEach((operation, i) => {\n\t\t\t\t\tswitch (operation.op) {\n\t\t\t\t\t\tcase 'insert':\n\t\t\t\t\t\t\tbulk.insert(prepInsertValue(operation.value, operation.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t\tbulk.find(operation.filter).delete()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'update':\n\t\t\t\t\t\t\tbulk.find(operation.filter).update(prepUpdateValue(operation.value, now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'upsert':\n\t\t\t\t\t\t\tbulk.find(operation.filter)\n\t\t\t\t\t\t\t\t.upsert()\n\t\t\t\t\t\t\t\t.update({\n\t\t\t\t\t\t\t\t\t...prepUpdateValue('update' in operation ? operation.update : {}, now, true),\n\t\t\t\t\t\t\t\t\t$setOnInsert: prepInsertValue(\n\t\t\t\t\t\t\t\t\t\toperation.insert as any,\n\t\t\t\t\t\t\t\t\t\toperation.makeId?.(i) ?? new ObjectId().toString(),\n\t\t\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new EquippedError(`Unknown bulkWrite operation`, { operation })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tawait bulk.execute({ session: options.session })\n\t\t\t},\n\n\t\t\twatch(callbacks) {\n\t\t\t\tif (!dbThis.config.changes)\n\t\t\t\t\tInstance.crash(new EquippedError('Db changes are not enabled in the configuration.', { config }))\n\t\t\t\treturn new MongoDbChange<Model, Entity>(dbThis.mongoConfig, dbThis.config.changes, collection, callbacks, config.mapper)\n\t\t\t},\n\t\t}\n\n\t\treturn table\n\t}\n}\n"]}
|