equipped 5.3.1 → 5.3.3

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 (203) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/cache/adapters/in-memory/index.cjs +155 -155
  3. package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -1
  4. package/dist/cjs/cache/adapters/in-memory/index.min.cjs +3 -3
  5. package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -1
  6. package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -1
  7. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +2 -2
  8. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -1
  9. package/dist/cjs/dbs/index.cjs +181 -179
  10. package/dist/cjs/dbs/index.cjs.map +1 -1
  11. package/dist/cjs/dbs/index.min.cjs +3 -3
  12. package/dist/cjs/dbs/index.min.cjs.map +1 -1
  13. package/dist/cjs/errors/index.cjs +11 -0
  14. package/dist/cjs/errors/index.cjs.map +1 -1
  15. package/dist/cjs/errors/index.min.cjs +1 -1
  16. package/dist/cjs/errors/index.min.cjs.map +1 -1
  17. package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -1
  18. package/dist/cjs/events/adapters/kafka/index.min.cjs +2 -2
  19. package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -1
  20. package/dist/cjs/events/adapters/rabbitmq/index.cjs +179 -179
  21. package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -1
  22. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +3 -3
  23. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -1
  24. package/dist/cjs/orm/adapters/mongodb/index.cjs +144 -144
  25. package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -1
  26. package/dist/cjs/orm/adapters/mongodb/index.min.cjs +1 -1
  27. package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -1
  28. package/dist/cjs/orm/adapters/postgresql/index.cjs +152 -215
  29. package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -1
  30. package/dist/cjs/orm/adapters/postgresql/index.min.cjs +11 -11
  31. package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -1
  32. package/dist/cjs/server/adapters/express/index.cjs +292 -225
  33. package/dist/cjs/server/adapters/express/index.cjs.map +1 -1
  34. package/dist/cjs/server/adapters/express/index.min.cjs +7 -7
  35. package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -1
  36. package/dist/cjs/server/adapters/fastify/index.cjs +277 -210
  37. package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -1
  38. package/dist/cjs/server/adapters/fastify/index.min.cjs +7 -7
  39. package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -1
  40. package/dist/cjs/server/index.cjs +82 -15
  41. package/dist/cjs/server/index.cjs.map +1 -1
  42. package/dist/cjs/server/index.min.cjs +7 -7
  43. package/dist/cjs/server/index.min.cjs.map +1 -1
  44. package/dist/cjs/utilities/index.cjs +0 -5
  45. package/dist/cjs/utilities/index.cjs.map +1 -1
  46. package/dist/cjs/utilities/index.min.cjs +2 -2
  47. package/dist/cjs/utilities/index.min.cjs.map +1 -1
  48. package/dist/cjs/validations/index.cjs +1 -0
  49. package/dist/cjs/validations/index.cjs.map +1 -1
  50. package/dist/cjs/validations/index.min.cjs +1 -1
  51. package/dist/cjs/validations/index.min.cjs.map +1 -1
  52. package/dist/esm/cache/adapters/in-memory/index.min.mjs +1 -1
  53. package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -1
  54. package/dist/esm/cache/adapters/in-memory/index.mjs +6 -3
  55. package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -1
  56. package/dist/esm/cache/adapters/redis/index.min.mjs +1 -1
  57. package/dist/esm/cache/adapters/redis/index.mjs +5 -3
  58. package/dist/esm/cache/index.min.mjs +1 -1
  59. package/dist/esm/cache/index.mjs +2 -2
  60. package/dist/esm/{chunk-2GGMLKRP.min.mjs → chunk-4GZ43EQ2.min.mjs} +2 -2
  61. package/dist/esm/{chunk-IRYCN6PI.min.mjs → chunk-5FEVQT6K.min.mjs} +2 -2
  62. package/dist/esm/{chunk-LKS5ZE45.mjs → chunk-74GY55PM.mjs} +2 -2
  63. package/dist/esm/{chunk-A4P7P6BU.mjs → chunk-7N4WUZ7P.mjs} +167 -347
  64. package/dist/esm/chunk-7N4WUZ7P.mjs.map +1 -0
  65. package/dist/esm/chunk-A332TTED.mjs +135 -0
  66. package/dist/esm/chunk-A332TTED.mjs.map +1 -0
  67. package/dist/esm/{chunk-7CP7ZE2O.mjs → chunk-BONYW6LU.mjs} +9 -5
  68. package/dist/esm/{chunk-7CP7ZE2O.mjs.map → chunk-BONYW6LU.mjs.map} +1 -1
  69. package/dist/esm/{chunk-HXFNN6RI.mjs → chunk-C3G4W4ZV.mjs} +3 -3
  70. package/dist/esm/chunk-CU2HU5UE.min.mjs +2 -0
  71. package/dist/esm/chunk-CU2HU5UE.min.mjs.map +1 -0
  72. package/dist/esm/{chunk-676VIABN.min.mjs → chunk-LJZOS62I.min.mjs} +2 -2
  73. package/dist/esm/{chunk-7SQ5JQYR.min.mjs → chunk-MCX2O5IT.min.mjs} +2 -2
  74. package/dist/esm/{chunk-BWUFPMVG.mjs → chunk-MNKDFIVK.mjs} +2 -2
  75. package/dist/esm/chunk-N3OD4QL2.min.mjs +32 -0
  76. package/dist/esm/chunk-N3OD4QL2.min.mjs.map +1 -0
  77. package/dist/esm/chunk-NEF3UYFA.mjs +144 -0
  78. package/dist/esm/chunk-NEF3UYFA.mjs.map +1 -0
  79. package/dist/esm/{chunk-TSVHZZE4.mjs → chunk-RFJ5URMP.mjs} +5 -5
  80. package/dist/esm/chunk-RX4XPABH.min.mjs +2 -0
  81. package/dist/esm/{chunk-MQXTTWPS.min.mjs.map → chunk-RX4XPABH.min.mjs.map} +1 -1
  82. package/dist/esm/chunk-SPOVKWV3.min.mjs +2 -0
  83. package/dist/esm/chunk-SPOVKWV3.min.mjs.map +1 -0
  84. package/dist/esm/{chunk-3TP7NINX.mjs → chunk-XESM7IWM.mjs} +2 -2
  85. package/dist/esm/{chunk-5PZACGPI.mjs → chunk-XJKBHQWO.mjs} +7 -5
  86. package/dist/esm/{chunk-5PZACGPI.mjs.map → chunk-XJKBHQWO.mjs.map} +1 -1
  87. package/dist/esm/chunk-YC6V4HLT.min.mjs +2 -0
  88. package/dist/esm/{chunk-7NF7PV6S.min.mjs.map → chunk-YC6V4HLT.min.mjs.map} +1 -1
  89. package/dist/esm/{chunk-P4PRHHIY.min.mjs → chunk-YWQTFKNY.min.mjs} +2 -2
  90. package/dist/esm/dbs/adapters/mongodb/index.min.mjs +1 -1
  91. package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -1
  92. package/dist/esm/dbs/adapters/mongodb/index.mjs +8 -5
  93. package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -1
  94. package/dist/esm/dbs/index.min.mjs +1 -1
  95. package/dist/esm/dbs/index.mjs +5 -3
  96. package/dist/esm/errors/index.min.mjs +1 -1
  97. package/dist/esm/errors/index.mjs +3 -1
  98. package/dist/esm/events/adapters/kafka/index.min.mjs +1 -1
  99. package/dist/esm/events/adapters/kafka/index.mjs +4 -2
  100. package/dist/esm/events/adapters/rabbitmq/index.min.mjs +1 -1
  101. package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -1
  102. package/dist/esm/events/adapters/rabbitmq/index.mjs +7 -3
  103. package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -1
  104. package/dist/esm/index.min.mjs +1 -1
  105. package/dist/esm/index.mjs +1 -1
  106. package/dist/esm/instance/index.min.mjs +1 -1
  107. package/dist/esm/instance/index.mjs +1 -1
  108. package/dist/esm/introspection-TO27QT2X.min.mjs +2 -0
  109. package/dist/esm/{introspection-YJF3QAUK.mjs → introspection-ZUQYVEFC.mjs} +3 -3
  110. package/dist/esm/jobs/adapters/redis/index.min.mjs +1 -1
  111. package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -1
  112. package/dist/esm/jobs/adapters/redis/index.mjs +10 -6
  113. package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -1
  114. package/dist/esm/orm/adapters/in-memory/index.min.mjs +1 -1
  115. package/dist/esm/orm/adapters/in-memory/index.mjs +4 -3
  116. package/dist/esm/orm/adapters/json/index.min.mjs +1 -1
  117. package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -1
  118. package/dist/esm/orm/adapters/json/index.mjs +6 -5
  119. package/dist/esm/orm/adapters/json/index.mjs.map +1 -1
  120. package/dist/esm/orm/adapters/mongodb/index.min.mjs +1 -1
  121. package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -1
  122. package/dist/esm/orm/adapters/mongodb/index.mjs +6 -4
  123. package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -1
  124. package/dist/esm/orm/adapters/postgresql/index.min.mjs +2 -2
  125. package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -1
  126. package/dist/esm/orm/adapters/postgresql/index.mjs +8 -5
  127. package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -1
  128. package/dist/esm/orm/index.min.mjs +1 -1
  129. package/dist/esm/orm/index.mjs +3 -3
  130. package/dist/esm/server/adapters/express/index.min.mjs +1 -1
  131. package/dist/esm/server/adapters/express/index.min.mjs.map +1 -1
  132. package/dist/esm/server/adapters/express/index.mjs +7 -3
  133. package/dist/esm/server/adapters/express/index.mjs.map +1 -1
  134. package/dist/esm/server/adapters/fastify/index.min.mjs +1 -1
  135. package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -1
  136. package/dist/esm/server/adapters/fastify/index.mjs +7 -3
  137. package/dist/esm/server/adapters/fastify/index.mjs.map +1 -1
  138. package/dist/esm/server/index.min.mjs +1 -1
  139. package/dist/esm/server/index.mjs +1 -1
  140. package/dist/esm/utilities/index.min.mjs +1 -1
  141. package/dist/esm/utilities/index.mjs +5 -4
  142. package/dist/esm/validations/index.min.mjs +1 -1
  143. package/dist/esm/validations/index.mjs +1 -1
  144. package/dist/types/{base-BDTBLZ9a.d.ts → base-BnwwLupM.d.ts} +3 -3
  145. package/dist/types/cache/adapters/in-memory/index.js +6 -3
  146. package/dist/types/cache/adapters/redis/index.js +5 -3
  147. package/dist/types/cache/index.js +2 -2
  148. package/dist/types/chunk-7MXHWHRV.js +134 -0
  149. package/dist/types/{chunk-LPB5LS7A.js → chunk-BKXNLF6X.js} +1 -1
  150. package/dist/types/{chunk-J3TGB5YQ.js → chunk-DZFKDZDZ.js} +8 -4
  151. package/dist/types/{chunk-YLJNBL6J.js → chunk-GQRSK2KP.js} +6 -4
  152. package/dist/types/chunk-PPD4WDG6.js +143 -0
  153. package/dist/types/{chunk-55CTVK7R.js → chunk-SZAA5GF6.js} +1 -1
  154. package/dist/types/{chunk-4DH3POYM.js → chunk-UGLZIYAR.js} +4 -4
  155. package/dist/types/{chunk-5Z26ZURE.js → chunk-UR7O43FC.js} +1 -1
  156. package/dist/types/{chunk-IZDJDGOV.js → chunk-X5ZDIXCZ.js} +2 -2
  157. package/dist/types/{chunk-TT5EORDK.js → chunk-YGIIUOQM.js} +166 -346
  158. package/dist/types/dbs/adapters/mongodb/index.js +8 -5
  159. package/dist/types/dbs/index.js +5 -3
  160. package/dist/types/errors/index.d.ts +8 -3
  161. package/dist/types/errors/index.js +3 -1
  162. package/dist/types/events/adapters/kafka/index.js +4 -2
  163. package/dist/types/events/adapters/rabbitmq/index.js +7 -3
  164. package/dist/types/index.js +1 -1
  165. package/dist/types/instance/index.js +1 -1
  166. package/dist/types/{introspection-EHGM4RMO.js → introspection-ZQMYTW6H.js} +2 -2
  167. package/dist/types/jobs/adapters/redis/index.js +10 -6
  168. package/dist/types/orm/adapters/in-memory/index.js +4 -3
  169. package/dist/types/orm/adapters/json/index.js +6 -5
  170. package/dist/types/orm/adapters/mongodb/index.js +6 -4
  171. package/dist/types/orm/adapters/postgresql/index.js +8 -5
  172. package/dist/types/orm/index.js +3 -3
  173. package/dist/types/{requestError-DdaL8hc3.d.ts → requestError-BmOhSuFb.d.ts} +1 -0
  174. package/dist/types/server/adapters/express/index.d.ts +2 -2
  175. package/dist/types/server/adapters/express/index.js +7 -3
  176. package/dist/types/server/adapters/fastify/index.d.ts +3 -3
  177. package/dist/types/server/adapters/fastify/index.js +7 -3
  178. package/dist/types/server/index.d.ts +4 -4
  179. package/dist/types/server/index.js +1 -1
  180. package/dist/types/utilities/index.d.ts +1 -2
  181. package/dist/types/utilities/index.js +5 -4
  182. package/dist/types/{validationError-oigtHqBi.d.ts → validationError-C2tVK4s7.d.ts} +1 -1
  183. package/dist/types/validations/index.d.ts +4 -4
  184. package/dist/types/validations/index.js +1 -1
  185. package/package.json +1 -1
  186. package/dist/esm/chunk-7NF7PV6S.min.mjs +0 -2
  187. package/dist/esm/chunk-A4P7P6BU.mjs.map +0 -1
  188. package/dist/esm/chunk-IN5YKIJ7.min.mjs +0 -32
  189. package/dist/esm/chunk-IN5YKIJ7.min.mjs.map +0 -1
  190. package/dist/esm/chunk-MQXTTWPS.min.mjs +0 -2
  191. package/dist/esm/introspection-THKMXV5V.min.mjs +0 -2
  192. /package/dist/esm/{chunk-2GGMLKRP.min.mjs.map → chunk-4GZ43EQ2.min.mjs.map} +0 -0
  193. /package/dist/esm/{chunk-IRYCN6PI.min.mjs.map → chunk-5FEVQT6K.min.mjs.map} +0 -0
  194. /package/dist/esm/{chunk-LKS5ZE45.mjs.map → chunk-74GY55PM.mjs.map} +0 -0
  195. /package/dist/esm/{chunk-HXFNN6RI.mjs.map → chunk-C3G4W4ZV.mjs.map} +0 -0
  196. /package/dist/esm/{chunk-676VIABN.min.mjs.map → chunk-LJZOS62I.min.mjs.map} +0 -0
  197. /package/dist/esm/{chunk-7SQ5JQYR.min.mjs.map → chunk-MCX2O5IT.min.mjs.map} +0 -0
  198. /package/dist/esm/{chunk-BWUFPMVG.mjs.map → chunk-MNKDFIVK.mjs.map} +0 -0
  199. /package/dist/esm/{chunk-TSVHZZE4.mjs.map → chunk-RFJ5URMP.mjs.map} +0 -0
  200. /package/dist/esm/{chunk-3TP7NINX.mjs.map → chunk-XESM7IWM.mjs.map} +0 -0
  201. /package/dist/esm/{chunk-P4PRHHIY.min.mjs.map → chunk-YWQTFKNY.min.mjs.map} +0 -0
  202. /package/dist/esm/{introspection-THKMXV5V.min.mjs.map → introspection-TO27QT2X.min.mjs.map} +0 -0
  203. /package/dist/esm/{introspection-YJF3QAUK.mjs.map → introspection-ZUQYVEFC.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/dbs/adapters/mongodb/changes.ts","../../../../../src/dbs/adapters/base/changes.ts","../../../../../src/dbs/adapters/mongodb/db.ts","../../../../../src/dbs/adapters/mongodb/pipes.ts","../../../../../src/dbs/adapters/mongodb/query.ts"],"sourcesContent":["import { Collection, type Filter } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport type { MongoDbConfig } from './pipes'\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 type { DbChangeConfig } from '../base/types'\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: 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 TestId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.stream(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('start', async () => {\n\t\t\tif (this.#started) return\n\t\t\tthis.#started = true\n\n\t\t\tawait retry(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t'capture.scope': 'collection',\n\t\t\t\t\t\t'capture.target': dbColName,\n\t\t\t\t\t\t'heartbeat.interval.ms': '60000',\n\t\t\t\t\t\t'errors.max.retries': '3',\n\t\t\t\t\t})\n\n\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\treturn { done: false }\n\t\t\t\t},\n\t\t\t\t6,\n\t\t\t\t30_000,\n\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t})\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n","import axios from 'axios'\nimport { v } from 'valleyed'\n\nimport * as core from './core'\nimport { dbChangeConfigPipe, type DbChangeConfig } from './types'\nimport { EquippedError } from '../../../errors'\n\nexport const TopicPrefix = 'db-changes'\n\nexport abstract class DbChange<Model extends core.Model<core.IdType>, Entity extends core.Entity> {\n\tconstructor(\n\t\tprotected config: DbChangeConfig,\n\t\tprotected callbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tprotected mapper: (model: Model) => Entity,\n\t) {\n\t\tthis.config = v.assert(dbChangeConfigPipe(), config)\n\t}\n\n\tprotected async configureConnector(key: string, data: Record<string, string>) {\n\t\tconst instance = axios.create({ baseURL: this.config.debeziumUrl })\n\t\treturn await instance\n\t\t\t.put(`/connectors/${key}/config`, {\n\t\t\t\t'topic.prefix': TopicPrefix,\n\t\t\t\t'topic.creation.enable': 'false',\n\t\t\t\t'topic.creation.default.replication.factor': `-1`,\n\t\t\t\t'topic.creation.default.partitions': '-1',\n\t\t\t\t'key.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'key.converter.schemas.enable': 'false',\n\t\t\t\t'value.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'value.converter.schemas.enable': 'false',\n\t\t\t\t...data,\n\t\t\t})\n\t\t\t.then(async () => {\n\t\t\t\tconst topics = await instance.get(`/connectors/${key}/topics`)\n\t\t\t\treturn topics.data[key]?.topics?.includes?.(key) ?? false\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthrow new EquippedError(`Failed to configure watcher`, { key }, err)\n\t\t\t})\n\t}\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport {\n\tClientSession,\n\tCollection,\n\tMongoClient,\n\tObjectId,\n\ttype CollectionInfo,\n\ttype OptionalUnlessRequiredId,\n\ttype SortDirection,\n\ttype WithId,\n} from 'mongodb'\nimport { v } from 'valleyed'\n\nimport { MongoDbChange } from './changes'\nimport { mongoDbConfigPipe, type MongoDbConfig } from './pipes'\nimport { parseMongodbQueryParams } from './query'\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport type { QueryParamsBase } from '../../pipes'\nimport * as core from '../base/core'\nimport { Db } from '../base/db'\nimport type { DbConfig } from '../base/types'\n\nconst idKey = '_id'\ntype IdType = { _id: string }\n\nconst sessionStore = new AsyncLocalStorage<ClientSession | undefined>(undefined)\n\nexport class MongoDb extends Db<{ _id: string }> {\n\tclient: MongoClient\n\t#cols: { db: string; col: string }[] = []\n\n\tconstructor(\n\t\tprivate mongoConfig: MongoDbConfig,\n\t\tdbConfig: DbConfig,\n\t) {\n\t\tsuper(dbConfig)\n\t\tthis.mongoConfig = v.assert(mongoDbConfigPipe(), mongoConfig)\n\t\tthis.client = new MongoClient(mongoConfig.uri, { ignoreUndefined: true })\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.client.connect()\n\n\t\t\tconst grouped = this.#cols.reduce<Record<string, string[]>>((acc, cur) => {\n\t\t\t\tif (!acc[cur.db]) acc[cur.db] = []\n\t\t\t\tacc[cur.db].push(cur.col)\n\t\t\t\treturn acc\n\t\t\t}, {})\n\n\t\t\tconst options = {\n\t\t\t\tchangeStreamPreAndPostImages: { enabled: true },\n\t\t\t}\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(grouped).map(async ([dbName, colNames]) => {\n\t\t\t\t\tconst db = this.client.db(dbName)\n\t\t\t\t\tconst collections = await db.listCollections<CollectionInfo>().toArray()\n\t\t\t\t\treturn colNames.map(async (colName) => {\n\t\t\t\t\t\tconst existing = collections.find((collection) => collection.name === colName)\n\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\texisting.options?.changeStreamPreAndPostImages?.enabled !== options.changeStreamPreAndPostImages.enabled\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tawait db.command({ collMod: colName, ...options })\n\t\t\t\t\t\t} else await db.createCollection(colName, options)\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t\tInstance.on('close', async () => this.client.close())\n\t}\n\n\tasync session<T>(callback: () => Promise<T>) {\n\t\tif (sessionStore.getStore()) return callback()\n\t\tconst session = await this.client.startSession()\n\t\treturn session.withTransaction(async () => sessionStore.run(session, callback))\n\t}\n\n\tid() {\n\t\treturn new ObjectId()\n\t}\n\n\tuse<Model extends core.Model<{ _id: string }>, Entity extends core.Entity>(config: core.Config<Model, Entity>) {\n\t\tconst db = this.getScopedDb(config.db)\n\t\tthis.#cols.push({ db, col: config.col })\n\t\treturn this.#getTable(config, this.client.db(db).collection<Model>(config.col))\n\t}\n\n\t#getTable<Model extends core.Model<IdType>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t\tcollection: Collection<Model>,\n\t) {\n\t\ttype WI = Model | WithId<Model>\n\t\tfunction transform(doc: WI, select?: core.Select<Entity>): Entity\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfunction transform(doc: WI[], select?: core.Select<Entity>): Entity[]\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfunction transform(doc: WI | WI[], select?: core.Select<Entity>) {\n\t\t\tconst docs = Array.isArray(doc) ? doc : [doc]\n\t\t\tconst mapped = docs.map((d) => config.mapper(d as Model, select))\n\t\t\treturn Array.isArray(doc) ? mapped : mapped[0]\n\t\t}\n\n\t\tfunction prepInsertValue(value: core.CreateInput<Model>, id: string, now: Date, skipUpdate?: boolean) {\n\t\t\tconst base: core.Model<IdType> = {\n\t\t\t\t[idKey]: id,\n\t\t\t\t...(config.options?.skipAudit\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcreatedAt: now.getTime(),\n\t\t\t\t\t\t\t...(skipUpdate ? {} : { updatedAt: now.getTime() }),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t...base,\n\t\t\t} as unknown as OptionalUnlessRequiredId<Model>\n\t\t}\n\n\t\tfunction prepUpdateValue(value: core.UpdateInput<Model>, now: Date, upsert = false) {\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t$set: {\n\t\t\t\t\t...value.$set,\n\t\t\t\t\t...(upsert || (Object.keys(value).length > 0 && !config.options?.skipAudit) ? { updatedAt: now.getTime() } : {}),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst dbThis = this\n\n\t\tconst table: core.Table<IdType, Model, Entity, { collection: Collection<Model> }> = {\n\t\t\tconfig,\n\t\t\textras: { collection },\n\n\t\t\tquery: async (params) => {\n\t\t\t\tconst results = await parseMongodbQueryParams(collection, params as QueryParamsBase)\n\t\t\t\treturn {\n\t\t\t\t\t...results,\n\t\t\t\t\tresults: transform(results.results as any, params.select as core.Select<Entity>),\n\t\t\t\t} as any\n\t\t\t},\n\n\t\t\tfindMany: async (filter, options = {}) => {\n\t\t\t\tconst { select, ...rest } = options\n\t\t\t\tconst projection = select?.length ? Object.fromEntries(select.map((k) => [k, 1])) : undefined\n\t\t\t\tconst sortArray = Array.isArray(rest.sort) ? rest.sort : rest.sort ? [rest.sort] : []\n\t\t\t\tconst sort = sortArray.map((p) => [p.field, p.desc ? 'desc' : 'asc'] as [string, SortDirection])\n\t\t\t\tconst docs = await collection\n\t\t\t\t\t.find(filter, {\n\t\t\t\t\t\tsession: sessionStore.getStore(),\n\t\t\t\t\t\tlimit: rest.limit,\n\t\t\t\t\t\tsort,\n\t\t\t\t\t\tprojection,\n\t\t\t\t\t})\n\t\t\t\t\t.toArray()\n\t\t\t\treturn transform(docs, select as core.Select<Entity>) as any\n\t\t\t},\n\n\t\t\tfindOne: async (filter: core.Filter<Model>, options = {}) => {\n\t\t\t\tconst result = await table.findMany(filter, { ...options, limit: 1 } as any)\n\t\t\t\treturn (result.at(0) ?? null) as any\n\t\t\t},\n\n\t\t\tfindById: async (id, options = {}) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>, options as any)\n\t\t\t\treturn result as any\n\t\t\t},\n\n\t\t\tinsertMany: async (values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst payload = values.map((value, i) => prepInsertValue(value, options.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\tawait collection.insertMany(payload, { session: sessionStore.getStore() })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any)))\n\t\t\t\treturn insertedData.filter((value) => !!value)\n\t\t\t},\n\n\t\t\tinsertOne: async (values, options = {}) => {\n\t\t\t\tconst result = await table.insertMany([values], options)\n\t\t\t\treturn result[0]\n\t\t\t},\n\n\t\t\tupdateMany: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst session = sessionStore.getStore()\n\t\t\t\tconst data = await collection.find(filter, { session, projection: { [idKey]: 1 } }).toArray()\n\t\t\t\tconst ids = data.map((doc) => doc[idKey])\n\t\t\t\tconst filterUpd = { [idKey]: { $in: ids } } as core.Filter<Model>\n\t\t\t\tawait collection.updateMany(filterUpd, prepUpdateValue(values, now), { session })\n\t\t\t\treturn table.findMany(filterUpd)\n\t\t\t},\n\n\t\t\tupdateOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {\n\t\t\t\t\treturnDocument: 'after',\n\t\t\t\t\tsession: sessionStore.getStore(),\n\t\t\t\t})\n\t\t\t\treturn doc ? transform(doc, undefined) : null\n\t\t\t},\n\n\t\t\tupdateById: async (id, values, options = {}) => {\n\t\t\t\tconst result = await table.updateOne({ [idKey]: id } as core.Filter<Model>, values, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tupsertOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\n\t\t\t\tconst doc = await collection.findOneAndUpdate(\n\t\t\t\t\tfilter,\n\t\t\t\t\t{\n\t\t\t\t\t\t...prepUpdateValue('update' in values ? values.update : {}, now, true),\n\t\t\t\t\t\t// @ts-expect-error fighting ts\n\t\t\t\t\t\t$setOnInsert: prepInsertValue(values.insert, options.makeId?.() ?? new ObjectId().toString(), now, true),\n\t\t\t\t\t},\n\t\t\t\t\t{ returnDocument: 'after', session: sessionStore.getStore(), upsert: true },\n\t\t\t\t)\n\n\t\t\t\treturn transform(doc, undefined)\n\t\t\t},\n\n\t\t\tdeleteMany: async (filter, options = {}) => {\n\t\t\t\tconst docs = await table.findMany(filter, options)\n\t\t\t\tawait collection.deleteMany(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn doc ? transform(doc, undefined) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tbulkWrite: async (operations, options = {}) => {\n\t\t\t\tif (!operations.length) return\n\t\t\t\tconst bulk = collection.initializeUnorderedBulkOp({ session: sessionStore.getStore() })\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\toperations.forEach((operation, i) => {\n\t\t\t\t\tswitch (operation.op) {\n\t\t\t\t\t\tcase 'insert':\n\t\t\t\t\t\t\tbulk.insert(prepInsertValue(operation.value, operation.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t\tbulk.find(operation.filter).delete()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'update':\n\t\t\t\t\t\t\tbulk.find(operation.filter).update(prepUpdateValue(operation.value, now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'upsert':\n\t\t\t\t\t\t\tbulk.find(operation.filter)\n\t\t\t\t\t\t\t\t.upsert()\n\t\t\t\t\t\t\t\t.update({\n\t\t\t\t\t\t\t\t\t...prepUpdateValue('update' in operation ? operation.update : {}, now, true),\n\t\t\t\t\t\t\t\t\t$setOnInsert: prepInsertValue(\n\t\t\t\t\t\t\t\t\t\toperation.insert as any,\n\t\t\t\t\t\t\t\t\t\toperation.makeId?.(i) ?? new ObjectId().toString(),\n\t\t\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new EquippedError(`Unknown bulkWrite operation`, { operation })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tawait bulk.execute({ session: sessionStore.getStore() })\n\t\t\t},\n\n\t\t\twatch(callbacks) {\n\t\t\t\tif (!dbThis.config.changes)\n\t\t\t\t\tInstance.crash(new EquippedError('Db changes are not enabled in the configuration.', { config }))\n\t\t\t\treturn new MongoDbChange<Model, Entity>(dbThis.mongoConfig, dbThis.config.changes, collection, callbacks, (m) =>\n\t\t\t\t\tconfig.mapper(m),\n\t\t\t\t)\n\t\t\t},\n\t\t}\n\n\t\treturn table\n\t}\n}\n","import { type PipeInput, v } from 'valleyed'\n\nexport const mongoDbConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t}),\n\t\t{ title: 'Mongodb Config', $refId: 'MongodbConfig' },\n\t)\n\nexport type MongoDbConfig = PipeInput<ReturnType<typeof mongoDbConfigPipe>>\n","import { Collection } from 'mongodb'\n\nimport { QueryKeys, type QueryParamsBase, type QueryResults, type QueryWhereBlock, type QueryWhereClause } from '../../pipes'\nimport * as core from '../base/core'\n\nexport const parseMongodbQueryParams = async <Model extends core.Model<{ _id: string }>>(\n\tcollection: Collection<Model>,\n\tparams: QueryParamsBase,\n): Promise<QueryResults<Model>> => {\n\t// Handle where/search clauses\n\tconst query = <ReturnType<typeof buildWhereQuery>[]>[]\n\tconst where = buildWhereQuery(params.where, params.whereType)\n\tif (where) query.push(where)\n\tconst auth = buildWhereQuery(params.auth, params.authType)\n\tif (auth) query.push(auth)\n\tif (params.search && params.search.fields.length > 0) {\n\t\tconst search = params.search.fields.map((field) => ({\n\t\t\t[field]: {\n\t\t\t\t$regex: new RegExp(params.search!.value, 'i'),\n\t\t\t},\n\t\t}))\n\t\tquery.push({ $or: search })\n\t}\n\tconst totalClause = {}\n\tif (query.length > 0) totalClause['$and'] = query\n\n\t// Handle sort clauses\n\tconst sort = params.sort.map((p) => [p.field, p.desc ? 'desc' : 'asc'])\n\n\t// Handle limit/offest clause\n\tconst all = params.all ?? false\n\tconst limit = params.limit\n\tconst page = params.page\n\n\tconst total = await collection.countDocuments(totalClause)\n\n\tconst projection = params.select?.length ? Object.fromEntries(params.select.map((k) => [k, 1])) : undefined\n\tlet builtQuery = collection.find(totalClause, { projection })\n\tif (sort.length) builtQuery = builtQuery.sort(Object.fromEntries(sort))\n\tif (!all && limit) {\n\t\tbuiltQuery = builtQuery.limit(limit)\n\t\tif (page) builtQuery = builtQuery.skip((page - 1) * limit)\n\t}\n\n\tconst results = await builtQuery.toArray()\n\tconst start = 1\n\tconst last = Math.ceil(total / limit) || 1\n\tconst next = page >= last ? null : page + 1\n\tconst previous = page <= start ? null : page - 1\n\n\treturn {\n\t\tpages: { start, last, next, previous, current: page },\n\t\tdocs: { limit, total, count: results.length },\n\t\tresults: results as any[],\n\t} satisfies QueryResults<Model>\n}\n\nfunction isWhereBlock(param: QueryWhereClause): param is QueryWhereBlock {\n\treturn Object.values(QueryKeys).includes(param.condition as QueryKeys)\n}\n\nconst buildWhereQuery = (params: QueryWhereClause[], key: QueryKeys = QueryKeys.and): Record<string, Record<string, any>> | null => {\n\tconst where = (Array.isArray(params) ? params : [])\n\t\t.map((param) => {\n\t\t\tif (isWhereBlock(param)) return buildWhereQuery(param.value, param.condition)\n\t\t\tconst { field } = param\n\t\t\tconst checkedField = field === 'id' ? '_id' : (field ?? '')\n\t\t\tconst checkedValue = param.value === undefined ? '' : param.value\n\t\t\treturn {\n\t\t\t\tfield: checkedField,\n\t\t\t\tvalue: checkedValue,\n\t\t\t\tcondition: param.condition,\n\t\t\t\tisWhere: true,\n\t\t\t}\n\t\t})\n\t\t.filter((c) => !!c)\n\t\t.map((c) => {\n\t\t\tif (c.isWhere) return { [`${c.field}`]: { [`$${c.condition}`]: c.value } }\n\t\t\telse return c\n\t\t})\n\n\treturn where.length > 0 ? { [`$${key}`]: where } : null\n}\n"],"mappings":"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","names":["v","v","v"]}
1
+ {"version":3,"sources":["../../../../../src/dbs/adapters/mongodb/changes.ts","../../../../../src/dbs/adapters/base/changes.ts","../../../../../src/dbs/adapters/mongodb/db.ts","../../../../../src/dbs/adapters/mongodb/pipes.ts","../../../../../src/dbs/adapters/mongodb/query.ts"],"sourcesContent":["import { Collection, type Filter } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport type { MongoDbConfig } from './pipes'\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 type { DbChangeConfig } from '../base/types'\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: 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 TestId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.stream(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('start', async () => {\n\t\t\tif (this.#started) return\n\t\t\tthis.#started = true\n\n\t\t\tawait retry(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t'capture.scope': 'collection',\n\t\t\t\t\t\t'capture.target': dbColName,\n\t\t\t\t\t\t'heartbeat.interval.ms': '60000',\n\t\t\t\t\t\t'errors.max.retries': '3',\n\t\t\t\t\t})\n\n\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\treturn { done: false }\n\t\t\t\t},\n\t\t\t\t6,\n\t\t\t\t30_000,\n\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t})\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n","import axios from 'axios'\nimport { v } from 'valleyed'\n\nimport * as core from './core'\nimport { dbChangeConfigPipe, type DbChangeConfig } from './types'\nimport { EquippedError } from '../../../errors'\n\nexport const TopicPrefix = 'db-changes'\n\nexport abstract class DbChange<Model extends core.Model<core.IdType>, Entity extends core.Entity> {\n\tconstructor(\n\t\tprotected config: DbChangeConfig,\n\t\tprotected callbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tprotected mapper: (model: Model) => Entity,\n\t) {\n\t\tthis.config = v.assert(dbChangeConfigPipe(), config)\n\t}\n\n\tprotected async configureConnector(key: string, data: Record<string, string>) {\n\t\tconst instance = axios.create({ baseURL: this.config.debeziumUrl })\n\t\treturn await instance\n\t\t\t.put(`/connectors/${key}/config`, {\n\t\t\t\t'topic.prefix': TopicPrefix,\n\t\t\t\t'topic.creation.enable': 'false',\n\t\t\t\t'topic.creation.default.replication.factor': `-1`,\n\t\t\t\t'topic.creation.default.partitions': '-1',\n\t\t\t\t'key.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'key.converter.schemas.enable': 'false',\n\t\t\t\t'value.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'value.converter.schemas.enable': 'false',\n\t\t\t\t...data,\n\t\t\t})\n\t\t\t.then(async () => {\n\t\t\t\tconst topics = await instance.get(`/connectors/${key}/topics`)\n\t\t\t\treturn topics.data[key]?.topics?.includes?.(key) ?? false\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthrow new EquippedError(`Failed to configure watcher`, { key }, err)\n\t\t\t})\n\t}\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport {\n\tClientSession,\n\tCollection,\n\tMongoClient,\n\tObjectId,\n\ttype CollectionInfo,\n\ttype OptionalUnlessRequiredId,\n\ttype SortDirection,\n\ttype WithId,\n} from 'mongodb'\nimport { v } from 'valleyed'\n\nimport { MongoDbChange } from './changes'\nimport { mongoDbConfigPipe, type MongoDbConfig } from './pipes'\nimport { parseMongodbQueryParams } from './query'\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport type { QueryParamsBase } from '../../pipes'\nimport * as core from '../base/core'\nimport { Db } from '../base/db'\nimport type { DbConfig } from '../base/types'\n\nconst idKey = '_id'\ntype IdType = { _id: string }\n\nconst sessionStore = new AsyncLocalStorage<ClientSession | undefined>(undefined)\n\nexport class MongoDb extends Db<{ _id: string }> {\n\tclient: MongoClient\n\t#cols: { db: string; col: string }[] = []\n\n\tconstructor(\n\t\tprivate mongoConfig: MongoDbConfig,\n\t\tdbConfig: DbConfig,\n\t) {\n\t\tsuper(dbConfig)\n\t\tthis.mongoConfig = v.assert(mongoDbConfigPipe(), mongoConfig)\n\t\tthis.client = new MongoClient(mongoConfig.uri, { ignoreUndefined: true })\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.client.connect()\n\n\t\t\tconst grouped = this.#cols.reduce<Record<string, string[]>>((acc, cur) => {\n\t\t\t\tif (!acc[cur.db]) acc[cur.db] = []\n\t\t\t\tacc[cur.db].push(cur.col)\n\t\t\t\treturn acc\n\t\t\t}, {})\n\n\t\t\tconst options = {\n\t\t\t\tchangeStreamPreAndPostImages: { enabled: true },\n\t\t\t}\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(grouped).map(async ([dbName, colNames]) => {\n\t\t\t\t\tconst db = this.client.db(dbName)\n\t\t\t\t\tconst collections = await db.listCollections<CollectionInfo>().toArray()\n\t\t\t\t\treturn colNames.map(async (colName) => {\n\t\t\t\t\t\tconst existing = collections.find((collection) => collection.name === colName)\n\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\texisting.options?.changeStreamPreAndPostImages?.enabled !== options.changeStreamPreAndPostImages.enabled\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tawait db.command({ collMod: colName, ...options })\n\t\t\t\t\t\t} else await db.createCollection(colName, options)\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t\tInstance.on('close', async () => this.client.close())\n\t}\n\n\tasync session<T>(callback: () => Promise<T>) {\n\t\tif (sessionStore.getStore()) return callback()\n\t\tconst session = await this.client.startSession()\n\t\treturn session.withTransaction(async () => sessionStore.run(session, callback))\n\t}\n\n\tid() {\n\t\treturn new ObjectId()\n\t}\n\n\tuse<Model extends core.Model<{ _id: string }>, Entity extends core.Entity>(config: core.Config<Model, Entity>) {\n\t\tconst db = this.getScopedDb(config.db)\n\t\tthis.#cols.push({ db, col: config.col })\n\t\treturn this.#getTable(config, this.client.db(db).collection<Model>(config.col))\n\t}\n\n\t#getTable<Model extends core.Model<IdType>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t\tcollection: Collection<Model>,\n\t) {\n\t\ttype WI = Model | WithId<Model>\n\t\tfunction transform(doc: WI, select?: core.Select<Entity>): Entity\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfunction transform(doc: WI[], select?: core.Select<Entity>): Entity[]\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfunction transform(doc: WI | WI[], select?: core.Select<Entity>) {\n\t\t\tconst docs = Array.isArray(doc) ? doc : [doc]\n\t\t\tconst mapped = docs.map((d) => config.mapper(d as Model, select))\n\t\t\treturn Array.isArray(doc) ? mapped : mapped[0]\n\t\t}\n\n\t\tfunction prepInsertValue(value: core.CreateInput<Model>, id: string, now: Date, skipUpdate?: boolean) {\n\t\t\tconst base: core.Model<IdType> = {\n\t\t\t\t[idKey]: id,\n\t\t\t\t...(config.options?.skipAudit\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcreatedAt: now.getTime(),\n\t\t\t\t\t\t\t...(skipUpdate ? {} : { updatedAt: now.getTime() }),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t...base,\n\t\t\t} as unknown as OptionalUnlessRequiredId<Model>\n\t\t}\n\n\t\tfunction prepUpdateValue(value: core.UpdateInput<Model>, now: Date, upsert = false) {\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t$set: {\n\t\t\t\t\t...value.$set,\n\t\t\t\t\t...(upsert || (Object.keys(value).length > 0 && !config.options?.skipAudit) ? { updatedAt: now.getTime() } : {}),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst dbThis = this\n\n\t\tconst table: core.Table<IdType, Model, Entity, { collection: Collection<Model> }> = {\n\t\t\tconfig,\n\t\t\textras: { collection },\n\n\t\t\tquery: async (params) => {\n\t\t\t\tconst results = await parseMongodbQueryParams(collection, params as QueryParamsBase)\n\t\t\t\treturn {\n\t\t\t\t\t...results,\n\t\t\t\t\tresults: transform(results.results as any, params.select as core.Select<Entity>),\n\t\t\t\t} as any\n\t\t\t},\n\n\t\t\tfindMany: async (filter, options = {}) => {\n\t\t\t\tconst { select, ...rest } = options\n\t\t\t\tconst projection = select?.length ? Object.fromEntries(select.map((k) => [k, 1])) : undefined\n\t\t\t\tconst sortArray = Array.isArray(rest.sort) ? rest.sort : rest.sort ? [rest.sort] : []\n\t\t\t\tconst sort = sortArray.map((p) => [p.field, p.desc ? 'desc' : 'asc'] as [string, SortDirection])\n\t\t\t\tconst docs = await collection\n\t\t\t\t\t.find(filter, {\n\t\t\t\t\t\tsession: sessionStore.getStore(),\n\t\t\t\t\t\tlimit: rest.limit,\n\t\t\t\t\t\tsort,\n\t\t\t\t\t\tprojection,\n\t\t\t\t\t})\n\t\t\t\t\t.toArray()\n\t\t\t\treturn transform(docs, select as core.Select<Entity>) as any\n\t\t\t},\n\n\t\t\tfindOne: async (filter: core.Filter<Model>, options = {}) => {\n\t\t\t\tconst result = await table.findMany(filter, { ...options, limit: 1 } as any)\n\t\t\t\treturn (result.at(0) ?? null) as any\n\t\t\t},\n\n\t\t\tfindById: async (id, options = {}) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>, options as any)\n\t\t\t\treturn result as any\n\t\t\t},\n\n\t\t\tinsertMany: async (values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst payload = values.map((value, i) => prepInsertValue(value, options.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\tawait collection.insertMany(payload, { session: sessionStore.getStore() })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any)))\n\t\t\t\treturn insertedData.filter((value) => !!value)\n\t\t\t},\n\n\t\t\tinsertOne: async (values, options = {}) => {\n\t\t\t\tconst result = await table.insertMany([values], options)\n\t\t\t\treturn result[0]\n\t\t\t},\n\n\t\t\tupdateMany: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst session = sessionStore.getStore()\n\t\t\t\tconst data = await collection.find(filter, { session, projection: { [idKey]: 1 } }).toArray()\n\t\t\t\tconst ids = data.map((doc) => doc[idKey])\n\t\t\t\tconst filterUpd = { [idKey]: { $in: ids } } as core.Filter<Model>\n\t\t\t\tawait collection.updateMany(filterUpd, prepUpdateValue(values, now), { session })\n\t\t\t\treturn table.findMany(filterUpd)\n\t\t\t},\n\n\t\t\tupdateOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {\n\t\t\t\t\treturnDocument: 'after',\n\t\t\t\t\tsession: sessionStore.getStore(),\n\t\t\t\t})\n\t\t\t\treturn doc ? transform(doc, undefined) : null\n\t\t\t},\n\n\t\t\tupdateById: async (id, values, options = {}) => {\n\t\t\t\tconst result = await table.updateOne({ [idKey]: id } as core.Filter<Model>, values, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tupsertOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\n\t\t\t\tconst doc = await collection.findOneAndUpdate(\n\t\t\t\t\tfilter,\n\t\t\t\t\t{\n\t\t\t\t\t\t...prepUpdateValue('update' in values ? values.update : {}, now, true),\n\t\t\t\t\t\t// @ts-expect-error fighting ts\n\t\t\t\t\t\t$setOnInsert: prepInsertValue(values.insert, options.makeId?.() ?? new ObjectId().toString(), now, true),\n\t\t\t\t\t},\n\t\t\t\t\t{ returnDocument: 'after', session: sessionStore.getStore(), upsert: true },\n\t\t\t\t)\n\n\t\t\t\treturn transform(doc, undefined)\n\t\t\t},\n\n\t\t\tdeleteMany: async (filter, options = {}) => {\n\t\t\t\tconst docs = await table.findMany(filter, options)\n\t\t\t\tawait collection.deleteMany(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn doc ? transform(doc, undefined) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tbulkWrite: async (operations, options = {}) => {\n\t\t\t\tif (!operations.length) return\n\t\t\t\tconst bulk = collection.initializeUnorderedBulkOp({ session: sessionStore.getStore() })\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\toperations.forEach((operation, i) => {\n\t\t\t\t\tswitch (operation.op) {\n\t\t\t\t\t\tcase 'insert':\n\t\t\t\t\t\t\tbulk.insert(prepInsertValue(operation.value, operation.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t\tbulk.find(operation.filter).delete()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'update':\n\t\t\t\t\t\t\tbulk.find(operation.filter).update(prepUpdateValue(operation.value, now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'upsert':\n\t\t\t\t\t\t\tbulk.find(operation.filter)\n\t\t\t\t\t\t\t\t.upsert()\n\t\t\t\t\t\t\t\t.update({\n\t\t\t\t\t\t\t\t\t...prepUpdateValue('update' in operation ? operation.update : {}, now, true),\n\t\t\t\t\t\t\t\t\t$setOnInsert: prepInsertValue(\n\t\t\t\t\t\t\t\t\t\toperation.insert as any,\n\t\t\t\t\t\t\t\t\t\toperation.makeId?.(i) ?? new ObjectId().toString(),\n\t\t\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new EquippedError(`Unknown bulkWrite operation`, { operation })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tawait bulk.execute({ session: sessionStore.getStore() })\n\t\t\t},\n\n\t\t\twatch(callbacks) {\n\t\t\t\tif (!dbThis.config.changes)\n\t\t\t\t\tInstance.crash(new EquippedError('Db changes are not enabled in the configuration.', { config }))\n\t\t\t\treturn new MongoDbChange<Model, Entity>(dbThis.mongoConfig, dbThis.config.changes, collection, callbacks, (m) =>\n\t\t\t\t\tconfig.mapper(m),\n\t\t\t\t)\n\t\t\t},\n\t\t}\n\n\t\treturn table\n\t}\n}\n","import { type PipeInput, v } from 'valleyed'\n\nexport const mongoDbConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t}),\n\t\t{ title: 'Mongodb Config', $refId: 'MongodbConfig' },\n\t)\n\nexport type MongoDbConfig = PipeInput<ReturnType<typeof mongoDbConfigPipe>>\n","import { Collection } from 'mongodb'\n\nimport { QueryKeys, type QueryParamsBase, type QueryResults, type QueryWhereBlock, type QueryWhereClause } from '../../pipes'\nimport * as core from '../base/core'\n\nexport const parseMongodbQueryParams = async <Model extends core.Model<{ _id: string }>>(\n\tcollection: Collection<Model>,\n\tparams: QueryParamsBase,\n): Promise<QueryResults<Model>> => {\n\t// Handle where/search clauses\n\tconst query = <ReturnType<typeof buildWhereQuery>[]>[]\n\tconst where = buildWhereQuery(params.where, params.whereType)\n\tif (where) query.push(where)\n\tconst auth = buildWhereQuery(params.auth, params.authType)\n\tif (auth) query.push(auth)\n\tif (params.search && params.search.fields.length > 0) {\n\t\tconst search = params.search.fields.map((field) => ({\n\t\t\t[field]: {\n\t\t\t\t$regex: new RegExp(params.search!.value, 'i'),\n\t\t\t},\n\t\t}))\n\t\tquery.push({ $or: search })\n\t}\n\tconst totalClause = {}\n\tif (query.length > 0) totalClause['$and'] = query\n\n\t// Handle sort clauses\n\tconst sort = params.sort.map((p) => [p.field, p.desc ? 'desc' : 'asc'])\n\n\t// Handle limit/offest clause\n\tconst all = params.all ?? false\n\tconst limit = params.limit\n\tconst page = params.page\n\n\tconst total = await collection.countDocuments(totalClause)\n\n\tconst projection = params.select?.length ? Object.fromEntries(params.select.map((k) => [k, 1])) : undefined\n\tlet builtQuery = collection.find(totalClause, { projection })\n\tif (sort.length) builtQuery = builtQuery.sort(Object.fromEntries(sort))\n\tif (!all && limit) {\n\t\tbuiltQuery = builtQuery.limit(limit)\n\t\tif (page) builtQuery = builtQuery.skip((page - 1) * limit)\n\t}\n\n\tconst results = await builtQuery.toArray()\n\tconst start = 1\n\tconst last = Math.ceil(total / limit) || 1\n\tconst next = page >= last ? null : page + 1\n\tconst previous = page <= start ? null : page - 1\n\n\treturn {\n\t\tpages: { start, last, next, previous, current: page },\n\t\tdocs: { limit, total, count: results.length },\n\t\tresults: results as any[],\n\t} satisfies QueryResults<Model>\n}\n\nfunction isWhereBlock(param: QueryWhereClause): param is QueryWhereBlock {\n\treturn Object.values(QueryKeys).includes(param.condition as QueryKeys)\n}\n\nconst buildWhereQuery = (params: QueryWhereClause[], key: QueryKeys = QueryKeys.and): Record<string, Record<string, any>> | null => {\n\tconst where = (Array.isArray(params) ? params : [])\n\t\t.map((param) => {\n\t\t\tif (isWhereBlock(param)) return buildWhereQuery(param.value, param.condition)\n\t\t\tconst { field } = param\n\t\t\tconst checkedField = field === 'id' ? '_id' : (field ?? '')\n\t\t\tconst checkedValue = param.value === undefined ? '' : param.value\n\t\t\treturn {\n\t\t\t\tfield: checkedField,\n\t\t\t\tvalue: checkedValue,\n\t\t\t\tcondition: param.condition,\n\t\t\t\tisWhere: true,\n\t\t\t}\n\t\t})\n\t\t.filter((c) => !!c)\n\t\t.map((c) => {\n\t\t\tif (c.isWhere) return { [`${c.field}`]: { [`$${c.condition}`]: c.value } }\n\t\t\telse return c\n\t\t})\n\n\treturn where.length > 0 ? { [`$${key}`]: where } : null\n}\n"],"mappings":"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","names":["v","v","v"]}
@@ -1,2 +1,2 @@
1
- import{a as o,b as r,c as e,d as f,e as m,f as p,g as t}from "../chunk-2GGMLKRP.min.mjs";import"../chunk-MQXTTWPS.min.mjs";import"../chunk-IN5YKIJ7.min.mjs";import"../chunk-DSUJ5FUL.min.mjs";import"../chunk-AQY7QVYI.min.mjs";export{f as Conditions,o as Db,e as QueryKeys,r as dbChangeConfigPipe,m as queryParamsPipe,p as queryResultsPipe,t as wrapQueryParams};
1
+ import{a as o,b as r,c as e,d as f,e as m,f as p,g as t}from "../chunk-4GZ43EQ2.min.mjs";import"../chunk-RX4XPABH.min.mjs";import"../chunk-SPOVKWV3.min.mjs";import"../chunk-CU2HU5UE.min.mjs";import"../chunk-N3OD4QL2.min.mjs";import"../chunk-DSUJ5FUL.min.mjs";import"../chunk-AQY7QVYI.min.mjs";export{f as Conditions,o as Db,e as QueryKeys,r as dbChangeConfigPipe,m as queryParamsPipe,p as queryResultsPipe,t as wrapQueryParams};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -6,9 +6,11 @@ import {
6
6
  queryParamsPipe,
7
7
  queryResultsPipe,
8
8
  wrapQueryParams
9
- } from "../chunk-HXFNN6RI.mjs";
10
- import "../chunk-7CP7ZE2O.mjs";
11
- import "../chunk-A4P7P6BU.mjs";
9
+ } from "../chunk-C3G4W4ZV.mjs";
10
+ import "../chunk-BONYW6LU.mjs";
11
+ import "../chunk-A332TTED.mjs";
12
+ import "../chunk-NEF3UYFA.mjs";
13
+ import "../chunk-7N4WUZ7P.mjs";
12
14
  import "../chunk-VCCS7CAI.mjs";
13
15
  import "../chunk-J5LGTIGS.mjs";
14
16
  export {
@@ -1,2 +1,2 @@
1
- import{E as c,F as d,G as e,H as f,I as g,J as h,a,b}from "../chunk-IN5YKIJ7.min.mjs";import"../chunk-DSUJ5FUL.min.mjs";import"../chunk-AQY7QVYI.min.mjs";export{c as BadRequestError,a as EquippedError,d as NotAuthenticatedError,e as NotAuthorizedError,f as NotFoundError,b as RequestError,g as TokenExpired,h as ValidationError};
1
+ import{A as h,B as i,a,b,v as c,w as d,x as e,y as f,z as g}from "../chunk-N3OD4QL2.min.mjs";import"../chunk-DSUJ5FUL.min.mjs";import"../chunk-AQY7QVYI.min.mjs";export{c as BadRequestError,a as EquippedError,d as NotAuthenticatedError,e as NotAuthorizedError,f as NotFoundError,g as PreconditionRequiredError,b as RequestError,h as TokenExpired,i as ValidationError};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -4,10 +4,11 @@ import {
4
4
  NotAuthenticatedError,
5
5
  NotAuthorizedError,
6
6
  NotFoundError,
7
+ PreconditionRequiredError,
7
8
  RequestError,
8
9
  TokenExpired,
9
10
  ValidationError
10
- } from "../chunk-A4P7P6BU.mjs";
11
+ } from "../chunk-7N4WUZ7P.mjs";
11
12
  import "../chunk-VCCS7CAI.mjs";
12
13
  import "../chunk-J5LGTIGS.mjs";
13
14
  export {
@@ -16,6 +17,7 @@ export {
16
17
  NotAuthenticatedError,
17
18
  NotAuthorizedError,
18
19
  NotFoundError,
20
+ PreconditionRequiredError,
19
21
  RequestError,
20
22
  TokenExpired,
21
23
  ValidationError
@@ -1,2 +1,2 @@
1
- import{a,b}from "../../../chunk-MQXTTWPS.min.mjs";import"../../../chunk-IN5YKIJ7.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";export{b as KafkaEventBus,a as kafkaConfigPipe};
1
+ import{a,b}from "../../../chunk-RX4XPABH.min.mjs";import"../../../chunk-SPOVKWV3.min.mjs";import"../../../chunk-CU2HU5UE.min.mjs";import"../../../chunk-N3OD4QL2.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";export{b as KafkaEventBus,a as kafkaConfigPipe};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -1,8 +1,10 @@
1
1
  import {
2
2
  KafkaEventBus,
3
3
  kafkaConfigPipe
4
- } from "../../../chunk-7CP7ZE2O.mjs";
5
- import "../../../chunk-A4P7P6BU.mjs";
4
+ } from "../../../chunk-BONYW6LU.mjs";
5
+ import "../../../chunk-A332TTED.mjs";
6
+ import "../../../chunk-NEF3UYFA.mjs";
7
+ import "../../../chunk-7N4WUZ7P.mjs";
6
8
  import "../../../chunk-VCCS7CAI.mjs";
7
9
  import "../../../chunk-J5LGTIGS.mjs";
8
10
  export {
@@ -1,2 +1,2 @@
1
- import{K as a,m as u,o as m,r as f}from "../../../chunk-IN5YKIJ7.min.mjs";import{a as p}from "../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{connect as C}from"amqp-connection-manager";import{v as r}from"valleyed";var h=()=>r.meta(r.object({uri:r.string(),eventColumnName:r.string()}),{title:"Rabbitmq Config",$refId:"RabbitmqConfig"}),b=class l extends u(h,p){#t;#e;constructor(t){super(t),this.#e=t.eventColumnName,this.#t=C([t.uri]).createChannel({json:!1,setup:async e=>{await e.assertExchange(this.#e,"direct",{durable:!0}),await e.prefetch(1)}})}stream(t,e={}){let i=e.skipScope?t:a.get().getScopedName(t);return{publish:async o=>await this.#t.publish(this.#e,i,JSON.stringify(o),{persistent:!0}),subscribe:async o=>{let v=async()=>{await this.#t.addSetup(async n=>{let y=e.fanout?a.get().getScopedName(`${a.get().id}-fanout-${f.string(10)}`):i,{queue:c}=await n.assertQueue(y,{durable:!e.fanout,exclusive:e.fanout});await n.bindQueue(c,this.#e,i),n.consume(c,async s=>{await a.resolveBeforeCrash(async()=>{if(s)try{await o(m(s.content.toString())),n.ack(s)}catch{n.nack(s)}})},{noAck:!1})})};a.on("start",v,{class:l})}}}};export{b as RabbitMQEventBus,h as rabbitmqConfigPipe};
1
+ import{c as m,e as f}from "../../../chunk-SPOVKWV3.min.mjs";import{a as u}from "../../../chunk-CU2HU5UE.min.mjs";import{C as a}from "../../../chunk-N3OD4QL2.min.mjs";import{a as p}from "../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{connect as C}from"amqp-connection-manager";import{v as r}from"valleyed";var h=()=>r.meta(r.object({uri:r.string(),eventColumnName:r.string()}),{title:"Rabbitmq Config",$refId:"RabbitmqConfig"}),b=class l extends u(h,p){#t;#e;constructor(t){super(t),this.#e=t.eventColumnName,this.#t=C([t.uri]).createChannel({json:!1,setup:async e=>{await e.assertExchange(this.#e,"direct",{durable:!0}),await e.prefetch(1)}})}stream(t,e={}){let i=e.skipScope?t:a.get().getScopedName(t);return{publish:async o=>await this.#t.publish(this.#e,i,JSON.stringify(o),{persistent:!0}),subscribe:async o=>{let v=async()=>{await this.#t.addSetup(async n=>{let y=e.fanout?a.get().getScopedName(`${a.get().id}-fanout-${f.string(10)}`):i,{queue:c}=await n.assertQueue(y,{durable:!e.fanout,exclusive:e.fanout});await n.bindQueue(c,this.#e,i),n.consume(c,async s=>{await a.resolveBeforeCrash(async()=>{if(s)try{await o(m(s.content.toString())),n.ack(s)}catch{n.nack(s)}})},{noAck:!1})})};a.on("start",v,{class:l})}}}};export{b as RabbitMQEventBus,h as rabbitmqConfigPipe};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/events/adapters/rabbitmq/index.ts"],"sourcesContent":["import { connect, type ChannelWrapper } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\nimport { v } from 'valleyed'\n\nimport { Instance } from '../../../instance'\nimport type { Events } from '../../../types'\nimport { configurable, parseJSONValue, Random } from '../../../utilities'\nimport { EventBus, type Stream, type StreamOptions } from '../base'\n\nexport const rabbitmqConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t\teventColumnName: v.string(),\n\t\t}),\n\t\t{ title: 'Rabbitmq Config', $refId: 'RabbitmqConfig' },\n\t)\n\nexport class RabbitMQEventBus extends configurable(rabbitmqConfigPipe, EventBus) {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tprotected constructor(config: typeof RabbitMQEventBus.Config) {\n\t\tsuper(config)\n\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\tstream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}): Stream<Event['data']> {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\n\t\treturn {\n\t\t\tpublish: async (data) => await this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),\n\t\t\tsubscribe: async (onMessage) => {\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().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\tawait Instance.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, { class: RabbitMQEventBus })\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('RabbitMQEventBus', () => {\n\t\ttest('create returns an instance with stream method', () => {\n\t\t\tconst bus = RabbitMQEventBus.create({ uri: 'amqp://localhost', eventColumnName: 'events' })\n\t\t\texpect(bus).toBeInstanceOf(RabbitMQEventBus)\n\t\t\texpect(bus.stream).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('external new is a compile error', () => {\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new RabbitMQEventBus({ uri: 'amqp://localhost', eventColumnName: 'events' }))\n\t\t})\n\n\t\ttest('static Config resolves to the pipe output type', () => {\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('uri')\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('eventColumnName')\n\t\t})\n\n\t\ttest('create rejects invalid config', () => {\n\t\t\t// @ts-expect-error — missing required field\n\t\t\texpect(() => RabbitMQEventBus.create({ uri: 'amqp://localhost' })).toThrow()\n\t\t})\n\t})\n}\n"],"mappings":"qKAAA,OAAS,WAAAA,MAAoC,0BAE7C,OAAS,KAAAC,MAAS,WAOX,IAAMC,EAAqB,IACjCC,EAAE,KACDA,EAAE,OAAO,CACR,IAAKA,EAAE,OAAO,EACd,gBAAiBA,EAAE,OAAO,CAC3B,CAAC,EACD,CAAE,MAAO,kBAAmB,OAAQ,gBAAiB,CACtD,EAEYC,EAAN,MAAMC,UAAyBC,EAAaJ,EAAoBK,CAAQ,CAAE,CAChFC,GACAC,GAEU,YAAYC,EAAwC,CAC7D,MAAMA,CAAM,EAEZ,KAAKD,GAAcC,EAAO,gBAC1B,KAAKF,GAAUG,EAAQ,CAACD,EAAO,GAAG,CAAC,EAAE,cAAc,CAClD,KAAM,GACN,MAAO,MAAOE,GAA4B,CACzC,MAAMA,EAAQ,eAAe,KAAKH,GAAa,SAAU,CAAE,QAAS,EAAK,CAAC,EAC1E,MAAMG,EAAQ,SAAS,CAAC,CACzB,CACD,CAAC,CACF,CAEA,OAA2CC,EAA2BC,EAAkC,CAAC,EAA0B,CAClI,IAAMC,EAAQD,EAAQ,UAAYD,EAAYG,EAAS,IAAI,EAAE,cAAcH,CAAS,EAEpF,MAAO,CACN,QAAS,MAAOI,GAAS,MAAM,KAAKT,GAAQ,QAAQ,KAAKC,GAAaM,EAAO,KAAK,UAAUE,CAAI,EAAG,CAAE,WAAY,EAAK,CAAC,EACvH,UAAW,MAAOC,GAAc,CAC/B,IAAMC,EAAY,SAAY,CAC7B,MAAM,KAAKX,GAAQ,SAAS,MAAOI,GAA4B,CAC9D,IAAMQ,EAAYN,EAAQ,OACvBE,EAAS,IAAI,EAAE,cAAc,GAAGA,EAAS,IAAI,EAAE,EAAE,WAAWK,EAAO,OAAO,EAAE,CAAC,EAAE,EAC/EN,EACG,CAAE,MAAAO,CAAM,EAAI,MAAMV,EAAQ,YAAYQ,EAAW,CAAE,QAAS,CAACN,EAAQ,OAAQ,UAAWA,EAAQ,MAAO,CAAC,EAC9G,MAAMF,EAAQ,UAAUU,EAAO,KAAKb,GAAaM,CAAK,EACtDH,EAAQ,QACPU,EACA,MAAOC,GAAQ,CACd,MAAMP,EAAS,mBAAmB,SAAY,CAC7C,GAAKO,EACL,GAAI,CACH,MAAML,EAAUM,EAAeD,EAAI,QAAQ,SAAS,CAAC,CAAC,EACtDX,EAAQ,IAAIW,CAAG,CAChB,MAAQ,CACPX,EAAQ,KAAKW,CAAG,CACjB,CACD,CAAC,CACF,EACA,CAAE,MAAO,EAAM,CAChB,CACD,CAAC,CACF,EAEAP,EAAS,GAAG,QAASG,EAAW,CAAE,MAAOd,CAAiB,CAAC,CAC5D,CACD,CACD,CACD","names":["connect","v","rabbitmqConfigPipe","v","RabbitMQEventBus","_RabbitMQEventBus","configurable","EventBus","#client","#columnName","config","connect","channel","topicName","options","topic","Instance","data","onMessage","subscribe","queueName","random_exports","queue","msg","parseJSONValue"]}
1
+ {"version":3,"sources":["../../../../../src/events/adapters/rabbitmq/index.ts"],"sourcesContent":["import { connect, type ChannelWrapper } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\nimport { v } from 'valleyed'\n\nimport { Instance } from '../../../instance'\nimport type { Events } from '../../../types'\nimport { configurable, parseJSONValue, Random } from '../../../utilities'\nimport { EventBus, type Stream, type StreamOptions } from '../base'\n\nexport const rabbitmqConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t\teventColumnName: v.string(),\n\t\t}),\n\t\t{ title: 'Rabbitmq Config', $refId: 'RabbitmqConfig' },\n\t)\n\nexport class RabbitMQEventBus extends configurable(rabbitmqConfigPipe, EventBus) {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tprotected constructor(config: typeof RabbitMQEventBus.Config) {\n\t\tsuper(config)\n\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\tstream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}): Stream<Event['data']> {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\n\t\treturn {\n\t\t\tpublish: async (data) => await this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),\n\t\t\tsubscribe: async (onMessage) => {\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().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\tawait Instance.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, { class: RabbitMQEventBus })\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('RabbitMQEventBus', () => {\n\t\ttest('create returns an instance with stream method', () => {\n\t\t\tconst bus = RabbitMQEventBus.create({ uri: 'amqp://localhost', eventColumnName: 'events' })\n\t\t\texpect(bus).toBeInstanceOf(RabbitMQEventBus)\n\t\t\texpect(bus.stream).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('external new is a compile error', () => {\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new RabbitMQEventBus({ uri: 'amqp://localhost', eventColumnName: 'events' }))\n\t\t})\n\n\t\ttest('static Config resolves to the pipe output type', () => {\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('uri')\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('eventColumnName')\n\t\t})\n\n\t\ttest('create rejects invalid config', () => {\n\t\t\t// @ts-expect-error — missing required field\n\t\t\texpect(() => RabbitMQEventBus.create({ uri: 'amqp://localhost' })).toThrow()\n\t\t})\n\t})\n}\n"],"mappings":"+PAAA,OAAS,WAAAA,MAAoC,0BAE7C,OAAS,KAAAC,MAAS,WAOX,IAAMC,EAAqB,IACjCC,EAAE,KACDA,EAAE,OAAO,CACR,IAAKA,EAAE,OAAO,EACd,gBAAiBA,EAAE,OAAO,CAC3B,CAAC,EACD,CAAE,MAAO,kBAAmB,OAAQ,gBAAiB,CACtD,EAEYC,EAAN,MAAMC,UAAyBC,EAAaJ,EAAoBK,CAAQ,CAAE,CAChFC,GACAC,GAEU,YAAYC,EAAwC,CAC7D,MAAMA,CAAM,EAEZ,KAAKD,GAAcC,EAAO,gBAC1B,KAAKF,GAAUG,EAAQ,CAACD,EAAO,GAAG,CAAC,EAAE,cAAc,CAClD,KAAM,GACN,MAAO,MAAOE,GAA4B,CACzC,MAAMA,EAAQ,eAAe,KAAKH,GAAa,SAAU,CAAE,QAAS,EAAK,CAAC,EAC1E,MAAMG,EAAQ,SAAS,CAAC,CACzB,CACD,CAAC,CACF,CAEA,OAA2CC,EAA2BC,EAAkC,CAAC,EAA0B,CAClI,IAAMC,EAAQD,EAAQ,UAAYD,EAAYG,EAAS,IAAI,EAAE,cAAcH,CAAS,EAEpF,MAAO,CACN,QAAS,MAAOI,GAAS,MAAM,KAAKT,GAAQ,QAAQ,KAAKC,GAAaM,EAAO,KAAK,UAAUE,CAAI,EAAG,CAAE,WAAY,EAAK,CAAC,EACvH,UAAW,MAAOC,GAAc,CAC/B,IAAMC,EAAY,SAAY,CAC7B,MAAM,KAAKX,GAAQ,SAAS,MAAOI,GAA4B,CAC9D,IAAMQ,EAAYN,EAAQ,OACvBE,EAAS,IAAI,EAAE,cAAc,GAAGA,EAAS,IAAI,EAAE,EAAE,WAAWK,EAAO,OAAO,EAAE,CAAC,EAAE,EAC/EN,EACG,CAAE,MAAAO,CAAM,EAAI,MAAMV,EAAQ,YAAYQ,EAAW,CAAE,QAAS,CAACN,EAAQ,OAAQ,UAAWA,EAAQ,MAAO,CAAC,EAC9G,MAAMF,EAAQ,UAAUU,EAAO,KAAKb,GAAaM,CAAK,EACtDH,EAAQ,QACPU,EACA,MAAOC,GAAQ,CACd,MAAMP,EAAS,mBAAmB,SAAY,CAC7C,GAAKO,EACL,GAAI,CACH,MAAML,EAAUM,EAAeD,EAAI,QAAQ,SAAS,CAAC,CAAC,EACtDX,EAAQ,IAAIW,CAAG,CAChB,MAAQ,CACPX,EAAQ,KAAKW,CAAG,CACjB,CACD,CAAC,CACF,EACA,CAAE,MAAO,EAAM,CAChB,CACD,CAAC,CACF,EAEAP,EAAS,GAAG,QAASG,EAAW,CAAE,MAAOd,CAAiB,CAAC,CAC5D,CACD,CACD,CACD","names":["connect","v","rabbitmqConfigPipe","v","RabbitMQEventBus","_RabbitMQEventBus","configurable","EventBus","#client","#columnName","config","connect","channel","topicName","options","topic","Instance","data","onMessage","subscribe","queueName","random_exports","queue","msg","parseJSONValue"]}
@@ -1,9 +1,13 @@
1
1
  import {
2
- Instance,
3
- configurable,
4
2
  parseJSONValue,
5
3
  random_exports
6
- } from "../../../chunk-A4P7P6BU.mjs";
4
+ } from "../../../chunk-A332TTED.mjs";
5
+ import {
6
+ configurable
7
+ } from "../../../chunk-NEF3UYFA.mjs";
8
+ import {
9
+ Instance
10
+ } from "../../../chunk-7N4WUZ7P.mjs";
7
11
  import {
8
12
  EventBus
9
13
  } from "../../../chunk-VCCS7CAI.mjs";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/events/adapters/rabbitmq/index.ts"],"sourcesContent":["import { connect, type ChannelWrapper } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\nimport { v } from 'valleyed'\n\nimport { Instance } from '../../../instance'\nimport type { Events } from '../../../types'\nimport { configurable, parseJSONValue, Random } from '../../../utilities'\nimport { EventBus, type Stream, type StreamOptions } from '../base'\n\nexport const rabbitmqConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t\teventColumnName: v.string(),\n\t\t}),\n\t\t{ title: 'Rabbitmq Config', $refId: 'RabbitmqConfig' },\n\t)\n\nexport class RabbitMQEventBus extends configurable(rabbitmqConfigPipe, EventBus) {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tprotected constructor(config: typeof RabbitMQEventBus.Config) {\n\t\tsuper(config)\n\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\tstream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}): Stream<Event['data']> {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\n\t\treturn {\n\t\t\tpublish: async (data) => await this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),\n\t\t\tsubscribe: async (onMessage) => {\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().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\tawait Instance.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, { class: RabbitMQEventBus })\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('RabbitMQEventBus', () => {\n\t\ttest('create returns an instance with stream method', () => {\n\t\t\tconst bus = RabbitMQEventBus.create({ uri: 'amqp://localhost', eventColumnName: 'events' })\n\t\t\texpect(bus).toBeInstanceOf(RabbitMQEventBus)\n\t\t\texpect(bus.stream).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('external new is a compile error', () => {\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new RabbitMQEventBus({ uri: 'amqp://localhost', eventColumnName: 'events' }))\n\t\t})\n\n\t\ttest('static Config resolves to the pipe output type', () => {\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('uri')\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('eventColumnName')\n\t\t})\n\n\t\ttest('create rejects invalid config', () => {\n\t\t\t// @ts-expect-error — missing required field\n\t\t\texpect(() => RabbitMQEventBus.create({ uri: 'amqp://localhost' })).toThrow()\n\t\t})\n\t})\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../src/events/adapters/rabbitmq/index.ts"],"sourcesContent":["import { connect, type ChannelWrapper } from 'amqp-connection-manager'\nimport type { ConfirmChannel } from 'amqplib'\nimport { v } from 'valleyed'\n\nimport { Instance } from '../../../instance'\nimport type { Events } from '../../../types'\nimport { configurable, parseJSONValue, Random } from '../../../utilities'\nimport { EventBus, type Stream, type StreamOptions } from '../base'\n\nexport const rabbitmqConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t\teventColumnName: v.string(),\n\t\t}),\n\t\t{ title: 'Rabbitmq Config', $refId: 'RabbitmqConfig' },\n\t)\n\nexport class RabbitMQEventBus extends configurable(rabbitmqConfigPipe, EventBus) {\n\t#client: ChannelWrapper\n\t#columnName: string\n\n\tprotected constructor(config: typeof RabbitMQEventBus.Config) {\n\t\tsuper(config)\n\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\tstream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}): Stream<Event['data']> {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\n\t\treturn {\n\t\t\tpublish: async (data) => await this.#client.publish(this.#columnName, topic, JSON.stringify(data), { persistent: true }),\n\t\t\tsubscribe: async (onMessage) => {\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().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\tawait Instance.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, { class: RabbitMQEventBus })\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('RabbitMQEventBus', () => {\n\t\ttest('create returns an instance with stream method', () => {\n\t\t\tconst bus = RabbitMQEventBus.create({ uri: 'amqp://localhost', eventColumnName: 'events' })\n\t\t\texpect(bus).toBeInstanceOf(RabbitMQEventBus)\n\t\t\texpect(bus.stream).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('external new is a compile error', () => {\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new RabbitMQEventBus({ uri: 'amqp://localhost', eventColumnName: 'events' }))\n\t\t})\n\n\t\ttest('static Config resolves to the pipe output type', () => {\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('uri')\n\t\t\texpectTypeOf<typeof RabbitMQEventBus.Config>().toHaveProperty('eventColumnName')\n\t\t})\n\n\t\ttest('create rejects invalid config', () => {\n\t\t\t// @ts-expect-error — missing required field\n\t\t\texpect(() => RabbitMQEventBus.create({ uri: 'amqp://localhost' })).toThrow()\n\t\t})\n\t})\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,eAAoC;AAE7C,SAAS,SAAS;AAOX,IAAM,qBAAqB,MACjC,EAAE;AAAA,EACD,EAAE,OAAO;AAAA,IACR,KAAK,EAAE,OAAO;AAAA,IACd,iBAAiB,EAAE,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,EAAE,OAAO,mBAAmB,QAAQ,iBAAiB;AACtD;AAEM,IAAM,mBAAN,MAAM,0BAAyB,aAAa,oBAAoB,QAAQ,EAAE;AAAA,EAChF;AAAA,EACA;AAAA,EAEU,YAAY,QAAwC;AAC7D,UAAM,MAAM;AAEZ,SAAK,cAAc,OAAO;AAC1B,SAAK,UAAU,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,cAAc;AAAA,MAClD,MAAM;AAAA,MACN,OAAO,OAAO,YAA4B;AACzC,cAAM,QAAQ,eAAe,KAAK,aAAa,UAAU,EAAE,SAAS,KAAK,CAAC;AAC1E,cAAM,QAAQ,SAAS,CAAC;AAAA,MACzB;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,OAA2C,WAA2B,UAAkC,CAAC,GAA0B;AAClI,UAAM,QAAQ,QAAQ,YAAY,YAAY,SAAS,IAAI,EAAE,cAAc,SAAS;AAEpF,WAAO;AAAA,MACN,SAAS,OAAO,SAAS,MAAM,KAAK,QAAQ,QAAQ,KAAK,aAAa,OAAO,KAAK,UAAU,IAAI,GAAG,EAAE,YAAY,KAAK,CAAC;AAAA,MACvH,WAAW,OAAO,cAAc;AAC/B,cAAM,YAAY,YAAY;AAC7B,gBAAM,KAAK,QAAQ,SAAS,OAAO,YAA4B;AAC9D,kBAAM,YAAY,QAAQ,SACvB,SAAS,IAAI,EAAE,cAAc,GAAG,SAAS,IAAI,EAAE,EAAE,WAAW,eAAO,OAAO,EAAE,CAAC,EAAE,IAC/E;AACH,kBAAM,EAAE,MAAM,IAAI,MAAM,QAAQ,YAAY,WAAW,EAAE,SAAS,CAAC,QAAQ,QAAQ,WAAW,QAAQ,OAAO,CAAC;AAC9G,kBAAM,QAAQ,UAAU,OAAO,KAAK,aAAa,KAAK;AACtD,oBAAQ;AAAA,cACP;AAAA,cACA,OAAO,QAAQ;AACd,sBAAM,SAAS,mBAAmB,YAAY;AAC7C,sBAAI,CAAC,IAAK;AACV,sBAAI;AACH,0BAAM,UAAU,eAAe,IAAI,QAAQ,SAAS,CAAC,CAAC;AACtD,4BAAQ,IAAI,GAAG;AAAA,kBAChB,QAAQ;AACP,4BAAQ,KAAK,GAAG;AAAA,kBACjB;AAAA,gBACD,CAAC;AAAA,cACF;AAAA,cACA,EAAE,OAAO,MAAM;AAAA,YAChB;AAAA,UACD,CAAC;AAAA,QACF;AAEA,iBAAS,GAAG,SAAS,WAAW,EAAE,OAAO,kBAAiB,CAAC;AAAA,MAC5D;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAI,QAAoB;AACvB,QAAM,EAAE,UAAU,MAAM,QAAQ,aAAa,IAAI;AAEjD,WAAS,oBAAoB,MAAM;AAClC,SAAK,iDAAiD,MAAM;AAC3D,YAAM,MAAM,iBAAiB,OAAO,EAAE,KAAK,oBAAoB,iBAAiB,SAAS,CAAC;AAC1F,aAAO,GAAG,EAAE,eAAe,gBAAgB;AAC3C,aAAO,IAAI,MAAM,EAAE,WAAW,UAAU;AAAA,IACzC,CAAC;AAED,SAAK,mCAAmC,MAAM;AAE7C,YAAM,MAAM,IAAI,iBAAiB,EAAE,KAAK,oBAAoB,iBAAiB,SAAS,CAAC;AAAA,IACxF,CAAC;AAED,SAAK,kDAAkD,MAAM;AAC5D,mBAA6C,EAAE,eAAe,KAAK;AACnE,mBAA6C,EAAE,eAAe,iBAAiB;AAAA,IAChF,CAAC;AAED,SAAK,iCAAiC,MAAM;AAE3C,aAAO,MAAM,iBAAiB,OAAO,EAAE,KAAK,mBAAmB,CAAC,CAAC,EAAE,QAAQ;AAAA,IAC5E,CAAC;AAAA,EACF,CAAC;AACF;","names":[]}
@@ -1,2 +1,2 @@
1
- import{K as o}from "./chunk-IN5YKIJ7.min.mjs";import"./chunk-DSUJ5FUL.min.mjs";import"./chunk-AQY7QVYI.min.mjs";export{o as Instance};
1
+ import{C as o}from "./chunk-N3OD4QL2.min.mjs";import"./chunk-DSUJ5FUL.min.mjs";import"./chunk-AQY7QVYI.min.mjs";export{o as Instance};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Instance
3
- } from "./chunk-A4P7P6BU.mjs";
3
+ } from "./chunk-7N4WUZ7P.mjs";
4
4
  import "./chunk-VCCS7CAI.mjs";
5
5
  import "./chunk-J5LGTIGS.mjs";
6
6
  export {
@@ -1,2 +1,2 @@
1
- import{K as a}from "../chunk-IN5YKIJ7.min.mjs";import"../chunk-DSUJ5FUL.min.mjs";import"../chunk-AQY7QVYI.min.mjs";export{a as Instance};
1
+ import{C as a}from "../chunk-N3OD4QL2.min.mjs";import"../chunk-DSUJ5FUL.min.mjs";import"../chunk-AQY7QVYI.min.mjs";export{a as Instance};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Instance
3
- } from "../chunk-A4P7P6BU.mjs";
3
+ } from "../chunk-7N4WUZ7P.mjs";
4
4
  import "../chunk-VCCS7CAI.mjs";
5
5
  import "../chunk-J5LGTIGS.mjs";
6
6
  export {
@@ -0,0 +1,2 @@
1
+ import{a}from "./chunk-LJZOS62I.min.mjs";import"./chunk-N3OD4QL2.min.mjs";import"./chunk-DSUJ5FUL.min.mjs";import"./chunk-AQY7QVYI.min.mjs";export{a as OrmIntrospectionError};
2
+ //# sourceMappingURL=introspection-TO27QT2X.min.mjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  OrmIntrospectionError
3
- } from "./chunk-BWUFPMVG.mjs";
4
- import "./chunk-A4P7P6BU.mjs";
3
+ } from "./chunk-MNKDFIVK.mjs";
4
+ import "./chunk-7N4WUZ7P.mjs";
5
5
  import "./chunk-VCCS7CAI.mjs";
6
6
  import "./chunk-J5LGTIGS.mjs";
7
7
  export {
8
8
  OrmIntrospectionError
9
9
  };
10
- //# sourceMappingURL=introspection-YJF3QAUK.mjs.map
10
+ //# sourceMappingURL=introspection-ZUQYVEFC.mjs.map
@@ -1,2 +1,2 @@
1
- import{a as d,b as l}from "../../../chunk-7NF7PV6S.min.mjs";import"../../../chunk-IRYCN6PI.min.mjs";import{b as c}from "../../../chunk-BJNIUCPT.min.mjs";import{K as s,m as n,r as p}from "../../../chunk-IN5YKIJ7.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{Queue as y,Worker as f}from"bullmq";import{v as i}from"valleyed";var h=()=>i.meta(i.object({redisConfig:d(),queueName:i.string()}),{title:"Redis Jobs Config",$refId:"RedisJobsConfig"}),m=class b extends n(h,c){#e;constructor(e){super(e);let t=l.create(e.redisConfig,{maxRetriesPerRequest:null,enableReadyCheck:!1}),a=s.get().getScopedName(e.queueName);this.#e=new y(a,{connection:t.connectionOptions,skipVersionCheck:!0});let r=new f(a,async o=>{switch(o.name){case"DelayedJob":return this.callbacks.onDelayed?.(o.data);case"CronJob":return this.callbacks.onCron?.(o.data.type);case"RepeatableJob":return this.callbacks.onRepeatable?.(o.data)}},{connection:t.connectionOptions,autorun:!1,skipVersionCheck:!0});s.on("start",async()=>{await this.#o(),await Promise.all(this.crons.map(({cron:o,name:u})=>this.#a(u,o))),r.run()},{class:b})}#t(){return[Date.now(),p.string()].join("_")}async#a(e,t){return(await this.#e.add("CronJob",{type:e},{jobId:this.#t(),repeat:{pattern:t},removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async#o(){await this.retryAllFailedJobs();let e=await this.#e.getJobSchedulers();await Promise.all(e.map(t=>this.#e.removeJobScheduler(t.key)))}async addDelayed(e,t){return(await this.#e.add("DelayedJob",e,{jobId:this.#t(),delay:t,removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async addRepeatable(e,t,a){return(await this.#e.add("RepeatableJob",e,{jobId:this.#t(),repeat:{pattern:t,...a?{tz:a}:{}},removeOnComplete:!0,backoff:1e3,attempts:3})).opts?.repeat?.key??""}async removeDelayed(e){let t=await this.#e.getJob(e);t&&await t.remove()}async retryAllFailedJobs(){let e=await this.#e.getFailed();await Promise.all(e.map(t=>t.retry()))}};export{m as RedisJob,h as redisJobsConfigPipe};
1
+ import{a as d,b as l}from "../../../chunk-YC6V4HLT.min.mjs";import"../../../chunk-5FEVQT6K.min.mjs";import{e as p}from "../../../chunk-SPOVKWV3.min.mjs";import{a as n}from "../../../chunk-CU2HU5UE.min.mjs";import{b as c}from "../../../chunk-BJNIUCPT.min.mjs";import{C as s}from "../../../chunk-N3OD4QL2.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{Queue as y,Worker as f}from"bullmq";import{v as i}from"valleyed";var h=()=>i.meta(i.object({redisConfig:d(),queueName:i.string()}),{title:"Redis Jobs Config",$refId:"RedisJobsConfig"}),m=class b extends n(h,c){#e;constructor(e){super(e);let t=l.create(e.redisConfig,{maxRetriesPerRequest:null,enableReadyCheck:!1}),a=s.get().getScopedName(e.queueName);this.#e=new y(a,{connection:t.connectionOptions,skipVersionCheck:!0});let r=new f(a,async o=>{switch(o.name){case"DelayedJob":return this.callbacks.onDelayed?.(o.data);case"CronJob":return this.callbacks.onCron?.(o.data.type);case"RepeatableJob":return this.callbacks.onRepeatable?.(o.data)}},{connection:t.connectionOptions,autorun:!1,skipVersionCheck:!0});s.on("start",async()=>{await this.#o(),await Promise.all(this.crons.map(({cron:o,name:u})=>this.#a(u,o))),r.run()},{class:b})}#t(){return[Date.now(),p.string()].join("_")}async#a(e,t){return(await this.#e.add("CronJob",{type:e},{jobId:this.#t(),repeat:{pattern:t},removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async#o(){await this.retryAllFailedJobs();let e=await this.#e.getJobSchedulers();await Promise.all(e.map(t=>this.#e.removeJobScheduler(t.key)))}async addDelayed(e,t){return(await this.#e.add("DelayedJob",e,{jobId:this.#t(),delay:t,removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async addRepeatable(e,t,a){return(await this.#e.add("RepeatableJob",e,{jobId:this.#t(),repeat:{pattern:t,...a?{tz:a}:{}},removeOnComplete:!0,backoff:1e3,attempts:3})).opts?.repeat?.key??""}async removeDelayed(e){let t=await this.#e.getJob(e);t&&await t.remove()}async retryAllFailedJobs(){let e=await this.#e.getFailed();await Promise.all(e.map(t=>t.retry()))}};export{m as RedisJob,h as redisJobsConfigPipe};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/jobs/adapters/redis/index.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\nimport { v } from 'valleyed'\n\nimport { RedisCache, redisConfigPipe } from '../../../cache/adapters/redis'\nimport { Instance } from '../../../instance'\nimport { Random, configurable } from '../../../utilities'\nimport { Job, JobNames, type Cron, type DelayedJobEvent, type RepeatableJobEvent } from '../base'\n\nexport const redisJobsConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\tredisConfig: redisConfigPipe(),\n\t\t\tqueueName: v.string(),\n\t\t}),\n\t\t{ title: 'Redis Jobs Config', $refId: 'RedisJobsConfig' },\n\t)\n\nexport class RedisJob extends configurable(redisJobsConfigPipe, Job) {\n\t#queue: Queue\n\n\tprotected constructor(config: typeof RedisJob.Config) {\n\t\tsuper(config)\n\n\t\tconst redisCache = (RedisCache.create as any)(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tconst queueName = Instance.get().getScopedName(config.queueName)\n\t\tthis.#queue = new Queue(queueName, { connection: redisCache.connectionOptions, skipVersionCheck: true })\n\n\t\tconst worker = new Worker(\n\t\t\tqueueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.connectionOptions, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.#cleanup()\n\t\t\tawait Promise.all(this.crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\tworker.run()\n\t\t}, { class: RedisJob })\n\t}\n\n\t#getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string) {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: this.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { test, expectTypeOf } = import.meta.vitest\n\ttype PipeOutput<P> = import('valleyed').PipeOutput<P>\n\n\ttest('external new is a compile error', () => {\n\t\t// @ts-expect-error — protected constructor prevents external instantiation\n\t\tvoid (() => new RedisJob({ redisConfig: { host: '' }, queueName: '' }))\n\t})\n\n\ttest('Config type matches pipe output', () => {\n\t\texpectTypeOf<typeof RedisJob.Config>().toEqualTypeOf<PipeOutput<ReturnType<typeof redisJobsConfigPipe>>>()\n\t})\n}\n"],"mappings":"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","names":["Queue","Worker","v","redisJobsConfigPipe","v","redisConfigPipe","RedisJob","_RedisJob","configurable","Job","#queue","config","redisCache","RedisCache","queueName","Instance","Queue","worker","Worker","job","#cleanup","cron","name","#addCron","#getNewId","random_exports","type","repeatableJobs","data","delayInMs","tz","jobId","failedJobs"]}
1
+ {"version":3,"sources":["../../../../../src/jobs/adapters/redis/index.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\nimport { v } from 'valleyed'\n\nimport { RedisCache, redisConfigPipe } from '../../../cache/adapters/redis'\nimport { Instance } from '../../../instance'\nimport { Random, configurable } from '../../../utilities'\nimport { Job, JobNames, type Cron, type DelayedJobEvent, type RepeatableJobEvent } from '../base'\n\nexport const redisJobsConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\tredisConfig: redisConfigPipe(),\n\t\t\tqueueName: v.string(),\n\t\t}),\n\t\t{ title: 'Redis Jobs Config', $refId: 'RedisJobsConfig' },\n\t)\n\nexport class RedisJob extends configurable(redisJobsConfigPipe, Job) {\n\t#queue: Queue\n\n\tprotected constructor(config: typeof RedisJob.Config) {\n\t\tsuper(config)\n\n\t\tconst redisCache = (RedisCache.create as any)(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tconst queueName = Instance.get().getScopedName(config.queueName)\n\t\tthis.#queue = new Queue(queueName, { connection: redisCache.connectionOptions, skipVersionCheck: true })\n\n\t\tconst worker = new Worker(\n\t\t\tqueueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.connectionOptions, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.#cleanup()\n\t\t\tawait Promise.all(this.crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\tworker.run()\n\t\t}, { class: RedisJob })\n\t}\n\n\t#getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string) {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: this.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { test, expectTypeOf } = import.meta.vitest\n\ttype PipeOutput<P> = import('valleyed').PipeOutput<P>\n\n\ttest('external new is a compile error', () => {\n\t\t// @ts-expect-error — protected constructor prevents external instantiation\n\t\tvoid (() => new RedisJob({ redisConfig: { host: '' }, queueName: '' }))\n\t})\n\n\ttest('Config type matches pipe output', () => {\n\t\texpectTypeOf<typeof RedisJob.Config>().toEqualTypeOf<PipeOutput<ReturnType<typeof redisJobsConfigPipe>>>()\n\t})\n}\n"],"mappings":"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","names":["Queue","Worker","v","redisJobsConfigPipe","v","redisConfigPipe","RedisJob","_RedisJob","configurable","Job","#queue","config","redisCache","RedisCache","queueName","Instance","Queue","worker","Worker","job","#cleanup","cron","name","#addCron","#getNewId","random_exports","type","repeatableJobs","data","delayInMs","tz","jobId","failedJobs"]}
@@ -1,16 +1,20 @@
1
1
  import {
2
2
  RedisCache,
3
3
  redisConfigPipe
4
- } from "../../../chunk-5PZACGPI.mjs";
5
- import "../../../chunk-LKS5ZE45.mjs";
4
+ } from "../../../chunk-XJKBHQWO.mjs";
5
+ import "../../../chunk-74GY55PM.mjs";
6
+ import {
7
+ random_exports
8
+ } from "../../../chunk-A332TTED.mjs";
9
+ import {
10
+ configurable
11
+ } from "../../../chunk-NEF3UYFA.mjs";
6
12
  import {
7
13
  Job
8
14
  } from "../../../chunk-DKPZJIIR.mjs";
9
15
  import {
10
- Instance,
11
- configurable,
12
- random_exports
13
- } from "../../../chunk-A4P7P6BU.mjs";
16
+ Instance
17
+ } from "../../../chunk-7N4WUZ7P.mjs";
14
18
  import "../../../chunk-VCCS7CAI.mjs";
15
19
  import "../../../chunk-J5LGTIGS.mjs";
16
20
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/jobs/adapters/redis/index.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\nimport { v } from 'valleyed'\n\nimport { RedisCache, redisConfigPipe } from '../../../cache/adapters/redis'\nimport { Instance } from '../../../instance'\nimport { Random, configurable } from '../../../utilities'\nimport { Job, JobNames, type Cron, type DelayedJobEvent, type RepeatableJobEvent } from '../base'\n\nexport const redisJobsConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\tredisConfig: redisConfigPipe(),\n\t\t\tqueueName: v.string(),\n\t\t}),\n\t\t{ title: 'Redis Jobs Config', $refId: 'RedisJobsConfig' },\n\t)\n\nexport class RedisJob extends configurable(redisJobsConfigPipe, Job) {\n\t#queue: Queue\n\n\tprotected constructor(config: typeof RedisJob.Config) {\n\t\tsuper(config)\n\n\t\tconst redisCache = (RedisCache.create as any)(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tconst queueName = Instance.get().getScopedName(config.queueName)\n\t\tthis.#queue = new Queue(queueName, { connection: redisCache.connectionOptions, skipVersionCheck: true })\n\n\t\tconst worker = new Worker(\n\t\t\tqueueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.connectionOptions, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.#cleanup()\n\t\t\tawait Promise.all(this.crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\tworker.run()\n\t\t}, { class: RedisJob })\n\t}\n\n\t#getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string) {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: this.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { test, expectTypeOf } = import.meta.vitest\n\ttype PipeOutput<P> = import('valleyed').PipeOutput<P>\n\n\ttest('external new is a compile error', () => {\n\t\t// @ts-expect-error — protected constructor prevents external instantiation\n\t\tvoid (() => new RedisJob({ redisConfig: { host: '' }, queueName: '' }))\n\t})\n\n\ttest('Config type matches pipe output', () => {\n\t\texpectTypeOf<typeof RedisJob.Config>().toEqualTypeOf<PipeOutput<ReturnType<typeof redisJobsConfigPipe>>>()\n\t})\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../src/jobs/adapters/redis/index.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\nimport { v } from 'valleyed'\n\nimport { RedisCache, redisConfigPipe } from '../../../cache/adapters/redis'\nimport { Instance } from '../../../instance'\nimport { Random, configurable } from '../../../utilities'\nimport { Job, JobNames, type Cron, type DelayedJobEvent, type RepeatableJobEvent } from '../base'\n\nexport const redisJobsConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\tredisConfig: redisConfigPipe(),\n\t\t\tqueueName: v.string(),\n\t\t}),\n\t\t{ title: 'Redis Jobs Config', $refId: 'RedisJobsConfig' },\n\t)\n\nexport class RedisJob extends configurable(redisJobsConfigPipe, Job) {\n\t#queue: Queue\n\n\tprotected constructor(config: typeof RedisJob.Config) {\n\t\tsuper(config)\n\n\t\tconst redisCache = (RedisCache.create as any)(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tconst queueName = Instance.get().getScopedName(config.queueName)\n\t\tthis.#queue = new Queue(queueName, { connection: redisCache.connectionOptions, skipVersionCheck: true })\n\n\t\tconst worker = new Worker(\n\t\t\tqueueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.connectionOptions, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.#cleanup()\n\t\t\tawait Promise.all(this.crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\tworker.run()\n\t\t}, { class: RedisJob })\n\t}\n\n\t#getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string) {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: this.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: this.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { test, expectTypeOf } = import.meta.vitest\n\ttype PipeOutput<P> = import('valleyed').PipeOutput<P>\n\n\ttest('external new is a compile error', () => {\n\t\t// @ts-expect-error — protected constructor prevents external instantiation\n\t\tvoid (() => new RedisJob({ redisConfig: { host: '' }, queueName: '' }))\n\t})\n\n\ttest('Config type matches pipe output', () => {\n\t\texpectTypeOf<typeof RedisJob.Config>().toEqualTypeOf<PipeOutput<ReturnType<typeof redisJobsConfigPipe>>>()\n\t})\n}\n"],"mappings":"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","names":[]}
@@ -1,2 +1,2 @@
1
- import{a}from "../../../chunk-P4PRHHIY.min.mjs";import"../../../chunk-7SQ5JQYR.min.mjs";import"../../../chunk-IN5YKIJ7.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";export{a as InMemoryAdapter};
1
+ import{a}from "../../../chunk-YWQTFKNY.min.mjs";import"../../../chunk-CU2HU5UE.min.mjs";import"../../../chunk-MCX2O5IT.min.mjs";import"../../../chunk-N3OD4QL2.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";export{a as InMemoryAdapter};
2
2
  //# sourceMappingURL=index.min.mjs.map
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  InMemoryAdapter
3
- } from "../../../chunk-TSVHZZE4.mjs";
4
- import "../../../chunk-3TP7NINX.mjs";
5
- import "../../../chunk-A4P7P6BU.mjs";
3
+ } from "../../../chunk-RFJ5URMP.mjs";
4
+ import "../../../chunk-NEF3UYFA.mjs";
5
+ import "../../../chunk-XESM7IWM.mjs";
6
+ import "../../../chunk-7N4WUZ7P.mjs";
6
7
  import "../../../chunk-VCCS7CAI.mjs";
7
8
  import "../../../chunk-J5LGTIGS.mjs";
8
9
  export {
@@ -1,2 +1,2 @@
1
- import{a as l}from "../../../chunk-P4PRHHIY.min.mjs";import{j as p}from "../../../chunk-7SQ5JQYR.min.mjs";import{m as d}from "../../../chunk-IN5YKIJ7.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{open as w,readFile as h,rename as y,unlink as f,writeFile as b}from"fs/promises";import{v as o}from"valleyed";var k=()=>o.object({filePath:o.string()}),u=class extends d(k,p){schemaConfigPipe=o.object({table:o.string()});#e=l.create({});supportedFieldTypes=this.#e.supportedFieldTypes;queryableOps=this.#e.queryableOps;updateOps=this.#e.updateOps;aggregateOps=this.#e.aggregateOps;#t=Promise.resolve();constructor(e){super(e)}get stores(){return this.#e.stores}#n(){let e={},a=[...this.#e.migrations.values()];a.length>0&&(e.__migrations=a);let t={};for(let[i,s]of this.#e.tables.entries())t[i]={pk:s.pk,fields:Object.fromEntries(s.fields.entries())};Object.keys(t).length>0&&(e.__tables=t);let n={};for(let[i,s]of this.#e.indexes.entries())n[i]={table:s.table,on:[...s.on],unique:s.unique};Object.keys(n).length>0&&(e.__indexes=n);let r={};for(let[i,s]of this.#e.foreignKeys.entries())r[i]={table:s.table,on:s.on,references:s.references,...s.onDelete?{onDelete:s.onDelete}:{},...s.onUpdate?{onUpdate:s.onUpdate}:{}};Object.keys(r).length>0&&(e.__foreignKeys=r);for(let[i,s]of this.stores.entries()){let c={};for(let[m,g]of s.entries())c[m]=g;e[i]=c}return JSON.stringify(e)}async#s(){let e=this.#n(),a=this.config.filePath+".tmp."+process.pid+"."+Date.now();await b(a,e,"utf-8"),await y(a,this.config.filePath)}#a(){let e=this.#t.then(()=>this.#s());return this.#t=e.catch(()=>{}),e}async connect(){let e;try{e=await h(this.config.filePath,"utf-8")}catch{return}let a=JSON.parse(e);if(this.#e.migrations.clear(),Array.isArray(a.__migrations))for(let t of a.__migrations)this.#e.migrations.set(t.id,{id:t.id,appliedAt:t.appliedAt});if(this.#e.tables.clear(),a.__tables&&typeof a.__tables=="object")for(let[t,n]of Object.entries(a.__tables)){let r=new Map;if(n.fields)for(let[i,s]of Object.entries(n.fields))r.set(i,s);this.#e.tables.set(t,{pk:n.pk,fields:r})}if(this.#e.indexes.clear(),a.__indexes&&typeof a.__indexes=="object")for(let[t,n]of Object.entries(a.__indexes))this.#e.indexes.set(t,{table:n.table,on:n.on,unique:n.unique});if(this.#e.foreignKeys.clear(),a.__foreignKeys&&typeof a.__foreignKeys=="object")for(let[t,n]of Object.entries(a.__foreignKeys))this.#e.foreignKeys.set(t,n);this.stores.clear();for(let[t,n]of Object.entries(a)){if(t.startsWith("__"))continue;let r=new Map;for(let[i,s]of Object.entries(n))r.set(i,s);this.stores.set(t,r)}}async disconnect(){await this.#a()}async findByPk(e,a,t){return this.#e.findByPk(e,a,t)}async createMany(e,a,t){let n=await this.#e.createMany(e,a,t);return await this.#a(),n}async updateByPk(e,a,t,n){let r=await this.#e.updateByPk(e,a,t,n);return r&&await this.#a(),r}async deleteByPk(e,a,t){let n=await this.#e.deleteByPk(e,a,t);return n&&await this.#a(),n}async findMany(e,a,t,n){return this.#e.findMany(e,a,t,n)}async count(e,a,t){return this.#e.count(e,a,t)}iterateMany(e,a,t,n){return this.#e.iterateMany(e,a,t,n)}async updateMany(e,a,t,n){let r=await this.#e.updateMany(e,a,t,n);return r.length&&await this.#a(),r}async deleteMany(e,a,t){let n=await this.#e.deleteMany(e,a,t);return n.length&&await this.#a(),n}async upsertOne(e,a,t,n,r){let i=await this.#e.upsertOne(e,a,t,n,r);return await this.#a(),i}async aggregate(e,a,t){return this.#e.aggregate(e,a,t)}async session(e){return this.#e.session(async()=>{let a=await e();return await this.#a(),a})}async loadMigrations(){return await this.connect(),this.#e.loadMigrations()}async recordMigration(e,a){await this.#e.recordMigration(e,a),await this.#a()}async acquireMigrationLock(e){let a=this.config.filePath+".lock",t=Date.now()+3e4;for(;;)try{await(await w(a,"wx")).close();break}catch(n){if(n.code!=="EEXIST")throw n;if(Date.now()>t)throw new Error("Timed out waiting for migration lock");await new Promise(r=>setTimeout(r,50))}try{return await e()}finally{await f(a).catch(()=>{})}}async applyCreateTable(e){await this.#e.applyCreateTable(e),await this.#a()}async applyDropTable(e){await this.#e.applyDropTable(e),await this.#a()}async applyAddField(e){await this.#e.applyAddField(e),await this.#a()}async applyDropField(e){await this.#e.applyDropField(e),await this.#a()}async applyModifyField(e){await this.#e.applyModifyField(e),await this.#a()}async applyRenameTable(e){await this.#e.applyRenameTable(e),await this.#a()}async applyRenameField(e){await this.#e.applyRenameField(e),await this.#a()}async applyAddIndex(e){await this.#e.applyAddIndex(e),await this.#a()}async applyDropIndex(e){await this.#e.applyDropIndex(e),await this.#a()}async applyAddForeignKey(e){await this.#e.applyAddForeignKey(e),await this.#a()}async applyDropForeignKey(e){await this.#e.applyDropForeignKey(e),await this.#a()}async introspect(){return this.#e.introspect()}};export{u as JsonAdapter};
1
+ import{a as l}from "../../../chunk-YWQTFKNY.min.mjs";import{a as d}from "../../../chunk-CU2HU5UE.min.mjs";import{j as p}from "../../../chunk-MCX2O5IT.min.mjs";import"../../../chunk-N3OD4QL2.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{open as w,readFile as h,rename as y,unlink as f,writeFile as b}from"fs/promises";import{v as o}from"valleyed";var k=()=>o.object({filePath:o.string()}),u=class extends d(k,p){schemaConfigPipe=o.object({table:o.string()});#e=l.create({});supportedFieldTypes=this.#e.supportedFieldTypes;queryableOps=this.#e.queryableOps;updateOps=this.#e.updateOps;aggregateOps=this.#e.aggregateOps;#t=Promise.resolve();constructor(e){super(e)}get stores(){return this.#e.stores}#n(){let e={},a=[...this.#e.migrations.values()];a.length>0&&(e.__migrations=a);let t={};for(let[i,s]of this.#e.tables.entries())t[i]={pk:s.pk,fields:Object.fromEntries(s.fields.entries())};Object.keys(t).length>0&&(e.__tables=t);let n={};for(let[i,s]of this.#e.indexes.entries())n[i]={table:s.table,on:[...s.on],unique:s.unique};Object.keys(n).length>0&&(e.__indexes=n);let r={};for(let[i,s]of this.#e.foreignKeys.entries())r[i]={table:s.table,on:s.on,references:s.references,...s.onDelete?{onDelete:s.onDelete}:{},...s.onUpdate?{onUpdate:s.onUpdate}:{}};Object.keys(r).length>0&&(e.__foreignKeys=r);for(let[i,s]of this.stores.entries()){let c={};for(let[m,g]of s.entries())c[m]=g;e[i]=c}return JSON.stringify(e)}async#s(){let e=this.#n(),a=this.config.filePath+".tmp."+process.pid+"."+Date.now();await b(a,e,"utf-8"),await y(a,this.config.filePath)}#a(){let e=this.#t.then(()=>this.#s());return this.#t=e.catch(()=>{}),e}async connect(){let e;try{e=await h(this.config.filePath,"utf-8")}catch{return}let a=JSON.parse(e);if(this.#e.migrations.clear(),Array.isArray(a.__migrations))for(let t of a.__migrations)this.#e.migrations.set(t.id,{id:t.id,appliedAt:t.appliedAt});if(this.#e.tables.clear(),a.__tables&&typeof a.__tables=="object")for(let[t,n]of Object.entries(a.__tables)){let r=new Map;if(n.fields)for(let[i,s]of Object.entries(n.fields))r.set(i,s);this.#e.tables.set(t,{pk:n.pk,fields:r})}if(this.#e.indexes.clear(),a.__indexes&&typeof a.__indexes=="object")for(let[t,n]of Object.entries(a.__indexes))this.#e.indexes.set(t,{table:n.table,on:n.on,unique:n.unique});if(this.#e.foreignKeys.clear(),a.__foreignKeys&&typeof a.__foreignKeys=="object")for(let[t,n]of Object.entries(a.__foreignKeys))this.#e.foreignKeys.set(t,n);this.stores.clear();for(let[t,n]of Object.entries(a)){if(t.startsWith("__"))continue;let r=new Map;for(let[i,s]of Object.entries(n))r.set(i,s);this.stores.set(t,r)}}async disconnect(){await this.#a()}async findByPk(e,a,t){return this.#e.findByPk(e,a,t)}async createMany(e,a,t){let n=await this.#e.createMany(e,a,t);return await this.#a(),n}async updateByPk(e,a,t,n){let r=await this.#e.updateByPk(e,a,t,n);return r&&await this.#a(),r}async deleteByPk(e,a,t){let n=await this.#e.deleteByPk(e,a,t);return n&&await this.#a(),n}async findMany(e,a,t,n){return this.#e.findMany(e,a,t,n)}async count(e,a,t){return this.#e.count(e,a,t)}iterateMany(e,a,t,n){return this.#e.iterateMany(e,a,t,n)}async updateMany(e,a,t,n){let r=await this.#e.updateMany(e,a,t,n);return r.length&&await this.#a(),r}async deleteMany(e,a,t){let n=await this.#e.deleteMany(e,a,t);return n.length&&await this.#a(),n}async upsertOne(e,a,t,n,r){let i=await this.#e.upsertOne(e,a,t,n,r);return await this.#a(),i}async aggregate(e,a,t){return this.#e.aggregate(e,a,t)}async session(e){return this.#e.session(async()=>{let a=await e();return await this.#a(),a})}async loadMigrations(){return await this.connect(),this.#e.loadMigrations()}async recordMigration(e,a){await this.#e.recordMigration(e,a),await this.#a()}async acquireMigrationLock(e){let a=this.config.filePath+".lock",t=Date.now()+3e4;for(;;)try{await(await w(a,"wx")).close();break}catch(n){if(n.code!=="EEXIST")throw n;if(Date.now()>t)throw new Error("Timed out waiting for migration lock");await new Promise(r=>setTimeout(r,50))}try{return await e()}finally{await f(a).catch(()=>{})}}async applyCreateTable(e){await this.#e.applyCreateTable(e),await this.#a()}async applyDropTable(e){await this.#e.applyDropTable(e),await this.#a()}async applyAddField(e){await this.#e.applyAddField(e),await this.#a()}async applyDropField(e){await this.#e.applyDropField(e),await this.#a()}async applyModifyField(e){await this.#e.applyModifyField(e),await this.#a()}async applyRenameTable(e){await this.#e.applyRenameTable(e),await this.#a()}async applyRenameField(e){await this.#e.applyRenameField(e),await this.#a()}async applyAddIndex(e){await this.#e.applyAddIndex(e),await this.#a()}async applyDropIndex(e){await this.#e.applyDropIndex(e),await this.#a()}async applyAddForeignKey(e){await this.#e.applyAddForeignKey(e),await this.#a()}async applyDropForeignKey(e){await this.#e.applyDropForeignKey(e),await this.#a()}async introspect(){return this.#e.introspect()}};export{u as JsonAdapter};
2
2
  //# sourceMappingURL=index.min.mjs.map