@daiso-tech/core 0.26.1 → 0.28.0

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 (289) hide show
  1. package/README.md +13 -3
  2. package/dist/async/utilities/delay/delay.d.ts +1 -12
  3. package/dist/async/utilities/delay/delay.js +1 -12
  4. package/dist/async/utilities/delay/delay.js.map +1 -1
  5. package/dist/async/utilities/lazy-promise/lazy-promise.d.ts +143 -71
  6. package/dist/async/utilities/lazy-promise/lazy-promise.js +223 -142
  7. package/dist/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
  8. package/dist/async/utilities/retry/retry-or-fail.d.ts +2 -0
  9. package/dist/async/utilities/retry/retry-or-fail.js.map +1 -1
  10. package/dist/cache/contracts/_module-exports.d.ts +1 -0
  11. package/dist/cache/contracts/_module-exports.js +1 -0
  12. package/dist/cache/contracts/_module-exports.js.map +1 -1
  13. package/dist/cache/contracts/cache-adapter.contract.d.ts +19 -21
  14. package/dist/cache/contracts/cache-adapter.contract.js +1 -4
  15. package/dist/cache/contracts/cache-adapter.contract.js.map +1 -1
  16. package/dist/cache/contracts/cache-factory.contract.d.ts +1 -1
  17. package/dist/cache/contracts/cache.contract.d.ts +144 -96
  18. package/dist/cache/contracts/cache.contract.js +1 -2
  19. package/dist/cache/contracts/cache.contract.js.map +1 -1
  20. package/dist/cache/contracts/cache.errors.js +2 -5
  21. package/dist/cache/contracts/cache.errors.js.map +1 -1
  22. package/dist/cache/contracts/cache.events.d.ts +10 -10
  23. package/dist/cache/contracts/cache.events.js +2 -5
  24. package/dist/cache/contracts/cache.events.js.map +1 -1
  25. package/dist/cache/contracts/database-cache-adapter.contract.d.ts +89 -0
  26. package/dist/cache/contracts/database-cache-adapter.contract.js +5 -0
  27. package/dist/cache/contracts/database-cache-adapter.contract.js.map +1 -0
  28. package/dist/cache/implementations/adapters/{kysely-sqlite-cache-adapter → kysely-cache-adapter}/_module.d.ts +1 -1
  29. package/dist/cache/implementations/adapters/kysely-cache-adapter/_module.js +2 -0
  30. package/dist/cache/implementations/adapters/kysely-cache-adapter/_module.js.map +1 -0
  31. package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.d.ts +73 -0
  32. package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.js +224 -0
  33. package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.js.map +1 -0
  34. package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.d.ts +29 -39
  35. package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js +45 -54
  36. package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js.map +1 -1
  37. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.d.ts +17 -33
  38. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +43 -52
  39. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
  40. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-serde.d.ts +13 -0
  41. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-serde.js +38 -0
  42. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-serde.js.map +1 -0
  43. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.d.ts +27 -33
  44. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +145 -197
  45. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
  46. package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.d.ts +14 -13
  47. package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js +19 -17
  48. package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js.map +1 -1
  49. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-serde.d.ts +13 -0
  50. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-serde.js +39 -0
  51. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-serde.js.map +1 -0
  52. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.d.ts +16 -22
  53. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +51 -132
  54. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
  55. package/dist/cache/implementations/adapters/redis-cache-adapter/utilities.d.ts +13 -0
  56. package/dist/cache/implementations/adapters/redis-cache-adapter/utilities.js +69 -0
  57. package/dist/cache/implementations/adapters/redis-cache-adapter/utilities.js.map +1 -0
  58. package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.d.ts +29 -41
  59. package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js +46 -55
  60. package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js.map +1 -1
  61. package/dist/cache/implementations/derivables/_module-exports.d.ts +1 -1
  62. package/dist/cache/implementations/derivables/_module-exports.js +1 -1
  63. package/dist/cache/implementations/derivables/_module-exports.js.map +1 -1
  64. package/dist/cache/implementations/derivables/cache/_module.d.ts +1 -0
  65. package/dist/cache/implementations/derivables/cache/_module.js +1 -0
  66. package/dist/cache/implementations/derivables/cache/_module.js.map +1 -1
  67. package/dist/cache/implementations/derivables/cache/cache.d.ts +269 -507
  68. package/dist/cache/implementations/derivables/cache/cache.js +538 -822
  69. package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
  70. package/dist/cache/implementations/derivables/cache/database-cache-adapter.d.ts +21 -0
  71. package/dist/cache/implementations/derivables/cache/database-cache-adapter.js +110 -0
  72. package/dist/cache/implementations/derivables/cache/database-cache-adapter.js.map +1 -0
  73. package/dist/cache/implementations/derivables/cache/is-database-cache-adapter.d.ts +9 -0
  74. package/dist/cache/implementations/derivables/cache/is-database-cache-adapter.js +20 -0
  75. package/dist/cache/implementations/derivables/cache/is-database-cache-adapter.js.map +1 -0
  76. package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +69 -105
  77. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +117 -87
  78. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  79. package/dist/cache/implementations/test-utilities/_module-exports.d.ts +1 -0
  80. package/dist/cache/implementations/test-utilities/_module-exports.js +1 -0
  81. package/dist/cache/implementations/test-utilities/_module-exports.js.map +1 -1
  82. package/dist/cache/implementations/test-utilities/cache-adapter.test-suite.d.ts +9 -11
  83. package/dist/cache/implementations/test-utilities/cache-adapter.test-suite.js +246 -247
  84. package/dist/cache/implementations/test-utilities/cache-adapter.test-suite.js.map +1 -1
  85. package/dist/cache/implementations/test-utilities/cache.test-suite.d.ts +16 -30
  86. package/dist/cache/implementations/test-utilities/cache.test-suite.js +271 -996
  87. package/dist/cache/implementations/test-utilities/cache.test-suite.js.map +1 -1
  88. package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.d.ts +60 -0
  89. package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.js +698 -0
  90. package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.js.map +1 -0
  91. package/dist/collection/contracts/async-collection.contract.d.ts +2 -3
  92. package/dist/collection/contracts/async-collection.contract.js +1 -12
  93. package/dist/collection/contracts/async-collection.contract.js.map +1 -1
  94. package/dist/collection/contracts/collection.contract.d.ts +1 -1
  95. package/dist/collection/contracts/collection.errors.d.ts +1 -1
  96. package/dist/collection/contracts/collection.errors.js +3 -6
  97. package/dist/collection/contracts/collection.errors.js.map +1 -1
  98. package/dist/collection/implementations/_shared.d.ts +4 -4
  99. package/dist/collection/implementations/_shared.js +6 -9
  100. package/dist/collection/implementations/_shared.js.map +1 -1
  101. package/dist/collection/implementations/async-iterable-collection/_shared/async-delay-iterable.js +2 -2
  102. package/dist/collection/implementations/async-iterable-collection/_shared/async-delay-iterable.js.map +1 -1
  103. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.d.ts +5 -21
  104. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +12 -8
  105. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
  106. package/dist/collection/implementations/iterable-collection/iterable-collection.d.ts +1 -1
  107. package/dist/collection/implementations/iterable-collection/iterable-collection.js +1 -1
  108. package/dist/collection/implementations/list-collection/list-collection.d.ts +1 -1
  109. package/dist/collection/implementations/list-collection/list-collection.js +1 -1
  110. package/dist/event-bus/contracts/event-bus-adapter.contract.d.ts +0 -9
  111. package/dist/event-bus/contracts/event-bus.contract.d.ts +5 -5
  112. package/dist/event-bus/contracts/event-bus.contract.js.map +1 -1
  113. package/dist/event-bus/contracts/event-bus.errors.js +2 -5
  114. package/dist/event-bus/contracts/event-bus.errors.js.map +1 -1
  115. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +9 -29
  116. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +14 -35
  117. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js.map +1 -1
  118. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.d.ts +2 -4
  119. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.js +2 -8
  120. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.js.map +1 -1
  121. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.d.ts +8 -15
  122. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +15 -34
  123. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js.map +1 -1
  124. package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +85 -289
  125. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +128 -325
  126. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
  127. package/dist/event-bus/implementations/derivables/event-bus/listener-store.d.ts +13 -0
  128. package/dist/event-bus/implementations/derivables/event-bus/listener-store.js +42 -0
  129. package/dist/event-bus/implementations/derivables/event-bus/listener-store.js.map +1 -0
  130. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.d.ts +103 -86
  131. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +135 -77
  132. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
  133. package/dist/event-bus/implementations/test-utilities/event-bus-adapter.test-suite.d.ts +2 -48
  134. package/dist/event-bus/implementations/test-utilities/event-bus-adapter.test-suite.js +31 -122
  135. package/dist/event-bus/implementations/test-utilities/event-bus-adapter.test-suite.js.map +1 -1
  136. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.d.ts +2 -50
  137. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js +41 -89
  138. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js.map +1 -1
  139. package/dist/lock/contracts/database-lock-adapter.contract.d.ts +0 -9
  140. package/dist/lock/contracts/lock-adapter.contract.d.ts +0 -9
  141. package/dist/lock/contracts/lock-provider.contract.d.ts +20 -6
  142. package/dist/lock/contracts/lock.contract.d.ts +37 -8
  143. package/dist/lock/contracts/lock.errors.js +2 -5
  144. package/dist/lock/contracts/lock.errors.js.map +1 -1
  145. package/dist/lock/contracts/lock.events.js +2 -5
  146. package/dist/lock/contracts/lock.events.js.map +1 -1
  147. package/dist/lock/implementations/adapters/_module-exports.d.ts +1 -0
  148. package/dist/lock/implementations/adapters/_module-exports.js +1 -0
  149. package/dist/lock/implementations/adapters/_module-exports.js.map +1 -1
  150. package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.d.ts +0 -5
  151. package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +2 -21
  152. package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -1
  153. package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.d.ts +11 -16
  154. package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js +11 -20
  155. package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js.map +1 -1
  156. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.d.ts +7 -26
  157. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js +7 -35
  158. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js.map +1 -1
  159. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.d.ts +13 -20
  160. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +13 -37
  161. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -1
  162. package/dist/lock/implementations/adapters/no-op-lock-adapter/_module.d.ts +1 -0
  163. package/dist/lock/implementations/adapters/no-op-lock-adapter/_module.js +2 -0
  164. package/dist/lock/implementations/adapters/no-op-lock-adapter/_module.js.map +1 -0
  165. package/dist/lock/implementations/adapters/no-op-lock-adapter/no-op-lock-adapter.d.ts +17 -0
  166. package/dist/lock/implementations/adapters/no-op-lock-adapter/no-op-lock-adapter.js +24 -0
  167. package/dist/lock/implementations/adapters/no-op-lock-adapter/no-op-lock-adapter.js.map +1 -0
  168. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.d.ts +4 -22
  169. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +4 -31
  170. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js.map +1 -1
  171. package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.d.ts +14 -20
  172. package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js +12 -21
  173. package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js.map +1 -1
  174. package/dist/lock/implementations/derivables/lock-provider/database-lock-adapter.d.ts +0 -2
  175. package/dist/lock/implementations/derivables/lock-provider/database-lock-adapter.js +2 -8
  176. package/dist/lock/implementations/derivables/lock-provider/database-lock-adapter.js.map +1 -1
  177. package/dist/lock/implementations/derivables/lock-provider/is-database-lock-adapter.js +1 -5
  178. package/dist/lock/implementations/derivables/lock-provider/is-database-lock-adapter.js.map +1 -1
  179. package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +181 -369
  180. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +259 -407
  181. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
  182. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +15 -17
  183. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +42 -40
  184. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
  185. package/dist/lock/implementations/derivables/lock-provider/lock-state.d.ts +3 -3
  186. package/dist/lock/implementations/derivables/lock-provider/lock-state.js.map +1 -1
  187. package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +194 -680
  188. package/dist/lock/implementations/derivables/lock-provider/lock.js +284 -744
  189. package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
  190. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +106 -143
  191. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +173 -101
  192. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
  193. package/dist/lock/implementations/test-utilities/database-lock-adapter.test-suite.d.ts +4 -5
  194. package/dist/lock/implementations/test-utilities/database-lock-adapter.test-suite.js +172 -247
  195. package/dist/lock/implementations/test-utilities/database-lock-adapter.test-suite.js.map +1 -1
  196. package/dist/lock/implementations/test-utilities/lock-adapter.test-suite.d.ts +5 -8
  197. package/dist/lock/implementations/test-utilities/lock-adapter.test-suite.js +93 -98
  198. package/dist/lock/implementations/test-utilities/lock-adapter.test-suite.js.map +1 -1
  199. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.d.ts +15 -20
  200. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js +295 -145
  201. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js.map +1 -1
  202. package/dist/serde/implementations/adapters/mongodb-serde/mongodb-serde.js +1 -2
  203. package/dist/serde/implementations/adapters/mongodb-serde/mongodb-serde.js.map +1 -1
  204. package/dist/serde/implementations/adapters/no-op-serde-adapter/no-op-serde-adapter.d.ts +3 -2
  205. package/dist/serde/implementations/adapters/no-op-serde-adapter/no-op-serde-adapter.js +2 -1
  206. package/dist/serde/implementations/adapters/no-op-serde-adapter/no-op-serde-adapter.js.map +1 -1
  207. package/dist/serde/implementations/adapters/redis-serde/redis-serde.js +1 -2
  208. package/dist/serde/implementations/adapters/redis-serde/redis-serde.js.map +1 -1
  209. package/dist/serde/implementations/adapters/sql-serde/sql-serde.js +1 -2
  210. package/dist/serde/implementations/adapters/sql-serde/sql-serde.js.map +1 -1
  211. package/dist/serde/implementations/adapters/super-json-serde-adapter/super-json-serde-adapter.d.ts +2 -2
  212. package/dist/serde/implementations/adapters/super-json-serde-adapter/super-json-serde-adapter.js +2 -2
  213. package/dist/serde/implementations/adapters/super-json-serde-adapter/super-json-serde-adapter.js.map +1 -1
  214. package/dist/serde/implementations/derivables/serde.d.ts +14 -14
  215. package/dist/serde/implementations/derivables/serde.js +14 -15
  216. package/dist/serde/implementations/derivables/serde.js.map +1 -1
  217. package/dist/serde/implementations/test-utilities/flexible-serde-adapter.test-suite.d.ts +4 -4
  218. package/dist/serde/implementations/test-utilities/flexible-serde-adapter.test-suite.js +3 -3
  219. package/dist/serde/implementations/test-utilities/flexible-serde.test-suite.d.ts +5 -5
  220. package/dist/serde/implementations/test-utilities/flexible-serde.test-suite.js +4 -4
  221. package/dist/utilities/_module-exports.d.ts +2 -3
  222. package/dist/utilities/_module-exports.js +2 -3
  223. package/dist/utilities/_module-exports.js.map +1 -1
  224. package/dist/utilities/classes/_module.d.ts +4 -0
  225. package/dist/utilities/classes/_module.js +5 -0
  226. package/dist/utilities/classes/_module.js.map +1 -0
  227. package/dist/utilities/classes/key-prefixer/_module.d.ts +2 -0
  228. package/dist/utilities/classes/key-prefixer/_module.js +3 -0
  229. package/dist/utilities/classes/key-prefixer/_module.js.map +1 -0
  230. package/dist/utilities/classes/key-prefixer/key-prefixer.contract.d.ts +28 -0
  231. package/dist/utilities/classes/key-prefixer/key-prefixer.contract.js +5 -0
  232. package/dist/utilities/classes/key-prefixer/key-prefixer.contract.js.map +1 -0
  233. package/dist/utilities/classes/key-prefixer/key-prefixer.d.ts +73 -0
  234. package/dist/utilities/classes/key-prefixer/key-prefixer.js +135 -0
  235. package/dist/utilities/classes/key-prefixer/key-prefixer.js.map +1 -0
  236. package/dist/utilities/classes/kysely-table-name-transformer-plugin/_module.d.ts +1 -0
  237. package/dist/utilities/classes/kysely-table-name-transformer-plugin/_module.js +2 -0
  238. package/dist/utilities/classes/kysely-table-name-transformer-plugin/_module.js.map +1 -0
  239. package/dist/utilities/classes/kysely-table-name-transformer-plugin/kysely-table-name-transformer-plugin.js.map +1 -0
  240. package/dist/utilities/classes/pipeline/_module.d.ts +1 -0
  241. package/dist/utilities/classes/pipeline/_module.js +2 -0
  242. package/dist/utilities/classes/pipeline/_module.js.map +1 -0
  243. package/dist/utilities/{pipeline → classes/pipeline}/pipeline.d.ts +3 -2
  244. package/dist/utilities/{pipeline → classes/pipeline}/pipeline.js +3 -2
  245. package/dist/utilities/classes/pipeline/pipeline.js.map +1 -0
  246. package/dist/utilities/classes/time-span/_module.d.ts +1 -0
  247. package/dist/utilities/classes/time-span/_module.js +2 -0
  248. package/dist/utilities/classes/time-span/_module.js.map +1 -0
  249. package/dist/utilities/{time-span → classes/time-span}/time-span.d.ts +2 -1
  250. package/dist/utilities/{time-span → classes/time-span}/time-span.js +1 -0
  251. package/dist/utilities/classes/time-span/time-span.js.map +1 -0
  252. package/dist/utilities/{_constants.d.ts → constants.d.ts} +0 -3
  253. package/dist/utilities/constants.js +5 -0
  254. package/dist/utilities/constants.js.map +1 -0
  255. package/dist/utilities/contracts/_module.d.ts +3 -1
  256. package/dist/utilities/contracts/_module.js +3 -1
  257. package/dist/utilities/contracts/_module.js.map +1 -1
  258. package/dist/utilities/contracts/prunable.contract.d.ts +11 -0
  259. package/dist/utilities/contracts/prunable.contract.js +5 -0
  260. package/dist/utilities/contracts/prunable.contract.js.map +1 -0
  261. package/dist/utilities/contracts/sqlite-database.contract.d.ts +26 -0
  262. package/dist/utilities/contracts/sqlite-database.contract.js +5 -0
  263. package/dist/utilities/contracts/sqlite-database.contract.js.map +1 -0
  264. package/dist/utilities/functions.d.ts +34 -2
  265. package/dist/utilities/functions.js +72 -4
  266. package/dist/utilities/functions.js.map +1 -1
  267. package/dist/utilities/types.d.ts +49 -16
  268. package/package.json +14 -13
  269. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/_module.js +0 -2
  270. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/_module.js.map +0 -1
  271. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.d.ts +0 -61
  272. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js +0 -318
  273. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js.map +0 -1
  274. package/dist/utilities/_constants.js +0 -8
  275. package/dist/utilities/_constants.js.map +0 -1
  276. package/dist/utilities/kysely/_module.d.ts +0 -1
  277. package/dist/utilities/kysely/_module.js +0 -2
  278. package/dist/utilities/kysely/_module.js.map +0 -1
  279. package/dist/utilities/kysely/kysely-table-name-transformer-plugin.js.map +0 -1
  280. package/dist/utilities/pipeline/_module.d.ts +0 -1
  281. package/dist/utilities/pipeline/_module.js +0 -2
  282. package/dist/utilities/pipeline/_module.js.map +0 -1
  283. package/dist/utilities/pipeline/pipeline.js.map +0 -1
  284. package/dist/utilities/time-span/_module.d.ts +0 -1
  285. package/dist/utilities/time-span/_module.js +0 -2
  286. package/dist/utilities/time-span/_module.js.map +0 -1
  287. package/dist/utilities/time-span/time-span.js.map +0 -1
  288. /package/dist/utilities/{kysely → classes/kysely-table-name-transformer-plugin}/kysely-table-name-transformer-plugin.d.ts +0 -0
  289. /package/dist/utilities/{kysely → classes/kysely-table-name-transformer-plugin}/kysely-table-name-transformer-plugin.js +0 -0
@@ -1,31 +1,35 @@
1
1
  /**
2
2
  * @module Lock
3
3
  */
4
- import { TimeSpan, type Invokable, type OneOrMore } from "../../../../utilities/_module-exports.js";
4
+ import { TimeSpan, type Factoryable, type IKeyPrefixer, type Items } from "../../../../utilities/_module-exports.js";
5
+ import { type Invokable, type OneOrMore } from "../../../../utilities/_module-exports.js";
5
6
  import type { IDatabaseLockAdapter, LockEvents } from "../../../../lock/contracts/_module-exports.js";
6
7
  import { type ILock, type IGroupableLockProvider, type LockProviderCreateSettings, type ILockProvider, type ILockAdapter } from "../../../../lock/contracts/_module-exports.js";
7
- import type { BackoffPolicy, LazyPromise, RetryPolicy } from "../../../../async/_module-exports.js";
8
+ import { LazyPromise, type LazyPromiseSettingsBase } from "../../../../async/_module-exports.js";
8
9
  import type { EventClass, EventInstance, IGroupableEventBus, Unsubscribe } from "../../../../event-bus/contracts/_module-exports.js";
9
10
  import type { IFlexibleSerde } from "../../../../serde/contracts/_module-exports.js";
10
11
  /**
11
12
  *
12
- * IMPORT_PATH: ```"@daiso-tech/core/lock/implementations/derivables"```
13
+ * IMPORT_PATH: ```"@daiso-tech/core/lock"```
13
14
  * @group Derivables
14
15
  */
15
- export type LockProviderSettings = {
16
+ export type LockProviderSettingsBase = LazyPromiseSettingsBase & {
17
+ keyPrefixer: IKeyPrefixer;
18
+ serde: OneOrMore<IFlexibleSerde>;
16
19
  /**
17
20
  * You can pass your owner id generator function.
18
21
  */
19
22
  createOwnerId?: () => string;
20
- adapter: ILockAdapter | IDatabaseLockAdapter;
21
- serde: OneOrMore<IFlexibleSerde>;
22
23
  /**
23
24
  * @default
24
25
  * ```ts
26
+ * import { EventBus } from "@daiso-tech/core/event-bus";
27
+ * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/adapters";
28
+ * import { KeyPrefixer } from "@daiso-tech/core/utilities";
29
+ *
25
30
  * new EventBus({
26
- * adapter: new MemoryEventBusAdapter({
27
- * rootGroup: "@global"
28
- * })
31
+ * keyPrefixer: new KeyPrefixer("event-bus"),
32
+ * adapter: new MemoryEventBusAdapter()
29
33
  * })
30
34
  * ```
31
35
  */
@@ -55,32 +59,26 @@ export type LockProviderSettings = {
55
59
  */
56
60
  defaultBlockingTime?: TimeSpan;
57
61
  /**
58
- * The default refresh time used in the <i>{@link ILock}</i> <i>extend</i> method.
62
+ * The default refresh time used in the <i>{@link ILock}</i> <i>referesh</i> method.
59
63
  * ```ts
60
64
  * TimeSpan.fromMinutes(5);
61
65
  * ```
62
66
  */
63
67
  defaultRefreshTime?: TimeSpan;
64
- /**
65
- * The default retry attempt to use in the returned <i>LazyPromise</i>.
66
- * @default {null}
67
- */
68
- retryAttempts?: number | null;
69
- /**
70
- * The default backof policy to use in the returned <i>LazyPromise</i>.
71
- * @default {null}
72
- */
73
- backoffPolicy?: BackoffPolicy | null;
74
- /**
75
- * The default retry policy to use in the returned <i>LazyPromise</i>.
76
- * @default {null}
77
- */
78
- retryPolicy?: RetryPolicy | null;
79
- /**
80
- * The default timeout to use in the returned <i>LazyPromise</i>.
81
- * @default {null}
82
- */
83
- timeout?: TimeSpan | null;
68
+ };
69
+ /**
70
+ *
71
+ * IMPORT_PATH: ```"@daiso-tech/core/lock"```
72
+ * @group Derivables
73
+ */
74
+ export type LockAdapterFactoryable = Factoryable<string, ILockAdapter | IDatabaseLockAdapter>;
75
+ /**
76
+ *
77
+ * IMPORT_PATH: ```"@daiso-tech/core/lock"```
78
+ * @group Derivables
79
+ */
80
+ export type LockProviderSettings = LockProviderSettingsBase & {
81
+ adapter: LockAdapterFactoryable;
84
82
  };
85
83
  /**
86
84
  * <i>LockProvider</i> class can be derived from any <i>{@link ILockAdapter}</i> or <i>{@link IDatabaseLockAdapter}</i>.
@@ -89,407 +87,221 @@ export type LockProviderSettings = {
89
87
  * allowing them to be seamlessly transferred across different servers, processes, and databases.
90
88
  * This can be done directly using <i>{@link IFlexibleSerde}</i> or indirectly through components that rely on <i>{@link IFlexibleSerde}</i> internally.
91
89
  *
92
- * IMPORT_PATH: ```"@daiso-tech/core/lock/implementations/derivables"```
90
+ * IMPORT_PATH: ```"@daiso-tech/core/lock"```
93
91
  * @group Derivables
94
92
  */
95
93
  export declare class LockProvider implements IGroupableLockProvider {
96
- private static DEFAULT_TTL;
97
- private static DEFAULT_REFRESH_TIME;
98
- private readonly serde;
94
+ private static resolveLockAdapter;
95
+ private static resolveLockAdapterFactoryable;
96
+ private lockStore;
97
+ private readonly groupableEventBus;
98
+ private readonly eventBus;
99
+ private readonly adapterFactoryable;
100
+ private readonly adapterPromise;
101
+ private readonly retryAttempts;
102
+ private readonly backoffPolicy;
103
+ private readonly retryPolicy;
104
+ private readonly retryTimeout;
105
+ private readonly totalTimeout;
106
+ private readonly keyPrefixer;
99
107
  private readonly createOwnerId;
100
- private readonly adapter;
101
108
  private readonly defaultTtl;
102
109
  private readonly defaultBlockingInterval;
103
110
  private readonly defaultBlockingTime;
104
111
  private readonly defaultRefreshTime;
105
- private readonly retryAttempts;
106
- private readonly backoffPolicy;
107
- private readonly retryPolicy;
108
- private readonly timeout;
109
- private readonly eventBus;
110
- private readonly lockProviderEventBus;
111
- private stateRecord;
112
+ private readonly serde;
112
113
  /**
113
114
  * @example
114
115
  * ```ts
115
- * import type { IGroupableLockProvider } from "@daiso-tech/core/lock/contracts";
116
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
117
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
118
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
119
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
120
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
121
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
116
+ * import { SqliteLockAdapter } from "@daiso-tech/core/lock/adapters";
117
+ * import { LockProvider } from "@daiso-tech/core/lock";
118
+ * import { KeyPrefixer } from "@daiso-tech/core/utilities";
122
119
  *
123
- * const eventBus = new EventBus({
124
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
120
+ * const database = new Sqlite("local.db");
121
+ * const lockAdapter = new SqliteLockAdapter({
122
+ * database,
125
123
  * });
126
- * const serde = new Serde(SuperJsonSerdeAdapter);
127
- * const lockProvider: IGroupableLockProvider = new LockProvider({
128
- * serde,
129
- * adapter: new MemoryLockAdapter({
130
- * rootGroup: "@global"
131
- * }),
132
- * eventBus,
124
+ * // You need initialize the adapter once before using it.
125
+ * await lockAdapter.init();
126
+ *
127
+ * const lockProvider = new LockProvider({
128
+ * keyPrefixer: new KeyPrefixer("lock"),
129
+ * adapter: lockAdapter,
133
130
  * });
134
131
  * ```
135
- */
136
- constructor(settings: LockProviderSettings);
137
- private registerToSerde;
138
- /**
139
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
140
132
  *
141
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
142
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
133
+ * You can pass factory function that will create an adapter for every group.
143
134
  * @example
144
135
  * ```ts
145
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
146
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
147
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
148
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
149
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
150
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
151
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
152
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
136
+ * import { SqliteLockAdapter } from "@daiso-tech/core/lock/adapters";
137
+ * import type { ILockAdapter } from "@daiso-tech/core/lock/contracts";
138
+ * import { LockProvider } from "@daiso-tech/core/lock";
139
+ * import { KeyPrefixer, type ISqliteDatabase, type FactoryFn } from "@daiso-tech/core/utilities";
140
+ *
141
+ * async function lockAdapterFactory(database: ISqliteDatabase): FactoryFn<string, ILockAdapter> {
142
+ * return async (prefix) => {
143
+ * const lockAdapter = new SqliteLockAdapter({
144
+ * database,
145
+ * tableName: `lock_${prefix}`,
146
+ * });
147
+ * // You need initialize the adapter once before using it.
148
+ * await lockAdapter.init();
149
+ * return lockAdapter;
150
+ * }
151
+ * }
153
152
  *
154
- * const eventBus = new EventBus({
155
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
153
+ * const database = new Sqlite("local.db");
154
+ * const lockProvider = new LockProvider({
155
+ * keyPrefixer: new KeyPrefixer("lock"),
156
+ * adapter: lockAdapterFactory(database),
156
157
  * });
157
- * const serde = new Serde(SuperJsonSerdeAdapter);
158
- * const lockProvider: IGroupableLockProvider = new LockProvider({
159
- * serde,
160
- * adapter: new MemoryLockAdapter({
161
- * rootGroup: "@global"
162
- * }),
163
- * eventBus,
164
- * });
165
- *
166
- * const listener: Invokable<LockEvents> = event => {
167
- * console.log(event);
168
- * }
169
- * await lockProvider.addListener(KeyAcquiredLockEvent, listener);
170
- * await lockProvider.removeListener(KeyAcquiredLockEvent, listener);
171
- * await lockProvider.create("a").acquire();
172
158
  * ```
173
- */
174
- addListener<TEventClass extends EventClass<LockEvents>>(event: TEventClass, listener: Invokable<EventInstance<TEventClass>>): LazyPromise<void>;
175
- /**
176
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
177
159
  *
178
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
179
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
160
+ * You can also pass factory object that implements <i>{@link IFactoryObject}</i> contract. This useful for depedency injection libraries.
180
161
  * @example
181
162
  * ```ts
182
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
183
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
184
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
185
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
186
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
187
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
188
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
189
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
163
+ * import { SqliteLockAdapter } from "@daiso-tech/core/lock/adapters";
164
+ * import type { ILockAdapter } from "@daiso-tech/core/lock/contracts";
165
+ * import { LockProvider } from "@daiso-tech/core/lock";
166
+ * import { KeyPrefixer, type ISqliteDatabase, type IFactoryObject, type Promiseable } from "@daiso-tech/core/utilities";
167
+ *
168
+ * class LockAdapterFactory implements IFactoryObject<string, ILockAdapter> {
169
+ * constructor(private readonly database: ISqliteDatabase) {}
170
+ *
171
+ * async use(prefix: string): Promiseable<ILockAdapter> {
172
+ * const lockAdapter = new SqliteLockAdapter({
173
+ * database,
174
+ * tableName: `lock_${prefix}`,
175
+ * });
176
+ * // You need initialize the adapter once before using it.
177
+ * await lockAdapter.init();
178
+ * return lockAdapter;
179
+ * }
180
+ * }
190
181
  *
191
- * const eventBus = new EventBus({
192
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
193
- * });
194
- * const serde = new Serde(SuperJsonSerdeAdapter);
195
- * const lockProvider: IGroupableLockProvider = new LockProvider({
196
- * serde,
197
- * adapter: new MemoryLockAdapter({
198
- * rootGroup: "@global"
199
- * }),
200
- * eventBus,
182
+ * const database = new Sqlite("local.db");
183
+ * const lockProvider = new LockProvider({
184
+ * keyPrefixer: new KeyPrefixer("lock"),
185
+ * adapter: new LockAdapterFactory(database),
201
186
  * });
202
- *
203
- * const listener: Invokable<LockEvents> = event => {
204
- * console.log(event);
205
- * }
206
- * await lockProvider.addListenerMany([KeyAcquiredLockEvent], listener);
207
- * await lockProvider.removeListenerMany([KeyAcquiredLockEvent], listener);
208
- * await lockProvider.create("a").acquire();
209
187
  * ```
210
188
  */
211
- addListenerMany<TEventClass extends EventClass<LockEvents>>(events: TEventClass[], listener: Invokable<EventInstance<TEventClass>>): LazyPromise<void>;
189
+ constructor(settings: LockProviderSettings);
212
190
  /**
213
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
214
- *
215
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
216
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
217
- * @example
218
- * ```ts
219
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
220
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
221
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
222
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
223
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
224
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
225
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
226
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
227
- *
228
- * const eventBus = new EventBus({
229
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
230
- * });
231
- * const serde = new Serde(SuperJsonSerdeAdapter);
232
- * const lockProvider: IGroupableLockProvider = new LockProvider({
233
- * serde,
234
- * adapter: new MemoryLockAdapter({
235
- * rootGroup: "@global"
236
- * }),
237
- * eventBus,
238
- * });
239
- *
240
- * const listener: Invokable<LockEvents> = event => {
241
- * console.log(event);
242
- * }
243
- * await lockProvider.addListener(KeyAcquiredLockEvent, listener);
244
- * await lockProvider.removeListener(KeyAcquiredLockEvent, listener);
245
- * await lockProvider.create("a").acquire();
246
- * ```
191
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
192
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
193
+ */
194
+ addListener<TEventClass extends EventClass<LockEvents>>(event: TEventClass, listener: Invokable<EventInstance<TEventClass>>): LazyPromise<void>;
195
+ /**
196
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
197
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
198
+ */
199
+ addListenerMany<TEventClassArr extends EventClass<LockEvents>[]>(events: [...TEventClassArr], listener: Invokable<EventInstance<Items<TEventClassArr>>>): LazyPromise<void>;
200
+ /**
201
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
202
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
247
203
  */
248
204
  removeListener<TEventClass extends EventClass<LockEvents>>(event: TEventClass, listener: Invokable<EventInstance<TEventClass>>): LazyPromise<void>;
249
205
  /**
250
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
251
- *
252
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
253
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
254
- * @example
255
- * ```ts
256
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
257
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
258
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
259
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
260
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
261
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
262
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
263
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
264
- *
265
- * const eventBus = new EventBus({
266
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
267
- * });
268
- * const serde = new Serde(SuperJsonSerdeAdapter);
269
- * const lockProvider: IGroupableLockProvider = new LockProvider({
270
- * serde,
271
- * adapter: new MemoryLockAdapter({
272
- * rootGroup: "@global"
273
- * }),
274
- * eventBus,
275
- * });
276
- *
277
- * const listener: Invokable<LockEvents> = event => {
278
- * console.log(event);
279
- * }
280
- * await lockProvider.addListenerMany(KeyAcquiredLockEvent, listener);
281
- * await lockProvider.removeListenerMany([KeyAcquiredLockEvent], listener);
282
- * await lockProvider.create("a").acquire();
283
- * ```
206
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
207
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
284
208
  */
285
- removeListenerMany<TEventClass extends EventClass<LockEvents>>(events: TEventClass[], listener: Invokable<EventInstance<TEventClass>>): LazyPromise<void>;
209
+ removeListenerMany<TEventClassArr extends EventClass<LockEvents>[]>(events: [...TEventClassArr], listener: Invokable<EventInstance<Items<TEventClassArr>>>): LazyPromise<void>;
286
210
  /**
287
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
288
- *
289
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
290
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
291
- * @example
292
- * ```ts
293
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
294
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
295
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
296
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
297
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
298
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
299
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
300
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
301
- *
302
- * const eventBus = new EventBus({
303
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
304
- * });
305
- * const serde = new Serde(SuperJsonSerdeAdapter);
306
- * const lockProvider: IGroupableLockProvider = new LockProvider({
307
- * serde,
308
- * adapter: new MemoryLockAdapter({
309
- * rootGroup: "@global"
310
- * }),
311
- * eventBus,
312
- * });
313
- *
314
- * const listener: Invokable<LockEvents> = event => {
315
- * console.log(event);
316
- * }
317
- * await lockProvider.listenOnce(KeyAcquiredLockEvent, listener);
318
- * await lockProvider.create("a").acquire();
319
- * ```
211
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
212
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
320
213
  */
321
214
  listenOnce<TEventClass extends EventClass<LockEvents>>(event: TEventClass, listener: Invokable<EventInstance<TEventClass>>): LazyPromise<void>;
215
+ /**
216
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
217
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
218
+ */
322
219
  asPromise<TEventClass extends EventClass<LockEvents>>(event: TEventClass): LazyPromise<EventInstance<TEventClass>>;
323
220
  /**
324
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
325
- *
326
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
327
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
328
- * @example
329
- * ```ts
330
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
331
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
332
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
333
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
334
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
335
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
336
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
337
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
338
- *
339
- * const eventBus = new EventBus({
340
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
341
- * });
342
- * const serde = new Serde(SuperJsonSerdeAdapter);
343
- * const lockProvider: IGroupableLockProvider = new LockProvider({
344
- * serde,
345
- * adapter: new MemoryLockAdapter({
346
- * rootGroup: "@global"
347
- * }),
348
- * eventBus,
349
- * });
350
- *
351
- * const listener: Invokable<LockEvents> = event => {
352
- * console.log(event);
353
- * }
354
- * const unsubscribe = await lockProvider.subscribe(KeyAcquiredLockEvent, listener);
355
- * await lockProvider.create("a").acquire();
356
- * await unsubscribe();
357
- * ```
221
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
222
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
358
223
  */
359
224
  subscribe<TEventClass extends EventClass<LockEvents>>(event: TEventClass, listener: Invokable<EventInstance<TEventClass>>): LazyPromise<Unsubscribe>;
360
225
  /**
361
- * You can listen to different events of all locks created by <i>LockProvider</i> class instance.
362
- *
363
- * Refer to <i>{@link LockEvents}</i>, to se all events dispatched by <i>LockProvider</i> class instance.
364
- * Refer to <i>{@link IEventListenable}</i> for details on how the method works.
365
- * @example
366
- * ```ts
367
- * import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
368
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
369
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
370
- * import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
371
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
372
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
373
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
374
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
375
- *
376
- * const eventBus = new EventBus({
377
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
378
- * });
379
- * const serde = new Serde(SuperJsonSerdeAdapter);
380
- * const lockProvider: IGroupableLockProvider = new LockProvider({
381
- * serde,
382
- * adapter: new MemoryLockAdapter({
383
- * rootGroup: "@global"
384
- * }),
385
- * eventBus,
386
- * });
387
- *
388
- * const listener: Invokable<LockEvents> = event => {
389
- * console.log(event);
390
- * }
391
- * const unsubscribe = await lockProvider.subscribeMany([KeyAcquiredLockEvent], listener);
392
- * await lockProvider.create("a").acquire();
393
- * await unsubscribe();
394
- * ```
226
+ * You can listen to the following <i>{@link LockEvents}</i> of all <i>{@link ILock}</i> instances created by the <i>{@link ILockProvider}</i>.
227
+ * To understand how this method works, refer to <i>{@link IEventListenable}</i>.
395
228
  */
396
- subscribeMany<TEventClass extends EventClass<LockEvents>>(events: TEventClass[], listener: Invokable<EventInstance<TEventClass>>): LazyPromise<Unsubscribe>;
229
+ subscribeMany<TEventClassArr extends EventClass<LockEvents>[]>(events: [...TEventClassArr], listener: Invokable<EventInstance<Items<TEventClassArr>>>): LazyPromise<Unsubscribe>;
230
+ private createLazyPromise;
397
231
  /**
232
+ * @example
398
233
  * ```ts
399
- * import type { IGroupableLockProvider } from "@daiso-tech/core/lock/contracts";
400
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
401
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
402
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
403
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
404
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
405
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
406
- * import { TimeSpan } from "@daiso-tech/core/utilities";
407
- *
408
- * const eventBus = new EventBus({
409
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
410
- * });
411
- * const serde = new Serde(SuperJsonSerdeAdapter);
412
- * const lockProvider: IGroupableLockProvider = new LockProvider({
413
- * serde,
414
- * adapter: new MemoryLockAdapter({
415
- * rootGroup: "@global"
416
- * }),
417
- * eventBus,
234
+ * import { LockProvider } from "@daiso-tech/core/lock";
235
+ * import { MemoryLockAdapter } from "@daiso-tech/core/lock/adapters";
236
+ * import { KeyPrefixer, TimeSpan } from "@daiso-tech/core/utilities";
237
+ * import { Serde } from "@daiso-tech/core/adapter";
238
+ * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/adapter/adapters";
239
+ *
240
+ * const lockProvider = new LockProvider({
241
+ * adapter: new MemoryLockAdapter(),
242
+ * keyPrefixer: new KeyPrefixer("lock"),
243
+ * serde: new Serde(new SuperJsonSerdeAdapter())
418
244
  * });
419
245
  *
420
- * // You can use the lock
421
- * const lockA = lockProvider.create("a");
422
- *
423
- * // You can provide ttl
424
- * const lockB = lockProvider.create("b", {
425
- * ttl: TimeSpan.fromMinutes(2),
426
- * });
427
- *
428
- * // You can provide a custom owner. By default the owner will be unique random value.
429
- * const lockC = lockProvider.create("b", {
430
- * owner: "user-1"
431
- * });
246
+ * const lock = lockProvider.create("a");
432
247
  * ```
433
248
  */
434
249
  create(key: OneOrMore<string>, settings?: LockProviderCreateSettings): ILock;
435
250
  /**
436
251
  * @example
437
252
  * ```ts
438
- * import type { IGroupableLockProvider } from "@daiso-tech/core/lock/contracts";
439
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
440
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
441
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
442
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
443
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
444
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
445
- *
446
- * const eventBus = new EventBus({
447
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
448
- * });
449
- * const serde = new Serde(SuperJsonSerdeAdapter);
450
- * const lockProvider: IGroupableLockProvider = new LockProvider({
451
- * serde,
452
- * adapter: new MemoryLockAdapter({
453
- * rootGroup: "@global"
454
- * }),
455
- * eventBus,
253
+ * import { LockProvider } from "@daiso-tech/core/lock";
254
+ * import { MemoryLockAdapter } from "@daiso-tech/core/lock/adapters";
255
+ * import { KeyPrefixer } from "@daiso-tech/core/utilities";
256
+ * import { Serde } from "@daiso-tech/core/adapter";
257
+ * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/adapter/adapters";
258
+ *
259
+ * const lockProvider = new LockProvider({
260
+ * adapter: new MemoryLockAdapter(),
261
+ * keyPrefixer: new KeyPrefixer("lock"),
262
+ * serde: new Serde(new SuperJsonSerdeAdapter())
456
263
  * });
457
264
  *
458
- * // Will print "@global"
265
+ * // Will log null because the lockProvider is not in a group
459
266
  * console.log(lockProvider.getGroup());
267
+ *
268
+ * const groupedLockProvider = lockProvider.withGroup("group-a");
269
+ *
270
+ * // Will log "group-a" because the groupedLockProvider is in a group
271
+ * console.log(groupedLockProvider.getGroup());
460
272
  * ```
461
273
  */
462
- getGroup(): string;
274
+ getGroup(): string | null;
463
275
  /**
464
276
  * @example
465
277
  * ```ts
466
- * import type { IGroupableLockProvider, ILockProvider } from "@daiso-tech/core/lock/contracts";
467
- * import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
468
- * import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
469
- * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
470
- * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
471
- * import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
472
- * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
473
- *
474
- * const eventBus = new EventBus({
475
- * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
476
- * });
477
- * const serde = new Serde(SuperJsonSerdeAdapter);
478
- * const lockProvider: IGroupableLockProvider = new LockProvider({
479
- * serde,
480
- * adapter: new MemoryLockAdapter({
481
- * rootGroup: "@global"
482
- * }),
483
- * eventBus,
278
+ * import { LockProvider } from "@daiso-tech/core/lock";
279
+ * import { MemoryLockAdapter } from "@daiso-tech/core/lock/adapters";
280
+ * import { KeyPrefixer } from "@daiso-tech/core/utilities";
281
+ * import { Serde } from "@daiso-tech/core/adapter";
282
+ * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/adapter/adapters";
283
+ *
284
+ * const lockProvider = new LockProvider({
285
+ * adapter: new MemoryLockAdapter(),
286
+ * keyPrefixer: new KeyPrefixer("lock"),
287
+ * serde: new Serde(new SuperJsonSerdeAdapter())
484
288
  * });
485
289
  *
486
- * // Will print "@global"
487
- * console.log(lockProvider.getGroup());
488
- *
489
- * const groupedLockProvider: ILockProvider = lockProvider.withGroup("company-1");
490
- *
491
- * // Will print "@global/company-1"
492
- * console.log(groupedLockProvider.getGroup());
290
+ * const groupedLockProvider = lockProvider.withGroup("group-a");
291
+ *
292
+ * // Will log true because they are in different groups.
293
+ * console.log(
294
+ * await lockProvider
295
+ * .create("a")
296
+ * .acquire()
297
+ * );
298
+ *
299
+ * // Will log true because the lockProviders are in different groups.
300
+ * console.log(
301
+ * await groupedLockProvider
302
+ * .create("a")
303
+ * .acquire()
304
+ * );
493
305
  * ```
494
306
  */
495
307
  withGroup(group: OneOrMore<string>): ILockProvider;