equipped 5.0.20 → 5.0.22

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 (61) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/dbs/mongo/changes.cjs +24 -28
  3. package/dist/cjs/dbs/mongo/changes.cjs.map +1 -1
  4. package/dist/cjs/dbs/mongo/changes.min.cjs +1 -1
  5. package/dist/cjs/dbs/mongo/changes.min.cjs.map +1 -1
  6. package/dist/cjs/events/base.cjs +1 -5
  7. package/dist/cjs/events/base.cjs.map +1 -1
  8. package/dist/cjs/events/base.min.cjs +1 -1
  9. package/dist/cjs/events/base.min.cjs.map +1 -1
  10. package/dist/cjs/events/types/kafka.cjs +40 -40
  11. package/dist/cjs/events/types/kafka.cjs.map +1 -1
  12. package/dist/cjs/events/types/kafka.min.cjs +1 -1
  13. package/dist/cjs/events/types/kafka.min.cjs.map +1 -1
  14. package/dist/cjs/events/types/rabbitmq.cjs +28 -28
  15. package/dist/cjs/events/types/rabbitmq.cjs.map +1 -1
  16. package/dist/cjs/events/types/rabbitmq.min.cjs +1 -1
  17. package/dist/cjs/events/types/rabbitmq.min.cjs.map +1 -1
  18. package/dist/cjs/instance/index.cjs.map +1 -1
  19. package/dist/cjs/instance/index.min.cjs.map +1 -1
  20. package/dist/cjs/server/sockets.cjs +6 -9
  21. package/dist/cjs/server/sockets.cjs.map +1 -1
  22. package/dist/cjs/server/sockets.min.cjs +1 -1
  23. package/dist/cjs/server/sockets.min.cjs.map +1 -1
  24. package/dist/esm/dbs/mongo/changes.min.mjs +1 -1
  25. package/dist/esm/dbs/mongo/changes.min.mjs.map +1 -1
  26. package/dist/esm/dbs/mongo/changes.mjs +24 -28
  27. package/dist/esm/dbs/mongo/changes.mjs.map +1 -1
  28. package/dist/esm/events/base.min.mjs +1 -1
  29. package/dist/esm/events/base.min.mjs.map +1 -1
  30. package/dist/esm/events/base.mjs +0 -4
  31. package/dist/esm/events/base.mjs.map +1 -1
  32. package/dist/esm/events/types/kafka.min.mjs +1 -1
  33. package/dist/esm/events/types/kafka.min.mjs.map +1 -1
  34. package/dist/esm/events/types/kafka.mjs +41 -41
  35. package/dist/esm/events/types/kafka.mjs.map +1 -1
  36. package/dist/esm/events/types/rabbitmq.min.mjs +1 -1
  37. package/dist/esm/events/types/rabbitmq.min.mjs.map +1 -1
  38. package/dist/esm/events/types/rabbitmq.mjs +29 -29
  39. package/dist/esm/events/types/rabbitmq.mjs.map +1 -1
  40. package/dist/esm/instance/index.min.mjs +2 -2
  41. package/dist/esm/instance/index.min.mjs.map +1 -1
  42. package/dist/esm/instance/index.mjs.map +1 -1
  43. package/dist/esm/server/sockets.min.mjs +1 -1
  44. package/dist/esm/server/sockets.min.mjs.map +1 -1
  45. package/dist/esm/server/sockets.mjs +5 -8
  46. package/dist/esm/server/sockets.mjs.map +1 -1
  47. package/dist/types/{core-B_NJslNF.d.ts → core-vQHxNQYK.d.ts} +1 -1
  48. package/dist/types/{db-VqrPVuGz.d.ts → db-BSRe9TQ7.d.ts} +1 -1
  49. package/dist/types/dbs/index.d.ts +4 -4
  50. package/dist/types/dbs/mongo/changes.js +24 -28
  51. package/dist/types/events/base.js +0 -4
  52. package/dist/types/events/index.d.ts +7 -5
  53. package/dist/types/events/types/kafka.js +41 -41
  54. package/dist/types/events/types/rabbitmq.js +29 -29
  55. package/dist/types/index.d.ts +14 -14
  56. package/dist/types/instance/index.d.ts +16 -12
  57. package/dist/types/{kafka-rT8Tjy76.d.ts → kafka-C7Cf9HIm.d.ts} +10 -11
  58. package/dist/types/server/index.d.ts +3 -3
  59. package/dist/types/server/sockets.js +5 -8
  60. package/dist/types/{tokens-BcN2HTcA.d.ts → tokens-Di0pgCG9.d.ts} +2 -2
  61. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
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.22](https://github.com/kevinand11/equipped/compare/v5.0.21...v5.0.22) (2025-07-19)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * return type of createServer ([6622adc](https://github.com/kevinand11/equipped/commit/6622adc01e9391e22d98c6af6528f82933c384f2))
11
+
12
+ ### [5.0.21](https://github.com/kevinand11/equipped/compare/v5.0.20...v5.0.21) (2025-07-13)
13
+
14
+
15
+ ### Features
16
+
17
+ * events streams ([1cd6df1](https://github.com/kevinand11/equipped/commit/1cd6df19e6504d5ed1834401c230cf40fea9d9c5))
18
+ * events streams ([b0d9c5b](https://github.com/kevinand11/equipped/commit/b0d9c5bfddf692c64d8eb5e9c10dfd277cdce73d))
19
+
5
20
  ### [5.0.20](https://github.com/kevinand11/equipped/compare/v5.0.19...v5.0.20) (2025-07-13)
6
21
 
7
22
 
@@ -19,34 +19,30 @@ class MongoDbChange extends _changescjs.DbChange {
19
19
  const hexId = "5f5f65717569707065645f5f";
20
20
  const TestId = makeId(hexId);
21
21
  const condition = { _id: TestId };
22
- change.eventBus.createSubscriber(
23
- topic,
24
- async (data) => {
25
- const op = data.op;
26
- let before = JSON.parse(_nullishCoalesce(data.before, () => ( "null")));
27
- let after = JSON.parse(_nullishCoalesce(data.after, () => ( "null")));
28
- if (before) before = hydrate(before);
29
- if (after) after = hydrate(after);
30
- if (_optionalChain([before, 'optionalAccess', _ => _.__id]) === TestId || _optionalChain([after, 'optionalAccess', _2 => _2.__id]) === TestId) return;
31
- if (op === "c" && this.callbacks.created && after)
32
- await this.callbacks.created({
33
- before: null,
34
- after: this.mapper(after)
35
- });
36
- else if (op === "u" && this.callbacks.updated && before && after)
37
- await this.callbacks.updated({
38
- before: this.mapper(before),
39
- after: this.mapper(after),
40
- changes: _valleyed.differ.from(_valleyed.differ.diff(before, after))
41
- });
42
- else if (op === "d" && this.callbacks.deleted && before)
43
- await this.callbacks.deleted({
44
- before: this.mapper(before),
45
- after: null
46
- });
47
- },
48
- { skipScope: true }
49
- );
22
+ change.eventBus.createStream(topic, { skipScope: true }).subscribe(async (data) => {
23
+ const op = data.op;
24
+ let before = JSON.parse(_nullishCoalesce(data.before, () => ( "null")));
25
+ let after = JSON.parse(_nullishCoalesce(data.after, () => ( "null")));
26
+ if (before) before = hydrate(before);
27
+ if (after) after = hydrate(after);
28
+ if (_optionalChain([before, 'optionalAccess', _ => _.__id]) === TestId || _optionalChain([after, 'optionalAccess', _2 => _2.__id]) === TestId) return;
29
+ if (op === "c" && this.callbacks.created && after)
30
+ await this.callbacks.created({
31
+ before: null,
32
+ after: this.mapper(after)
33
+ });
34
+ else if (op === "u" && this.callbacks.updated && before && after)
35
+ await this.callbacks.updated({
36
+ before: this.mapper(before),
37
+ after: this.mapper(after),
38
+ changes: _valleyed.differ.from(_valleyed.differ.diff(before, after))
39
+ });
40
+ else if (op === "d" && this.callbacks.deleted && before)
41
+ await this.callbacks.deleted({
42
+ before: this.mapper(before),
43
+ after: null
44
+ });
45
+ });
50
46
  _indexcjs3.Instance.on(
51
47
  "start",
52
48
  async () => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/dbs/mongo/changes.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs"],"names":[],"mappings":"AAAA,mtBAA6C;AAC7C,oCAAuB;AAEvB,kDAA8B;AAC9B,qDAAyB;AACzB,sDAAsB;AACtB,iDAAsC;AAK/B,MAAM,cAAA,QAA6F,qBAAwB;AAAA,EACjI,CAAA,QAAA,EAAW,KAAA;AAAA,EAEX,WAAA,CACC,MAAA,EACA,MAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACC;AACD,IAAA,KAAA,CAAM,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAE/B,IAAA,MAAM,QAAA,EAAU,CAAC,IAAA,EAAA,GAChB,IAAA,CAAK,IAAA,EACF;AAAA,MACA,GAAG,IAAA;AAAA,MACH,GAAA,EAAK,MAAA,kBAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,UAAK,IAAA,CAAK,KAAG;AAAA,IACzC,EAAA,EACC,KAAA,CAAA;AAEJ,IAAA,MAAM,OAAA,EAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,MAAM,QAAA,EAAU,UAAA,CAAW,cAAA;AAC3B,IAAA,MAAM,UAAA,EAAY,CAAA,EAAA;AACD,IAAA;AAEH,IAAA;AACC,IAAA;AACG,IAAA;AAEF,IAAA;AACf,MAAA;AACkC,MAAA;AACtB,QAAA;AAEE,QAAA;AACD,QAAA;AAEA,QAAA;AACD,QAAA;AACC,QAAA;AAED,QAAA;AACC,UAAA;AACF,YAAA;AACD,YAAA;AACP,UAAA;AACO,QAAA;AACG,UAAA;AACF,YAAA;AACD,YAAA;AACE,YAAA;AACT,UAAA;AACO,QAAA;AACG,UAAA;AACF,YAAA;AACD,YAAA;AACP,UAAA;AACH,MAAA;AACa,MAAA;AACd,IAAA;AAES,IAAA;AACR,MAAA;AACY,MAAA;AACF,QAAA;AACJ,QAAA;AAEC,QAAA;AACO,UAAA;AACL,YAAA;AACL,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AAEG,YAAA;AACE,YAAA;AACA,YAAA;AACG,YAAA;AACA,YAAA;AACV,UAAA;AACA,UAAA;AACA,UAAA;AACQ,QAAA;AACV,MAAA;AACA,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAQ+B;AAC1B,EAAA;AACQ,IAAA;AACJ,EAAA;AACA,IAAA;AACR,EAAA;AACD;AC/BuB;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs","sourcesContent":["import { Collection, Filter, ObjectId } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { retry } from '../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport { DbChangeConfig } from '../base/types'\nimport { MongoDbConfig } from '../pipes'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: makeId(data._id['$oid'] ?? data._id),\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst hexId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst TestId = makeId(hexId)\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.createSubscriber(\n\t\t\ttopic as never,\n\t\t\tasync (data: DbDocumentChange) => {\n\t\t\t\tconst op = data.op\n\n\t\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\t\tif (before) before = hydrate(before)\n\t\t\t\tif (after) after = hydrate(after)\n\t\t\t\tif (before?.__id === TestId || after?.__id === TestId) return\n\n\t\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\t\tbefore: null,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: null,\n\t\t\t\t\t})\n\t\t\t},\n\t\t\t{ skipScope: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tif (this.#started) return\n\t\t\t\tthis.#started = true\n\n\t\t\t\tawait retry(\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\t\treturn { done: false }\n\t\t\t\t\t},\n\t\t\t\t\t6,\n\t\t\t\t\t10_000,\n\t\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n\nconst makeId = (id: string) => {\n\ttry {\n\t\treturn new ObjectId(id)\n\t} catch {\n\t\treturn id\n\t}\n}\n",null]}
1
+ {"version":3,"sources":["../../../../src/dbs/mongo/changes.ts","/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs"],"names":[],"mappings":"AAAA,mtBAA6C;AAC7C,oCAAuB;AAEvB,kDAA8B;AAC9B,qDAAyB;AACzB,sDAAsB;AACtB,iDAAsC;AAK/B,MAAM,cAAA,QAA6F,qBAAwB;AAAA,EACjI,CAAA,QAAA,EAAW,KAAA;AAAA,EAEX,WAAA,CACC,MAAA,EACA,MAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACC;AACD,IAAA,KAAA,CAAM,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAE/B,IAAA,MAAM,QAAA,EAAU,CAAC,IAAA,EAAA,GAChB,IAAA,CAAK,IAAA,EACF;AAAA,MACA,GAAG,IAAA;AAAA,MACH,GAAA,EAAK,MAAA,kBAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,UAAK,IAAA,CAAK,KAAG;AAAA,IACzC,EAAA,EACC,KAAA,CAAA;AAEJ,IAAA,MAAM,OAAA,EAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,MAAM,QAAA,EAAU,UAAA,CAAW,cAAA;AAC3B,IAAA,MAAM,UAAA,EAAY,CAAA,EAAA;AACD,IAAA;AAEH,IAAA;AACC,IAAA;AACG,IAAA;AAEF,IAAA;AACC,MAAA;AAEH,MAAA;AACI,MAAA;AAEL,MAAA;AACD,MAAA;AACC,MAAA;AAED,MAAA;AACC,QAAA;AACF,UAAA;AACI,UAAA;AACZ,QAAA;AACc,MAAA;AACJ,QAAA;AACG,UAAA;AACD,UAAA;AACH,UAAA;AACT,QAAA;AACc,MAAA;AACJ,QAAA;AACG,UAAA;AACN,UAAA;AACP,QAAA;AACF,IAAA;AAEQ,IAAA;AACR,MAAA;AACY,MAAA;AACF,QAAA;AACJ,QAAA;AAEC,QAAA;AACO,UAAA;AACL,YAAA;AACL,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AAEG,YAAA;AACE,YAAA;AACA,YAAA;AACG,YAAA;AACA,YAAA;AACV,UAAA;AACA,UAAA;AACA,UAAA;AACQ,QAAA;AACV,MAAA;AACA,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAQ+B;AAC1B,EAAA;AACQ,IAAA;AACJ,EAAA;AACA,IAAA;AACR,EAAA;AACD;AC/BuB;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.cjs","sourcesContent":["import { Collection, Filter, ObjectId } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { retry } from '../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport { DbChangeConfig } from '../base/types'\nimport { MongoDbConfig } from '../pipes'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: makeId(data._id['$oid'] ?? data._id),\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst hexId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst TestId = makeId(hexId)\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.createStream(topic as never, { skipScope: true }).subscribe(async (data: DbDocumentChange) => {\n\t\t\tconst op = data.op\n\n\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\tif (before) before = hydrate(before)\n\t\t\tif (after) after = hydrate(after)\n\t\t\tif (before?.__id === TestId || after?.__id === TestId) return\n\n\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\tbefore: null,\n\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t})\n\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t})\n\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\tafter: null,\n\t\t\t\t})\n\t\t})\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tif (this.#started) return\n\t\t\t\tthis.#started = true\n\n\t\t\t\tawait retry(\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\t\treturn { done: false }\n\t\t\t\t\t},\n\t\t\t\t\t6,\n\t\t\t\t\t10_000,\n\t\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n\nconst makeId = (id: string) => {\n\ttry {\n\t\treturn new ObjectId(id)\n\t} catch {\n\t\treturn id\n\t}\n}\n",null]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _mongodb = require('mongodb');var _valleyed = require('valleyed');var _indexmincjs = require('../../errors/index.min.cjs');var _indexmincjs3 = require('../../instance/index.min.cjs');var _indexmincjs5 = require('../../utilities/index.min.cjs');var _changesmincjs = require('../base/changes.min.cjs');class z extends _changesmincjs.DbChange{#e=!1;constructor(h,d,r,g,_){super(d,g,_);const l=e=>e._id?{...e,_id:b(_nullishCoalesce(e._id.$oid, () => (e._id)))}:void 0,C=r.dbName,f=r.collectionName,n=`${C}.${f}`,m=`${_changesmincjs.TopicPrefix}.${n}`,a=b("5f5f65717569707065645f5f"),p={_id:a};d.eventBus.createSubscriber(m,async e=>{const s=e.op;let t=JSON.parse(_nullishCoalesce(e.before, () => ("null"))),o=JSON.parse(_nullishCoalesce(e.after, () => ("null")));t&&(t=l(t)),o&&(o=l(o)),!(_optionalChain([t, 'optionalAccess', _2 => _2.__id])===a||_optionalChain([o, 'optionalAccess', _3 => _3.__id])===a)&&(s==="c"&&this.callbacks.created&&o?await this.callbacks.created({before:null,after:this.mapper(o)}):s==="u"&&this.callbacks.updated&&t&&o?await this.callbacks.updated({before:this.mapper(t),after:this.mapper(o),changes:_valleyed.differ.from(_valleyed.differ.diff(t,o))}):s==="d"&&this.callbacks.deleted&&t&&await this.callbacks.deleted({before:this.mapper(t),after:null}))},{skipScope:!0}),_indexmincjs3.Instance.on("start",async()=>{this.#e||(this.#e=!0,await _indexmincjs5.retry.call(void 0, async()=>await this.configureConnector(m,{"connector.class":"io.debezium.connector.mongodb.MongoDbConnector","capture.mode":"change_streams_update_full_with_pre_image","mongodb.connection.string":h.uri,"collection.include.list":n,"snapshot.mode":"when_needed"})?{done:!0,value:!0}:(await r.findOneAndUpdate(p,{$set:{colName:f}},{upsert:!0}),await r.findOneAndDelete(p),_indexmincjs3.Instance.get().log.warn(`Waiting for db changes for ${n} to start...`),{done:!1}),6,1e4).catch(e=>_indexmincjs3.Instance.crash(new (0, _indexmincjs.EquippedError)("Failed to start db changes",{dbColName:n},e))))},10)}}const b=i=>{try{return new (0, _mongodb.ObjectId)(i)}catch (e2){return i}};exports.MongoDbChange = z;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _mongodb = require('mongodb');var _valleyed = require('valleyed');var _indexmincjs = require('../../errors/index.min.cjs');var _indexmincjs3 = require('../../instance/index.min.cjs');var _indexmincjs5 = require('../../utilities/index.min.cjs');var _changesmincjs = require('../base/changes.min.cjs');class z extends _changesmincjs.DbChange{#e=!1;constructor(h,d,r,g,_){super(d,g,_);const l=e=>e._id?{...e,_id:b(_nullishCoalesce(e._id.$oid, () => (e._id)))}:void 0,C=r.dbName,f=r.collectionName,n=`${C}.${f}`,m=`${_changesmincjs.TopicPrefix}.${n}`,a=b("5f5f65717569707065645f5f"),p={_id:a};d.eventBus.createStream(m,{skipScope:!0}).subscribe(async e=>{const s=e.op;let t=JSON.parse(_nullishCoalesce(e.before, () => ("null"))),o=JSON.parse(_nullishCoalesce(e.after, () => ("null")));t&&(t=l(t)),o&&(o=l(o)),!(_optionalChain([t, 'optionalAccess', _2 => _2.__id])===a||_optionalChain([o, 'optionalAccess', _3 => _3.__id])===a)&&(s==="c"&&this.callbacks.created&&o?await this.callbacks.created({before:null,after:this.mapper(o)}):s==="u"&&this.callbacks.updated&&t&&o?await this.callbacks.updated({before:this.mapper(t),after:this.mapper(o),changes:_valleyed.differ.from(_valleyed.differ.diff(t,o))}):s==="d"&&this.callbacks.deleted&&t&&await this.callbacks.deleted({before:this.mapper(t),after:null}))}),_indexmincjs3.Instance.on("start",async()=>{this.#e||(this.#e=!0,await _indexmincjs5.retry.call(void 0, async()=>await this.configureConnector(m,{"connector.class":"io.debezium.connector.mongodb.MongoDbConnector","capture.mode":"change_streams_update_full_with_pre_image","mongodb.connection.string":h.uri,"collection.include.list":n,"snapshot.mode":"when_needed"})?{done:!0,value:!0}:(await r.findOneAndUpdate(p,{$set:{colName:f}},{upsert:!0}),await r.findOneAndDelete(p),_indexmincjs3.Instance.get().log.warn(`Waiting for db changes for ${n} to start...`),{done:!1}),6,1e4).catch(e=>_indexmincjs3.Instance.crash(new (0, _indexmincjs.EquippedError)("Failed to start db changes",{dbColName:n},e))))},10)}}const b=i=>{try{return new (0, _mongodb.ObjectId)(i)}catch (e2){return i}};exports.MongoDbChange = z;
2
2
  //# sourceMappingURL=changes.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/dbs/mongo/changes.ts"],"names":["change","data","colName","collection","topic","dbColName","TestId"],"mappings":"AAAA,mtBAA6C,oCACtB,yDAGd,4DACa,6DACgB,wDAe9BA,MAEN,EAAA,QAAiBC,uBAChBA,CAAAA,CAAK,CAAA,CAAA,CAAA,CACF,CACA,WACYA,CAAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAWA,KAAQ,CACzC,CAAA,CACC,CAAA,CAAA,CAAA,CAAA,CAAA,MAEsB,CAAA,CAAA,CAAA,EAAA,CAAA,CACpBC,GAAUC,CAAW,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,kBAAA,CAAA,CAAA,GACT,CAAA,IAAS,SAAA,CAAID,CAAO,KAChCE,CAAAA,CAAQ,CAAA,KAAc,CAAA,CAAIC,CAAS,CAAA,CAAA,CAGnCC,MADQ,CAAA,CAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.min.cjs","sourcesContent":["import { Collection, Filter, ObjectId } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { retry } from '../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport { DbChangeConfig } from '../base/types'\nimport { MongoDbConfig } from '../pipes'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: makeId(data._id['$oid'] ?? data._id),\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst hexId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst TestId = makeId(hexId)\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.createSubscriber(\n\t\t\ttopic as never,\n\t\t\tasync (data: DbDocumentChange) => {\n\t\t\t\tconst op = data.op\n\n\t\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\t\tif (before) before = hydrate(before)\n\t\t\t\tif (after) after = hydrate(after)\n\t\t\t\tif (before?.__id === TestId || after?.__id === TestId) return\n\n\t\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\t\tbefore: null,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t\t})\n\t\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\t\tafter: null,\n\t\t\t\t\t})\n\t\t\t},\n\t\t\t{ skipScope: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tif (this.#started) return\n\t\t\t\tthis.#started = true\n\n\t\t\t\tawait retry(\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\t\treturn { done: false }\n\t\t\t\t\t},\n\t\t\t\t\t6,\n\t\t\t\t\t10_000,\n\t\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n\nconst makeId = (id: string) => {\n\ttry {\n\t\treturn new ObjectId(id)\n\t} catch {\n\t\treturn id\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/dbs/mongo/changes.ts"],"names":["change","data","colName","collection","topic","dbColName","TestId"],"mappings":"AAAA,mtBAA6C,oCACtB,yDAGd,4DACa,6DACgB,wDAe9BA,MAEN,EAAA,QAAiBC,uBAChBA,CAAAA,CAAK,CAAA,CAAA,CAAA,CACF,CACA,WACYA,CAAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAWA,KAAQ,CACzC,CAAA,CACC,CAAA,CAAA,CAAA,CAAA,CAAA,MAEsB,CAAA,CAAA,CAAA,EAAA,CAAA,CACpBC,GAAUC,CAAW,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,kBAAA,CAAA,CAAA,GACT,CAAA,IAAS,SAAA,CAAID,CAAO,KAChCE,CAAAA,CAAQ,CAAA,KAAc,CAAA,CAAIC,CAAS,CAAA,CAAA,CAGnCC,MADQ,CAAA,CAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/changes.min.cjs","sourcesContent":["import { Collection, Filter, ObjectId } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { retry } from '../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport { DbChangeConfig } from '../base/types'\nimport { MongoDbConfig } from '../pipes'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: makeId(data._id['$oid'] ?? data._id),\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst hexId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst TestId = makeId(hexId)\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.createStream(topic as never, { skipScope: true }).subscribe(async (data: DbDocumentChange) => {\n\t\t\tconst op = data.op\n\n\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\tif (before) before = hydrate(before)\n\t\t\tif (after) after = hydrate(after)\n\t\t\tif (before?.__id === TestId || after?.__id === TestId) return\n\n\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\tbefore: null,\n\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t})\n\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t})\n\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\tafter: null,\n\t\t\t\t})\n\t\t})\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tif (this.#started) return\n\t\t\t\tthis.#started = true\n\n\t\t\t\tawait retry(\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\t\treturn { done: false }\n\t\t\t\t\t},\n\t\t\t\t\t6,\n\t\t\t\t\t10_000,\n\t\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n\nconst makeId = (id: string) => {\n\ttry {\n\t\treturn new ObjectId(id)\n\t} catch {\n\t\treturn id\n\t}\n}\n"]}
@@ -1,10 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});class EventBus {
2
2
  }
3
- const DefaultSubscribeOptions = {
4
- fanout: false
5
- };
6
3
 
7
4
 
8
-
9
- exports.DefaultSubscribeOptions = DefaultSubscribeOptions; exports.EventBus = EventBus;
5
+ exports.EventBus = EventBus;
10
6
  //# sourceMappingURL=base.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/events/base.ts","/home/runner/work/equipped/equipped/dist/cjs/events/base.cjs"],"names":[],"mappings":"AAKO,+EAAe,SAAS;AAW/B;AAEO,MAAM,wBAAA,EAA0B;AAAA,EACtC,MAAA,EAAQ;AACT,CAAA;ACfA;AACE;AACA;AACF,uFAAC","file":"/home/runner/work/equipped/equipped/dist/cjs/events/base.cjs","sourcesContent":["import { Events } from '../types'\n\nexport type PublishOptions = { skipScope?: boolean }\nexport type SubscribeOptions = PublishOptions & { fanout: boolean }\n\nexport abstract class EventBus {\n\tabstract createPublisher<Event extends Events[keyof Events]>(\n\t\ttopic: Event['topic'],\n\t\toptions?: Partial<SubscribeOptions>,\n\t): (data: Event['data']) => Promise<boolean>\n\n\tabstract createSubscriber<Event extends Events[keyof Events]>(\n\t\ttopic: Event['topic'],\n\t\tonMessage: (data: Event['data']) => Promise<void>,\n\t\toptions?: Partial<SubscribeOptions>,\n\t): void\n}\n\nexport const DefaultSubscribeOptions = {\n\tfanout: false,\n}\n",null]}
1
+ {"version":3,"sources":["../../../src/events/base.ts","/home/runner/work/equipped/equipped/dist/cjs/events/base.cjs"],"names":[],"mappings":"AAIO,+EAAe,SAAS;AAQ/B;ACVA;AACE;AACF,4BAAC","file":"/home/runner/work/equipped/equipped/dist/cjs/events/base.cjs","sourcesContent":["import { Events } from '../types'\n\nexport type StreamOptions = { skipScope?: boolean; fanout: boolean }\n\nexport abstract class EventBus {\n\tabstract createStream<Event extends Events[keyof Events]>(\n\t\ttopic: Event['topic'],\n\t\toptions?: Partial<StreamOptions>,\n\t): {\n\t\tpublish: (data: Event['data']) => Promise<boolean>\n\t\tsubscribe: (onMessage: (data: Event['data']) => Promise<void>) => void\n\t}\n}\n",null]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});class s{}const a={fanout:!1};exports.DefaultSubscribeOptions = a; exports.EventBus = s;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});class o{}exports.EventBus = o;
2
2
  //# sourceMappingURL=base.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/events/base.ts"],"names":["EventBus","DefaultSubscribeOptions"],"mappings":"AAKO,+EAAeA,CAAS,CAW/B,CAEO,MAAMC,CAAAA,CAA0B,CACtC,MAAA,CAAQ,CAAA,CACT,CAAA,CAAA,0DAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/base.min.cjs","sourcesContent":["import { Events } from '../types'\n\nexport type PublishOptions = { skipScope?: boolean }\nexport type SubscribeOptions = PublishOptions & { fanout: boolean }\n\nexport abstract class EventBus {\n\tabstract createPublisher<Event extends Events[keyof Events]>(\n\t\ttopic: Event['topic'],\n\t\toptions?: Partial<SubscribeOptions>,\n\t): (data: Event['data']) => Promise<boolean>\n\n\tabstract createSubscriber<Event extends Events[keyof Events]>(\n\t\ttopic: Event['topic'],\n\t\tonMessage: (data: Event['data']) => Promise<void>,\n\t\toptions?: Partial<SubscribeOptions>,\n\t): void\n}\n\nexport const DefaultSubscribeOptions = {\n\tfanout: false,\n}\n"]}
1
+ {"version":3,"sources":["../../../src/events/base.ts"],"names":["EventBus"],"mappings":"AAIO,+EAAeA,CAAS,CAQ/B,CAAA,qBAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/base.min.cjs","sourcesContent":["import { Events } from '../types'\n\nexport type StreamOptions = { skipScope?: boolean; fanout: boolean }\n\nexport abstract class EventBus {\n\tabstract createStream<Event extends Events[keyof Events]>(\n\t\ttopic: Event['topic'],\n\t\toptions?: Partial<StreamOptions>,\n\t): {\n\t\tpublish: (data: Event['data']) => Promise<boolean>\n\t\tsubscribe: (onMessage: (data: Event['data']) => Promise<void>) => void\n\t}\n}\n"]}
@@ -15,50 +15,50 @@ class KafkaEventBus extends _basecjs.EventBus {
15
15
  kafkaJS: { ...kafkaSettings, logLevel: _kafkajavascript2.default.KafkaJS.logLevel.NOTHING }
16
16
  }) : new _kafkajs2.default.Kafka({ ...kafkaSettings, logLevel: _kafkajs2.default.logLevel.NOTHING });
17
17
  }
18
- createPublisher(topicName, options = {}) {
18
+ createStream(topicName, options = {}) {
19
19
  const topic = options.skipScope ? topicName : _indexcjs.Instance.get().getScopedName(topicName);
20
- return async (data) => {
21
- try {
22
- const producer = this.#client.producer();
23
- await producer.connect();
24
- await producer.send({
25
- topic,
26
- messages: [{ value: JSON.stringify(data) }]
27
- });
28
- return true;
29
- } catch (e) {
30
- return false;
31
- }
32
- };
33
- }
34
- createSubscriber(topicName, onMessage, options = {}) {
35
- options = { ..._basecjs.DefaultSubscribeOptions, ...options };
36
- const topic = options.skipScope ? topicName : _indexcjs.Instance.get().getScopedName(topicName);
37
- const subscribe = async () => {
38
- await this.#createTopic(topic);
39
- const groupId = options.fanout ? _indexcjs.Instance.get().getScopedName(`${_indexcjs.Instance.get().settings.app.id}-fanout-${_indexcjs3.Random.string(10)}`) : topic;
40
- const consumer = this.#client.consumer(this.#confluent ? { kafkaJS: { groupId } } : { groupId });
41
- await consumer.connect();
42
- await consumer.subscribe({ topic });
43
- await consumer.run({
44
- eachMessage: async ({ message }) => {
45
- _indexcjs.Instance.resolveBeforeCrash(async () => {
46
- if (!message.value) return;
47
- await onMessage(_indexcjs3.parseJSONValue.call(void 0, message.value.toString()));
20
+ return {
21
+ publish: async (data) => {
22
+ try {
23
+ const producer = this.#client.producer();
24
+ await producer.connect();
25
+ await producer.send({
26
+ topic,
27
+ messages: [{ value: JSON.stringify(data) }]
48
28
  });
29
+ return true;
30
+ } catch (e) {
31
+ return false;
49
32
  }
50
- });
51
- if (options.fanout)
52
- _indexcjs.Instance.on(
53
- "close",
54
- async () => {
55
- await consumer.disconnect();
56
- await this.#deleteGroup(groupId);
57
- },
58
- 10
59
- );
33
+ },
34
+ subscribe: (onMessage) => {
35
+ const subscribe = async () => {
36
+ await this.#createTopic(topic);
37
+ const groupId = options.fanout ? _indexcjs.Instance.get().getScopedName(`${_indexcjs.Instance.get().settings.app.id}-fanout-${_indexcjs3.Random.string(10)}`) : topic;
38
+ const consumer = this.#client.consumer(this.#confluent ? { kafkaJS: { groupId } } : { groupId });
39
+ await consumer.connect();
40
+ await consumer.subscribe({ topic });
41
+ await consumer.run({
42
+ eachMessage: async ({ message }) => {
43
+ _indexcjs.Instance.resolveBeforeCrash(async () => {
44
+ if (!message.value) return;
45
+ await onMessage(_indexcjs3.parseJSONValue.call(void 0, message.value.toString()));
46
+ });
47
+ }
48
+ });
49
+ if (options.fanout)
50
+ _indexcjs.Instance.on(
51
+ "close",
52
+ async () => {
53
+ await consumer.disconnect();
54
+ await this.#deleteGroup(groupId);
55
+ },
56
+ 10
57
+ );
58
+ };
59
+ _indexcjs.Instance.on("start", subscribe, 2);
60
+ }
60
61
  };
61
- _indexcjs.Instance.on("start", subscribe, 2);
62
62
  }
63
63
  async #getAdmin() {
64
64
  if (!this.#admin) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/events/types/kafka.ts","/home/runner/work/equipped/equipped/dist/cjs/events/types/kafka.cjs"],"names":[],"mappings":"AAAA,4SAAsB;AACtB,oFAAkB;AAElB,oDAAyB;AAEzB,sDAAuC;AACvC,sCAAoF;AAG7E,MAAM,cAAA,QAAsB,kBAAS;AAAA,EAC3C,CAAA,MAAA;AAAA,EACA,CAAA,SAAA;AAAA,EACA,CAAA,KAAA;AAAA,EACA,WAAA,CAAY,MAAA,EAAqB;AAChC,IAAA,KAAA,CAAM,CAAA;AACN,IAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAO,GAAG,cAAc,EAAA,EAAI,MAAA;AAChD,IAAA,IAAA,CAAK,CAAA,UAAA,EAAa,SAAA;AAClB,IAAA,IAAA,CAAK,CAAA,OAAA,EAAU,UAAA,EACZ,IAAI,yBAAA,CAAU,OAAA,CAAQ,KAAA,CAAM;AAAA,MAC5B,OAAA,EAAS,EAAE,GAAG,aAAA,EAAe,QAAA,EAAU,yBAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,QAAQ;AAAA,IAC3E,CAAC,EAAA,EACA,IAAI,iBAAA,CAAM,KAAA,CAAM,EAAE,GAAG,aAAA,EAAe,QAAA,EAAU,iBAAA,CAAM,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,EAC1E;AAAA,EAEA,eAAA,CAAoD,SAAA,EAA2B,QAAA,EAAmC,CAAC,CAAA,EAAG;AACrH,IAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA;AACpF,IAAA,OAAO,MAAA,CAAO,IAAA,EAAA,GAAwB;AACrC,MAAA,IAAI;AACH,QAAA,MAAM,SAAA,EAAW,IAAA,CAAK,CAAA,MAAA,CAAQ,QAAA,CAAS,CAAA;AACvC,QAAA,MAAM,QAAA,CAAS,OAAA,CAAQ,CAAA;AACvB,QAAA,MAAM,QAAA,CAAS,IAAA,CAAK;AAAA,UACnB,KAAA;AAAA,UACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAI,EAAE,CAAC;AAAA,QAC3C,CAAC,CAAA;AACD,QAAA,OAAO,IAAA;AAAA,MACR,EAAA,UAAQ;AACP,QAAA,OAAO,KAAA;AAAA,MACR;AAAA,IACD,CAAA;AAAA,EACD;AAAA,EAEA,gBAAA,CACC,SAAA,EACA,SAAA,EACA,QAAA,EAAqC,CAAC,CAAA,EACrC;AACD,IAAA,QAAA,EAAU,EAAE,GAAG,gCAAA,EAAyB,GAAG,QAAQ,CAAA;AACnD,IAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA;AACpF,IAAA,MAAM,UAAA,EAAY,MAAA,CAAA,EAAA,GAAY;AAC7B,MAAA,MAAM,IAAA,CAAK,CAAA,WAAA,CAAa,KAAK,CAAA;AAC7B,MAAA,MAAM,QAAA,EAAU,OAAA,CAAQ,OAAA,EACrB,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,CAAA,EAAA;AAE4B,MAAA;AAErC,MAAA;AACW,MAAA;AAEf,MAAA;AACkB,QAAA;AACK,UAAA;AACnB,YAAA;AACoC,YAAA;AACxD,UAAA;AACF,QAAA;AACA,MAAA;AAEW,MAAA;AACF,QAAA;AACR,UAAA;AACY,UAAA;AACe,YAAA;AACK,YAAA;AAChC,UAAA;AACA,UAAA;AACD,QAAA;AACF,IAAA;AACiC,IAAA;AAClC,EAAA;AAEkB,EAAA;AACC,IAAA;AACgB,MAAA;AACP,MAAA;AAC3B,IAAA;AACY,IAAA;AACb,EAAA;AAEkC,EAAA;AACE,IAAA;AAC4B,IAAA;AAChE,EAAA;AAEoC,EAAA;AACA,IAAA;AACa,IAAA;AAAE,IAAA;AACnD,EAAA;AACD;AClBqE;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/kafka.cjs","sourcesContent":["import Confluent from '@confluentinc/kafka-javascript'\nimport Kafka from 'kafkajs'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { DefaultSubscribeOptions, EventBus, PublishOptions, SubscribeOptions } from '../base'\nimport { KafkaConfig } from '../pipes'\n\nexport class KafkaEventBus extends EventBus {\n\t#client: Kafka.Kafka | Confluent.KafkaJS.Kafka\n\t#confluent: boolean\n\t#admin: Kafka.Admin | Confluent.KafkaJS.Admin | undefined\n\tconstructor(config: KafkaConfig) {\n\t\tsuper()\n\t\tconst { confluent = false, ...kafkaSettings } = config\n\t\tthis.#confluent = confluent\n\t\tthis.#client = confluent\n\t\t\t? new Confluent.KafkaJS.Kafka({\n\t\t\t\t\tkafkaJS: { ...kafkaSettings, logLevel: Confluent.KafkaJS.logLevel.NOTHING },\n\t\t\t\t})\n\t\t\t: new Kafka.Kafka({ ...kafkaSettings, logLevel: Kafka.logLevel.NOTHING })\n\t}\n\n\tcreatePublisher<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<PublishOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn async (data: Event['data']) => {\n\t\t\ttry {\n\t\t\t\tconst producer = this.#client.producer()\n\t\t\t\tawait producer.connect()\n\t\t\t\tawait producer.send({\n\t\t\t\t\ttopic,\n\t\t\t\t\tmessages: [{ value: JSON.stringify(data) }],\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateSubscriber<Event extends Events[keyof Events]>(\n\t\ttopicName: Event['topic'],\n\t\tonMessage: (data: Event['data']) => Promise<void>,\n\t\toptions: Partial<SubscribeOptions> = {},\n\t) {\n\t\toptions = { ...DefaultSubscribeOptions, ...options }\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\tconst subscribe = async () => {\n\t\t\tawait this.#createTopic(topic)\n\t\t\tconst groupId = options.fanout\n\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t: topic\n\t\t\tconst consumer = this.#client.consumer(this.#confluent ? ({ kafkaJS: { groupId } } as any) : { groupId })\n\n\t\t\tawait consumer.connect()\n\t\t\tawait consumer.subscribe({ topic })\n\n\t\t\tawait consumer.run({\n\t\t\t\teachMessage: async ({ message }) => {\n\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\tif (!message.value) return\n\t\t\t\t\t\tawait onMessage(parseJSONValue(message.value.toString()))\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (options.fanout)\n\t\t\t\tInstance.on(\n\t\t\t\t\t'close',\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait consumer.disconnect()\n\t\t\t\t\t\tawait this.#deleteGroup(groupId)\n\t\t\t\t\t},\n\t\t\t\t\t10,\n\t\t\t\t)\n\t\t}\n\t\tInstance.on('start', subscribe, 2)\n\t}\n\n\tasync #getAdmin() {\n\t\tif (!this.#admin) {\n\t\t\tthis.#admin = this.#client.admin()\n\t\t\tawait this.#admin.connect()\n\t\t}\n\t\treturn this.#admin\n\t}\n\n\tasync #createTopic(topic: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.createTopics({ topics: [{ topic }], timeout: 5000 })\n\t}\n\n\tasync #deleteGroup(groupId: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.deleteGroups([groupId]).catch(() => {})\n\t}\n}\n",null]}
1
+ {"version":3,"sources":["../../../../src/events/types/kafka.ts","/home/runner/work/equipped/equipped/dist/cjs/events/types/kafka.cjs"],"names":[],"mappings":"AAAA,4SAAsB;AACtB,oFAAkB;AAElB,oDAAyB;AAEzB,sDAAuC;AACvC,sCAAwC;AAGjC,MAAM,cAAA,QAAsB,kBAAS;AAAA,EAC3C,CAAA,MAAA;AAAA,EACA,CAAA,SAAA;AAAA,EACA,CAAA,KAAA;AAAA,EACA,WAAA,CAAY,MAAA,EAAqB;AAChC,IAAA,KAAA,CAAM,CAAA;AACN,IAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAO,GAAG,cAAc,EAAA,EAAI,MAAA;AAChD,IAAA,IAAA,CAAK,CAAA,UAAA,EAAa,SAAA;AAClB,IAAA,IAAA,CAAK,CAAA,OAAA,EAAU,UAAA,EACZ,IAAI,yBAAA,CAAU,OAAA,CAAQ,KAAA,CAAM;AAAA,MAC5B,OAAA,EAAS,EAAE,GAAG,aAAA,EAAe,QAAA,EAAU,yBAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,QAAQ;AAAA,IAC3E,CAAC,EAAA,EACA,IAAI,iBAAA,CAAM,KAAA,CAAM,EAAE,GAAG,aAAA,EAAe,QAAA,EAAU,iBAAA,CAAM,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,EAC1E;AAAA,EAEA,YAAA,CAAiD,SAAA,EAA2B,QAAA,EAAkC,CAAC,CAAA,EAAG;AACjH,IAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA;AACpF,IAAA,OAAO;AAAA,MACN,OAAA,EAAS,MAAA,CAAO,IAAA,EAAA,GAAwB;AACvC,QAAA,IAAI;AACH,UAAA,MAAM,SAAA,EAAW,IAAA,CAAK,CAAA,MAAA,CAAQ,QAAA,CAAS,CAAA;AACvC,UAAA,MAAM,QAAA,CAAS,OAAA,CAAQ,CAAA;AACvB,UAAA,MAAM,QAAA,CAAS,IAAA,CAAK;AAAA,YACnB,KAAA;AAAA,YACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAI,EAAE,CAAC;AAAA,UAC3C,CAAC,CAAA;AACD,UAAA,OAAO,IAAA;AAAA,QACR,EAAA,UAAQ;AACP,UAAA,OAAO,KAAA;AAAA,QACR;AAAA,MACD,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,SAAA,EAAA,GAAsD;AACjE,QAAA,MAAM,UAAA,EAAY,MAAA,CAAA,EAAA,GAAY;AAC7B,UAAA,MAAM,IAAA,CAAK,CAAA,WAAA,CAAa,KAAK,CAAA;AAC7B,UAAA,MAAM,QAAA,EAAU,OAAA,CAAQ,OAAA,EACrB,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,CAAA,EAAA;AAE4B,UAAA;AAErC,UAAA;AACW,UAAA;AAEf,UAAA;AACkB,YAAA;AACK,cAAA;AACnB,gBAAA;AACoC,gBAAA;AACxD,cAAA;AACF,YAAA;AACA,UAAA;AAEW,UAAA;AACF,YAAA;AACR,cAAA;AACY,cAAA;AACe,gBAAA;AACK,gBAAA;AAChC,cAAA;AACA,cAAA;AACD,YAAA;AACF,QAAA;AACiC,QAAA;AAClC,MAAA;AACD,IAAA;AACD,EAAA;AAEkB,EAAA;AACC,IAAA;AACgB,MAAA;AACP,MAAA;AAC3B,IAAA;AACY,IAAA;AACb,EAAA;AAEkC,EAAA;AACE,IAAA;AAC4B,IAAA;AAChE,EAAA;AAEoC,EAAA;AACA,IAAA;AACa,IAAA;AAAE,IAAA;AACnD,EAAA;AACD;ACbyE;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/kafka.cjs","sourcesContent":["import Confluent from '@confluentinc/kafka-javascript'\nimport Kafka from 'kafkajs'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { EventBus, StreamOptions } from '../base'\nimport { KafkaConfig } from '../pipes'\n\nexport class KafkaEventBus extends EventBus {\n\t#client: Kafka.Kafka | Confluent.KafkaJS.Kafka\n\t#confluent: boolean\n\t#admin: Kafka.Admin | Confluent.KafkaJS.Admin | undefined\n\tconstructor(config: KafkaConfig) {\n\t\tsuper()\n\t\tconst { confluent = false, ...kafkaSettings } = config\n\t\tthis.#confluent = confluent\n\t\tthis.#client = confluent\n\t\t\t? new Confluent.KafkaJS.Kafka({\n\t\t\t\t\tkafkaJS: { ...kafkaSettings, logLevel: Confluent.KafkaJS.logLevel.NOTHING },\n\t\t\t\t})\n\t\t\t: new Kafka.Kafka({ ...kafkaSettings, logLevel: Kafka.logLevel.NOTHING })\n\t}\n\n\tcreateStream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn {\n\t\t\tpublish: async (data: Event['data']) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst producer = this.#client.producer()\n\t\t\t\t\tawait producer.connect()\n\t\t\t\t\tawait producer.send({\n\t\t\t\t\t\ttopic,\n\t\t\t\t\t\tmessages: [{ value: JSON.stringify(data) }],\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t} catch {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t},\n\t\t\tsubscribe: (onMessage: (data: Event['data']) => Promise<void>) => {\n\t\t\t\tconst subscribe = async () => {\n\t\t\t\t\tawait this.#createTopic(topic)\n\t\t\t\t\tconst groupId = options.fanout\n\t\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t\t: topic\n\t\t\t\t\tconst consumer = this.#client.consumer(this.#confluent ? ({ kafkaJS: { groupId } } as any) : { groupId })\n\n\t\t\t\t\tawait consumer.connect()\n\t\t\t\t\tawait consumer.subscribe({ topic })\n\n\t\t\t\t\tawait consumer.run({\n\t\t\t\t\t\teachMessage: async ({ message }) => {\n\t\t\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\t\tif (!message.value) return\n\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(message.value.toString()))\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tif (options.fanout)\n\t\t\t\t\t\tInstance.on(\n\t\t\t\t\t\t\t'close',\n\t\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\t\tawait consumer.disconnect()\n\t\t\t\t\t\t\t\tawait this.#deleteGroup(groupId)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t10,\n\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tInstance.on('start', subscribe, 2)\n\t\t\t},\n\t\t}\n\t}\n\n\tasync #getAdmin() {\n\t\tif (!this.#admin) {\n\t\t\tthis.#admin = this.#client.admin()\n\t\t\tawait this.#admin.connect()\n\t\t}\n\t\treturn this.#admin\n\t}\n\n\tasync #createTopic(topic: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.createTopics({ topics: [{ topic }], timeout: 5000 })\n\t}\n\n\tasync #deleteGroup(groupId: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.deleteGroups([groupId]).catch(() => {})\n\t}\n}\n",null]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _kafkajavascript = require('@confluentinc/kafka-javascript'); var _kafkajavascript2 = _interopRequireDefault(_kafkajavascript);var _kafkajs = require('kafkajs'); var _kafkajs2 = _interopRequireDefault(_kafkajs);var _indexmincjs = require('../../instance/index.min.cjs');var _indexmincjs3 = require('../../utilities/index.min.cjs');var _basemincjs = require('../base.min.cjs');class O extends _basemincjs.EventBus{#t;#e;#a;constructor(t){super();const{confluent:e=!1,...a}=t;this.#e=e,this.#t=e?new _kafkajavascript2.default.KafkaJS.Kafka({kafkaJS:{...a,logLevel:_kafkajavascript2.default.KafkaJS.logLevel.NOTHING}}):new _kafkajs2.default.Kafka({...a,logLevel:_kafkajs2.default.logLevel.NOTHING})}createPublisher(t,e={}){const a=e.skipScope?t:_indexmincjs.Instance.get().getScopedName(t);return async s=>{try{const i=this.#t.producer();return await i.connect(),await i.send({topic:a,messages:[{value:JSON.stringify(s)}]}),!0}catch (e2){return!1}}}createSubscriber(t,e,a={}){a={..._basemincjs.DefaultSubscribeOptions,...a};const s=a.skipScope?t:_indexmincjs.Instance.get().getScopedName(t),i=async()=>{await this.#s(s);const r=a.fanout?_indexmincjs.Instance.get().getScopedName(`${_indexmincjs.Instance.get().settings.app.id}-fanout-${_indexmincjs3.Random.string(10)}`):s,o=this.#t.consumer(this.#e?{kafkaJS:{groupId:r}}:{groupId:r});await o.connect(),await o.subscribe({topic:s}),await o.run({eachMessage:async({message:c})=>{_indexmincjs.Instance.resolveBeforeCrash(async()=>{c.value&&await e(_indexmincjs3.parseJSONValue.call(void 0, c.value.toString()))})}}),a.fanout&&_indexmincjs.Instance.on("close",async()=>{await o.disconnect(),await this.#i(r)},10)};_indexmincjs.Instance.on("start",i,2)}async#n(){return this.#a||(this.#a=this.#t.admin(),await this.#a.connect()),this.#a}async#s(t){await(await this.#n()).createTopics({topics:[{topic:t}],timeout:5e3})}async#i(t){await(await this.#n()).deleteGroups([t]).catch(()=>{})}}exports.KafkaEventBus = O;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _kafkajavascript = require('@confluentinc/kafka-javascript'); var _kafkajavascript2 = _interopRequireDefault(_kafkajavascript);var _kafkajs = require('kafkajs'); var _kafkajs2 = _interopRequireDefault(_kafkajs);var _indexmincjs = require('../../instance/index.min.cjs');var _indexmincjs3 = require('../../utilities/index.min.cjs');var _basemincjs = require('../base.min.cjs');class E extends _basemincjs.EventBus{#t;#e;#a;constructor(t){super();const{confluent:a=!1,...e}=t;this.#e=a,this.#t=a?new _kafkajavascript2.default.KafkaJS.Kafka({kafkaJS:{...e,logLevel:_kafkajavascript2.default.KafkaJS.logLevel.NOTHING}}):new _kafkajs2.default.Kafka({...e,logLevel:_kafkajs2.default.logLevel.NOTHING})}createStream(t,a={}){const e=a.skipScope?t:_indexmincjs.Instance.get().getScopedName(t);return{publish:async o=>{try{const s=this.#t.producer();return await s.connect(),await s.send({topic:e,messages:[{value:JSON.stringify(o)}]}),!0}catch (e2){return!1}},subscribe:o=>{const s=async()=>{await this.#s(e);const r=a.fanout?_indexmincjs.Instance.get().getScopedName(`${_indexmincjs.Instance.get().settings.app.id}-fanout-${_indexmincjs3.Random.string(10)}`):e,i=this.#t.consumer(this.#e?{kafkaJS:{groupId:r}}:{groupId:r});await i.connect(),await i.subscribe({topic:e}),await i.run({eachMessage:async({message:c})=>{_indexmincjs.Instance.resolveBeforeCrash(async()=>{c.value&&await o(_indexmincjs3.parseJSONValue.call(void 0, c.value.toString()))})}}),a.fanout&&_indexmincjs.Instance.on("close",async()=>{await i.disconnect(),await this.#i(r)},10)};_indexmincjs.Instance.on("start",s,2)}}}async#n(){return this.#a||(this.#a=this.#t.admin(),await this.#a.connect()),this.#a}async#s(t){await(await this.#n()).createTopics({topics:[{topic:t}],timeout:5e3})}async#i(t){await(await this.#n()).deleteGroups([t]).catch(()=>{})}}exports.KafkaEventBus = E;
2
2
  //# sourceMappingURL=kafka.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/events/types/kafka.ts"],"names":["confluent","config","#confluent","#client","Confluent","kafkaSettings","Kafka","topicName","options","data","topic","onMessage","DefaultSubscribeOptions","Instance","subscribe","groupId","Random"],"mappings":"AAAA,4SAAsB,oFACJ,2DAIT,6DACA,6CAOR,MACC,EAAA,QACM,oBAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAA,WAAwCC,CAAAA,CAChD,CAAA,CAAA,KAAKC,CAAaF,CAAAA,CAClB,KAAKG,CAAAA,SACEC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,GAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,IACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAKC,CAAAA,CAAe,CAAA,CAAA,CAAA,CAAA,IAAA,yBAAUD,CAAAA,OAAU,CAAA,KAAQ,CAAA,CAAA,OAAS,CAAA,CAAA,GAClE,CAAA,CACA,QAAU,CAAA,yBAAA,CAAA,OAA0B,CAAA,QAAUE,CAAAA,OAAM,CAAA,CAAA,CAAS,CAAA,IAAA,iBAAA,CAAQ,KAGzE,CAAA,CAAA,GAAA,CAAA,CAAA,QAAoDC,CAA2BC,iBAAAA,CAAmC,QACjH,CAAA,OAAsB,CAAA,CAAA,CAAA,eAAuC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAuB,CAAA,CACpF,CAAA,CAAA,SAAO,CAAA,CAAOC,CAAAA,qBAAAA,CAAwB,GACrC,CAAI,CACH,CAAA,aAAsBN,CAAAA,CAAQ,CAAA,CAAA,OAAS,MACvC,CAAA,EAAA,CAAA,GAAA,CAAA,MAAe,CAAA,CAAA,IAAQ,CACvB,CAAA,CAAA,CAAA,QAAe,CAAA,CAAK,CACnB,OAAAO,MACA,CAAA,CAAA,OAAa,CAAA,CAAA,CAAO,MAAK,CAAA,CAAA,IAAA,CAAA,CAAA,KAC1B,CAAC,CAAA,CACM,QACA,CACP,CAAA,CAAA,KAAO,CACR,IAIF,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACCH,CAAAA,CACAI,CAAAA,CACAH,CAAAA,UAEAA,CAAAA,MAAeI,CAAyB,CAAA,CAAA,CAAGJ,CAAQ,gBAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAYD,CAAAA,CAAYM,CAAAA,CAAS,CAAA,CAAA,CAAA,CAAI,GAAE,mCAAA,CAAA,GAAA,CAAA,CAAA,CAAA,MAAuB,CAAA,CAC9EC,CAAAA,CAAY,SAAY,CAC7B,CAAA,CAAA,qBAAA,CAAA,GAAM,CAAA,CAAA,CAAA,aACAC,CAAAA,CAAUP,CAAAA,CAAQ,CAAA,CAAA,KACrBK,CAAAA,CAAS,EAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,MAAY,CAAA,CAAA,CAAI,CAAA,MAAE,CAAA,qBAAA,CAAA,GAAS,CAAA,CAAI,CAAA,aAAaG,CAAO,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/kafka.min.cjs","sourcesContent":["import Confluent from '@confluentinc/kafka-javascript'\nimport Kafka from 'kafkajs'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { DefaultSubscribeOptions, EventBus, PublishOptions, SubscribeOptions } from '../base'\nimport { KafkaConfig } from '../pipes'\n\nexport class KafkaEventBus extends EventBus {\n\t#client: Kafka.Kafka | Confluent.KafkaJS.Kafka\n\t#confluent: boolean\n\t#admin: Kafka.Admin | Confluent.KafkaJS.Admin | undefined\n\tconstructor(config: KafkaConfig) {\n\t\tsuper()\n\t\tconst { confluent = false, ...kafkaSettings } = config\n\t\tthis.#confluent = confluent\n\t\tthis.#client = confluent\n\t\t\t? new Confluent.KafkaJS.Kafka({\n\t\t\t\t\tkafkaJS: { ...kafkaSettings, logLevel: Confluent.KafkaJS.logLevel.NOTHING },\n\t\t\t\t})\n\t\t\t: new Kafka.Kafka({ ...kafkaSettings, logLevel: Kafka.logLevel.NOTHING })\n\t}\n\n\tcreatePublisher<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<PublishOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn async (data: Event['data']) => {\n\t\t\ttry {\n\t\t\t\tconst producer = this.#client.producer()\n\t\t\t\tawait producer.connect()\n\t\t\t\tawait producer.send({\n\t\t\t\t\ttopic,\n\t\t\t\t\tmessages: [{ value: JSON.stringify(data) }],\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateSubscriber<Event extends Events[keyof Events]>(\n\t\ttopicName: Event['topic'],\n\t\tonMessage: (data: Event['data']) => Promise<void>,\n\t\toptions: Partial<SubscribeOptions> = {},\n\t) {\n\t\toptions = { ...DefaultSubscribeOptions, ...options }\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\tconst subscribe = async () => {\n\t\t\tawait this.#createTopic(topic)\n\t\t\tconst groupId = options.fanout\n\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t: topic\n\t\t\tconst consumer = this.#client.consumer(this.#confluent ? ({ kafkaJS: { groupId } } as any) : { groupId })\n\n\t\t\tawait consumer.connect()\n\t\t\tawait consumer.subscribe({ topic })\n\n\t\t\tawait consumer.run({\n\t\t\t\teachMessage: async ({ message }) => {\n\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\tif (!message.value) return\n\t\t\t\t\t\tawait onMessage(parseJSONValue(message.value.toString()))\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (options.fanout)\n\t\t\t\tInstance.on(\n\t\t\t\t\t'close',\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait consumer.disconnect()\n\t\t\t\t\t\tawait this.#deleteGroup(groupId)\n\t\t\t\t\t},\n\t\t\t\t\t10,\n\t\t\t\t)\n\t\t}\n\t\tInstance.on('start', subscribe, 2)\n\t}\n\n\tasync #getAdmin() {\n\t\tif (!this.#admin) {\n\t\t\tthis.#admin = this.#client.admin()\n\t\t\tawait this.#admin.connect()\n\t\t}\n\t\treturn this.#admin\n\t}\n\n\tasync #createTopic(topic: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.createTopics({ topics: [{ topic }], timeout: 5000 })\n\t}\n\n\tasync #deleteGroup(groupId: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.deleteGroups([groupId]).catch(() => {})\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/events/types/kafka.ts"],"names":["confluent","config","#confluent","#client","Confluent","kafkaSettings","Kafka","topic","options","data","producer","onMessage","subscribe","Instance","Random"],"mappings":"AAAA,4SAAsB,oFACJ,2DAIT,6DAC+B,6CAOvC,MACC,EAAA,QACM,oBAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAA,WAAwCC,CAAAA,CAChD,CAAA,CAAA,KAAKC,CAAaF,CAAAA,CAClB,KAAKG,CAAAA,SACEC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,GAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,IACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAKC,CAAAA,CAAe,CAAA,CAAA,CAAA,CAAA,IAAA,yBAAUD,CAAAA,OAAU,CAAA,KAAQ,CAAA,CAAA,OAAS,CAAA,CAAA,GAClE,CAAA,CACA,QAAU,CAAA,yBAAA,CAAA,OAA0B,CAAA,QAAUE,CAAAA,OAAM,CAAA,CAAA,CAAS,CAAA,IAAA,iBAAA,CAAQ,KAGzE,CAAA,CAAA,GAAA,CAAA,CAAA,QAA8G,CAAC,iBAAA,CAAG,QAC3GC,CAAQC,OAAQ,CAAA,CAAA,CAAA,YAAuC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAuB,CAAA,CACpF,CAAA,CAAA,SACC,CAAA,CAAA,CAAA,qBAAS,CAAA,GAAA,CAAA,CAAOC,CAAAA,aAERC,CAAAA,CAAW,CAAA,CAAA,MAAa,CAAA,OAAA,CAAS,MACvC,CAAA,EAAA,CAAA,GAAA,CAAA,MAAe,CAAA,CAAA,IAAQ,CACvB,CAAA,CAAA,CAAA,QAAe,CAAA,CAAK,CACnB,OAAAH,MACA,CAAA,CAAA,OAAa,CAAA,CAAA,CAAO,MAAK,CAAA,CAAA,IAAA,CAAA,CAAA,KAC1B,CAAC,CAAA,CACM,QACA,CACP,CAAA,CAAA,KAAO,CACR,IAED,CAAA,SAAYI,CAAAA,CAAsD,CACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAY,UAAA,CAAA,MACjB,CAAA,CAAA,CAAA,CAAM,CAAA,SAAuB,CAC7B,CAAA,EAAA,CAAA,MAAwB,CAAA,CAAA,KACrBC,CAAAA,CAAS,EAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,MAAY,CAAA,CAAA,CAAI,CAAA,MAAE,CAAA,qBAAA,CAAA,GAAS,CAAA,CAAI,CAAA,aAAaC,CAAO,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/kafka.min.cjs","sourcesContent":["import Confluent from '@confluentinc/kafka-javascript'\nimport Kafka from 'kafkajs'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { EventBus, StreamOptions } from '../base'\nimport { KafkaConfig } from '../pipes'\n\nexport class KafkaEventBus extends EventBus {\n\t#client: Kafka.Kafka | Confluent.KafkaJS.Kafka\n\t#confluent: boolean\n\t#admin: Kafka.Admin | Confluent.KafkaJS.Admin | undefined\n\tconstructor(config: KafkaConfig) {\n\t\tsuper()\n\t\tconst { confluent = false, ...kafkaSettings } = config\n\t\tthis.#confluent = confluent\n\t\tthis.#client = confluent\n\t\t\t? new Confluent.KafkaJS.Kafka({\n\t\t\t\t\tkafkaJS: { ...kafkaSettings, logLevel: Confluent.KafkaJS.logLevel.NOTHING },\n\t\t\t\t})\n\t\t\t: new Kafka.Kafka({ ...kafkaSettings, logLevel: Kafka.logLevel.NOTHING })\n\t}\n\n\tcreateStream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn {\n\t\t\tpublish: async (data: Event['data']) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst producer = this.#client.producer()\n\t\t\t\t\tawait producer.connect()\n\t\t\t\t\tawait producer.send({\n\t\t\t\t\t\ttopic,\n\t\t\t\t\t\tmessages: [{ value: JSON.stringify(data) }],\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t} catch {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t},\n\t\t\tsubscribe: (onMessage: (data: Event['data']) => Promise<void>) => {\n\t\t\t\tconst subscribe = async () => {\n\t\t\t\t\tawait this.#createTopic(topic)\n\t\t\t\t\tconst groupId = options.fanout\n\t\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t\t: topic\n\t\t\t\t\tconst consumer = this.#client.consumer(this.#confluent ? ({ kafkaJS: { groupId } } as any) : { groupId })\n\n\t\t\t\t\tawait consumer.connect()\n\t\t\t\t\tawait consumer.subscribe({ topic })\n\n\t\t\t\t\tawait consumer.run({\n\t\t\t\t\t\teachMessage: async ({ message }) => {\n\t\t\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\t\tif (!message.value) return\n\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(message.value.toString()))\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tif (options.fanout)\n\t\t\t\t\t\tInstance.on(\n\t\t\t\t\t\t\t'close',\n\t\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\t\tawait consumer.disconnect()\n\t\t\t\t\t\t\t\tawait this.#deleteGroup(groupId)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t10,\n\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tInstance.on('start', subscribe, 2)\n\t\t\t},\n\t\t}\n\t}\n\n\tasync #getAdmin() {\n\t\tif (!this.#admin) {\n\t\t\tthis.#admin = this.#client.admin()\n\t\t\tawait this.#admin.connect()\n\t\t}\n\t\treturn this.#admin\n\t}\n\n\tasync #createTopic(topic: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.createTopics({ topics: [{ topic }], timeout: 5000 })\n\t}\n\n\tasync #deleteGroup(groupId: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.deleteGroups([groupId]).catch(() => {})\n\t}\n}\n"]}
@@ -16,36 +16,36 @@ class RabbitMQEventBus extends _basecjs.EventBus {
16
16
  }
17
17
  });
18
18
  }
19
- createPublisher(topicName, options = {}) {
19
+ createStream(topicName, options = {}) {
20
20
  const topic = options.skipScope ? topicName : _indexcjs.Instance.get().getScopedName(topicName);
21
- return async (data) => await this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true });
22
- }
23
- createSubscriber(topicName, onMessage, options = {}) {
24
- options = { ..._basecjs.DefaultSubscribeOptions, ...options };
25
- const topic = options.skipScope ? topicName : _indexcjs.Instance.get().getScopedName(topicName);
26
- const subscribe = async () => {
27
- await this.#client.addSetup(async (channel) => {
28
- const queueName = options.fanout ? _indexcjs.Instance.get().getScopedName(`${_indexcjs.Instance.get().settings.app.id}-fanout-${_indexcjs3.Random.string(10)}`) : topic;
29
- const { queue } = await channel.assertQueue(queueName, { durable: !options.fanout, exclusive: options.fanout });
30
- await channel.bindQueue(queue, this.#columnName, topic);
31
- channel.consume(
32
- queue,
33
- async (msg) => {
34
- _indexcjs.Instance.resolveBeforeCrash(async () => {
35
- if (!msg) return;
36
- try {
37
- await onMessage(_indexcjs3.parseJSONValue.call(void 0, msg.content.toString()));
38
- channel.ack(msg);
39
- } catch (e) {
40
- channel.nack(msg);
41
- }
42
- });
43
- },
44
- { noAck: false }
45
- );
46
- });
21
+ return {
22
+ publish: async (data) => await this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),
23
+ subscribe: async (onMessage) => {
24
+ const subscribe = async () => {
25
+ await this.#client.addSetup(async (channel) => {
26
+ const queueName = options.fanout ? _indexcjs.Instance.get().getScopedName(`${_indexcjs.Instance.get().settings.app.id}-fanout-${_indexcjs3.Random.string(10)}`) : topic;
27
+ const { queue } = await channel.assertQueue(queueName, { durable: !options.fanout, exclusive: options.fanout });
28
+ await channel.bindQueue(queue, this.#columnName, topic);
29
+ channel.consume(
30
+ queue,
31
+ async (msg) => {
32
+ _indexcjs.Instance.resolveBeforeCrash(async () => {
33
+ if (!msg) return;
34
+ try {
35
+ await onMessage(_indexcjs3.parseJSONValue.call(void 0, msg.content.toString()));
36
+ channel.ack(msg);
37
+ } catch (e) {
38
+ channel.nack(msg);
39
+ }
40
+ });
41
+ },
42
+ { noAck: false }
43
+ );
44
+ });
45
+ };
46
+ _indexcjs.Instance.on("start", subscribe, 2);
47
+ }
47
48
  };
48
- _indexcjs.Instance.on("start", subscribe, 2);
49
49
  }
50
50
  }
51
51
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/events/types/rabbitmq.ts","/home/runner/work/equipped/equipped/dist/cjs/events/types/rabbitmq.cjs"],"names":[],"mappings":"AACA,yIAAwB;AAGxB,oDAAyB;AAEzB,sDAAuC;AACvC,sCAAoF;AAG7E,MAAM,iBAAA,QAAyB,kBAAS;AAAA,EAC9C,CAAA,MAAA;AAAA,EACA,CAAA,UAAA;AAAA,EAEA,WAAA,CAAY,MAAA,EAAwB;AACnC,IAAA,KAAA,CAAM,CAAA;AACN,IAAA,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,eAAA;AAC1B,IAAA,IAAA,CAAK,CAAA,OAAA,EAAU,4CAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,aAAA,CAAc;AAAA,MAClD,IAAA,EAAM,KAAA;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,OAAA,EAAA,GAA4B;AACzC,QAAA,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,CAAA,UAAA,EAAa,QAAA,EAAU,EAAE,OAAA,EAAS,KAAK,CAAC,CAAA;AAC1E,QAAA,MAAM,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA;AAAA,MACzB;AAAA,IACD,CAAC,CAAA;AAAA,EACF;AAAA,EAEA,eAAA,CAAoD,SAAA,EAA2B,QAAA,EAAmC,CAAC,CAAA,EAAG;AACrH,IAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA;AACpF,IAAA,OAAO,MAAA,CAAO,IAAA,EAAA,GACb,MAAM,IAAA,CAAK,CAAA,MAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAa,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG,EAAE,UAAA,EAAY,KAAK,CAAC,CAAA;AAAA,EAChG;AAAA,EAEA,gBAAA,CACC,SAAA,EACA,SAAA,EACA,QAAA,EAAqC,CAAC,CAAA,EACrC;AACD,IAAA,QAAA,EAAU,EAAE,GAAG,gCAAA,EAAyB,GAAG,QAAQ,CAAA;AACnD,IAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA;AACpF,IAAA,MAAM,UAAA,EAAY,MAAA,CAAA,EAAA,GAAY;AAC7B,MAAA,MAAM,IAAA,CAAK,CAAA,MAAA,CAAQ,QAAA,CAAS,MAAA,CAAO,OAAA,EAAA,GAA4B;AAC9D,QAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,OAAA,EACvB,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,CAAA,EAAA;AAEyB,QAAA;AACH,QAAA;AAC9C,QAAA;AACP,UAAA;AACe,UAAA;AAC0B,YAAA;AAC7B,cAAA;AACN,cAAA;AACmD,gBAAA;AACvC,gBAAA;AACR,cAAA;AACS,gBAAA;AACjB,cAAA;AACA,YAAA;AACF,UAAA;AACe,UAAA;AAChB,QAAA;AACA,MAAA;AACF,IAAA;AAEiC,IAAA;AAClC,EAAA;AACD;AChByE;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/rabbitmq.cjs","sourcesContent":["import type { ChannelWrapper } from 'amqp-connection-manager'\nimport { connect } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { DefaultSubscribeOptions, EventBus, PublishOptions, SubscribeOptions } from '../base'\nimport { RabbitMQConfig } from '../pipes'\n\nexport class RabbitMQEventBus extends EventBus {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tconstructor(config: RabbitMQConfig) {\n\t\tsuper()\n\t\tthis.#columnName = config.eventColumnName\n\t\tthis.#client = connect([config.uri]).createChannel({\n\t\t\tjson: false,\n\t\t\tsetup: async (channel: ConfirmChannel) => {\n\t\t\t\tawait channel.assertExchange(this.#columnName, 'direct', { durable: true })\n\t\t\t\tawait channel.prefetch(1)\n\t\t\t},\n\t\t})\n\t}\n\n\tcreatePublisher<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<PublishOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn async (data: Event['data']) =>\n\t\t\tawait this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true })\n\t}\n\n\tcreateSubscriber<Event extends Events[keyof Events]>(\n\t\ttopicName: Event['topic'],\n\t\tonMessage: (data: Event['data']) => Promise<void>,\n\t\toptions: Partial<SubscribeOptions> = {},\n\t) {\n\t\toptions = { ...DefaultSubscribeOptions, ...options }\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\tconst subscribe = async () => {\n\t\t\tawait this.#client.addSetup(async (channel: ConfirmChannel) => {\n\t\t\t\tconst queueName = options.fanout\n\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t: topic\n\t\t\t\tconst { queue } = await channel.assertQueue(queueName, { durable: !options.fanout, exclusive: options.fanout })\n\t\t\t\tawait channel.bindQueue(queue, this.#columnName, topic)\n\t\t\t\tchannel.consume(\n\t\t\t\t\tqueue,\n\t\t\t\t\tasync (msg) => {\n\t\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\tif (!msg) return\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(msg.content.toString()))\n\t\t\t\t\t\t\t\tchannel.ack(msg)\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tchannel.nack(msg)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t\t{ noAck: false },\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\n\t\tInstance.on('start', subscribe, 2)\n\t}\n}\n",null]}
1
+ {"version":3,"sources":["../../../../src/events/types/rabbitmq.ts","/home/runner/work/equipped/equipped/dist/cjs/events/types/rabbitmq.cjs"],"names":[],"mappings":"AACA,yIAAwB;AAGxB,oDAAyB;AAEzB,sDAAuC;AACvC,sCAAwC;AAGjC,MAAM,iBAAA,QAAyB,kBAAS;AAAA,EAC9C,CAAA,MAAA;AAAA,EACA,CAAA,UAAA;AAAA,EAEA,WAAA,CAAY,MAAA,EAAwB;AACnC,IAAA,KAAA,CAAM,CAAA;AACN,IAAA,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,eAAA;AAC1B,IAAA,IAAA,CAAK,CAAA,OAAA,EAAU,4CAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,aAAA,CAAc;AAAA,MAClD,IAAA,EAAM,KAAA;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,OAAA,EAAA,GAA4B;AACzC,QAAA,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,CAAA,UAAA,EAAa,QAAA,EAAU,EAAE,OAAA,EAAS,KAAK,CAAC,CAAA;AAC1E,QAAA,MAAM,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA;AAAA,MACzB;AAAA,IACD,CAAC,CAAA;AAAA,EACF;AAAA,EAEA,YAAA,CAAiD,SAAA,EAA2B,QAAA,EAAkC,CAAC,CAAA,EAAG;AACjH,IAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA;AACpF,IAAA,OAAO;AAAA,MACN,OAAA,EAAS,MAAA,CAAO,IAAA,EAAA,GACf,MAAM,IAAA,CAAK,CAAA,MAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAa,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG,EAAE,UAAA,EAAY,KAAK,CAAC,CAAA;AAAA,MAC/F,SAAA,EAAW,MAAA,CAAO,SAAA,EAAA,GAAsD;AACvE,QAAA,MAAM,UAAA,EAAY,MAAA,CAAA,EAAA,GAAY;AAC7B,UAAA,MAAM,IAAA,CAAK,CAAA,MAAA,CAAQ,QAAA,CAAS,MAAA,CAAO,OAAA,EAAA,GAA4B;AAC9D,YAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,OAAA,EACvB,kBAAA,CAAS,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,CAAA,EAAA;AAEyB,YAAA;AACH,YAAA;AAC9C,YAAA;AACP,cAAA;AACe,cAAA;AAC0B,gBAAA;AAC7B,kBAAA;AACN,kBAAA;AACmD,oBAAA;AACvC,oBAAA;AACR,kBAAA;AACS,oBAAA;AACjB,kBAAA;AACA,gBAAA;AACF,cAAA;AACe,cAAA;AAChB,YAAA;AACA,UAAA;AACF,QAAA;AAEiC,QAAA;AAClC,MAAA;AACD,IAAA;AACD,EAAA;AACD;ACX6E;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/rabbitmq.cjs","sourcesContent":["import type { ChannelWrapper } from 'amqp-connection-manager'\nimport { connect } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { EventBus, StreamOptions } from '../base'\nimport { RabbitMQConfig } from '../pipes'\n\nexport class RabbitMQEventBus extends EventBus {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tconstructor(config: RabbitMQConfig) {\n\t\tsuper()\n\t\tthis.#columnName = config.eventColumnName\n\t\tthis.#client = connect([config.uri]).createChannel({\n\t\t\tjson: false,\n\t\t\tsetup: async (channel: ConfirmChannel) => {\n\t\t\t\tawait channel.assertExchange(this.#columnName, 'direct', { durable: true })\n\t\t\t\tawait channel.prefetch(1)\n\t\t\t},\n\t\t})\n\t}\n\n\tcreateStream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn {\n\t\t\tpublish: async (data: Event['data']) =>\n\t\t\t\tawait this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),\n\t\t\tsubscribe: async (onMessage: (data: Event['data']) => Promise<void>) => {\n\t\t\t\tconst subscribe = async () => {\n\t\t\t\t\tawait this.#client.addSetup(async (channel: ConfirmChannel) => {\n\t\t\t\t\t\tconst queueName = options.fanout\n\t\t\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t\t\t: topic\n\t\t\t\t\t\tconst { queue } = await channel.assertQueue(queueName, { durable: !options.fanout, exclusive: options.fanout })\n\t\t\t\t\t\tawait channel.bindQueue(queue, this.#columnName, topic)\n\t\t\t\t\t\tchannel.consume(\n\t\t\t\t\t\t\tqueue,\n\t\t\t\t\t\t\tasync (msg) => {\n\t\t\t\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\t\t\tif (!msg) return\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(msg.content.toString()))\n\t\t\t\t\t\t\t\t\t\tchannel.ack(msg)\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\tchannel.nack(msg)\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\t},\n\t\t\t\t\t\t\t{ noAck: false },\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tInstance.on('start', subscribe, 2)\n\t\t\t},\n\t\t}\n\t}\n}\n",null]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _amqpconnectionmanager = require('amqp-connection-manager');var _indexmincjs = require('../../instance/index.min.cjs');var _indexmincjs3 = require('../../utilities/index.min.cjs');var _basemincjs = require('../base.min.cjs');class w extends _basemincjs.EventBus{#e;#t;constructor(t){super(),this.#t=t.eventColumnName,this.#e=_amqpconnectionmanager.connect.call(void 0, [t.uri]).createChannel({json:!1,setup:async a=>{await a.assertExchange(this.#t,"direct",{durable:!0}),await a.prefetch(1)}})}createPublisher(t,a={}){const e=a.skipScope?t:_indexmincjs.Instance.get().getScopedName(t);return async s=>await this.#e.publish(this.#t,e,JSON.stringify(s),{persistent:!0})}createSubscriber(t,a,e={}){e={..._basemincjs.DefaultSubscribeOptions,...e};const s=e.skipScope?t:_indexmincjs.Instance.get().getScopedName(t),c=async()=>{await this.#e.addSetup(async r=>{const u=e.fanout?_indexmincjs.Instance.get().getScopedName(`${_indexmincjs.Instance.get().settings.app.id}-fanout-${_indexmincjs3.Random.string(10)}`):s,{queue:o}=await r.assertQueue(u,{durable:!e.fanout,exclusive:e.fanout});await r.bindQueue(o,this.#t,s),r.consume(o,async i=>{_indexmincjs.Instance.resolveBeforeCrash(async()=>{if(i)try{await a(_indexmincjs3.parseJSONValue.call(void 0, i.content.toString())),r.ack(i)}catch (e2){r.nack(i)}})},{noAck:!1})})};_indexmincjs.Instance.on("start",c,2)}}exports.RabbitMQEventBus = w;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _amqpconnectionmanager = require('amqp-connection-manager');var _indexmincjs = require('../../instance/index.min.cjs');var _indexmincjs3 = require('../../utilities/index.min.cjs');var _basemincjs = require('../base.min.cjs');class S extends _basemincjs.EventBus{#e;#t;constructor(e){super(),this.#t=e.eventColumnName,this.#e=_amqpconnectionmanager.connect.call(void 0, [e.uri]).createChannel({json:!1,setup:async t=>{await t.assertExchange(this.#t,"direct",{durable:!0}),await t.prefetch(1)}})}createStream(e,t={}){const s=t.skipScope?e:_indexmincjs.Instance.get().getScopedName(e);return{publish:async i=>await this.#e.publish(this.#t,s,JSON.stringify(i),{persistent:!0}),subscribe:async i=>{const c=async()=>{await this.#e.addSetup(async a=>{const u=t.fanout?_indexmincjs.Instance.get().getScopedName(`${_indexmincjs.Instance.get().settings.app.id}-fanout-${_indexmincjs3.Random.string(10)}`):s,{queue:o}=await a.assertQueue(u,{durable:!t.fanout,exclusive:t.fanout});await a.bindQueue(o,this.#t,s),a.consume(o,async r=>{_indexmincjs.Instance.resolveBeforeCrash(async()=>{if(r)try{await i(_indexmincjs3.parseJSONValue.call(void 0, r.content.toString())),a.ack(r)}catch (e2){a.nack(r)}})},{noAck:!1})})};_indexmincjs.Instance.on("start",c,2)}}}}exports.RabbitMQEventBus = S;
2
2
  //# sourceMappingURL=rabbitmq.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/events/types/rabbitmq.ts"],"names":["config","#client","channel","#columnName","topicName","options","data","topic","onMessage","DefaultSubscribeOptions","Instance","subscribe","queueName","Random"],"mappings":"AACA,yIAAwB,2DAKf,6DACA,6CAO4B,MAC7B,EACN,QAAmBA,oBAAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,WAC1B,CAAA,CAAA,CAAA,CAAKC,KAAkB,CAACD,CAAAA,CAAO,IAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,eACpC,CAAM,IACN,CAAA,CAAA,CAAA,CAAA,4CAAO,CAAA,CAAA,CAAA,GAAOE,CAAAA,CAA4B,CACzC,aAAc,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAe,KAAKC,CAAAA,MAAa,CAAA,EAAA,CAAA,MAAY,CAAA,CAAA,cACrDD,CAAQ,IAAA,CAAA,CAAA,CAAA,CAAA,QAKjB,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoDE,MAA+D,CAAG,CACrH,QAAcC,CAAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,eAAuC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAuB,CAAA,CACpF,CAAA,CAAA,SAAO,CAAA,CAAOC,CAAAA,qBAAAA,CACb,GAAA,CAAA,CAAA,CAAM,aAAa,CAAA,CAAA,CAAQ,CAAA,OAAkBC,MAAO,CAAK,EAAA,MAAA,IAAc,CAAG,CAAE,CAAA,CAAA,OAAA,CAAA,IAAkB,CAChG,CAEA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,SACCH,CACAI,CAAAA,CACAH,CAAAA,CAAqC,UAEtBI,CAAAA,CAAyB,CAAA,CAAA,CAAGJ,CAAQ,gBAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAYD,CAAAA,CAAYM,CAAAA,CAAS,CAAA,CAAA,CAAA,CAAI,GAAE,mCAAA,CAAA,GAAA,CAAA,CAAA,CAAA,MAAuB,CAAA,CAC9EC,CAAAA,CAAY,SAAY,CAC7B,CAAA,CAAA,qBAAA,CAAA,GAAM,CAAA,CAAA,CAAA,aAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOT,KAClC,CAAA,CAAA,EAAA,CAAMU,MAAoB,IAAA,CACvBF,CAAAA,CAAS,CAAA,QAAM,CAAA,MAAA,CAAA,EAAA,CAAc,MAAY,CAAA,CAAA,CAAI,CAAA,MAAE,CAAA,qBAAA,CAAA,GAAS,CAAA,CAAI,CAAA,aAAaG,CAAO,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/rabbitmq.min.cjs","sourcesContent":["import type { ChannelWrapper } from 'amqp-connection-manager'\nimport { connect } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { DefaultSubscribeOptions, EventBus, PublishOptions, SubscribeOptions } from '../base'\nimport { RabbitMQConfig } from '../pipes'\n\nexport class RabbitMQEventBus extends EventBus {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tconstructor(config: RabbitMQConfig) {\n\t\tsuper()\n\t\tthis.#columnName = config.eventColumnName\n\t\tthis.#client = connect([config.uri]).createChannel({\n\t\t\tjson: false,\n\t\t\tsetup: async (channel: ConfirmChannel) => {\n\t\t\t\tawait channel.assertExchange(this.#columnName, 'direct', { durable: true })\n\t\t\t\tawait channel.prefetch(1)\n\t\t\t},\n\t\t})\n\t}\n\n\tcreatePublisher<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<PublishOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn async (data: Event['data']) =>\n\t\t\tawait this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true })\n\t}\n\n\tcreateSubscriber<Event extends Events[keyof Events]>(\n\t\ttopicName: Event['topic'],\n\t\tonMessage: (data: Event['data']) => Promise<void>,\n\t\toptions: Partial<SubscribeOptions> = {},\n\t) {\n\t\toptions = { ...DefaultSubscribeOptions, ...options }\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\tconst subscribe = async () => {\n\t\t\tawait this.#client.addSetup(async (channel: ConfirmChannel) => {\n\t\t\t\tconst queueName = options.fanout\n\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t: topic\n\t\t\t\tconst { queue } = await channel.assertQueue(queueName, { durable: !options.fanout, exclusive: options.fanout })\n\t\t\t\tawait channel.bindQueue(queue, this.#columnName, topic)\n\t\t\t\tchannel.consume(\n\t\t\t\t\tqueue,\n\t\t\t\t\tasync (msg) => {\n\t\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\tif (!msg) return\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(msg.content.toString()))\n\t\t\t\t\t\t\t\tchannel.ack(msg)\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tchannel.nack(msg)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t\t{ noAck: false },\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\n\t\tInstance.on('start', subscribe, 2)\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/events/types/rabbitmq.ts"],"names":["config","#client","channel","#columnName","topicName","options","data","topic","onMessage","queueName","Instance","Random"],"mappings":"AACA,yIAAwB,2DAKf,6DAC+B,6CAOH,MAC7B,EACN,QAAmBA,oBAAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,WAC1B,CAAA,CAAA,CAAA,CAAKC,KAAkB,CAACD,CAAAA,CAAO,IAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,eACpC,CAAM,IACN,CAAA,CAAA,CAAA,CAAA,4CAAO,CAAA,CAAA,CAAA,GAAOE,CAAAA,CAA4B,CACzC,aAAc,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAe,KAAKC,CAAAA,MAAa,CAAA,EAAA,CAAA,MAAY,CAAA,CAAA,cACrDD,CAAQ,IAAA,CAAA,CAAA,CAAA,CAAA,QAKjB,CAAA,CAAA,OAAA,CAAA,CAAA,CAAiDE,CAAAA,CAA2BC,CAAAA,MAC3E,CAAA,CAAA,QAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,YAAuC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAuB,CAAA,CACpF,CAAA,CAAA,SACC,CAAA,CAAA,CAAA,qBAAS,CAAA,GAAA,CAAA,CAAOC,CAAAA,aACJL,CAAAA,CAAAA,CAAQ,CAAA,MAAA,CAAQ,OAAKE,CAAaI,MAAO,CAAK,EAAA,MAAA,IAAc,CAAG,CAAE,CAAA,CAAA,OAAA,CAAA,IAAkB,CAAA,CAC/F,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,SAAkBC,CAAsD,CACvE,CAAA,CAAA,CAAA,UAAkB,CAAA,CAAA,CAAA,CAAY,CAC7B,CAAA,SAAM,CAAKP,MAAQ,CAAA,EAAA,CAAA,MAAS,CAAA,CAAOC,KAClC,CAAA,CAAA,EAAA,CAAMO,MAAoB,IAAA,CACvBC,CAAAA,CAAS,CAAA,QAAM,CAAA,MAAA,CAAA,EAAA,CAAc,MAAY,CAAA,CAAA,CAAI,CAAA,MAAE,CAAA,qBAAA,CAAA,GAAS,CAAA,CAAI,CAAA,aAAaC,CAAO,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/events/types/rabbitmq.min.cjs","sourcesContent":["import type { ChannelWrapper } from 'amqp-connection-manager'\nimport { connect } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\n\nimport { Instance } from '../../instance'\nimport type { Events } from '../../types'\nimport { Random, parseJSONValue } from '../../utilities'\nimport { EventBus, StreamOptions } from '../base'\nimport { RabbitMQConfig } from '../pipes'\n\nexport class RabbitMQEventBus extends EventBus {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tconstructor(config: RabbitMQConfig) {\n\t\tsuper()\n\t\tthis.#columnName = config.eventColumnName\n\t\tthis.#client = connect([config.uri]).createChannel({\n\t\t\tjson: false,\n\t\t\tsetup: async (channel: ConfirmChannel) => {\n\t\t\t\tawait channel.assertExchange(this.#columnName, 'direct', { durable: true })\n\t\t\t\tawait channel.prefetch(1)\n\t\t\t},\n\t\t})\n\t}\n\n\tcreateStream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}) {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn {\n\t\t\tpublish: async (data: Event['data']) =>\n\t\t\t\tawait this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),\n\t\t\tsubscribe: async (onMessage: (data: Event['data']) => Promise<void>) => {\n\t\t\t\tconst subscribe = async () => {\n\t\t\t\t\tawait this.#client.addSetup(async (channel: ConfirmChannel) => {\n\t\t\t\t\t\tconst queueName = options.fanout\n\t\t\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().settings.app.id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t\t\t: topic\n\t\t\t\t\t\tconst { queue } = await channel.assertQueue(queueName, { durable: !options.fanout, exclusive: options.fanout })\n\t\t\t\t\t\tawait channel.bindQueue(queue, this.#columnName, topic)\n\t\t\t\t\t\tchannel.consume(\n\t\t\t\t\t\t\tqueue,\n\t\t\t\t\t\t\tasync (msg) => {\n\t\t\t\t\t\t\t\tInstance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\t\t\tif (!msg) return\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(msg.content.toString()))\n\t\t\t\t\t\t\t\t\t\tchannel.ack(msg)\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\tchannel.nack(msg)\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\t},\n\t\t\t\t\t\t\t{ noAck: false },\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tInstance.on('start', subscribe, 2)\n\t\t\t},\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
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
+ {"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\tServerTypes,\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) as ServerTypes[T['type']]\n\t}\n}\n",null]}
@@ -1 +1 @@
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"]}
1
+ {"version":3,"sources":["../../../src/instance/index.ts"],"names":["Instance","#instance","settings","#registerOnExitHandler","runHooks","#hooks","error","EquippedError","v","envValidity"],"mappings":"AAAA,iNAAsE,8CAIrE,oDAeQ,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\tServerTypes,\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) as ServerTypes[T['type']]\n\t}\n}\n"]}