equipped 5.0.18 → 5.0.20

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.
Files changed (101) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/dbs/base/db.cjs.map +1 -1
  3. package/dist/cjs/dbs/base/db.min.cjs.map +1 -1
  4. package/dist/cjs/dbs/mongo/db.cjs +29 -23
  5. package/dist/cjs/dbs/mongo/db.cjs.map +1 -1
  6. package/dist/cjs/dbs/mongo/db.min.cjs +1 -1
  7. package/dist/cjs/dbs/mongo/db.min.cjs.map +1 -1
  8. package/dist/cjs/instance/index.cjs +29 -2
  9. package/dist/cjs/instance/index.cjs.map +1 -1
  10. package/dist/cjs/instance/index.min.cjs +2 -2
  11. package/dist/cjs/instance/index.min.cjs.map +1 -1
  12. package/dist/cjs/instance/settings.cjs +47 -79
  13. package/dist/cjs/instance/settings.cjs.map +1 -1
  14. package/dist/cjs/instance/settings.min.cjs +1 -1
  15. package/dist/cjs/instance/settings.min.cjs.map +1 -1
  16. package/dist/cjs/server/impls/base.cjs +8 -7
  17. package/dist/cjs/server/impls/base.cjs.map +1 -1
  18. package/dist/cjs/server/impls/base.min.cjs +1 -1
  19. package/dist/cjs/server/impls/base.min.cjs.map +1 -1
  20. package/dist/cjs/server/impls/express.cjs +7 -6
  21. package/dist/cjs/server/impls/express.cjs.map +1 -1
  22. package/dist/cjs/server/impls/express.min.cjs +1 -1
  23. package/dist/cjs/server/impls/express.min.cjs.map +1 -1
  24. package/dist/cjs/server/impls/fastify.cjs +8 -7
  25. package/dist/cjs/server/impls/fastify.cjs.map +1 -1
  26. package/dist/cjs/server/impls/fastify.min.cjs +1 -1
  27. package/dist/cjs/server/impls/fastify.min.cjs.map +1 -1
  28. package/dist/cjs/server/openapi.cjs +18 -16
  29. package/dist/cjs/server/openapi.cjs.map +1 -1
  30. package/dist/cjs/server/openapi.min.cjs +6 -6
  31. package/dist/cjs/server/openapi.min.cjs.map +1 -1
  32. package/dist/cjs/server/pipes.cjs +4 -45
  33. package/dist/cjs/server/pipes.cjs.map +1 -1
  34. package/dist/cjs/server/pipes.min.cjs +1 -1
  35. package/dist/cjs/server/pipes.min.cjs.map +1 -1
  36. package/dist/cjs/server/sockets.cjs +4 -4
  37. package/dist/cjs/server/sockets.cjs.map +1 -1
  38. package/dist/cjs/server/sockets.min.cjs +1 -1
  39. package/dist/cjs/server/sockets.min.cjs.map +1 -1
  40. package/dist/esm/dbs/base/db.min.mjs.map +1 -1
  41. package/dist/esm/dbs/base/db.mjs.map +1 -1
  42. package/dist/esm/dbs/mongo/db.min.mjs +1 -1
  43. package/dist/esm/dbs/mongo/db.min.mjs.map +1 -1
  44. package/dist/esm/dbs/mongo/db.mjs +25 -19
  45. package/dist/esm/dbs/mongo/db.mjs.map +1 -1
  46. package/dist/esm/instance/index.min.mjs +3 -3
  47. package/dist/esm/instance/index.min.mjs.map +1 -1
  48. package/dist/esm/instance/index.mjs +31 -4
  49. package/dist/esm/instance/index.mjs.map +1 -1
  50. package/dist/esm/instance/settings.min.mjs +1 -1
  51. package/dist/esm/instance/settings.min.mjs.map +1 -1
  52. package/dist/esm/instance/settings.mjs +47 -79
  53. package/dist/esm/instance/settings.mjs.map +1 -1
  54. package/dist/esm/server/impls/base.min.mjs +1 -1
  55. package/dist/esm/server/impls/base.min.mjs.map +1 -1
  56. package/dist/esm/server/impls/base.mjs +8 -7
  57. package/dist/esm/server/impls/base.mjs.map +1 -1
  58. package/dist/esm/server/impls/express.min.mjs +1 -1
  59. package/dist/esm/server/impls/express.min.mjs.map +1 -1
  60. package/dist/esm/server/impls/express.mjs +7 -6
  61. package/dist/esm/server/impls/express.mjs.map +1 -1
  62. package/dist/esm/server/impls/fastify.min.mjs +1 -1
  63. package/dist/esm/server/impls/fastify.min.mjs.map +1 -1
  64. package/dist/esm/server/impls/fastify.mjs +8 -7
  65. package/dist/esm/server/impls/fastify.mjs.map +1 -1
  66. package/dist/esm/server/openapi.min.mjs +6 -6
  67. package/dist/esm/server/openapi.min.mjs.map +1 -1
  68. package/dist/esm/server/openapi.mjs +12 -10
  69. package/dist/esm/server/openapi.mjs.map +1 -1
  70. package/dist/esm/server/pipes.min.mjs +1 -1
  71. package/dist/esm/server/pipes.min.mjs.map +1 -1
  72. package/dist/esm/server/pipes.mjs +4 -45
  73. package/dist/esm/server/pipes.mjs.map +1 -1
  74. package/dist/esm/server/sockets.min.mjs +1 -1
  75. package/dist/esm/server/sockets.min.mjs.map +1 -1
  76. package/dist/esm/server/sockets.mjs +3 -3
  77. package/dist/esm/server/sockets.mjs.map +1 -1
  78. package/dist/types/{db-Kss5l53t.d.ts → core-B_NJslNF.d.ts} +23 -55
  79. package/dist/types/db-VqrPVuGz.d.ts +34 -0
  80. package/dist/types/dbs/index.d.ts +4 -3
  81. package/dist/types/dbs/mongo/db.js +25 -19
  82. package/dist/types/errors/index.d.ts +3 -3
  83. package/dist/types/events/index.d.ts +2 -2
  84. package/dist/types/index.d.ts +17 -10
  85. package/dist/types/instance/index.d.ts +204 -11
  86. package/dist/types/instance/index.js +31 -4
  87. package/dist/types/instance/settings.js +47 -79
  88. package/dist/types/{kafka-DrqkU2KH.d.ts → kafka-rT8Tjy76.d.ts} +1 -1
  89. package/dist/types/{requests-DBqR41Uw.d.ts → requests-C80D2uPT.d.ts} +1 -1
  90. package/dist/types/server/impls/base.js +8 -7
  91. package/dist/types/server/impls/express.js +7 -6
  92. package/dist/types/server/impls/fastify.js +8 -7
  93. package/dist/types/server/index.d.ts +10 -22
  94. package/dist/types/server/openapi.js +12 -10
  95. package/dist/types/server/pipes.js +4 -45
  96. package/dist/types/server/sockets.js +3 -3
  97. package/dist/types/tokens-BcN2HTcA.d.ts +143 -0
  98. package/dist/types/{validationError-DC5N8F5e.d.ts → validationError-B3arolZ8.d.ts} +1 -1
  99. package/dist/types/validations/index.d.ts +2 -2
  100. package/package.json +1 -1
  101. package/dist/types/index-EDi2UvAe.d.ts +0 -569
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
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.20](https://github.com/kevinand11/equipped/compare/v5.0.19...v5.0.20) (2025-07-13)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * add ConditionalObjectKeys ([7103659](https://github.com/kevinand11/equipped/commit/7103659dd037ad00afb795a7cf08e56635b1031e))
11
+
12
+ ### [5.0.19](https://github.com/kevinand11/equipped/compare/v5.0.18...v5.0.19) (2025-07-13)
13
+
5
14
  ### [5.0.18](https://github.com/kevinand11/equipped/compare/v5.0.17...v5.0.18) (2025-07-07)
6
15
 
7
16
  ### [5.0.17](https://github.com/kevinand11/equipped/compare/v5.0.16...v5.0.17) (2025-07-07)
@@ -1 +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]}
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;AAOD;ACTA;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\tabstract session<T>(callback: () => Promise<T>): Promise<T>\n}\n",null]}
@@ -1 +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"]}
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,UAQ1D,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\tabstract session<T>(callback: () => Promise<T>): Promise<T>\n}\n"]}
@@ -1,10 +1,12 @@
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');
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 _nodeasync_hooks = require('node:async_hooks');
2
+ var _mongodb = require('mongodb');
2
3
  var _changescjs = require('./changes.cjs');
3
4
  var _querycjs = require('./query.cjs');
4
5
  var _indexcjs = require('../../errors/index.cjs');
5
6
  var _indexcjs3 = require('../../instance/index.cjs');
6
7
  var _dbcjs = require('../base/db.cjs');
7
8
  const idKey = "_id";
9
+ const sessionStore = new (0, _nodeasync_hooks.AsyncLocalStorage)(void 0);
8
10
  class MongoDb extends _dbcjs.Db {
9
11
  constructor(mongoConfig, dbConfig) {
10
12
  super(dbConfig);
@@ -43,7 +45,7 @@ class MongoDb extends _dbcjs.Db {
43
45
 
44
46
  #cols = [];
45
47
  async session(callback) {
46
- return this.client.withSession(callback);
48
+ return this.client.withSession(async (session) => sessionStore.run(session, callback));
47
49
  }
48
50
  id() {
49
51
  return new (0, _mongodb.ObjectId)();
@@ -96,25 +98,25 @@ class MongoDb extends _dbcjs.Db {
96
98
  const sortArray = Array.isArray(options.sort) ? options.sort : options.sort ? [options.sort] : [];
97
99
  const sort = sortArray.map((p) => [p.field, p.desc ? "desc" : "asc"]);
98
100
  const docs = await collection.find(filter, {
99
- session: options.session,
101
+ session: sessionStore.getStore(),
100
102
  limit: options.limit,
101
103
  sort
102
104
  }).toArray();
103
105
  return transform(docs);
104
106
  },
105
- findOne: async (filter, options = {}) => {
106
- const result = await table.findMany(filter, { ...options, limit: 1 });
107
+ findOne: async (filter) => {
108
+ const result = await table.findMany(filter, { limit: 1 });
107
109
  return _nullishCoalesce(result.at(0), () => ( null));
108
110
  },
109
- findById: async (id, options = {}) => {
110
- const result = await table.findOne({ [idKey]: id }, options);
111
+ findById: async (id) => {
112
+ const result = await table.findOne({ [idKey]: id });
111
113
  return result;
112
114
  },
113
115
  insertMany: async (values, options = {}) => {
114
116
  const now = _nullishCoalesce(_optionalChain([options, 'access', _8 => _8.getTime, 'optionalCall', _9 => _9()]), () => ( /* @__PURE__ */ new Date()));
115
117
  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
+ await collection.insertMany(payload, { session: sessionStore.getStore() });
119
+ const insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey])));
118
120
  return insertedData.filter((value) => !!value);
119
121
  },
120
122
  insertOne: async (values, options = {}) => {
@@ -123,14 +125,18 @@ class MongoDb extends _dbcjs.Db {
123
125
  },
124
126
  updateMany: async (filter, values, options = {}) => {
125
127
  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
+ const session = sessionStore.getStore();
129
+ const data = await collection.find(filter, { session, projection: { [idKey]: 1 } }).toArray();
130
+ const ids = data.map((doc) => doc[idKey]);
131
+ const filterUpd = { [idKey]: { $in: ids } };
132
+ await collection.updateMany(filterUpd, prepUpdateValue(values, now), { session });
133
+ return table.findMany(filterUpd);
128
134
  },
129
135
  updateOne: async (filter, values, options = {}) => {
130
136
  const now = _nullishCoalesce(_optionalChain([options, 'access', _14 => _14.getTime, 'optionalCall', _15 => _15()]), () => ( /* @__PURE__ */ new Date()));
131
137
  const doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {
132
138
  returnDocument: "after",
133
- session: options.session
139
+ session: sessionStore.getStore()
134
140
  });
135
141
  return doc ? transform(doc) : null;
136
142
  },
@@ -147,30 +153,30 @@ class MongoDb extends _dbcjs.Db {
147
153
  // @ts-expect-error fighting ts
148
154
  $setOnInsert: prepInsertValue(values.insert, _nullishCoalesce(_optionalChain([options, 'access', _18 => _18.makeId, 'optionalCall', _19 => _19()]), () => ( new (0, _mongodb.ObjectId)().toString())), now, true)
149
155
  },
150
- { returnDocument: "after", session: options.session, upsert: true }
156
+ { returnDocument: "after", session: sessionStore.getStore(), upsert: true }
151
157
  );
152
158
  return transform(doc);
153
159
  },
154
160
  deleteMany: async (filter, options = {}) => {
155
161
  const docs = await table.findMany(filter, options);
156
- await collection.deleteMany(filter, { session: options.session });
162
+ await collection.deleteMany(filter, { session: sessionStore.getStore() });
157
163
  return docs;
158
164
  },
159
- deleteOne: async (filter, options) => {
160
- const doc = await collection.findOneAndDelete(filter, { session: _optionalChain([options, 'optionalAccess', _20 => _20.session]) });
165
+ deleteOne: async (filter) => {
166
+ const doc = await collection.findOneAndDelete(filter, { session: sessionStore.getStore() });
161
167
  return doc ? transform(doc) : null;
162
168
  },
163
- deleteById: async (id, options) => {
164
- const result = await table.deleteOne({ [idKey]: id }, options);
169
+ deleteById: async (id) => {
170
+ const result = await table.deleteOne({ [idKey]: id });
165
171
  return result;
166
172
  },
167
173
  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()));
174
+ const bulk = collection.initializeUnorderedBulkOp({ session: sessionStore.getStore() });
175
+ const now = _nullishCoalesce(_optionalChain([options, 'access', _20 => _20.getTime, 'optionalCall', _21 => _21()]), () => ( /* @__PURE__ */ new Date()));
170
176
  operations.forEach((operation, i) => {
171
177
  switch (operation.op) {
172
178
  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));
179
+ bulk.insert(prepInsertValue(operation.value, _nullishCoalesce(_optionalChain([operation, 'access', _22 => _22.makeId, 'optionalCall', _23 => _23(i)]), () => ( new (0, _mongodb.ObjectId)().toString())), now));
174
180
  break;
175
181
  case "delete":
176
182
  bulk.find(operation.filter).delete();
@@ -183,7 +189,7 @@ class MongoDb extends _dbcjs.Db {
183
189
  ...prepUpdateValue("update" in operation ? operation.update : {}, now, true),
184
190
  $setOnInsert: prepInsertValue(
185
191
  operation.insert,
186
- _nullishCoalesce(_optionalChain([operation, 'access', _25 => _25.makeId, 'optionalCall', _26 => _26(i)]), () => ( new (0, _mongodb.ObjectId)().toString())),
192
+ _nullishCoalesce(_optionalChain([operation, 'access', _24 => _24.makeId, 'optionalCall', _25 => _25(i)]), () => ( new (0, _mongodb.ObjectId)().toString())),
187
193
  now,
188
194
  true
189
195
  )
@@ -193,7 +199,7 @@ class MongoDb extends _dbcjs.Db {
193
199
  throw new (0, _indexcjs.EquippedError)(`Unknown bulkWrite operation`, { operation });
194
200
  }
195
201
  });
196
- await bulk.execute({ session: options.session });
202
+ await bulk.execute({ session: sessionStore.getStore() });
197
203
  },
198
204
  watch(callbacks) {
199
205
  if (!dbThis.config.changes)
@@ -1 +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]}
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 { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { 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\nconst sessionStore = new AsyncLocalStorage<ClientSession | undefined>(undefined)\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: () => Promise<T>) {\n\t\treturn this.client.withSession(async (session) => sessionStore.run(session, 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: sessionStore.getStore(),\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) => {\n\t\t\t\tconst result = await table.findMany(filter, { limit: 1 })\n\t\t\t\treturn result.at(0) ?? null\n\t\t\t},\n\n\t\t\tfindById: async (id) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>)\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: sessionStore.getStore() })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any)))\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\tconst session = sessionStore.getStore()\n\t\t\t\tconst data = await collection.find(filter, { session, projection: { [idKey]: 1 } }).toArray()\n\t\t\t\tconst ids = data.map((doc) => doc[idKey])\n\t\t\t\tconst filterUpd = { [idKey]: { $in: ids } } as core.Filter<Model>\n\t\t\t\tawait collection.updateMany(filterUpd, prepUpdateValue(values, now), { session })\n\t\t\t\treturn table.findMany(filterUpd)\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: sessionStore.getStore(),\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: sessionStore.getStore(), 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: sessionStore.getStore() })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn doc ? transform(doc) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>)\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: sessionStore.getStore() })\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: sessionStore.getStore() })\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]}
@@ -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(); } } 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;
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 _nodeasync_hooks = require('node:async_hooks');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 m="_id",u=new (0, _nodeasync_hooks.AsyncLocalStorage)(void 0);class H extends _dbmincjs.Db{constructor(o,a){super(a);this.mongoConfig=o;this.client=new (0, _mongodb.MongoClient)(o.uri),_indexmincjs3.Instance.on("start",async()=>{await this.client.connect();const p=this.#e.reduce((d,l)=>(d[l.db]||(d[l.db]=[]),d[l.db].push(l.col),d),{}),y={changeStreamPreAndPostImages:{enabled:!0}};await Promise.all(Object.entries(p).map(async([d,l])=>{const i=this.client.db(d),e=await i.listCollections().toArray();return l.map(async t=>{const n=e.find(r=>r.name===t);n?_optionalChain([n, 'access', _ => _.options, 'optionalAccess', _2 => _2.changeStreamPreAndPostImages, 'optionalAccess', _3 => _3.enabled])!==y.changeStreamPreAndPostImages.enabled&&await i.command({collMod:t,...y}):await i.createCollection(t,y)})}))},3),_indexmincjs3.Instance.on("close",async()=>this.client.close(),1)}#e=[];async session(o){return this.client.withSession(async a=>u.run(a,o))}id(){return new _mongodb.ObjectId}use(o){const a=this.getScopedDb(o.db);return this.#e.push({db:a,col:o.col}),this.#t(o,this.client.db(a).collection(o.col))}#t(o,a){async function p(e){const n=(Array.isArray(e)?e:[e]).map(r=>o.mapper(r));return Array.isArray(e)?n:n[0]}function y(e,t,n,r){const s={[m]:t,..._optionalChain([o, 'access', _4 => _4.options, 'optionalAccess', _5 => _5.skipAudit])?{}:{createdAt:n.getTime(),...r?{}:{updatedAt:n.getTime()}}};return{...e,...s}}function d(e,t,n=!1){return{...e,$set:{...e.$set,...n||Object.keys(e).length>0&&!_optionalChain([o, 'access', _6 => _6.options, 'optionalAccess', _7 => _7.skipAudit])?{updatedAt:t.getTime()}:{}}}}const l=this,i={config:o,extras:{collection:a},query:async e=>{const t=await _querymincjs.parseMongodbQueryParams.call(void 0, a,e);return{...t,results:await p(t.results)}},findMany:async(e,t={})=>{const r=(Array.isArray(t.sort)?t.sort:t.sort?[t.sort]:[]).map(c=>[c.field,c.desc?"desc":"asc"]),s=await a.find(e,{session:u.getStore(),limit:t.limit,sort:r}).toArray();return p(s)},findOne:async e=>await _asyncNullishCoalesce((await i.findMany(e,{limit:1})).at(0), async () => (null)),findById:async e=>await i.findOne({[m]:e}),insertMany:async(e,t={})=>{const n=_nullishCoalesce(_optionalChain([t, 'access', _8 => _8.getTime, 'optionalCall', _9 => _9()]), () => (new Date)),r=e.map((c,f)=>y(c,_nullishCoalesce(_optionalChain([t, 'access', _10 => _10.makeId, 'optionalCall', _11 => _11(f)]), () => (new (0, _mongodb.ObjectId)().toString())),n));return await a.insertMany(r,{session:u.getStore()}),(await Promise.all(r.map(async c=>await i.findById(c[m])))).filter(c=>!!c)},insertOne:async(e,t={})=>(await i.insertMany([e],t))[0],updateMany:async(e,t,n={})=>{const r=_nullishCoalesce(_optionalChain([n, 'access', _12 => _12.getTime, 'optionalCall', _13 => _13()]), () => (new Date)),s=u.getStore(),f=(await a.find(e,{session:s,projection:{[m]:1}}).toArray()).map(I=>I[m]),M={[m]:{$in:f}};return await a.updateMany(M,d(t,r),{session:s}),i.findMany(M)},updateOne:async(e,t,n={})=>{const r=_nullishCoalesce(_optionalChain([n, 'access', _14 => _14.getTime, 'optionalCall', _15 => _15()]), () => (new Date)),s=await a.findOneAndUpdate(e,d(t,r),{returnDocument:"after",session:u.getStore()});return s?p(s):null},updateById:async(e,t,n={})=>await i.updateOne({[m]:e},t,n),upsertOne:async(e,t,n={})=>{const r=_nullishCoalesce(_optionalChain([n, 'access', _16 => _16.getTime, 'optionalCall', _17 => _17()]), () => (new Date)),s=await a.findOneAndUpdate(e,{...d("update"in t?t.update:{},r,!0),$setOnInsert:y(t.insert,_nullishCoalesce(_optionalChain([n, 'access', _18 => _18.makeId, 'optionalCall', _19 => _19()]), () => (new (0, _mongodb.ObjectId)().toString())),r,!0)},{returnDocument:"after",session:u.getStore(),upsert:!0});return p(s)},deleteMany:async(e,t={})=>{const n=await i.findMany(e,t);return await a.deleteMany(e,{session:u.getStore()}),n},deleteOne:async e=>{const t=await a.findOneAndDelete(e,{session:u.getStore()});return t?p(t):null},deleteById:async e=>await i.deleteOne({[m]:e}),bulkWrite:async(e,t={})=>{const n=a.initializeUnorderedBulkOp({session:u.getStore()}),r=_nullishCoalesce(_optionalChain([t, 'access', _20 => _20.getTime, 'optionalCall', _21 => _21()]), () => (new Date));e.forEach((s,c)=>{switch(s.op){case"insert":n.insert(y(s.value,_nullishCoalesce(_optionalChain([s, 'access', _22 => _22.makeId, 'optionalCall', _23 => _23(c)]), () => (new (0, _mongodb.ObjectId)().toString())),r));break;case"delete":n.find(s.filter).delete();break;case"update":n.find(s.filter).update(d(s.value,r));break;case"upsert":n.find(s.filter).upsert().update({...d("update"in s?s.update:{},r,!0),$setOnInsert:y(s.insert,_nullishCoalesce(_optionalChain([s, 'access', _24 => _24.makeId, 'optionalCall', _25 => _25(c)]), () => (new (0, _mongodb.ObjectId)().toString())),r,!0)});break;default:throw new (0, _indexmincjs.EquippedError)("Unknown bulkWrite operation",{operation:s})}}),await n.execute({session:u.getStore()})},watch(e){return l.config.changes||_indexmincjs3.Instance.crash(new (0, _indexmincjs.EquippedError)("Db changes are not enabled in the configuration.",{config:o})),new (0, _changesmincjs.MongoDbChange)(l.mongoConfig,l.config.changes,a,e,o.mapper)}};return i}}exports.MongoDb = H;
2
2
  //# sourceMappingURL=db.min.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"sources":["../../../../src/dbs/mongo/db.ts"],"names":["sessionStore","dbConfig","Instance","grouped","acc","cur","options","collections","db","colName","existing","#cols","session","ObjectId","config","#getTable","transform","doc","mapped","d","prepInsertValue","value","id","now","base","skipUpdate","prepUpdateValue","upsert","dbThis","results","collection","params","filter","p","docs","sort","table","i","payload","data","idKey","values","ids","filterUpd","operation","bulk","EquippedError"],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/db.min.cjs","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { 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\nconst sessionStore = new AsyncLocalStorage<ClientSession | undefined>(undefined)\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: () => Promise<T>) {\n\t\treturn this.client.withSession(async (session) => sessionStore.run(session, 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: sessionStore.getStore(),\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) => {\n\t\t\t\tconst result = await table.findMany(filter, { limit: 1 })\n\t\t\t\treturn result.at(0) ?? null\n\t\t\t},\n\n\t\t\tfindById: async (id) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>)\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: sessionStore.getStore() })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any)))\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\tconst session = sessionStore.getStore()\n\t\t\t\tconst data = await collection.find(filter, { session, projection: { [idKey]: 1 } }).toArray()\n\t\t\t\tconst ids = data.map((doc) => doc[idKey])\n\t\t\t\tconst filterUpd = { [idKey]: { $in: ids } } as core.Filter<Model>\n\t\t\t\tawait collection.updateMany(filterUpd, prepUpdateValue(values, now), { session })\n\t\t\t\treturn table.findMany(filterUpd)\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: sessionStore.getStore(),\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: sessionStore.getStore(), 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: sessionStore.getStore() })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn doc ? transform(doc) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>)\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: sessionStore.getStore() })\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: sessionStore.getStore() })\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"]}
@@ -1,15 +1,24 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _valleyed = require('valleyed');
2
2
  var _hookscjs = require('./hooks.cjs');
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
3
11
  var _settingscjs = require('./settings.cjs');
4
12
  var _indexcjs = require('../errors/index.cjs');
5
- class Instance extends _valleyed.DataClass {
13
+ class Instance {
6
14
  static #instance;
7
15
  static #hooks = {};
8
16
 
17
+
9
18
  constructor(settings) {
10
- super(_settingscjs.mapSettingsToInstance.call(void 0, settings));
11
19
  Instance.#instance = this;
12
20
  this.settings = Object.freeze(settings);
21
+ this.log = Instance.createLog(this.settings.log);
13
22
  Instance.#registerOnExitHandler();
14
23
  }
15
24
  getScopedName(name, key = ".") {
@@ -81,6 +90,24 @@ ${settingsValidity.error.toString()}`, {
81
90
  console.error(error);
82
91
  process.exit(1);
83
92
  }
93
+ static createLog(input) {
94
+ return _valleyed.v.assert(_settingscjs.logPipe, input);
95
+ }
96
+ static createCache(input) {
97
+ return _valleyed.v.assert(_settingscjs.cachePipe, input);
98
+ }
99
+ static createJobs(input) {
100
+ return _valleyed.v.assert(_settingscjs.jobsPipe, input);
101
+ }
102
+ static createEventBus(input) {
103
+ return _valleyed.v.assert(_settingscjs.eventBusPipe, input);
104
+ }
105
+ static createDb(input) {
106
+ return _valleyed.v.assert(_settingscjs.dbPipe, input);
107
+ }
108
+ createServer(input) {
109
+ return _valleyed.v.assert(_settingscjs.serverTypePipe, input);
110
+ }
84
111
  }
85
112
 
86
113
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/instance/index.ts","/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs"],"names":[],"mappings":"AAAA,iNAAmC;AAEnC,uCAAwD;AACxD,6CAA4G;AAC5G,+CAA8B;AAEvB,MAAM,SAAA,QAA0C,oBAAoC;AAAA,EAC1F,OAAO,CAAA,QAAA;AAAA,EACP,OAAO,CAAA,MAAA,EAAmD,CAAC,CAAA;AAAA,EAClD;AAAA,EAED,WAAA,CAAY,QAAA,EAAa;AAChC,IAAA,KAAA,CAAM,gDAAA,QAAqC,CAAC,CAAA;AAC5C,IAAA,QAAA,CAAS,CAAA,SAAA,EAAY,IAAA;AACrB,IAAA,IAAA,CAAK,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACtC,IAAA,QAAA,CAAS,CAAA,qBAAA,CAAuB,CAAA;AAAA,EACjC;AAAA,EAEA,aAAA,CAAc,IAAA,EAAc,IAAA,EAAM,GAAA,EAAK;AACtC,IAAA,OAAO,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,EAC/C;AAAA,EAEA,MAAM,KAAA,CAAA,EAAQ;AACb,IAAA,IAAI;AACH,MAAA,MAAM,gCAAA,iBAAS,QAAA,CAAS,CAAA,KAAA,CAAO,OAAO,CAAA,UAAK,CAAC,GAAC,CAAA;AAC7C,MAAA,MAAM,gCAAA,iBAAS,QAAA,CAAS,CAAA,KAAA,CAAO,OAAO,CAAA,UAAK,CAAC,GAAC,CAAA;AAAA,IAC9C,EAAA,MAAA,CAAS,KAAA,EAAO;AACf,MAAA,QAAA,CAAS,KAAA,CAAM,IAAI,4BAAA,CAAc,CAAA,uBAAA,CAAA,EAA2B,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,IACvE;AAAA,EACD;AAAA,EAEA,OAAO,IAAA,CAAuB,QAAA,EAA+B;AAC5D,IAAA,MAAM,YAAA,EAAc,WAAA,CAAE,QAAA,CAAS,QAAA,EAAU,OAAA,CAAQ,GAAG,CAAA;AACpD,IAAA,GAAA,CAAI,CAAC,WAAA,CAAY,KAAA,EAAO;AACvB,MAAA,QAAA,CAAS,KAAA;AAAA,QACR,IAAI,4BAAA,CAAc,CAAA;AAAA,EAAwC,WAAA,CAAY,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAA;AAC3E,UAAA;AACV,QAAA;AACF,MAAA;AACD,IAAA;AACmB,IAAA;AACpB,EAAA;AAEoD,EAAA;AACxB,IAAA;AACL,IAAA;AACZ,MAAA;AACU,QAAA;AAAkD;AACzD,UAAA;AACV,QAAA;AACF,MAAA;AACD,IAAA;AACuB,IAAA;AACxB,EAAA;AAEa,EAAA;AACE,IAAA;AACG,MAAA;AACG,QAAA;AACnB,MAAA;AACe,IAAA;AACjB,EAAA;AAEuD,EAAA;AAC3B,IAAA;AACJ,IAAA;AACxB,EAAA;AAEO,EAAA;AACU,IAAA;AACP,MAAA;AACA,MAAA;AACC,MAAA;AACV,IAAA;AAEwB,IAAA;AACJ,MAAA;AACH,QAAA;AAAwC,QAAA;AAChC,QAAA;AACvB,MAAA;AACD,IAAA;AACF,EAAA;AAE6B,EAAA;AACX,IAAA;AACI,IAAA;AACd,IAAA;AACR,EAAA;AAE0C,EAAA;AAEtB,IAAA;AACL,IAAA;AACf,EAAA;AACD;ACV+B;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs","sourcesContent":["import { DataClass, Pipe, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport { instanceSettingsPipe, mapSettingsToInstance, MapSettingsToInstance, Settings, SettingsInput } from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance<S extends SettingsInput> extends DataClass<MapSettingsToInstance<S>> {\n\tstatic #instance: Instance<SettingsInput>\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\n\tprivate constructor(settings: S) {\n\t\tsuper(mapSettingsToInstance(settings as any))\n\t\tInstance.#instance = this as any\n\t\tthis.settings = Object.freeze(settings) as any\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create<S extends SettingsInput>(settings: S) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance<S>(settingsValidity.value as S)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n}\n",null]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts","/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs"],"names":[],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.cjs","sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input)\n\t}\n}\n",null]}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _valleyed = require('valleyed');var _hooksmincjs = require('./hooks.min.cjs');var _settingsmincjs = require('./settings.min.cjs');var _indexmincjs = require('../errors/index.min.cjs');class s extends _valleyed.DataClass{static#t;static#e={};constructor(e){super(_settingsmincjs.mapSettingsToInstance.call(void 0, e)),s.#t=this,this.settings=Object.freeze(e),s.#s()}getScopedName(e,t="."){return[this.settings.app.name,e].join(t)}async start(){try{await _hooksmincjs.runHooks.call(void 0, _nullishCoalesce(s.#e.setup, () => ([]))),await _hooksmincjs.runHooks.call(void 0, _nullishCoalesce(s.#e.start, () => ([])))}catch(e){s.crash(new (0, _indexmincjs.EquippedError)("Error starting instance",{},e))}}static envs(e){const t=_valleyed.v.validate(e,process.env);return t.valid||s.crash(new (0, _indexmincjs.EquippedError)(`Environment variables are not valid
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _valleyed = require('valleyed');var _hooksmincjs = require('./hooks.min.cjs');var _settingsmincjs = require('./settings.min.cjs');var _indexmincjs = require('../errors/index.min.cjs');class s{static#t;static#e={};constructor(e){s.#t=this,this.settings=Object.freeze(e),this.log=s.createLog(this.settings.log),s.#s()}getScopedName(e,t="."){return[this.settings.app.name,e].join(t)}async start(){try{await _hooksmincjs.runHooks.call(void 0, _nullishCoalesce(s.#e.setup, () => ([]))),await _hooksmincjs.runHooks.call(void 0, _nullishCoalesce(s.#e.start, () => ([])))}catch(e){s.crash(new (0, _indexmincjs.EquippedError)("Error starting instance",{},e))}}static envs(e){const t=_valleyed.v.validate(e,process.env);return t.valid||s.crash(new (0, _indexmincjs.EquippedError)(`Environment variables are not valid
2
2
  ${t.error.toString()}`,{messages:t.error.messages})),t.value}static create(e){const t=_valleyed.v.validate(_settingsmincjs.instanceSettingsPipe.call(void 0, ),e);return t.valid||s.crash(new (0, _indexmincjs.EquippedError)(`Settings are not valid
3
- ${t.error.toString()}`,{messages:t.error.messages})),new s(t.value)}static get(){return s.#t?s.#t:s.crash(new (0, _indexmincjs.EquippedError)("Has not been initialized. Make sure an instance has been created before you get an instance",{}))}static on(e,t,a){s.#e[e]??=[],s.#e[e].push({cb:t,order:a})}static#s(){Object.entries({SIGHUP:1,SIGINT:2,SIGTERM:15}).forEach(([t,a])=>{process.on(t,async()=>{await _hooksmincjs.runHooks.call(void 0, _nullishCoalesce(s.#e.close, () => ([])),()=>{}),process.exit(128+a)})})}static resolveBeforeCrash(e){const t=e();return s.on("close",async()=>await t,10),t}static crash(e){console.error(e),process.exit(1)}}exports.Instance = s;
3
+ ${t.error.toString()}`,{messages:t.error.messages})),new s(t.value)}static get(){return s.#t?s.#t:s.crash(new (0, _indexmincjs.EquippedError)("Has not been initialized. Make sure an instance has been created before you get an instance",{}))}static on(e,t,o){s.#e[e]??=[],s.#e[e].push({cb:t,order:o})}static#s(){Object.entries({SIGHUP:1,SIGINT:2,SIGTERM:15}).forEach(([t,o])=>{process.on(t,async()=>{await _hooksmincjs.runHooks.call(void 0, _nullishCoalesce(s.#e.close, () => ([])),()=>{}),process.exit(128+o)})})}static resolveBeforeCrash(e){const t=e();return s.on("close",async()=>await t,10),t}static crash(e){console.error(e),process.exit(1)}static createLog(e){return _valleyed.v.assert(_settingsmincjs.logPipe,e)}static createCache(e){return _valleyed.v.assert(_settingsmincjs.cachePipe,e)}static createJobs(e){return _valleyed.v.assert(_settingsmincjs.jobsPipe,e)}static createEventBus(e){return _valleyed.v.assert(_settingsmincjs.eventBusPipe,e)}static createDb(e){return _valleyed.v.assert(_settingsmincjs.dbPipe,e)}createServer(e){return _valleyed.v.assert(_settingsmincjs.serverTypePipe,e)}}exports.Instance = s;
4
4
  //# sourceMappingURL=index.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/instance/index.ts"],"names":["settings","mapSettingsToInstance","Instance","#registerOnExitHandler","name","key","runHooks","#hooks","error","EquippedError","v","envValidity"],"mappings":"AAAA,iNAAmC,8CAG1B,oDACA,sDAIR,MACS,EAAA,QAED,mBAAA,CAAA,MAAA,CAAA,CAAA,CAAYA,MACnB,CAAA,CAAA,CAAMC,CAAAA,CAAsBD,CAAe,WAEtC,CAAA,CAAA,CAAA,CAAA,KAAW,CAAA,mDAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOA,IAC9BE,CAASC,IACV,CAEA,QAAA,CAAA,MAAcC,CAAcC,MAAW,CACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,aAAc,CAAA,CAAI,CAAA,CAAA,CAAA,GAAU,CAAA,CAAE,MAAQ,CAC/C,IAEA,CAAA,QAAM,CAAQ,GACb,CAAI,IACH,CAAA,CAAA,CAAMC,CAAAA,IAAkBC,CAAAA,CAAO,CAAA,CAAA,MAAa,KAC5C,CAAA,CAAA,CAAA,GAAeL,CAAAA,MAAgB,mCAAA,iBAAA,CAAA,CAAA,CAAY,CAAC,CAAC,KAC9C,SAAA,CAASM,GAAAA,CAAO,CACfN,MAAS,mCAAA,iBAAM,CAAA,CAAA,CAAA,CAAIO,CAAAA,KAAc,SAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAA2B,CAAC,IAAS,+BACvE,CACD,yBAGqBC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAmB,IAAQ,CAAA,CAAA,CAAG,CAAA,MACpD,CAAA,CAAKC,WAAAA,CAAY,QAChBT,CAAS,CAAA,CAAA,OACR,CAAIO,GAAc,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,+BAAA,CAAA,CAAA;AAAA,EAAwCE,CAAAA,CAAY,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAA;AAYR","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.min.cjs","sourcesContent":["import { DataClass, Pipe, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport { instanceSettingsPipe, mapSettingsToInstance, MapSettingsToInstance, Settings, SettingsInput } from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance<S extends SettingsInput> extends DataClass<MapSettingsToInstance<S>> {\n\tstatic #instance: Instance<SettingsInput>\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\n\tprivate constructor(settings: S) {\n\t\tsuper(mapSettingsToInstance(settings as any))\n\t\tInstance.#instance = this as any\n\t\tthis.settings = Object.freeze(settings) as any\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create<S extends SettingsInput>(settings: S) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance<S>(settingsValidity.value as S)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts"],"names":["Instance","#instance","settings","#registerOnExitHandler","runHooks","#hooks","error","EquippedError","v","envValidity"],"mappings":"AAAA,iNAAsE,8CAIrE,oDAcQ,sDAKC,MACA,CAAA,CAAA,MAED,CAAA,CAAA,CAAA,MAAgC,CACvCA,CAAAA,CAASC,CAAAA,CAAAA,CAAY,WACL,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOC,IAC9B,CAAA,IAAK,CAAA,QAAe,CAAA,MAAU,CAAA,MAAK,CAAA,CAAA,CAAA,CAAA,IAAS,CAAG,GAC/CF,CAASG,CAAAA,CAAAA,SAGV,CAAA,IAAA,CAAA,QAAkC,CAAA,GACjC,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,aAAc,CAAA,CAAI,CAAA,CAAA,CAAA,GAAU,CAAA,CAAE,MAAQ,CAC/C,IAEA,CAAA,QAAM,CAAQ,GACb,CAAI,IACH,CAAA,CAAA,CAAMC,CAAAA,IAAkBC,CAAAA,CAAO,CAAA,CAAA,MAAa,KAC5C,CAAA,CAAA,CAAA,GAAeL,CAAAA,MAAgB,mCAAA,iBAAA,CAAA,CAAA,CAAY,CAAC,CAAC,KAC9C,SAAA,CAASM,GAAAA,CAAO,CACfN,MAAS,mCAAA,iBAAM,CAAA,CAAA,CAAA,CAAIO,CAAAA,KAAc,SAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAA2B,CAAC,IAAS,+BACvE,CACD,yBAGqBC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAmB,IAAQ,CAAA,CAAA,CAAG,CAAA,MACpD,CAAA,CAAKC,WAAAA,CAAY,QAChBT,CAAS,CAAA,CAAA,OACR,CAAIO,GAAc,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,+BAAA,CAAA,CAAA;AAAA,EAAwCE,CAAAA,CAAY,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAA;AAYR","file":"/home/runner/work/equipped/equipped/dist/cjs/instance/index.min.cjs","sourcesContent":["import { ConditionalObjectKeys, Pipe, PipeInput, PipeOutput, v } from 'valleyed'\n\nimport { HookCb, HookEvent, HookRecord, runHooks } from './hooks'\nimport {\n\tcachePipe,\n\tCacheTypes,\n\tdbPipe,\n\tDbTypes,\n\teventBusPipe,\n\tEventBusTypes,\n\tinstanceSettingsPipe,\n\tjobsPipe,\n\tJobTypes,\n\tlogPipe,\n\tserverTypePipe,\n\tSettings,\n\tSettingsInput,\n} from './settings'\nimport { EquippedError } from '../errors'\n\nexport class Instance {\n\tstatic #instance: Instance\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: PipeOutput<typeof logPipe>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = Instance.createLog(this.settings.log)\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, order: number) {\n\t\tInstance.#hooks[event] ??= []\n\t\tInstance.#hooks[event].push({ cb, order })\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {})\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value, 10)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createLog<T extends PipeInput<typeof logPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(logPipe, input)\n\t}\n\n\tstatic createCache<T extends PipeInput<typeof cachePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(cachePipe, input) as CacheTypes[T['type']]\n\t}\n\n\tstatic createJobs<T extends PipeInput<typeof jobsPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(jobsPipe, input) as JobTypes[T['type']]\n\t}\n\n\tstatic createEventBus<T extends PipeInput<typeof eventBusPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(eventBusPipe, input) as EventBusTypes[T['type']]\n\t}\n\n\tstatic createDb<T extends PipeInput<typeof dbPipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(dbPipe, input) as DbTypes[T['db']['type']]\n\t}\n\n\tcreateServer<T extends PipeInput<typeof serverTypePipe>>(input: ConditionalObjectKeys<T>) {\n\t\treturn v.assert(serverTypePipe, input)\n\t}\n}\n"]}