@daiso-tech/core 0.21.0 → 0.22.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 (413) hide show
  1. package/dist/cjs/_module.js +2 -0
  2. package/dist/cjs/_module.js.map +1 -1
  3. package/dist/cjs/async/utilities/lazy-promise/lazy-promise.js +16 -9
  4. package/dist/cjs/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
  5. package/dist/cjs/cache/contracts/cache.events.js +13 -139
  6. package/dist/cjs/cache/contracts/cache.events.js.map +1 -1
  7. package/dist/cjs/cache/implementations/_shared/cache-adapter.test-suite.js +5 -24
  8. package/dist/cjs/cache/implementations/_shared/cache-adapter.test-suite.js.map +1 -1
  9. package/dist/cjs/cache/implementations/_shared/cache.test-suite.js +729 -21
  10. package/dist/cjs/cache/implementations/_shared/cache.test-suite.js.map +1 -1
  11. package/dist/cjs/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js +1 -21
  12. package/dist/cjs/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js.map +1 -1
  13. package/dist/cjs/cache/implementations/adapters/libsql-cache-adapter/_module.js +0 -1
  14. package/dist/cjs/cache/implementations/adapters/libsql-cache-adapter/_module.js.map +1 -1
  15. package/dist/cjs/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js +0 -7
  16. package/dist/cjs/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js.map +1 -1
  17. package/dist/cjs/cache/implementations/adapters/memory-cache-adapter/_module.js +0 -1
  18. package/dist/cjs/cache/implementations/adapters/memory-cache-adapter/_module.js.map +1 -1
  19. package/dist/cjs/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +3 -11
  20. package/dist/cjs/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
  21. package/dist/cjs/cache/implementations/adapters/mongodb-cache-adapter/_module.js +0 -1
  22. package/dist/cjs/cache/implementations/adapters/mongodb-cache-adapter/_module.js.map +1 -1
  23. package/dist/cjs/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +6 -28
  24. package/dist/cjs/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
  25. package/dist/cjs/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js +0 -3
  26. package/dist/cjs/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js.map +1 -1
  27. package/dist/cjs/cache/implementations/adapters/redis-cache-adapter/_module.js +0 -1
  28. package/dist/cjs/cache/implementations/adapters/redis-cache-adapter/_module.js.map +1 -1
  29. package/dist/cjs/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +5 -13
  30. package/dist/cjs/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
  31. package/dist/cjs/cache/implementations/adapters/sqlite-cache-adapter/_module.js +0 -1
  32. package/dist/cjs/cache/implementations/adapters/sqlite-cache-adapter/_module.js.map +1 -1
  33. package/dist/cjs/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js +0 -7
  34. package/dist/cjs/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js.map +1 -1
  35. package/dist/cjs/cache/implementations/derivables/cache/_module.js +0 -1
  36. package/dist/cjs/cache/implementations/derivables/cache/_module.js.map +1 -1
  37. package/dist/cjs/cache/implementations/derivables/cache/cache.js +215 -103
  38. package/dist/cjs/cache/implementations/derivables/cache/cache.js.map +1 -1
  39. package/dist/cjs/cache/implementations/derivables/cache-factory/_module.js +0 -1
  40. package/dist/cjs/cache/implementations/derivables/cache-factory/_module.js.map +1 -1
  41. package/dist/cjs/cache/implementations/derivables/cache-factory/cache-factory.js +0 -4
  42. package/dist/cjs/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  43. package/dist/cjs/event-bus/contracts/_shared.js +3 -2
  44. package/dist/cjs/event-bus/contracts/_shared.js.map +1 -1
  45. package/dist/cjs/event-bus/implementations/_shared/event-bus-adapter.test-suite.js +4 -15
  46. package/dist/cjs/event-bus/implementations/_shared/event-bus-adapter.test-suite.js.map +1 -1
  47. package/dist/cjs/event-bus/implementations/_shared/event-bus.test-suite.js +6 -27
  48. package/dist/cjs/event-bus/implementations/_shared/event-bus.test-suite.js.map +1 -1
  49. package/dist/cjs/event-bus/implementations/adapters/memory-event-bus-adapter/_module.js +0 -1
  50. package/dist/cjs/event-bus/implementations/adapters/memory-event-bus-adapter/_module.js.map +1 -1
  51. package/dist/cjs/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +0 -4
  52. package/dist/cjs/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js.map +1 -1
  53. package/dist/cjs/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/_module.js +0 -1
  54. package/dist/cjs/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/_module.js.map +1 -1
  55. package/dist/cjs/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +0 -4
  56. package/dist/cjs/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js.map +1 -1
  57. package/dist/cjs/event-bus/implementations/derivables/event-bus/_module.js +0 -1
  58. package/dist/cjs/event-bus/implementations/derivables/event-bus/_module.js.map +1 -1
  59. package/dist/cjs/event-bus/implementations/derivables/event-bus/event-bus.js +0 -4
  60. package/dist/cjs/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
  61. package/dist/cjs/event-bus/implementations/derivables/event-bus-factory/_module.js +0 -1
  62. package/dist/cjs/event-bus/implementations/derivables/event-bus-factory/_module.js.map +1 -1
  63. package/dist/cjs/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +0 -4
  64. package/dist/cjs/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
  65. package/dist/cjs/lock/contracts/_module.js +24 -0
  66. package/dist/cjs/lock/contracts/_module.js.map +1 -0
  67. package/dist/cjs/lock/contracts/database-lock-adapter.contract.js +3 -0
  68. package/dist/cjs/lock/contracts/database-lock-adapter.contract.js.map +1 -0
  69. package/dist/cjs/lock/contracts/lock-adapter.contract.js +3 -0
  70. package/dist/cjs/lock/contracts/lock-adapter.contract.js.map +1 -0
  71. package/dist/cjs/lock/contracts/lock-provider-factory.contract.js +3 -0
  72. package/dist/cjs/lock/contracts/lock-provider-factory.contract.js.map +1 -0
  73. package/dist/cjs/lock/contracts/lock-provider.contract.js +3 -0
  74. package/dist/cjs/lock/contracts/lock-provider.contract.js.map +1 -0
  75. package/dist/cjs/lock/contracts/lock.contract.js +3 -0
  76. package/dist/cjs/lock/contracts/lock.contract.js.map +1 -0
  77. package/dist/cjs/lock/contracts/lock.errors.js +131 -0
  78. package/dist/cjs/lock/contracts/lock.errors.js.map +1 -0
  79. package/dist/cjs/lock/contracts/lock.events.js +44 -0
  80. package/dist/cjs/lock/contracts/lock.events.js.map +1 -0
  81. package/dist/cjs/lock/implementations/_module.js +20 -0
  82. package/dist/cjs/lock/implementations/_module.js.map +1 -0
  83. package/dist/cjs/lock/implementations/_shared/_module.js +20 -0
  84. package/dist/cjs/lock/implementations/_shared/_module.js.map +1 -0
  85. package/dist/cjs/lock/implementations/_shared/database-lock-adapter.test-suite.js +285 -0
  86. package/dist/cjs/lock/implementations/_shared/database-lock-adapter.test-suite.js.map +1 -0
  87. package/dist/cjs/lock/implementations/_shared/lock-adapter.test-suite.js +238 -0
  88. package/dist/cjs/lock/implementations/_shared/lock-adapter.test-suite.js.map +1 -0
  89. package/dist/cjs/lock/implementations/_shared/lock-provider.test-suite.js +1841 -0
  90. package/dist/cjs/lock/implementations/_shared/lock-provider.test-suite.js.map +1 -0
  91. package/dist/cjs/lock/implementations/adapters/_module.js +22 -0
  92. package/dist/cjs/lock/implementations/adapters/_module.js.map +1 -0
  93. package/dist/cjs/lock/implementations/adapters/kysely-lock-adapter/_module.js +18 -0
  94. package/dist/cjs/lock/implementations/adapters/kysely-lock-adapter/_module.js.map +1 -0
  95. package/dist/cjs/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +126 -0
  96. package/dist/cjs/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -0
  97. package/dist/cjs/lock/implementations/adapters/libsql-lock-adapter/_module.js +18 -0
  98. package/dist/cjs/lock/implementations/adapters/libsql-lock-adapter/_module.js.map +1 -0
  99. package/dist/cjs/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js +61 -0
  100. package/dist/cjs/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js.map +1 -0
  101. package/dist/cjs/lock/implementations/adapters/memory-lock-adapter/_module.js +18 -0
  102. package/dist/cjs/lock/implementations/adapters/memory-lock-adapter/_module.js.map +1 -0
  103. package/dist/cjs/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js +107 -0
  104. package/dist/cjs/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js.map +1 -0
  105. package/dist/cjs/lock/implementations/adapters/mongodb-lock-adapter/_module.js +18 -0
  106. package/dist/cjs/lock/implementations/adapters/mongodb-lock-adapter/_module.js.map +1 -0
  107. package/dist/cjs/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +148 -0
  108. package/dist/cjs/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -0
  109. package/dist/cjs/lock/implementations/adapters/redis-lock-adapter/_module.js +18 -0
  110. package/dist/cjs/lock/implementations/adapters/redis-lock-adapter/_module.js.map +1 -0
  111. package/dist/cjs/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +131 -0
  112. package/dist/cjs/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js.map +1 -0
  113. package/dist/cjs/lock/implementations/adapters/sqlite-lock-adapter/_module.js +18 -0
  114. package/dist/cjs/lock/implementations/adapters/sqlite-lock-adapter/_module.js.map +1 -0
  115. package/dist/cjs/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js +60 -0
  116. package/dist/cjs/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js.map +1 -0
  117. package/dist/cjs/lock/implementations/derivables/_module.js +19 -0
  118. package/dist/cjs/lock/implementations/derivables/_module.js.map +1 -0
  119. package/dist/cjs/lock/implementations/derivables/lock-provider/_module.js +18 -0
  120. package/dist/cjs/lock/implementations/derivables/lock-provider/_module.js.map +1 -0
  121. package/dist/cjs/lock/implementations/derivables/lock-provider/database-lock-adapter.js +80 -0
  122. package/dist/cjs/lock/implementations/derivables/lock-provider/database-lock-adapter.js.map +1 -0
  123. package/dist/cjs/lock/implementations/derivables/lock-provider/lock-provider.js +162 -0
  124. package/dist/cjs/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -0
  125. package/dist/cjs/lock/implementations/derivables/lock-provider/lock.js +306 -0
  126. package/dist/cjs/lock/implementations/derivables/lock-provider/lock.js.map +1 -0
  127. package/dist/cjs/lock/implementations/derivables/lock-provider-factory/_module.js +18 -0
  128. package/dist/cjs/lock/implementations/derivables/lock-provider-factory/_module.js.map +1 -0
  129. package/dist/cjs/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +78 -0
  130. package/dist/cjs/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -0
  131. package/dist/cjs/serde/implementations/no-op-serde/no-op-serde.js +3 -0
  132. package/dist/cjs/serde/implementations/no-op-serde/no-op-serde.js.map +1 -1
  133. package/dist/cjs/serde/implementations/super-json-serde/super-json-serde.js +15 -0
  134. package/dist/cjs/serde/implementations/super-json-serde/super-json-serde.js.map +1 -1
  135. package/dist/cjs/utilities/contracts/_module.js +1 -0
  136. package/dist/cjs/utilities/contracts/_module.js.map +1 -1
  137. package/dist/cjs/utilities/contracts/serde-registrable.contract.js +3 -0
  138. package/dist/cjs/utilities/contracts/serde-registrable.contract.js.map +1 -0
  139. package/dist/cjs/utilities/functions.js +4 -0
  140. package/dist/cjs/utilities/functions.js.map +1 -1
  141. package/dist/esm/_module.js +2 -0
  142. package/dist/esm/_module.js.map +1 -1
  143. package/dist/esm/async/utilities/lazy-promise/lazy-promise.js +16 -9
  144. package/dist/esm/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
  145. package/dist/esm/cache/contracts/cache.events.js +11 -138
  146. package/dist/esm/cache/contracts/cache.events.js.map +1 -1
  147. package/dist/esm/cache/implementations/_shared/cache-adapter.test-suite.js +5 -24
  148. package/dist/esm/cache/implementations/_shared/cache-adapter.test-suite.js.map +1 -1
  149. package/dist/esm/cache/implementations/_shared/cache.test-suite.js +731 -23
  150. package/dist/esm/cache/implementations/_shared/cache.test-suite.js.map +1 -1
  151. package/dist/esm/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js +1 -21
  152. package/dist/esm/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js.map +1 -1
  153. package/dist/esm/cache/implementations/adapters/libsql-cache-adapter/_module.js +0 -1
  154. package/dist/esm/cache/implementations/adapters/libsql-cache-adapter/_module.js.map +1 -1
  155. package/dist/esm/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js +0 -7
  156. package/dist/esm/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js.map +1 -1
  157. package/dist/esm/cache/implementations/adapters/memory-cache-adapter/_module.js +0 -1
  158. package/dist/esm/cache/implementations/adapters/memory-cache-adapter/_module.js.map +1 -1
  159. package/dist/esm/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +3 -11
  160. package/dist/esm/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
  161. package/dist/esm/cache/implementations/adapters/mongodb-cache-adapter/_module.js +0 -1
  162. package/dist/esm/cache/implementations/adapters/mongodb-cache-adapter/_module.js.map +1 -1
  163. package/dist/esm/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +6 -28
  164. package/dist/esm/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
  165. package/dist/esm/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js +0 -3
  166. package/dist/esm/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js.map +1 -1
  167. package/dist/esm/cache/implementations/adapters/redis-cache-adapter/_module.js +0 -1
  168. package/dist/esm/cache/implementations/adapters/redis-cache-adapter/_module.js.map +1 -1
  169. package/dist/esm/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +5 -13
  170. package/dist/esm/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
  171. package/dist/esm/cache/implementations/adapters/sqlite-cache-adapter/_module.js +0 -1
  172. package/dist/esm/cache/implementations/adapters/sqlite-cache-adapter/_module.js.map +1 -1
  173. package/dist/esm/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js +0 -7
  174. package/dist/esm/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js.map +1 -1
  175. package/dist/esm/cache/implementations/derivables/cache/_module.js +0 -1
  176. package/dist/esm/cache/implementations/derivables/cache/_module.js.map +1 -1
  177. package/dist/esm/cache/implementations/derivables/cache/cache.js +216 -104
  178. package/dist/esm/cache/implementations/derivables/cache/cache.js.map +1 -1
  179. package/dist/esm/cache/implementations/derivables/cache-factory/_module.js +0 -1
  180. package/dist/esm/cache/implementations/derivables/cache-factory/_module.js.map +1 -1
  181. package/dist/esm/cache/implementations/derivables/cache-factory/cache-factory.js +0 -4
  182. package/dist/esm/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  183. package/dist/esm/event-bus/contracts/_shared.js +3 -2
  184. package/dist/esm/event-bus/contracts/_shared.js.map +1 -1
  185. package/dist/esm/event-bus/implementations/_shared/event-bus-adapter.test-suite.js +4 -15
  186. package/dist/esm/event-bus/implementations/_shared/event-bus-adapter.test-suite.js.map +1 -1
  187. package/dist/esm/event-bus/implementations/_shared/event-bus.test-suite.js +7 -28
  188. package/dist/esm/event-bus/implementations/_shared/event-bus.test-suite.js.map +1 -1
  189. package/dist/esm/event-bus/implementations/adapters/memory-event-bus-adapter/_module.js +0 -1
  190. package/dist/esm/event-bus/implementations/adapters/memory-event-bus-adapter/_module.js.map +1 -1
  191. package/dist/esm/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +0 -4
  192. package/dist/esm/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js.map +1 -1
  193. package/dist/esm/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/_module.js +0 -1
  194. package/dist/esm/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/_module.js.map +1 -1
  195. package/dist/esm/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +0 -4
  196. package/dist/esm/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js.map +1 -1
  197. package/dist/esm/event-bus/implementations/derivables/event-bus/_module.js +0 -1
  198. package/dist/esm/event-bus/implementations/derivables/event-bus/_module.js.map +1 -1
  199. package/dist/esm/event-bus/implementations/derivables/event-bus/event-bus.js +0 -4
  200. package/dist/esm/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
  201. package/dist/esm/event-bus/implementations/derivables/event-bus-factory/_module.js +0 -1
  202. package/dist/esm/event-bus/implementations/derivables/event-bus-factory/_module.js.map +1 -1
  203. package/dist/esm/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +0 -4
  204. package/dist/esm/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
  205. package/dist/esm/lock/contracts/_module.js +8 -0
  206. package/dist/esm/lock/contracts/_module.js.map +1 -0
  207. package/dist/esm/lock/contracts/database-lock-adapter.contract.js +1 -0
  208. package/dist/esm/lock/contracts/database-lock-adapter.contract.js.map +1 -0
  209. package/dist/esm/lock/contracts/lock-adapter.contract.js +1 -0
  210. package/dist/esm/lock/contracts/lock-adapter.contract.js.map +1 -0
  211. package/dist/esm/lock/contracts/lock-provider-factory.contract.js +1 -0
  212. package/dist/esm/lock/contracts/lock-provider-factory.contract.js.map +1 -0
  213. package/dist/esm/lock/contracts/lock-provider.contract.js +1 -0
  214. package/dist/esm/lock/contracts/lock-provider.contract.js.map +1 -0
  215. package/dist/esm/lock/contracts/lock.contract.js +1 -0
  216. package/dist/esm/lock/contracts/lock.contract.js.map +1 -0
  217. package/dist/esm/lock/contracts/lock.errors.js +120 -0
  218. package/dist/esm/lock/contracts/lock.errors.js.map +1 -0
  219. package/dist/esm/lock/contracts/lock.events.js +32 -0
  220. package/dist/esm/lock/contracts/lock.events.js.map +1 -0
  221. package/dist/esm/lock/implementations/_module.js +4 -0
  222. package/dist/esm/lock/implementations/_module.js.map +1 -0
  223. package/dist/esm/lock/implementations/_shared/_module.js +4 -0
  224. package/dist/esm/lock/implementations/_shared/_module.js.map +1 -0
  225. package/dist/esm/lock/implementations/_shared/database-lock-adapter.test-suite.js +282 -0
  226. package/dist/esm/lock/implementations/_shared/database-lock-adapter.test-suite.js.map +1 -0
  227. package/dist/esm/lock/implementations/_shared/lock-adapter.test-suite.js +235 -0
  228. package/dist/esm/lock/implementations/_shared/lock-adapter.test-suite.js.map +1 -0
  229. package/dist/esm/lock/implementations/_shared/lock-provider.test-suite.js +1838 -0
  230. package/dist/esm/lock/implementations/_shared/lock-provider.test-suite.js.map +1 -0
  231. package/dist/esm/lock/implementations/adapters/_module.js +6 -0
  232. package/dist/esm/lock/implementations/adapters/_module.js.map +1 -0
  233. package/dist/esm/lock/implementations/adapters/kysely-lock-adapter/_module.js +2 -0
  234. package/dist/esm/lock/implementations/adapters/kysely-lock-adapter/_module.js.map +1 -0
  235. package/dist/esm/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +122 -0
  236. package/dist/esm/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -0
  237. package/dist/esm/lock/implementations/adapters/libsql-lock-adapter/_module.js +2 -0
  238. package/dist/esm/lock/implementations/adapters/libsql-lock-adapter/_module.js.map +1 -0
  239. package/dist/esm/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js +57 -0
  240. package/dist/esm/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js.map +1 -0
  241. package/dist/esm/lock/implementations/adapters/memory-lock-adapter/_module.js +2 -0
  242. package/dist/esm/lock/implementations/adapters/memory-lock-adapter/_module.js.map +1 -0
  243. package/dist/esm/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js +103 -0
  244. package/dist/esm/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js.map +1 -0
  245. package/dist/esm/lock/implementations/adapters/mongodb-lock-adapter/_module.js +2 -0
  246. package/dist/esm/lock/implementations/adapters/mongodb-lock-adapter/_module.js.map +1 -0
  247. package/dist/esm/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +144 -0
  248. package/dist/esm/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -0
  249. package/dist/esm/lock/implementations/adapters/redis-lock-adapter/_module.js +2 -0
  250. package/dist/esm/lock/implementations/adapters/redis-lock-adapter/_module.js.map +1 -0
  251. package/dist/esm/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +127 -0
  252. package/dist/esm/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js.map +1 -0
  253. package/dist/esm/lock/implementations/adapters/sqlite-lock-adapter/_module.js +2 -0
  254. package/dist/esm/lock/implementations/adapters/sqlite-lock-adapter/_module.js.map +1 -0
  255. package/dist/esm/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js +56 -0
  256. package/dist/esm/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js.map +1 -0
  257. package/dist/esm/lock/implementations/derivables/_module.js +3 -0
  258. package/dist/esm/lock/implementations/derivables/_module.js.map +1 -0
  259. package/dist/esm/lock/implementations/derivables/lock-provider/_module.js +2 -0
  260. package/dist/esm/lock/implementations/derivables/lock-provider/_module.js.map +1 -0
  261. package/dist/esm/lock/implementations/derivables/lock-provider/database-lock-adapter.js +76 -0
  262. package/dist/esm/lock/implementations/derivables/lock-provider/database-lock-adapter.js.map +1 -0
  263. package/dist/esm/lock/implementations/derivables/lock-provider/lock-provider.js +158 -0
  264. package/dist/esm/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -0
  265. package/dist/esm/lock/implementations/derivables/lock-provider/lock.js +302 -0
  266. package/dist/esm/lock/implementations/derivables/lock-provider/lock.js.map +1 -0
  267. package/dist/esm/lock/implementations/derivables/lock-provider-factory/_module.js +2 -0
  268. package/dist/esm/lock/implementations/derivables/lock-provider-factory/_module.js.map +1 -0
  269. package/dist/esm/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +74 -0
  270. package/dist/esm/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -0
  271. package/dist/esm/serde/implementations/no-op-serde/no-op-serde.js +3 -0
  272. package/dist/esm/serde/implementations/no-op-serde/no-op-serde.js.map +1 -1
  273. package/dist/esm/serde/implementations/super-json-serde/super-json-serde.js +15 -0
  274. package/dist/esm/serde/implementations/super-json-serde/super-json-serde.js.map +1 -1
  275. package/dist/esm/utilities/contracts/_module.js +1 -0
  276. package/dist/esm/utilities/contracts/_module.js.map +1 -1
  277. package/dist/esm/utilities/contracts/serde-registrable.contract.js +1 -0
  278. package/dist/esm/utilities/contracts/serde-registrable.contract.js.map +1 -0
  279. package/dist/esm/utilities/functions.js +4 -0
  280. package/dist/esm/utilities/functions.js.map +1 -1
  281. package/dist/types/_module.d.ts +2 -0
  282. package/dist/types/async/utilities/lazy-promise/lazy-promise.d.ts +2 -2
  283. package/dist/types/cache/contracts/cache-adapter.contract.d.ts +2 -6
  284. package/dist/types/cache/contracts/cache-factory.contract.d.ts +1 -2
  285. package/dist/types/cache/contracts/cache.contract.d.ts +116 -8
  286. package/dist/types/cache/contracts/cache.events.d.ts +24 -90
  287. package/dist/types/cache/implementations/_shared/cache-adapter.test-suite.d.ts +2 -9
  288. package/dist/types/cache/implementations/_shared/cache.test-suite.d.ts +5 -15
  289. package/dist/types/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.d.ts +0 -1
  290. package/dist/types/cache/implementations/adapters/libsql-cache-adapter/_module.d.ts +0 -1
  291. package/dist/types/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.d.ts +23 -30
  292. package/dist/types/cache/implementations/adapters/memory-cache-adapter/_module.d.ts +0 -1
  293. package/dist/types/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.d.ts +8 -19
  294. package/dist/types/cache/implementations/adapters/mongodb-cache-adapter/_module.d.ts +0 -1
  295. package/dist/types/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.d.ts +16 -27
  296. package/dist/types/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.d.ts +0 -1
  297. package/dist/types/cache/implementations/adapters/redis-cache-adapter/_module.d.ts +0 -1
  298. package/dist/types/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.d.ts +12 -23
  299. package/dist/types/cache/implementations/adapters/sqlite-cache-adapter/_module.d.ts +0 -1
  300. package/dist/types/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.d.ts +23 -30
  301. package/dist/types/cache/implementations/derivables/cache/_module.d.ts +0 -1
  302. package/dist/types/cache/implementations/derivables/cache/cache.d.ts +38 -27
  303. package/dist/types/cache/implementations/derivables/cache-factory/_module.d.ts +0 -1
  304. package/dist/types/cache/implementations/derivables/cache-factory/cache-factory.d.ts +60 -26
  305. package/dist/types/collection/contracts/async-collection.contract.d.ts +68 -8
  306. package/dist/types/event-bus/contracts/_shared.d.ts +3 -4
  307. package/dist/types/event-bus/contracts/event-bus-adapter.contract.d.ts +1 -1
  308. package/dist/types/event-bus/contracts/event-bus-factory.contract.d.ts +5 -24
  309. package/dist/types/event-bus/implementations/_shared/event-bus-adapter.test-suite.d.ts +2 -10
  310. package/dist/types/event-bus/implementations/_shared/event-bus.test-suite.d.ts +3 -13
  311. package/dist/types/event-bus/implementations/adapters/memory-event-bus-adapter/_module.d.ts +0 -1
  312. package/dist/types/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +8 -18
  313. package/dist/types/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/_module.d.ts +0 -1
  314. package/dist/types/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.d.ts +11 -20
  315. package/dist/types/event-bus/implementations/derivables/event-bus/_module.d.ts +0 -1
  316. package/dist/types/event-bus/implementations/derivables/event-bus/event-bus.d.ts +29 -20
  317. package/dist/types/event-bus/implementations/derivables/event-bus-factory/_module.d.ts +0 -1
  318. package/dist/types/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.d.ts +49 -46
  319. package/dist/types/lock/contracts/_module.d.ts +7 -0
  320. package/dist/types/lock/contracts/database-lock-adapter.contract.d.ts +49 -0
  321. package/dist/types/lock/contracts/lock-adapter.contract.d.ts +48 -0
  322. package/dist/types/lock/contracts/lock-provider-factory.contract.d.ts +36 -0
  323. package/dist/types/lock/contracts/lock-provider.contract.d.ts +92 -0
  324. package/dist/types/lock/contracts/lock.contract.d.ts +219 -0
  325. package/dist/types/lock/contracts/lock.errors.d.ts +66 -0
  326. package/dist/types/lock/contracts/lock.events.d.ts +83 -0
  327. package/dist/types/lock/implementations/_module.d.ts +3 -0
  328. package/dist/types/lock/implementations/_shared/_module.d.ts +3 -0
  329. package/dist/types/lock/implementations/_shared/database-lock-adapter.test-suite.d.ts +21 -0
  330. package/dist/types/lock/implementations/_shared/lock-adapter.test-suite.d.ts +21 -0
  331. package/dist/types/lock/implementations/_shared/lock-provider.test-suite.d.ts +23 -0
  332. package/dist/types/lock/implementations/adapters/_module.d.ts +5 -0
  333. package/dist/types/lock/implementations/adapters/kysely-lock-adapter/_module.d.ts +1 -0
  334. package/dist/types/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.d.ts +52 -0
  335. package/dist/types/lock/implementations/adapters/libsql-lock-adapter/_module.d.ts +1 -0
  336. package/dist/types/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.d.ts +58 -0
  337. package/dist/types/lock/implementations/adapters/memory-lock-adapter/_module.d.ts +1 -0
  338. package/dist/types/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.d.ts +52 -0
  339. package/dist/types/lock/implementations/adapters/mongodb-lock-adapter/_module.d.ts +1 -0
  340. package/dist/types/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.d.ts +60 -0
  341. package/dist/types/lock/implementations/adapters/redis-lock-adapter/_module.d.ts +1 -0
  342. package/dist/types/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.d.ts +57 -0
  343. package/dist/types/lock/implementations/adapters/sqlite-lock-adapter/_module.d.ts +1 -0
  344. package/dist/types/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.d.ts +57 -0
  345. package/dist/types/lock/implementations/derivables/_module.d.ts +2 -0
  346. package/dist/types/lock/implementations/derivables/lock-provider/_module.d.ts +1 -0
  347. package/dist/types/lock/implementations/derivables/lock-provider/database-lock-adapter.d.ts +23 -0
  348. package/dist/types/lock/implementations/derivables/lock-provider/lock-provider.d.ts +89 -0
  349. package/dist/types/lock/implementations/derivables/lock-provider/lock.d.ts +73 -0
  350. package/dist/types/lock/implementations/derivables/lock-provider-factory/_module.d.ts +1 -0
  351. package/dist/types/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +98 -0
  352. package/dist/types/serde/contracts/flexible-serde.contract.d.ts +3 -2
  353. package/dist/types/serde/implementations/no-op-serde/no-op-serde.d.ts +2 -1
  354. package/dist/types/serde/implementations/super-json-serde/super-json-serde.d.ts +2 -1
  355. package/dist/types/utilities/contracts/_module.d.ts +1 -0
  356. package/dist/types/utilities/contracts/serde-registrable.contract.d.ts +11 -0
  357. package/dist/types/utilities/types.d.ts +3 -1
  358. package/package.json +5 -3
  359. package/dist/cjs/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter-settings.js +0 -56
  360. package/dist/cjs/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter-settings.js.map +0 -1
  361. package/dist/cjs/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter-settings.js +0 -26
  362. package/dist/cjs/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter-settings.js.map +0 -1
  363. package/dist/cjs/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-settings.js +0 -44
  364. package/dist/cjs/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-settings.js.map +0 -1
  365. package/dist/cjs/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-settings.js +0 -32
  366. package/dist/cjs/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-settings.js.map +0 -1
  367. package/dist/cjs/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter-settings.js +0 -56
  368. package/dist/cjs/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter-settings.js.map +0 -1
  369. package/dist/cjs/cache/implementations/derivables/cache/cache-settings.js +0 -56
  370. package/dist/cjs/cache/implementations/derivables/cache/cache-settings.js.map +0 -1
  371. package/dist/cjs/cache/implementations/derivables/cache-factory/cache-factory-settings.js +0 -83
  372. package/dist/cjs/cache/implementations/derivables/cache-factory/cache-factory-settings.js.map +0 -1
  373. package/dist/cjs/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter-settings.js +0 -26
  374. package/dist/cjs/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter-settings.js.map +0 -1
  375. package/dist/cjs/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter-settings.js +0 -38
  376. package/dist/cjs/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter-settings.js.map +0 -1
  377. package/dist/cjs/event-bus/implementations/derivables/event-bus/event-bus-settings.js +0 -56
  378. package/dist/cjs/event-bus/implementations/derivables/event-bus/event-bus-settings.js.map +0 -1
  379. package/dist/cjs/event-bus/implementations/derivables/event-bus-factory/event-bus-factory-settings.js +0 -71
  380. package/dist/cjs/event-bus/implementations/derivables/event-bus-factory/event-bus-factory-settings.js.map +0 -1
  381. package/dist/esm/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter-settings.js +0 -52
  382. package/dist/esm/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter-settings.js.map +0 -1
  383. package/dist/esm/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter-settings.js +0 -22
  384. package/dist/esm/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter-settings.js.map +0 -1
  385. package/dist/esm/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-settings.js +0 -40
  386. package/dist/esm/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-settings.js.map +0 -1
  387. package/dist/esm/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-settings.js +0 -28
  388. package/dist/esm/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-settings.js.map +0 -1
  389. package/dist/esm/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter-settings.js +0 -52
  390. package/dist/esm/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter-settings.js.map +0 -1
  391. package/dist/esm/cache/implementations/derivables/cache/cache-settings.js +0 -52
  392. package/dist/esm/cache/implementations/derivables/cache/cache-settings.js.map +0 -1
  393. package/dist/esm/cache/implementations/derivables/cache-factory/cache-factory-settings.js +0 -79
  394. package/dist/esm/cache/implementations/derivables/cache-factory/cache-factory-settings.js.map +0 -1
  395. package/dist/esm/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter-settings.js +0 -22
  396. package/dist/esm/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter-settings.js.map +0 -1
  397. package/dist/esm/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter-settings.js +0 -34
  398. package/dist/esm/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter-settings.js.map +0 -1
  399. package/dist/esm/event-bus/implementations/derivables/event-bus/event-bus-settings.js +0 -52
  400. package/dist/esm/event-bus/implementations/derivables/event-bus/event-bus-settings.js.map +0 -1
  401. package/dist/esm/event-bus/implementations/derivables/event-bus-factory/event-bus-factory-settings.js +0 -67
  402. package/dist/esm/event-bus/implementations/derivables/event-bus-factory/event-bus-factory-settings.js.map +0 -1
  403. package/dist/types/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter-settings.d.ts +0 -48
  404. package/dist/types/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter-settings.d.ts +0 -26
  405. package/dist/types/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter-settings.d.ts +0 -50
  406. package/dist/types/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter-settings.d.ts +0 -32
  407. package/dist/types/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter-settings.d.ts +0 -48
  408. package/dist/types/cache/implementations/derivables/cache/cache-settings.d.ts +0 -73
  409. package/dist/types/cache/implementations/derivables/cache-factory/cache-factory-settings.d.ts +0 -108
  410. package/dist/types/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter-settings.d.ts +0 -27
  411. package/dist/types/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter-settings.d.ts +0 -36
  412. package/dist/types/event-bus/implementations/derivables/event-bus/event-bus-settings.d.ts +0 -62
  413. package/dist/types/event-bus/implementations/derivables/event-bus-factory/event-bus-factory-settings.d.ts +0 -92
@@ -0,0 +1,219 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import type { LazyPromiseable, Result, TimeSpan } from "../../utilities/_module";
5
+ import type { LazyPromise } from "../../async/_module";
6
+ import type { KeyAlreadyAcquiredLockError } from "../../lock/contracts/lock.errors";
7
+ import type { IEventListener } from "../../event-bus/contracts/_module";
8
+ import type { LockEvents } from "../../lock/contracts/lock.events";
9
+ /**
10
+ * The <i>ILockListener</i> contract defines a way for listening <i>{@link ILock}</i> operations.
11
+ * @group Contracts
12
+ */
13
+ export type ILockListener = IEventListener<LockEvents>;
14
+ /**
15
+ * @group Contracts
16
+ */
17
+ export type ILock = ILockListener & {
18
+ /**
19
+ * @throws {UnableToAquireLockError} {@link UnableToAquireLockError}
20
+ * @throws {UnableToReleaseLockError} {@link UnableToReleaseLockError}
21
+ * @example
22
+ * ```ts
23
+ * import { type ILock, TimeSpan } from "@daiso-tech/core";
24
+ *
25
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
26
+ * async function main(lock: ILock): Promise<void> {
27
+ * await lock.run(async () => {
28
+ * console.log("1.");
29
+ * await delay(TimeSpan.fromMilliseconds(1));
30
+ * console.log("2.");
31
+ * });
32
+ * }
33
+ * ```
34
+ * You can also pass in a <i>{@link LazyPromise}</i>.
35
+ * @example
36
+ * ```ts
37
+ * import { type ILock, TimeSpan } from "@daiso-tech/core";
38
+ *
39
+ * function fn(): LazyPromise<void> {
40
+ * return new LazyPromise(async () => {
41
+ * console.log("1.");
42
+ * await delay(TimeSpan.fromMilliseconds(1));
43
+ * console.log("2.");
44
+ * });
45
+ * }
46
+ *
47
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
48
+ * async function main(lock: ILock): Promise<void> {
49
+ * await lock.run(fn());
50
+ * }
51
+ * ```
52
+ */
53
+ run<TValue = void>(asyncFn: LazyPromiseable<TValue>): LazyPromise<Result<TValue, KeyAlreadyAcquiredLockError>>;
54
+ /**
55
+ * @throws {UnableToAquireLockError} {@link UnableToAquireLockError}
56
+ * @throws {UnableToReleaseLockError} {@link UnableToReleaseLockError}
57
+ * @throws {KeyAlreadyAcquiredLockError} {@link KeyAlreadyAcquiredLockError}
58
+ * @example
59
+ * ```ts
60
+ * import { type ILock, TimeSpan } from "@daiso-tech/core";
61
+ *
62
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
63
+ * async function main(lock: ILock): Promise<void> {
64
+ * await lock.runOrFail(async () => {
65
+ * console.log("1.");
66
+ * await delay(TimeSpan.fromMilliseconds(1));
67
+ * console.log("2.");
68
+ * });
69
+ * }
70
+ * ```
71
+ * You can also pass in a <i>{@link LazyPromise}</i>.
72
+ * @example
73
+ * ```ts
74
+ * import { type ILock, TimeSpan } from "@daiso-tech/core";
75
+ *
76
+ * function fn(): LazyPromise<void> {
77
+ * return new LazyPromise(async () => {
78
+ * console.log("1.");
79
+ * await delay(TimeSpan.fromMilliseconds(1));
80
+ * console.log("2.");
81
+ * });
82
+ * }
83
+ *
84
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
85
+ * async function main(lock: ILock): Promise<void> {
86
+ * await lock.runOrFail(fn());
87
+ * }
88
+ * ```
89
+ */
90
+ runOrFail<TValue = void>(asyncFn: LazyPromiseable<TValue>): LazyPromise<TValue>;
91
+ /**
92
+ * The <i>acquire</i> method acquires a lock only if the lock is not already acquired.
93
+ * Throws an error if a different owner attempts to release the lock.
94
+ * Returns true if the lock is acquired otherwise true is returned.
95
+ * @throws {UnableToAquireLockError} {@link UnableToAquireLockError}
96
+ * @example
97
+ * ```ts
98
+ * import { type ILock, TimeSpan } from "@daiso-tech/core";
99
+ *
100
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
101
+ * async function main(lock: ILock): Promise<void> {
102
+ * try {
103
+ * await lock.acquire();
104
+ * console.log("1.");
105
+ * await delay(TimeSpan.fromMilliseconds(1));
106
+ * console.log("2.");
107
+ * }
108
+ * finally {
109
+ * await lock.release();
110
+ * }
111
+ * }
112
+ * ```
113
+ */
114
+ acquire(): LazyPromise<boolean>;
115
+ /**
116
+ * The <i>acquireOrFail</i> method acquires a lock only if the lock is not already acquired.
117
+ * Throws an error if already acquired.
118
+ * @throws {UnableToAquireLockError} {@link UnableToAquireLockError}
119
+ * @throws {KeyAlreadyAcquiredLockError} {@link KeyAlreadyAcquiredLockError}
120
+ * @example
121
+ * ```ts
122
+ * import type { ILock, TimeSpan } from "@daiso-tech/core";
123
+ *
124
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
125
+ * async function main(lock: ILock): Promise<void> {
126
+ * try {
127
+ * await lock.acquireOrFail();
128
+ * console.log("1.");
129
+ * await delay(TimeSpan.fromMilliseconds(1));
130
+ * console.log("2.");
131
+ * }
132
+ * finally {
133
+ * await lock.releaseOrFail();
134
+ * }
135
+ * }
136
+ * ```
137
+ */
138
+ acquireOrFail(): LazyPromise<void>;
139
+ /**
140
+ * The <i>release</i> method releases a lock if owned by the same owner.
141
+ * Returns true if the lock is released otherwise false is returned.
142
+ * @throws {UnableToReleaseLockError} {@link UnableToReleaseLockError}
143
+ * @example
144
+ * ```ts
145
+ * import type { ILock, TimeSpan } from "@daiso-tech/core";
146
+ *
147
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
148
+ * async function main(lock: ILock): Promise<void> {
149
+ * try {
150
+ * await lock.acquire();
151
+ * console.log("1.");
152
+ * await delay(TimeSpan.fromMilliseconds(1));
153
+ * console.log("2.");
154
+ * }
155
+ * finally {
156
+ * await lock.release();
157
+ * }
158
+ * }
159
+ * ```
160
+ */
161
+ release(): LazyPromise<boolean>;
162
+ /**
163
+ * The <i>releaseOrFail</i> method releases a lock if owned by the same owner.
164
+ * Throws an error if a different owner attempts to release the lock.
165
+ * @throws {UnableToReleaseLockError} {@link UnableToReleaseLockError}
166
+ * @throws {UnownedReleaseLockError} {@link UnownedReleaseLockError}
167
+ * @example
168
+ * ```ts
169
+ * import type { ILock, TimeSpan } from "@daiso-tech/core";
170
+ *
171
+ * // The function will execute sequentially when called concurrently as long you use the same lock.
172
+ * async function main(lock: ILock): Promise<void> {
173
+ * try {
174
+ * await lock.acquireOrFail();
175
+ * console.log("1.");
176
+ * await delay(TimeSpan.fromMilliseconds(1));
177
+ * console.log("2.");
178
+ * }
179
+ * finally {
180
+ * await lock.releaseOrFail();
181
+ * }
182
+ * }
183
+ * ```
184
+ */
185
+ releaseOrFail(): LazyPromise<void>;
186
+ /**
187
+ * The <i>forceRelease</i> method releases a lock regardless of the owner.
188
+ * @throws {UnableToReleaseLockError} {@link UnableToReleaseLockError}
189
+ */
190
+ forceRelease(): LazyPromise<void>;
191
+ /**
192
+ * The <i>isExpired</i> method returns true if the expired otherwise false is returned.
193
+ */
194
+ isExpired(): LazyPromise<boolean>;
195
+ /**
196
+ * The <i>isLocked</i> method returns true if the locked otherwise false is returned.
197
+ */
198
+ isLocked(): LazyPromise<boolean>;
199
+ /**
200
+ * The <i>refresh</i> method updates the TTL of the lock if owned by the same owner.
201
+ * Returns true if the lock is refreshed occurs otherwise false is returned.
202
+ */
203
+ refresh(ttl?: TimeSpan): LazyPromise<boolean>;
204
+ /**
205
+ * The <i>refreshOrFail</i> method updates the TTL of the lock if owned by the same owner.
206
+ * Throws an error if a different owner attempts to refresh the lock.
207
+ * @throws {UnownedExtendLockError} {@link UnownedExtendLockError}
208
+ */
209
+ refreshOrFail(ttl?: TimeSpan): LazyPromise<void>;
210
+ /**
211
+ * The <i>getRemainingTime</i> return the reaming time as <i>{@link TimeSpan}</i>.
212
+ * Returns null if the key doesnt exist, key has no expiration and key has expired.
213
+ */
214
+ getRemainingTime(): LazyPromise<TimeSpan | null>;
215
+ /**
216
+ * The <i>getOwner</i> method return the current owner.
217
+ */
218
+ getOwner(): LazyPromise<string>;
219
+ };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import type { ISerializedError, OneOrMore } from "../../utilities/_module";
5
+ import type { IFlexibleSerde, ISerializable } from "../../serde/contracts/_module";
6
+ /**
7
+ * @group Errors
8
+ */
9
+ export declare class LockError extends Error implements ISerializable<ISerializedError> {
10
+ static deserialize(serializedError: ISerializedError): LockError;
11
+ constructor(message: string, cause?: unknown);
12
+ serialize(): ISerializedError;
13
+ }
14
+ /**
15
+ * @group Errors
16
+ */
17
+ export declare class UnexpectedLockError extends LockError implements ISerializable<ISerializedError> {
18
+ static deserialize(serializedError: ISerializedError): UnexpectedLockError;
19
+ constructor(message: string, cause?: unknown);
20
+ serialize(): ISerializedError;
21
+ }
22
+ /**
23
+ * @group Errors
24
+ */
25
+ export declare class UnableToAquireLockError extends UnexpectedLockError implements ISerializable<ISerializedError> {
26
+ static deserialize(serializedError: ISerializedError): UnableToAquireLockError;
27
+ constructor(message: string, cause?: unknown);
28
+ serialize(): ISerializedError;
29
+ }
30
+ /**
31
+ * @group Errors
32
+ */
33
+ export declare class UnableToReleaseLockError extends UnexpectedLockError implements ISerializable<ISerializedError> {
34
+ static deserialize(serializedError: ISerializedError): UnableToReleaseLockError;
35
+ constructor(message: string, cause?: unknown);
36
+ serialize(): ISerializedError;
37
+ }
38
+ /**
39
+ * @group Errors
40
+ */
41
+ export declare class KeyAlreadyAcquiredLockError extends LockError implements ISerializable<ISerializedError> {
42
+ static deserialize(serializedError: ISerializedError): KeyAlreadyAcquiredLockError;
43
+ constructor(message: string, cause?: unknown);
44
+ serialize(): ISerializedError;
45
+ }
46
+ /**
47
+ * @group Errors
48
+ */
49
+ export declare class UnownedReleaseLockError extends LockError implements ISerializable<ISerializedError> {
50
+ static deserialize(serializedError: ISerializedError): UnownedReleaseLockError;
51
+ constructor(message: string, cause?: unknown);
52
+ serialize(): ISerializedError;
53
+ }
54
+ /**
55
+ * @group Errors
56
+ */
57
+ export declare class UnownedExtendLockError extends LockError implements ISerializable<ISerializedError> {
58
+ static deserialize(serializedError: ISerializedError): UnownedExtendLockError;
59
+ constructor(message: string, cause?: unknown);
60
+ serialize(): ISerializedError;
61
+ }
62
+ /**
63
+ * The <i>registerLockErrorsToSerde</i> function registers all <i>{@link ILock}</i> related errors with <i>IFlexibleSerde</i>, ensuring they will properly be serialized and deserialized.
64
+ * @group Errors
65
+ */
66
+ export declare function registerLockErrorsToSerde(serde: OneOrMore<IFlexibleSerde>): void;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import { BaseEvent } from "../../event-bus/contracts/_module";
5
+ import type { IFlexibleSerde } from "../../serde/contracts/_module";
6
+ import type { OneOrMore } from "../../utilities/types";
7
+ import type { TimeSpan } from "../../utilities/_module";
8
+ /**
9
+ * @group Events
10
+ */
11
+ export declare class KeyAcquiredLockEvent extends BaseEvent<{
12
+ key: string;
13
+ owner: string;
14
+ ttl: TimeSpan | null;
15
+ }> {
16
+ }
17
+ /**
18
+ * @group Events
19
+ */
20
+ export declare class KeyReleasedLockEvent extends BaseEvent<{
21
+ key: string;
22
+ owner: string;
23
+ }> {
24
+ }
25
+ /**
26
+ * @group Events
27
+ */
28
+ export declare class KeyForceReleasedLockEvent extends BaseEvent<{
29
+ key: string;
30
+ }> {
31
+ }
32
+ /**
33
+ * @group Events
34
+ */
35
+ export declare class UnownedReleaseLockEvent extends BaseEvent<{
36
+ key: string;
37
+ owner: string;
38
+ }> {
39
+ }
40
+ /**
41
+ * @group Events
42
+ */
43
+ export declare class UnownedRefreshLockEvent extends BaseEvent<{
44
+ key: string;
45
+ owner: string;
46
+ }> {
47
+ }
48
+ /**
49
+ * @group Events
50
+ */
51
+ export declare class KeyAlreadyAcquiredLockEvent extends BaseEvent<{
52
+ key: string;
53
+ owner: string;
54
+ }> {
55
+ }
56
+ /**
57
+ * @group Events
58
+ */
59
+ export declare class KeyRefreshedLockEvent extends BaseEvent<{
60
+ key: string;
61
+ owner: string;
62
+ ttl: TimeSpan;
63
+ }> {
64
+ }
65
+ /**
66
+ * @group Events
67
+ */
68
+ export declare class UnexpectedErrorLockEvent extends BaseEvent<{
69
+ key: string;
70
+ owner: string;
71
+ ttl: TimeSpan | null;
72
+ error: unknown;
73
+ }> {
74
+ }
75
+ /**
76
+ * @group Events
77
+ */
78
+ export type LockEvents = KeyAcquiredLockEvent | KeyReleasedLockEvent | UnownedReleaseLockEvent | UnownedRefreshLockEvent | KeyAlreadyAcquiredLockEvent | KeyForceReleasedLockEvent | KeyRefreshedLockEvent | UnexpectedErrorLockEvent;
79
+ /**
80
+ * The <i>registerLockEventsToSerde</i> function registers all <i>{@link ILock}</i> related events with <i>IFlexibleSerde</i>, ensuring they will properly be serialized and deserialized.
81
+ * @group Events
82
+ */
83
+ export declare function registerLockEventsToSerde(serde: OneOrMore<IFlexibleSerde>): void;
@@ -0,0 +1,3 @@
1
+ export * from "../../lock/implementations/_shared/_module";
2
+ export * from "../../lock/implementations/adapters/_module";
3
+ export * from "../../lock/implementations/derivables/_module";
@@ -0,0 +1,3 @@
1
+ export * from "../../../lock/implementations/_shared/database-lock-adapter.test-suite";
2
+ export * from "../../../lock/implementations/_shared/lock-adapter.test-suite";
3
+ export * from "../../../lock/implementations/_shared/lock-provider.test-suite";
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import { type TestAPI, type SuiteAPI, type ExpectStatic, type beforeEach } from "vitest";
5
+ import { type IDatabaseLockAdapter } from "../../../lock/contracts/_module";
6
+ import { type Promisable } from "../../../utilities/_module";
7
+ /**
8
+ * @group Utilities
9
+ */
10
+ export type DatabaseLockAdapterTestSuiteSettings = {
11
+ expect: ExpectStatic;
12
+ test: TestAPI;
13
+ describe: SuiteAPI;
14
+ beforeEach: typeof beforeEach;
15
+ createAdapter: () => Promisable<IDatabaseLockAdapter>;
16
+ };
17
+ /**
18
+ * The <i>databaseLockAdapterTestSuite</i> function simplifies the process of testing your custom implementation of <i>{@link IDatabaseLockAdapter}</i> with <i>vitest</i>.
19
+ * @group Utilities
20
+ */
21
+ export declare function databaseLockAdapterTestSuite(settings: DatabaseLockAdapterTestSuiteSettings): void;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import { type TestAPI, type SuiteAPI, type ExpectStatic, type beforeEach } from "vitest";
5
+ import { type ILockAdapter } from "../../../lock/contracts/_module";
6
+ import { type Promisable } from "../../../utilities/_module";
7
+ /**
8
+ * @group Utilities
9
+ */
10
+ export type LockAdapterTestSuiteSettings = {
11
+ expect: ExpectStatic;
12
+ test: TestAPI;
13
+ describe: SuiteAPI;
14
+ beforeEach: typeof beforeEach;
15
+ createAdapter: () => Promisable<ILockAdapter>;
16
+ };
17
+ /**
18
+ * The <i>lockAdapterTestSuite</i> function simplifies the process of testing your custom implementation of <i>{@link ILockAdapter}</i> with <i>vitest</i>.
19
+ * @group Utilities
20
+ */
21
+ export declare function lockAdapterTestSuite(settings: LockAdapterTestSuiteSettings): void;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import { type TestAPI, type SuiteAPI, type ExpectStatic, type beforeEach } from "vitest";
5
+ import type { IGroupableLockProvider } from "../../../lock/contracts/_module";
6
+ import { type Promisable } from "../../../utilities/_module";
7
+ import type { ISerde } from "../../../serde/contracts/_module";
8
+ /**
9
+ * @group Utilities
10
+ */
11
+ export type LockProviderTestSuiteSettings = {
12
+ expect: ExpectStatic;
13
+ test: TestAPI;
14
+ describe: SuiteAPI;
15
+ beforeEach: typeof beforeEach;
16
+ createLockProvider: () => Promisable<IGroupableLockProvider>;
17
+ serde?: ISerde;
18
+ };
19
+ /**
20
+ * The <i>lockProviderTestSuite</i> function simplifies the process of testing your custom implementation of <i>{@link ILock}</i> with <i>vitest</i>.
21
+ * @group Utilities
22
+ */
23
+ export declare function lockProviderTestSuite(settings: LockProviderTestSuiteSettings): void;
@@ -0,0 +1,5 @@
1
+ export * from "../../../lock/implementations/adapters/libsql-lock-adapter/_module";
2
+ export * from "../../../lock/implementations/adapters/memory-lock-adapter/_module";
3
+ export * from "../../../lock/implementations/adapters/mongodb-lock-adapter/_module";
4
+ export * from "../../../lock/implementations/adapters/redis-lock-adapter/_module";
5
+ export * from "../../../lock/implementations/adapters/sqlite-lock-adapter/_module";
@@ -0,0 +1 @@
1
+ export * from "../../../../lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter";
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import type { IDatabaseLockAdapter, ILockData } from "../../../../lock/contracts/_module";
5
+ import type { Kysely } from "kysely";
6
+ import { TimeSpan } from "../../../../utilities/_module";
7
+ /**
8
+ * @internal
9
+ */
10
+ type KyselyLockTable = {
11
+ group: string;
12
+ key: string;
13
+ owner: string;
14
+ expiresAt: number | null;
15
+ };
16
+ /**
17
+ * @internal
18
+ */
19
+ type KyselyTables = {
20
+ lock: KyselyLockTable;
21
+ };
22
+ /**
23
+ * @internal
24
+ */
25
+ type KyselySettings = {
26
+ database: Kysely<KyselyTables>;
27
+ rootGroup: string;
28
+ expiredKeysRemovalInterval?: TimeSpan;
29
+ shouldRemoveExpiredKeys?: boolean;
30
+ };
31
+ /**
32
+ * @internal
33
+ */
34
+ export declare class KyselyLockAdapter implements IDatabaseLockAdapter {
35
+ private readonly group;
36
+ private readonly database;
37
+ private readonly expiredKeysRemovalInterval;
38
+ private readonly shouldRemoveExpiredKeys;
39
+ private timeoutId;
40
+ constructor(settings: KyselySettings);
41
+ deInit(): Promise<void>;
42
+ init(): Promise<void>;
43
+ removeExpiredKeys(): Promise<void>;
44
+ insert(key: string, owner: string, expiration: Date | null): Promise<void>;
45
+ update(key: string, owner: string, expiration: Date | null): Promise<number>;
46
+ remove(key: string, owner: string | null): Promise<void>;
47
+ refresh(key: string, owner: string, expiration: Date): Promise<number>;
48
+ find(key: string): Promise<ILockData | null>;
49
+ getGroup(): string;
50
+ withGroup(group: string): IDatabaseLockAdapter;
51
+ }
52
+ export {};
@@ -0,0 +1 @@
1
+ export * from "../../../../lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter";
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import type { IDatabaseLockAdapter, ILockData } from "../../../../lock/contracts/_module";
5
+ import { TimeSpan } from "../../../../utilities/_module";
6
+ import type { Client } from "@libsql/client/.";
7
+ /**
8
+ * @group Adapters
9
+ */
10
+ export type LibsqlLockAdapterSettings = {
11
+ database: Client;
12
+ tableName?: string;
13
+ expiredKeysRemovalInterval?: TimeSpan;
14
+ shouldRemoveExpiredKeys?: boolean;
15
+ rootGroup: string;
16
+ };
17
+ /**
18
+ * To utilize the <i>LibsqlLockAdapter</i>, you must install the <i>"@libsql/client"</i> package.
19
+ * @group Adapters
20
+ */
21
+ export declare class LibsqlLockAdapter implements IDatabaseLockAdapter {
22
+ private databaseLockAdapter;
23
+ /***
24
+ * @example
25
+ * ```ts
26
+ * import { LibsqlCacheAdapter } from "@daiso-tech/core";
27
+ * import { createClient } from "@libsql/client";
28
+ *
29
+ * (async () => {
30
+ * const database = createClient({ url: "file:local.db" });
31
+ * const lockAdapter = new LibsqlCacheAdapter({
32
+ * database,
33
+ * rootGroup: "@global"
34
+ * });
35
+ * await lockAdapter.init();
36
+ * })();
37
+ * ```
38
+ */
39
+ constructor(settings: LibsqlLockAdapterSettings);
40
+ removeExpiredKeys(): Promise<void>;
41
+ /**
42
+ * Removes the table where the cache values are stored and removes the table indexes.
43
+ * Note all cache data will be removed.
44
+ */
45
+ deInit(): Promise<void>;
46
+ /**
47
+ * Creates the table where the cache values are stored and it's related indexes.
48
+ * Note the <i>init</i> method needs to be called before using the adapter.
49
+ */
50
+ init(): Promise<void>;
51
+ insert(key: string, owner: string, expiration: Date | null): Promise<void>;
52
+ update(key: string, owner: string, expiration: Date | null): Promise<number>;
53
+ remove(key: string, owner: string | null): Promise<void>;
54
+ refresh(key: string, owner: string, expiration: Date): Promise<number>;
55
+ find(key: string): Promise<ILockData | null>;
56
+ getGroup(): string;
57
+ withGroup(group: string): IDatabaseLockAdapter;
58
+ }
@@ -0,0 +1 @@
1
+ export * from "../../../../lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter";
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @module Lock
3
+ */
4
+ import { TimeSpan } from "../../../../utilities/_module";
5
+ import type { ILockAdapter, ILockData } from "../../../../lock/contracts/_module";
6
+ /**
7
+ * @group Adapters
8
+ */
9
+ export type MemoryLockAdapterSettings = {
10
+ rootGroup: string;
11
+ map?: Map<string, ILockData>;
12
+ };
13
+ /**
14
+ * @group Adapters
15
+ */
16
+ export declare class MemoryLockAdapter implements ILockAdapter {
17
+ private readonly group;
18
+ private readonly timeoutMap;
19
+ private readonly map;
20
+ /**
21
+ * @example
22
+ * ```ts
23
+ * import { MemoryLockAdapter } from "@daiso-tech/core";
24
+ *
25
+ * const lockAdapter = new MemoryLockAdapter({
26
+ * rootGroup: "@cache"
27
+ * });
28
+ * ```
29
+ * You can also provide an <i>Map</i>.
30
+ * @example
31
+ * ```ts
32
+ * import { MemoryLockAdapter } from "@daiso-tech/core";
33
+ *
34
+ * const map = new Map<any, any>();
35
+ * const lockAdapter = new MemoryLockAdapter({
36
+ * rootGroup: "@cache",
37
+ * map
38
+ * });
39
+ * ```
40
+ */
41
+ constructor(settings: MemoryLockAdapterSettings);
42
+ private getPrefix;
43
+ private withPrefix;
44
+ acquire(key: string, owner: string, ttl: TimeSpan | null): Promise<boolean>;
45
+ release(key: string, owner: string): Promise<boolean>;
46
+ forceRelease(key: string): Promise<void>;
47
+ isLocked(key: string): Promise<boolean>;
48
+ getRemainingTime(key: string): Promise<TimeSpan | null>;
49
+ refresh(key: string, owner: string, time: TimeSpan): Promise<boolean>;
50
+ getGroup(): string;
51
+ withGroup(group: string): ILockAdapter;
52
+ }
@@ -0,0 +1 @@
1
+ export * from "../../../../lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter";