@daiso-tech/core 0.2.1 → 0.4.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 (425) hide show
  1. package/dist/cjs/_module.js +5 -1
  2. package/dist/cjs/_module.js.map +1 -1
  3. package/dist/cjs/_shared/kysely/_module.js +18 -0
  4. package/dist/cjs/_shared/kysely/_module.js.map +1 -0
  5. package/dist/cjs/_shared/kysely/kysely-table-name-transformer-plugin.js +45 -0
  6. package/dist/cjs/_shared/kysely/kysely-table-name-transformer-plugin.js.map +1 -0
  7. package/dist/cjs/_shared/redis/_module.js +20 -0
  8. package/dist/cjs/_shared/redis/_module.js.map +1 -0
  9. package/dist/cjs/_shared/redis/clear-iterable.js +25 -0
  10. package/dist/cjs/_shared/redis/clear-iterable.js.map +1 -0
  11. package/dist/cjs/_shared/redis/escape-redis-chars.js +41 -0
  12. package/dist/cjs/_shared/redis/escape-redis-chars.js.map +1 -0
  13. package/dist/cjs/_shared/redis/is-redis-type-error.js +9 -0
  14. package/dist/cjs/_shared/redis/is-redis-type-error.js.map +1 -0
  15. package/dist/cjs/_shared/utilities.js.map +1 -1
  16. package/dist/cjs/async/_module.js +29 -0
  17. package/dist/cjs/async/_module.js.map +1 -0
  18. package/dist/cjs/async/_shared.js +34 -0
  19. package/dist/cjs/async/_shared.js.map +1 -0
  20. package/dist/cjs/async/abortable/_module.js +18 -0
  21. package/dist/cjs/async/abortable/_module.js.map +1 -0
  22. package/dist/cjs/async/abortable/abortable.js +48 -0
  23. package/dist/cjs/async/abortable/abortable.js.map +1 -0
  24. package/dist/cjs/async/abortable-iterable/_module.js +18 -0
  25. package/dist/cjs/async/abortable-iterable/_module.js.map +1 -0
  26. package/dist/cjs/async/abortable-iterable/abortable-iterable.js +32 -0
  27. package/dist/cjs/async/abortable-iterable/abortable-iterable.js.map +1 -0
  28. package/dist/cjs/async/backof-policies/_module.js +21 -0
  29. package/dist/cjs/async/backof-policies/_module.js.map +1 -0
  30. package/dist/cjs/async/backof-policies/_shared.js +7 -0
  31. package/dist/cjs/async/backof-policies/_shared.js.map +1 -0
  32. package/dist/cjs/async/backof-policies/constant-backoff-policy/_module.js +18 -0
  33. package/dist/cjs/async/backof-policies/constant-backoff-policy/_module.js.map +1 -0
  34. package/dist/cjs/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js +19 -0
  35. package/dist/cjs/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js.map +1 -0
  36. package/dist/cjs/async/backof-policies/exponential-backoff-policy/_module.js +18 -0
  37. package/dist/cjs/async/backof-policies/exponential-backoff-policy/_module.js.map +1 -0
  38. package/dist/cjs/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js +23 -0
  39. package/dist/cjs/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js.map +1 -0
  40. package/dist/cjs/async/backof-policies/linear-backoff-policy/_module.js +18 -0
  41. package/dist/cjs/async/backof-policies/linear-backoff-policy/_module.js.map +1 -0
  42. package/dist/cjs/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js +23 -0
  43. package/dist/cjs/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js.map +1 -0
  44. package/dist/cjs/async/backof-policies/polynomial-backoff-policy/_module.js +18 -0
  45. package/dist/cjs/async/backof-policies/polynomial-backoff-policy/_module.js.map +1 -0
  46. package/dist/cjs/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js +23 -0
  47. package/dist/cjs/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js.map +1 -0
  48. package/dist/cjs/async/delay/_module.js +18 -0
  49. package/dist/cjs/async/delay/_module.js.map +1 -0
  50. package/dist/cjs/async/delay/delay.js +24 -0
  51. package/dist/cjs/async/delay/delay.js.map +1 -0
  52. package/dist/cjs/async/delay-iterable/_module.js +18 -0
  53. package/dist/cjs/async/delay-iterable/_module.js.map +1 -0
  54. package/dist/cjs/async/delay-iterable/delay-iterable.js +36 -0
  55. package/dist/cjs/async/delay-iterable/delay-iterable.js.map +1 -0
  56. package/dist/cjs/async/lazy-promise/_module.js +18 -0
  57. package/dist/cjs/async/lazy-promise/_module.js.map +1 -0
  58. package/dist/cjs/async/lazy-promise/lazy-promise.js +22 -0
  59. package/dist/cjs/async/lazy-promise/lazy-promise.js.map +1 -0
  60. package/dist/cjs/async/retry/_module.js +18 -0
  61. package/dist/cjs/async/retry/_module.js.map +1 -0
  62. package/dist/cjs/async/retry/retry.js +43 -0
  63. package/dist/cjs/async/retry/retry.js.map +1 -0
  64. package/dist/cjs/async/retry-iterable/_module.js +18 -0
  65. package/dist/cjs/async/retry-iterable/_module.js.map +1 -0
  66. package/dist/cjs/async/retry-iterable/retry-iterable.js +32 -0
  67. package/dist/cjs/async/retry-iterable/retry-iterable.js.map +1 -0
  68. package/dist/cjs/async/timeout/_module.js +18 -0
  69. package/dist/cjs/async/timeout/_module.js.map +1 -0
  70. package/dist/cjs/async/timeout/timeout.js +28 -0
  71. package/dist/cjs/async/timeout/timeout.js.map +1 -0
  72. package/dist/cjs/async/timeout-iterable/_module.js +18 -0
  73. package/dist/cjs/async/timeout-iterable/_module.js.map +1 -0
  74. package/dist/cjs/async/timeout-iterable/timeout-iterable.js +11 -0
  75. package/dist/cjs/async/timeout-iterable/timeout-iterable.js.map +1 -0
  76. package/dist/cjs/collection/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -1
  77. package/dist/cjs/collection/async-iterable-collection/async-iterable-collection.js.map +1 -1
  78. package/dist/cjs/collection/iterable-collection/_shared/cross-join-iterable.js.map +1 -1
  79. package/dist/cjs/contracts/_module.js +2 -0
  80. package/dist/cjs/contracts/_module.js.map +1 -1
  81. package/dist/cjs/contracts/collection/_module.js.map +1 -1
  82. package/dist/cjs/contracts/serializer/_module.js +18 -0
  83. package/dist/cjs/contracts/serializer/_module.js.map +1 -0
  84. package/dist/cjs/contracts/serializer/serializer.contract.js +25 -0
  85. package/dist/cjs/contracts/serializer/serializer.contract.js.map +1 -0
  86. package/dist/cjs/contracts/storage/_module.js +20 -0
  87. package/dist/cjs/contracts/storage/_module.js.map +1 -0
  88. package/dist/cjs/contracts/storage/_shared.js +32 -0
  89. package/dist/cjs/contracts/storage/_shared.js.map +1 -0
  90. package/dist/cjs/contracts/storage/storage-adapter.contract.js +3 -0
  91. package/dist/cjs/contracts/storage/storage-adapter.contract.js.map +1 -0
  92. package/dist/cjs/contracts/storage/storage.contract.js +3 -0
  93. package/dist/cjs/contracts/storage/storage.contract.js.map +1 -0
  94. package/dist/cjs/serializer/_module.js +22 -0
  95. package/dist/cjs/serializer/_module.js.map +1 -0
  96. package/dist/cjs/serializer/_shared/test-utilities/_module.js +18 -0
  97. package/dist/cjs/serializer/_shared/test-utilities/_module.js.map +1 -0
  98. package/dist/cjs/serializer/_shared/test-utilities/serializer.test-suite.js +361 -0
  99. package/dist/cjs/serializer/_shared/test-utilities/serializer.test-suite.js.map +1 -0
  100. package/dist/cjs/serializer/mongodb-serializer/_module.js +18 -0
  101. package/dist/cjs/serializer/mongodb-serializer/_module.js.map +1 -0
  102. package/dist/cjs/serializer/mongodb-serializer/mongodb-serializer.js +36 -0
  103. package/dist/cjs/serializer/mongodb-serializer/mongodb-serializer.js.map +1 -0
  104. package/dist/cjs/serializer/redis-serializer/_module.js +18 -0
  105. package/dist/cjs/serializer/redis-serializer/_module.js.map +1 -0
  106. package/dist/cjs/serializer/redis-serializer/redis-serializer.js +37 -0
  107. package/dist/cjs/serializer/redis-serializer/redis-serializer.js.map +1 -0
  108. package/dist/cjs/serializer/sql-serializer/_module.js +18 -0
  109. package/dist/cjs/serializer/sql-serializer/_module.js.map +1 -0
  110. package/dist/cjs/serializer/sql-serializer/sql-serializer.js +37 -0
  111. package/dist/cjs/serializer/sql-serializer/sql-serializer.js.map +1 -0
  112. package/dist/cjs/serializer/super-json-serializer/_module.js +18 -0
  113. package/dist/cjs/serializer/super-json-serializer/_module.js.map +1 -0
  114. package/dist/cjs/serializer/super-json-serializer/super-json-serializer.js +304 -0
  115. package/dist/cjs/serializer/super-json-serializer/super-json-serializer.js.map +1 -0
  116. package/dist/cjs/storage/_module.js +23 -0
  117. package/dist/cjs/storage/_module.js.map +1 -0
  118. package/dist/cjs/storage/_shared/test-utilities/_module.js +18 -0
  119. package/dist/cjs/storage/_shared/test-utilities/_module.js.map +1 -0
  120. package/dist/cjs/storage/_shared/test-utilities/storage-api.test-suite.js +572 -0
  121. package/dist/cjs/storage/_shared/test-utilities/storage-api.test-suite.js.map +1 -0
  122. package/dist/cjs/storage/_shared/test-utilities/storage-namespace.test-suite.js +241 -0
  123. package/dist/cjs/storage/_shared/test-utilities/storage-namespace.test-suite.js.map +1 -0
  124. package/dist/cjs/storage/_shared/test-utilities/storage-value.test-suite.js +4172 -0
  125. package/dist/cjs/storage/_shared/test-utilities/storage-value.test-suite.js.map +1 -0
  126. package/dist/cjs/storage/_shared/test-utilities/storage.test-suite.js +12 -0
  127. package/dist/cjs/storage/_shared/test-utilities/storage.test-suite.js.map +1 -0
  128. package/dist/cjs/storage/memory-storage-adapter/_module.js +18 -0
  129. package/dist/cjs/storage/memory-storage-adapter/_module.js.map +1 -0
  130. package/dist/cjs/storage/memory-storage-adapter/memory-storage-adapter.js +62 -0
  131. package/dist/cjs/storage/memory-storage-adapter/memory-storage-adapter.js.map +1 -0
  132. package/dist/cjs/storage/mongodb-storage-adapter/_module.js +6 -0
  133. package/dist/cjs/storage/mongodb-storage-adapter/_module.js.map +1 -0
  134. package/dist/cjs/storage/mongodb-storage-adapter/mongodb-storage-adapter.js +273 -0
  135. package/dist/cjs/storage/mongodb-storage-adapter/mongodb-storage-adapter.js.map +1 -0
  136. package/dist/cjs/storage/namespace-storage-adapter.js +66 -0
  137. package/dist/cjs/storage/namespace-storage-adapter.js.map +1 -0
  138. package/dist/cjs/storage/redis-storage-adapter/_module.js +18 -0
  139. package/dist/cjs/storage/redis-storage-adapter/_module.js.map +1 -0
  140. package/dist/cjs/storage/redis-storage-adapter/redis-storage-adapter.js +248 -0
  141. package/dist/cjs/storage/redis-storage-adapter/redis-storage-adapter.js.map +1 -0
  142. package/dist/cjs/storage/sqlite/_module.js +19 -0
  143. package/dist/cjs/storage/sqlite/_module.js.map +1 -0
  144. package/dist/cjs/storage/sqlite/_shared/_module.js +18 -0
  145. package/dist/cjs/storage/sqlite/_shared/_module.js.map +1 -0
  146. package/dist/cjs/storage/sqlite/_shared/base-sqlite-storage-adapter.js +224 -0
  147. package/dist/cjs/storage/sqlite/_shared/base-sqlite-storage-adapter.js.map +1 -0
  148. package/dist/cjs/storage/sqlite/libsql-storage-adapter/_module.js +18 -0
  149. package/dist/cjs/storage/sqlite/libsql-storage-adapter/_module.js.map +1 -0
  150. package/dist/cjs/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js +53 -0
  151. package/dist/cjs/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js.map +1 -0
  152. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/_module.js +18 -0
  153. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/_module.js.map +1 -0
  154. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js +52 -0
  155. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js.map +1 -0
  156. package/dist/cjs/storage/storage.js +301 -0
  157. package/dist/cjs/storage/storage.js.map +1 -0
  158. package/dist/cjs/storage/usable-storage-adapter.js +102 -0
  159. package/dist/cjs/storage/usable-storage-adapter.js.map +1 -0
  160. package/dist/cjs/utilities/_module.js +18 -0
  161. package/dist/cjs/utilities/_module.js.map +1 -0
  162. package/dist/cjs/utilities/time-span/_module.js +18 -0
  163. package/dist/cjs/utilities/time-span/_module.js.map +1 -0
  164. package/dist/cjs/utilities/time-span/time-span.js +103 -0
  165. package/dist/cjs/utilities/time-span/time-span.js.map +1 -0
  166. package/dist/esm/_module.js +5 -1
  167. package/dist/esm/_module.js.map +1 -1
  168. package/dist/esm/_shared/kysely/_module.js +2 -0
  169. package/dist/esm/_shared/kysely/_module.js.map +1 -0
  170. package/dist/esm/_shared/kysely/kysely-table-name-transformer-plugin.js +41 -0
  171. package/dist/esm/_shared/kysely/kysely-table-name-transformer-plugin.js.map +1 -0
  172. package/dist/esm/_shared/redis/_module.js +4 -0
  173. package/dist/esm/_shared/redis/_module.js.map +1 -0
  174. package/dist/esm/_shared/redis/clear-iterable.js +21 -0
  175. package/dist/esm/_shared/redis/clear-iterable.js.map +1 -0
  176. package/dist/esm/_shared/redis/escape-redis-chars.js +38 -0
  177. package/dist/esm/_shared/redis/escape-redis-chars.js.map +1 -0
  178. package/dist/esm/_shared/redis/is-redis-type-error.js +6 -0
  179. package/dist/esm/_shared/redis/is-redis-type-error.js.map +1 -0
  180. package/dist/esm/_shared/utilities.js.map +1 -1
  181. package/dist/esm/async/_module.js +11 -0
  182. package/dist/esm/async/_module.js.map +1 -0
  183. package/dist/esm/async/_shared.js +27 -0
  184. package/dist/esm/async/_shared.js.map +1 -0
  185. package/dist/esm/async/abortable/_module.js +2 -0
  186. package/dist/esm/async/abortable/_module.js.map +1 -0
  187. package/dist/esm/async/abortable/abortable.js +45 -0
  188. package/dist/esm/async/abortable/abortable.js.map +1 -0
  189. package/dist/esm/async/abortable-iterable/_module.js +2 -0
  190. package/dist/esm/async/abortable-iterable/_module.js.map +1 -0
  191. package/dist/esm/async/abortable-iterable/abortable-iterable.js +29 -0
  192. package/dist/esm/async/abortable-iterable/abortable-iterable.js.map +1 -0
  193. package/dist/esm/async/backof-policies/_module.js +5 -0
  194. package/dist/esm/async/backof-policies/_module.js.map +1 -0
  195. package/dist/esm/async/backof-policies/_shared.js +4 -0
  196. package/dist/esm/async/backof-policies/_shared.js.map +1 -0
  197. package/dist/esm/async/backof-policies/constant-backoff-policy/_module.js +2 -0
  198. package/dist/esm/async/backof-policies/constant-backoff-policy/_module.js.map +1 -0
  199. package/dist/esm/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js +16 -0
  200. package/dist/esm/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js.map +1 -0
  201. package/dist/esm/async/backof-policies/exponential-backoff-policy/_module.js +2 -0
  202. package/dist/esm/async/backof-policies/exponential-backoff-policy/_module.js.map +1 -0
  203. package/dist/esm/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js +20 -0
  204. package/dist/esm/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js.map +1 -0
  205. package/dist/esm/async/backof-policies/linear-backoff-policy/_module.js +2 -0
  206. package/dist/esm/async/backof-policies/linear-backoff-policy/_module.js.map +1 -0
  207. package/dist/esm/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js +20 -0
  208. package/dist/esm/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js.map +1 -0
  209. package/dist/esm/async/backof-policies/polynomial-backoff-policy/_module.js +2 -0
  210. package/dist/esm/async/backof-policies/polynomial-backoff-policy/_module.js.map +1 -0
  211. package/dist/esm/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js +20 -0
  212. package/dist/esm/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js.map +1 -0
  213. package/dist/esm/async/delay/_module.js +2 -0
  214. package/dist/esm/async/delay/_module.js.map +1 -0
  215. package/dist/esm/async/delay/delay.js +21 -0
  216. package/dist/esm/async/delay/delay.js.map +1 -0
  217. package/dist/esm/async/delay-iterable/_module.js +2 -0
  218. package/dist/esm/async/delay-iterable/_module.js.map +1 -0
  219. package/dist/esm/async/delay-iterable/delay-iterable.js +33 -0
  220. package/dist/esm/async/delay-iterable/delay-iterable.js.map +1 -0
  221. package/dist/esm/async/lazy-promise/_module.js +2 -0
  222. package/dist/esm/async/lazy-promise/_module.js.map +1 -0
  223. package/dist/esm/async/lazy-promise/lazy-promise.js +17 -0
  224. package/dist/esm/async/lazy-promise/lazy-promise.js.map +1 -0
  225. package/dist/esm/async/retry/_module.js +2 -0
  226. package/dist/esm/async/retry/_module.js.map +1 -0
  227. package/dist/esm/async/retry/retry.js +40 -0
  228. package/dist/esm/async/retry/retry.js.map +1 -0
  229. package/dist/esm/async/retry-iterable/_module.js +2 -0
  230. package/dist/esm/async/retry-iterable/_module.js.map +1 -0
  231. package/dist/esm/async/retry-iterable/retry-iterable.js +29 -0
  232. package/dist/esm/async/retry-iterable/retry-iterable.js.map +1 -0
  233. package/dist/esm/async/timeout/_module.js +2 -0
  234. package/dist/esm/async/timeout/_module.js.map +1 -0
  235. package/dist/esm/async/timeout/timeout.js +25 -0
  236. package/dist/esm/async/timeout/timeout.js.map +1 -0
  237. package/dist/esm/async/timeout-iterable/_module.js +2 -0
  238. package/dist/esm/async/timeout-iterable/_module.js.map +1 -0
  239. package/dist/esm/async/timeout-iterable/timeout-iterable.js +8 -0
  240. package/dist/esm/async/timeout-iterable/timeout-iterable.js.map +1 -0
  241. package/dist/esm/collection/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -1
  242. package/dist/esm/collection/async-iterable-collection/async-iterable-collection.js.map +1 -1
  243. package/dist/esm/collection/iterable-collection/_shared/cross-join-iterable.js.map +1 -1
  244. package/dist/esm/contracts/_module.js +2 -0
  245. package/dist/esm/contracts/_module.js.map +1 -1
  246. package/dist/esm/contracts/collection/_module.js.map +1 -1
  247. package/dist/esm/contracts/serializer/_module.js +2 -0
  248. package/dist/esm/contracts/serializer/_module.js.map +1 -0
  249. package/dist/esm/contracts/serializer/serializer.contract.js +19 -0
  250. package/dist/esm/contracts/serializer/serializer.contract.js.map +1 -0
  251. package/dist/esm/contracts/storage/_module.js +4 -0
  252. package/dist/esm/contracts/storage/_module.js.map +1 -0
  253. package/dist/esm/contracts/storage/_shared.js +25 -0
  254. package/dist/esm/contracts/storage/_shared.js.map +1 -0
  255. package/dist/esm/contracts/storage/storage-adapter.contract.js +1 -0
  256. package/dist/esm/contracts/storage/storage-adapter.contract.js.map +1 -0
  257. package/dist/esm/contracts/storage/storage.contract.js +1 -0
  258. package/dist/esm/contracts/storage/storage.contract.js.map +1 -0
  259. package/dist/esm/serializer/_module.js +6 -0
  260. package/dist/esm/serializer/_module.js.map +1 -0
  261. package/dist/esm/serializer/_shared/test-utilities/_module.js +2 -0
  262. package/dist/esm/serializer/_shared/test-utilities/_module.js.map +1 -0
  263. package/dist/esm/serializer/_shared/test-utilities/serializer.test-suite.js +358 -0
  264. package/dist/esm/serializer/_shared/test-utilities/serializer.test-suite.js.map +1 -0
  265. package/dist/esm/serializer/mongodb-serializer/_module.js +2 -0
  266. package/dist/esm/serializer/mongodb-serializer/_module.js.map +1 -0
  267. package/dist/esm/serializer/mongodb-serializer/mongodb-serializer.js +32 -0
  268. package/dist/esm/serializer/mongodb-serializer/mongodb-serializer.js.map +1 -0
  269. package/dist/esm/serializer/redis-serializer/_module.js +2 -0
  270. package/dist/esm/serializer/redis-serializer/_module.js.map +1 -0
  271. package/dist/esm/serializer/redis-serializer/redis-serializer.js +33 -0
  272. package/dist/esm/serializer/redis-serializer/redis-serializer.js.map +1 -0
  273. package/dist/esm/serializer/sql-serializer/_module.js +2 -0
  274. package/dist/esm/serializer/sql-serializer/_module.js.map +1 -0
  275. package/dist/esm/serializer/sql-serializer/sql-serializer.js +33 -0
  276. package/dist/esm/serializer/sql-serializer/sql-serializer.js.map +1 -0
  277. package/dist/esm/serializer/super-json-serializer/_module.js +2 -0
  278. package/dist/esm/serializer/super-json-serializer/_module.js.map +1 -0
  279. package/dist/esm/serializer/super-json-serializer/super-json-serializer.js +277 -0
  280. package/dist/esm/serializer/super-json-serializer/super-json-serializer.js.map +1 -0
  281. package/dist/esm/storage/_module.js +7 -0
  282. package/dist/esm/storage/_module.js.map +1 -0
  283. package/dist/esm/storage/_shared/test-utilities/_module.js +2 -0
  284. package/dist/esm/storage/_shared/test-utilities/_module.js.map +1 -0
  285. package/dist/esm/storage/_shared/test-utilities/storage-api.test-suite.js +569 -0
  286. package/dist/esm/storage/_shared/test-utilities/storage-api.test-suite.js.map +1 -0
  287. package/dist/esm/storage/_shared/test-utilities/storage-namespace.test-suite.js +238 -0
  288. package/dist/esm/storage/_shared/test-utilities/storage-namespace.test-suite.js.map +1 -0
  289. package/dist/esm/storage/_shared/test-utilities/storage-value.test-suite.js +4169 -0
  290. package/dist/esm/storage/_shared/test-utilities/storage-value.test-suite.js.map +1 -0
  291. package/dist/esm/storage/_shared/test-utilities/storage.test-suite.js +9 -0
  292. package/dist/esm/storage/_shared/test-utilities/storage.test-suite.js.map +1 -0
  293. package/dist/esm/storage/memory-storage-adapter/_module.js +2 -0
  294. package/dist/esm/storage/memory-storage-adapter/_module.js.map +1 -0
  295. package/dist/esm/storage/memory-storage-adapter/memory-storage-adapter.js +58 -0
  296. package/dist/esm/storage/memory-storage-adapter/memory-storage-adapter.js.map +1 -0
  297. package/dist/esm/storage/mongodb-storage-adapter/_module.js +2 -0
  298. package/dist/esm/storage/mongodb-storage-adapter/_module.js.map +1 -0
  299. package/dist/esm/storage/mongodb-storage-adapter/mongodb-storage-adapter.js +266 -0
  300. package/dist/esm/storage/mongodb-storage-adapter/mongodb-storage-adapter.js.map +1 -0
  301. package/dist/esm/storage/namespace-storage-adapter.js +62 -0
  302. package/dist/esm/storage/namespace-storage-adapter.js.map +1 -0
  303. package/dist/esm/storage/redis-storage-adapter/_module.js +2 -0
  304. package/dist/esm/storage/redis-storage-adapter/_module.js.map +1 -0
  305. package/dist/esm/storage/redis-storage-adapter/redis-storage-adapter.js +244 -0
  306. package/dist/esm/storage/redis-storage-adapter/redis-storage-adapter.js.map +1 -0
  307. package/dist/esm/storage/sqlite/_module.js +3 -0
  308. package/dist/esm/storage/sqlite/_module.js.map +1 -0
  309. package/dist/esm/storage/sqlite/_shared/_module.js +2 -0
  310. package/dist/esm/storage/sqlite/_shared/_module.js.map +1 -0
  311. package/dist/esm/storage/sqlite/_shared/base-sqlite-storage-adapter.js +220 -0
  312. package/dist/esm/storage/sqlite/_shared/base-sqlite-storage-adapter.js.map +1 -0
  313. package/dist/esm/storage/sqlite/libsql-storage-adapter/_module.js +2 -0
  314. package/dist/esm/storage/sqlite/libsql-storage-adapter/_module.js.map +1 -0
  315. package/dist/esm/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js +49 -0
  316. package/dist/esm/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js.map +1 -0
  317. package/dist/esm/storage/sqlite/sqlite-storage-adapter/_module.js +2 -0
  318. package/dist/esm/storage/sqlite/sqlite-storage-adapter/_module.js.map +1 -0
  319. package/dist/esm/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js +48 -0
  320. package/dist/esm/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js.map +1 -0
  321. package/dist/esm/storage/storage.js +297 -0
  322. package/dist/esm/storage/storage.js.map +1 -0
  323. package/dist/esm/storage/usable-storage-adapter.js +98 -0
  324. package/dist/esm/storage/usable-storage-adapter.js.map +1 -0
  325. package/dist/esm/utilities/_module.js +2 -0
  326. package/dist/esm/utilities/_module.js.map +1 -0
  327. package/dist/esm/utilities/time-span/_module.js +2 -0
  328. package/dist/esm/utilities/time-span/_module.js.map +1 -0
  329. package/dist/esm/utilities/time-span/time-span.js +99 -0
  330. package/dist/esm/utilities/time-span/time-span.js.map +1 -0
  331. package/dist/types/_module.d.ts +5 -1
  332. package/dist/types/_shared/kysely/_module.d.ts +1 -0
  333. package/dist/types/_shared/kysely/kysely-table-name-transformer-plugin.d.ts +13 -0
  334. package/dist/types/_shared/redis/_module.d.ts +3 -0
  335. package/dist/types/_shared/redis/clear-iterable.d.ts +13 -0
  336. package/dist/types/_shared/redis/escape-redis-chars.d.ts +7 -0
  337. package/dist/types/_shared/redis/is-redis-type-error.d.ts +7 -0
  338. package/dist/types/_shared/types.d.ts +15 -2
  339. package/dist/types/_shared/utilities.d.ts +5 -1
  340. package/dist/types/async/_module.d.ts +10 -0
  341. package/dist/types/async/_shared.d.ts +35 -0
  342. package/dist/types/async/abortable/_module.d.ts +1 -0
  343. package/dist/types/async/abortable/abortable.d.ts +39 -0
  344. package/dist/types/async/abortable-iterable/_module.d.ts +1 -0
  345. package/dist/types/async/abortable-iterable/abortable-iterable.d.ts +36 -0
  346. package/dist/types/async/backof-policies/_module.d.ts +5 -0
  347. package/dist/types/async/backof-policies/_shared.d.ts +12 -0
  348. package/dist/types/async/backof-policies/constant-backoff-policy/_module.d.ts +1 -0
  349. package/dist/types/async/backof-policies/constant-backoff-policy/constant-backoff-policy.d.ts +28 -0
  350. package/dist/types/async/backof-policies/exponential-backoff-policy/_module.d.ts +1 -0
  351. package/dist/types/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.d.ts +36 -0
  352. package/dist/types/async/backof-policies/linear-backoff-policy/_module.d.ts +1 -0
  353. package/dist/types/async/backof-policies/linear-backoff-policy/linear-backoff-policy.d.ts +32 -0
  354. package/dist/types/async/backof-policies/polynomial-backoff-policy/_module.d.ts +1 -0
  355. package/dist/types/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.d.ts +36 -0
  356. package/dist/types/async/delay/_module.d.ts +1 -0
  357. package/dist/types/async/delay/delay.d.ts +38 -0
  358. package/dist/types/async/delay-iterable/_module.d.ts +1 -0
  359. package/dist/types/async/delay-iterable/delay-iterable.d.ts +57 -0
  360. package/dist/types/async/lazy-promise/_module.d.ts +1 -0
  361. package/dist/types/async/lazy-promise/lazy-promise.d.ts +28 -0
  362. package/dist/types/async/retry/_module.d.ts +1 -0
  363. package/dist/types/async/retry/retry.d.ts +86 -0
  364. package/dist/types/async/retry-iterable/_module.d.ts +1 -0
  365. package/dist/types/async/retry-iterable/retry-iterable.d.ts +86 -0
  366. package/dist/types/async/timeout/_module.d.ts +1 -0
  367. package/dist/types/async/timeout/timeout.d.ts +40 -0
  368. package/dist/types/async/timeout-iterable/_module.d.ts +1 -0
  369. package/dist/types/async/timeout-iterable/timeout-iterable.d.ts +64 -0
  370. package/dist/types/collection/_shared.d.ts +1 -1
  371. package/dist/types/collection/async-iterable-collection/_shared/async-cross-join-iterable.d.ts +2 -1
  372. package/dist/types/collection/async-iterable-collection/_shared/async-group-by-iterable.d.ts +1 -1
  373. package/dist/types/collection/async-iterable-collection/async-iterable-collection.d.ts +2 -2
  374. package/dist/types/collection/iterable-collection/_shared/cross-join-iterable.d.ts +1 -1
  375. package/dist/types/collection/iterable-collection/_shared/group-by-iterable.d.ts +1 -1
  376. package/dist/types/collection/iterable-collection/iterable-collection.d.ts +1 -1
  377. package/dist/types/collection/list-collection/list-collection.d.ts +1 -1
  378. package/dist/types/contracts/_module.d.ts +2 -0
  379. package/dist/types/contracts/collection/_module.d.ts +0 -3
  380. package/dist/types/contracts/collection/_shared.d.ts +1 -1
  381. package/dist/types/contracts/collection/async-collection.contract.d.ts +3 -3
  382. package/dist/types/contracts/collection/collection.contract.d.ts +3 -3
  383. package/dist/types/contracts/serializer/_module.d.ts +1 -0
  384. package/dist/types/contracts/serializer/serializer.contract.d.ts +37 -0
  385. package/dist/types/contracts/storage/_module.d.ts +3 -0
  386. package/dist/types/contracts/storage/_shared.d.ts +27 -0
  387. package/dist/types/contracts/storage/storage-adapter.contract.d.ts +72 -0
  388. package/dist/types/contracts/storage/storage.contract.d.ts +148 -0
  389. package/dist/types/serializer/_module.d.ts +5 -0
  390. package/dist/types/serializer/_shared/test-utilities/_module.d.ts +1 -0
  391. package/dist/types/serializer/_shared/test-utilities/serializer.test-suite.d.ts +18 -0
  392. package/dist/types/serializer/mongodb-serializer/_module.d.ts +1 -0
  393. package/dist/types/serializer/mongodb-serializer/mongodb-serializer.d.ts +13 -0
  394. package/dist/types/serializer/redis-serializer/_module.d.ts +1 -0
  395. package/dist/types/serializer/redis-serializer/redis-serializer.d.ts +13 -0
  396. package/dist/types/serializer/sql-serializer/_module.d.ts +1 -0
  397. package/dist/types/serializer/sql-serializer/sql-serializer.d.ts +13 -0
  398. package/dist/types/serializer/super-json-serializer/_module.d.ts +1 -0
  399. package/dist/types/serializer/super-json-serializer/super-json-serializer.d.ts +37 -0
  400. package/dist/types/storage/_module.d.ts +6 -0
  401. package/dist/types/storage/_shared/test-utilities/_module.d.ts +1 -0
  402. package/dist/types/storage/_shared/test-utilities/storage-api.test-suite.d.ts +20 -0
  403. package/dist/types/storage/_shared/test-utilities/storage-namespace.test-suite.d.ts +20 -0
  404. package/dist/types/storage/_shared/test-utilities/storage-value.test-suite.d.ts +20 -0
  405. package/dist/types/storage/_shared/test-utilities/storage.test-suite.d.ts +20 -0
  406. package/dist/types/storage/memory-storage-adapter/_module.d.ts +1 -0
  407. package/dist/types/storage/memory-storage-adapter/memory-storage-adapter.d.ts +16 -0
  408. package/dist/types/storage/mongodb-storage-adapter/_module.d.ts +1 -0
  409. package/dist/types/storage/mongodb-storage-adapter/mongodb-storage-adapter.d.ts +46 -0
  410. package/dist/types/storage/namespace-storage-adapter.d.ts +30 -0
  411. package/dist/types/storage/redis-storage-adapter/_module.d.ts +1 -0
  412. package/dist/types/storage/redis-storage-adapter/redis-storage-adapter.d.ts +41 -0
  413. package/dist/types/storage/sqlite/_module.d.ts +2 -0
  414. package/dist/types/storage/sqlite/_shared/_module.d.ts +1 -0
  415. package/dist/types/storage/sqlite/_shared/base-sqlite-storage-adapter.d.ts +42 -0
  416. package/dist/types/storage/sqlite/libsql-storage-adapter/_module.d.ts +1 -0
  417. package/dist/types/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.d.ts +30 -0
  418. package/dist/types/storage/sqlite/sqlite-storage-adapter/_module.d.ts +1 -0
  419. package/dist/types/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.d.ts +30 -0
  420. package/dist/types/storage/storage.d.ts +38 -0
  421. package/dist/types/storage/usable-storage-adapter.d.ts +22 -0
  422. package/dist/types/utilities/_module.d.ts +1 -0
  423. package/dist/types/utilities/time-span/_module.d.ts +1 -0
  424. package/dist/types/utilities/time-span/time-span.d.ts +50 -0
  425. package/package.json +41 -6
@@ -0,0 +1,4169 @@
1
+ import { Storage } from "../../../storage/_module";
2
+ export function storageValueTestSuite(settings) {
3
+ const { expect, test, createAdapter, describe, beforeEach } = settings;
4
+ let storage;
5
+ beforeEach(async () => {
6
+ storage = new Storage(await createAdapter());
7
+ });
8
+ describe("Value tests:", () => {
9
+ describe("method: get / add", () => {
10
+ test("Should work with positive integer", async () => {
11
+ const value = 1;
12
+ await storage.add("a", value);
13
+ expect(await storage.get("a")).toBe(value);
14
+ });
15
+ test("Should work with negative integer", async () => {
16
+ const value = -1;
17
+ await storage.add("a", value);
18
+ expect(await storage.get("a")).toBe(value);
19
+ });
20
+ test("Should work with positive decimal", async () => {
21
+ const value = 1.5;
22
+ await storage.add("a", value);
23
+ expect(await storage.get("a")).toBe(value);
24
+ });
25
+ test("Should work with negative decimal", async () => {
26
+ const value = -1.5;
27
+ await storage.add("a", value);
28
+ expect(await storage.get("a")).toBe(value);
29
+ });
30
+ test("Should work with NaN", async () => {
31
+ const value = NaN;
32
+ await storage.add("a", value);
33
+ const getResult = await storage.get("a");
34
+ expect(getResult).toBeNaN();
35
+ });
36
+ test("Should work with Infinity", async () => {
37
+ const value = Infinity;
38
+ await storage.add("a", value);
39
+ const getResult = await storage.get("a");
40
+ expect(isFinite(getResult)).toBe(false);
41
+ });
42
+ test("Should work with Bigint", async () => {
43
+ const value = 20n;
44
+ await storage.add("a", value);
45
+ expect(await storage.get("a")).toBe(value);
46
+ });
47
+ test("Should work with true", async () => {
48
+ const value = true;
49
+ await storage.add("a", value);
50
+ expect(await storage.get("a")).toBe(value);
51
+ });
52
+ test("Should work with false", async () => {
53
+ const value = false;
54
+ await storage.add("a", value);
55
+ expect(await storage.get("a")).toBe(value);
56
+ });
57
+ test("Should work with string", async () => {
58
+ const value = "str";
59
+ await storage.add("a", value);
60
+ expect(await storage.get("a")).toBe(value);
61
+ });
62
+ test("Should work with Date", async () => {
63
+ const value = new Date("2024-01-01");
64
+ await storage.add("a", value);
65
+ const getResult = await storage.get("a");
66
+ expect(getResult).toBeInstanceOf(Date);
67
+ expect(getResult).toEqual(value);
68
+ });
69
+ test("Should work with RegExp", async () => {
70
+ const value = /test/;
71
+ await storage.add("a", value);
72
+ const getResult = await storage.get("a");
73
+ expect(getResult).toBeInstanceOf(RegExp);
74
+ expect(getResult).toEqual(value);
75
+ });
76
+ test("Should work with Buffer", async () => {
77
+ const value = Buffer.from("asd");
78
+ await storage.add("a", value);
79
+ const getResult = await storage.get("a");
80
+ expect(getResult).toBeInstanceOf(Buffer);
81
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
82
+ });
83
+ test("Should work with Uint8Array", async () => {
84
+ const value = new Uint8Array(Buffer.from("asd"));
85
+ await storage.add("a", value);
86
+ const getResult = await storage.get("a");
87
+ expect(getResult).toBeInstanceOf(Uint8Array);
88
+ expect(getResult
89
+ ? Buffer.from(getResult).toString("base64")
90
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
91
+ });
92
+ test("Should work with Int8Array", async () => {
93
+ const value = new Int8Array(Buffer.from("asd"));
94
+ await storage.add("a", value);
95
+ const getResult = await storage.get("a");
96
+ expect(getResult).toBeInstanceOf(Int8Array);
97
+ expect(getResult
98
+ ? Buffer.from(getResult).toString("base64")
99
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
100
+ });
101
+ test("Should work with Uint16Array", async () => {
102
+ const value = new Uint16Array(Buffer.from("asd"));
103
+ await storage.add("a", value);
104
+ const getResult = await storage.get("a");
105
+ expect(getResult).toBeInstanceOf(Uint16Array);
106
+ expect(getResult
107
+ ? Buffer.from(getResult).toString("base64")
108
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
109
+ });
110
+ test("Should work with Int16Array", async () => {
111
+ const value = new Int16Array(Buffer.from("asd"));
112
+ await storage.add("a", value);
113
+ const getResult = await storage.get("a");
114
+ expect(getResult).toBeInstanceOf(Int16Array);
115
+ expect(getResult
116
+ ? Buffer.from(getResult).toString("base64")
117
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
118
+ });
119
+ test("Should work with Uint32Array", async () => {
120
+ const value = new Uint32Array(Buffer.from("asd"));
121
+ await storage.add("a", value);
122
+ const getResult = await storage.get("a");
123
+ expect(getResult).toBeInstanceOf(Uint32Array);
124
+ expect(getResult
125
+ ? Buffer.from(getResult).toString("base64")
126
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
127
+ });
128
+ test("Should work with Int32Array", async () => {
129
+ const value = new Int32Array(Buffer.from("asd"));
130
+ await storage.add("a", value);
131
+ const getResult = await storage.get("a");
132
+ expect(getResult).toBeInstanceOf(Int32Array);
133
+ expect(getResult
134
+ ? Buffer.from(getResult).toString("base64")
135
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
136
+ });
137
+ test("Should work with Float32Array", async () => {
138
+ const value = new Float32Array(Buffer.from("asd"));
139
+ await storage.add("a", value);
140
+ const getResult = await storage.get("a");
141
+ expect(getResult).toBeInstanceOf(Float32Array);
142
+ expect(getResult
143
+ ? Buffer.from(getResult).toString("base64")
144
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
145
+ });
146
+ test("Should work with Float64Array", async () => {
147
+ const value = new Float64Array(Buffer.from("asd"));
148
+ await storage.add("a", value);
149
+ const getResult = await storage.get("a");
150
+ expect(getResult).toBeInstanceOf(Float64Array);
151
+ expect(getResult
152
+ ? Buffer.from(getResult).toString("base64")
153
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
154
+ });
155
+ test("Should work with Set", async () => {
156
+ const value = new Set(["a", "b", "c"]);
157
+ await storage.add("a", value);
158
+ const getResult = await storage.get("a");
159
+ expect(getResult).toBeInstanceOf(Set);
160
+ expect(getResult).toEqual(value);
161
+ });
162
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
163
+ const value = new Set([
164
+ 0,
165
+ -1,
166
+ 1,
167
+ -1.5,
168
+ 1.5,
169
+ NaN,
170
+ Infinity,
171
+ 2n,
172
+ true,
173
+ false,
174
+ "str",
175
+ new Date("2024-01-01"),
176
+ new Set(["a", "b", "c"]),
177
+ new Map([
178
+ ["a", 1],
179
+ ["b", 2],
180
+ ["c", 3],
181
+ ]),
182
+ { a: 1, b: 2 },
183
+ [1, 2, 3],
184
+ /test/,
185
+ ]);
186
+ await storage.add("a", value);
187
+ const getResult = await storage.get("a");
188
+ expect(getResult).toBeInstanceOf(Set);
189
+ expect(getResult).toEqual(value);
190
+ });
191
+ test("Should work with Map", async () => {
192
+ const value = new Map([
193
+ ["a", 1],
194
+ ["b", 2],
195
+ ["c", 3],
196
+ ]);
197
+ await storage.add("a", value);
198
+ const getResult = await storage.get("a");
199
+ expect(getResult).toBeInstanceOf(Map);
200
+ expect(getResult).toEqual(value);
201
+ });
202
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
203
+ const value = new Map([
204
+ ["a", 0],
205
+ ["b", -1],
206
+ ["c", 1],
207
+ ["d", -1.5],
208
+ ["e", 1.5],
209
+ ["f", NaN],
210
+ ["g", Infinity],
211
+ ["h", 2n],
212
+ ["j", true],
213
+ ["l", false],
214
+ ["i", "str"],
215
+ ["r", new Date("2024-01-01")],
216
+ ["k", new Set(["a", "b", "c"])],
217
+ [
218
+ "p",
219
+ new Map([
220
+ ["a", 1],
221
+ ["b", 2],
222
+ ["c", 3],
223
+ ]),
224
+ ],
225
+ ["a", /test/],
226
+ [1, { a: 2, b: -1 }],
227
+ [2, [1, 2, 3]],
228
+ ]);
229
+ await storage.add("a", value);
230
+ const getResult = await storage.get("a");
231
+ expect(getResult).toBeInstanceOf(Map);
232
+ expect(getResult).toEqual(value);
233
+ });
234
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
235
+ const value = new Map([
236
+ [0, "a"],
237
+ [-1, "a"],
238
+ [1, "a"],
239
+ [-1.5, "a"],
240
+ [1.5, "a"],
241
+ [NaN, "a"],
242
+ [Infinity, "a"],
243
+ [2n, "a"],
244
+ [true, "a"],
245
+ [false, "a"],
246
+ ["str", "a"],
247
+ [new Date("2024-01-01"), "a"],
248
+ [new Set(["a", "b", "c"]), "a"],
249
+ [
250
+ new Map([
251
+ ["a", 1],
252
+ ["b", 2],
253
+ ["c", 3],
254
+ ]),
255
+ "a",
256
+ ],
257
+ [/test/, "a"],
258
+ [{ a: 2, b: -1 }, 1],
259
+ [[1, 2, 3], 2],
260
+ ]);
261
+ await storage.add("a", value);
262
+ const getResult = await storage.get("a");
263
+ expect(getResult).toBeInstanceOf(Map);
264
+ expect(getResult).toEqual(value);
265
+ });
266
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
267
+ const value = [
268
+ 0,
269
+ -1,
270
+ 1,
271
+ -1.5,
272
+ 1.5,
273
+ NaN,
274
+ Infinity,
275
+ 2n,
276
+ true,
277
+ false,
278
+ "str",
279
+ new Date("2024-01-01"),
280
+ new Set(["a", "b", "c"]),
281
+ new Map([
282
+ ["a", 1],
283
+ ["b", 2],
284
+ ["c", 3],
285
+ ]),
286
+ /test/,
287
+ ];
288
+ await storage.add("a", value);
289
+ const getResult = await storage.get("a");
290
+ expect(getResult).toEqual(value);
291
+ });
292
+ test("Should work with array of objects", async () => {
293
+ const value = [
294
+ Object.fromEntries([
295
+ ["a", 0],
296
+ ["b", -1],
297
+ ["c", 1],
298
+ ["d", -1.5],
299
+ ["e", 1.5],
300
+ ["f", NaN],
301
+ ["g", Infinity],
302
+ ["h", 2n],
303
+ ["j", true],
304
+ ["l", false],
305
+ ["i", "str"],
306
+ ["r", new Date("2024-01-01")],
307
+ ["k", new Set(["a", "b", "c"])],
308
+ [
309
+ "p",
310
+ new Map([
311
+ ["a", 1],
312
+ ["b", 2],
313
+ ["c", 3],
314
+ ]),
315
+ ],
316
+ ["a", /test/],
317
+ ]),
318
+ ];
319
+ await storage.add("a", value);
320
+ const getResult = await storage.get("a");
321
+ expect(getResult).toEqual(value);
322
+ });
323
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
324
+ const value = Object.fromEntries([
325
+ ["a", 0],
326
+ ["b", -1],
327
+ ["c", 1],
328
+ ["d", -1.5],
329
+ ["e", 1.5],
330
+ ["f", NaN],
331
+ ["g", Infinity],
332
+ ["h", 2n],
333
+ ["j", true],
334
+ ["l", false],
335
+ ["i", "str"],
336
+ ["r", new Date("2024-01-01")],
337
+ ["k", new Set(["a", "b", "c"])],
338
+ [
339
+ "p",
340
+ new Map([
341
+ ["a", 1],
342
+ ["b", 2],
343
+ ["c", 3],
344
+ ]),
345
+ ],
346
+ ["a", /test/],
347
+ ]);
348
+ await storage.add("a", value);
349
+ const getResult = await storage.get("a");
350
+ expect(getResult).toEqual(value);
351
+ });
352
+ test("Should work with object of arrays", async () => {
353
+ const value = {
354
+ a: [
355
+ 0,
356
+ -1,
357
+ 1,
358
+ -1.5,
359
+ 1.5,
360
+ NaN,
361
+ Infinity,
362
+ 2n,
363
+ true,
364
+ false,
365
+ "str",
366
+ new Date("2024-01-01"),
367
+ new Set(["a", "b", "c"]),
368
+ new Map([
369
+ ["a", 1],
370
+ ["b", 2],
371
+ ["c", 3],
372
+ ]),
373
+ /test/,
374
+ ],
375
+ };
376
+ await storage.add("a", value);
377
+ const getResult = await storage.get("a");
378
+ expect(getResult).toEqual(value);
379
+ });
380
+ });
381
+ describe("method: getMany / addMany", () => {
382
+ test("Should work with positive integer", async () => {
383
+ const value = 1;
384
+ await storage.addMany({ a: value });
385
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
386
+ });
387
+ test("Should work with negative integer", async () => {
388
+ const value = -1;
389
+ await storage.addMany({ a: value });
390
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
391
+ });
392
+ test("Should work with positive decimal", async () => {
393
+ const value = 1.5;
394
+ await storage.addMany({ a: value });
395
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
396
+ });
397
+ test("Should work with negative decimal", async () => {
398
+ const value = -1.5;
399
+ await storage.addMany({ a: value });
400
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
401
+ });
402
+ test("Should work with NaN", async () => {
403
+ const value = NaN;
404
+ await storage.addMany({ a: value });
405
+ const { a: getResult } = await storage.getMany(["a"]);
406
+ expect(getResult).toBeNaN();
407
+ });
408
+ test("Should work with Infinity", async () => {
409
+ const value = Infinity;
410
+ await storage.addMany({ a: value });
411
+ const { a: getResult } = await storage.getMany(["a"]);
412
+ expect(isFinite(getResult)).toBe(false);
413
+ });
414
+ test("Should work with Bigint", async () => {
415
+ const value = 20n;
416
+ await storage.addMany({ a: value });
417
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
418
+ });
419
+ test("Should work with true", async () => {
420
+ const value = true;
421
+ await storage.addMany({ a: value });
422
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
423
+ });
424
+ test("Should work with false", async () => {
425
+ const value = false;
426
+ await storage.addMany({ a: value });
427
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
428
+ });
429
+ test("Should work with string", async () => {
430
+ const value = "str";
431
+ await storage.addMany({ a: value });
432
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
433
+ });
434
+ test("Should work with Date", async () => {
435
+ const value = new Date("2024-01-01");
436
+ await storage.addMany({ a: value });
437
+ const { a: getResult } = await storage.getMany(["a"]);
438
+ expect(getResult).toBeInstanceOf(Date);
439
+ expect(getResult).toEqual(value);
440
+ });
441
+ test("Should work with RegExp", async () => {
442
+ const value = /test/;
443
+ await storage.addMany({ a: value });
444
+ const { a: getResult } = await storage.getMany(["a"]);
445
+ expect(getResult).toBeInstanceOf(RegExp);
446
+ expect(getResult).toEqual(value);
447
+ });
448
+ test("Should work with Buffer", async () => {
449
+ const value = Buffer.from("asd");
450
+ await storage.addMany({ a: value });
451
+ const { a: getResult } = await storage.getMany([
452
+ "a",
453
+ ]);
454
+ expect(getResult).toBeInstanceOf(Buffer);
455
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
456
+ });
457
+ test("Should work with Uint8Array", async () => {
458
+ const value = new Uint8Array(Buffer.from("asd"));
459
+ await storage.addMany({ a: value });
460
+ const { a: getResult } = await storage.getMany(["a"]);
461
+ expect(getResult).toBeInstanceOf(Uint8Array);
462
+ expect(getResult
463
+ ? Buffer.from(getResult).toString("base64")
464
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
465
+ });
466
+ test("Should work with Int8Array", async () => {
467
+ const value = new Int8Array(Buffer.from("asd"));
468
+ await storage.addMany({ a: value });
469
+ const { a: getResult } = await storage.getMany(["a"]);
470
+ expect(getResult).toBeInstanceOf(Int8Array);
471
+ expect(getResult
472
+ ? Buffer.from(getResult).toString("base64")
473
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
474
+ });
475
+ test("Should work with Uint16Array", async () => {
476
+ const value = new Uint16Array(Buffer.from("asd"));
477
+ await storage.addMany({ a: value });
478
+ const { a: getResult } = await storage.getMany(["a"]);
479
+ expect(getResult).toBeInstanceOf(Uint16Array);
480
+ expect(getResult
481
+ ? Buffer.from(getResult).toString("base64")
482
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
483
+ });
484
+ test("Should work with Int16Array", async () => {
485
+ const value = new Int16Array(Buffer.from("asd"));
486
+ await storage.addMany({ a: value });
487
+ const { a: getResult } = await storage.getMany(["a"]);
488
+ expect(getResult).toBeInstanceOf(Int16Array);
489
+ expect(getResult
490
+ ? Buffer.from(getResult).toString("base64")
491
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
492
+ });
493
+ test("Should work with Uint32Array", async () => {
494
+ const value = new Uint32Array(Buffer.from("asd"));
495
+ await storage.addMany({ a: value });
496
+ const { a: getResult } = await storage.getMany(["a"]);
497
+ expect(getResult).toBeInstanceOf(Uint32Array);
498
+ expect(getResult
499
+ ? Buffer.from(getResult).toString("base64")
500
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
501
+ });
502
+ test("Should work with Int32Array", async () => {
503
+ const value = new Int32Array(Buffer.from("asd"));
504
+ await storage.addMany({ a: value });
505
+ const { a: getResult } = await storage.getMany(["a"]);
506
+ expect(getResult).toBeInstanceOf(Int32Array);
507
+ expect(getResult
508
+ ? Buffer.from(getResult).toString("base64")
509
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
510
+ });
511
+ test("Should work with Float32Array", async () => {
512
+ const value = new Float32Array(Buffer.from("asd"));
513
+ await storage.addMany({ a: value });
514
+ const { a: getResult } = await storage.getMany(["a"]);
515
+ expect(getResult).toBeInstanceOf(Float32Array);
516
+ expect(getResult
517
+ ? Buffer.from(getResult).toString("base64")
518
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
519
+ });
520
+ test("Should work with Float64Array", async () => {
521
+ const value = new Float64Array(Buffer.from("asd"));
522
+ await storage.addMany({ a: value });
523
+ const { a: getResult } = await storage.getMany(["a"]);
524
+ expect(getResult).toBeInstanceOf(Float64Array);
525
+ expect(getResult
526
+ ? Buffer.from(getResult).toString("base64")
527
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
528
+ });
529
+ test("Should work with Set", async () => {
530
+ const value = new Set(["a", "b", "c"]);
531
+ await storage.addMany({ a: value });
532
+ const { a: getResult } = await storage.getMany(["a"]);
533
+ expect(getResult).toBeInstanceOf(Set);
534
+ expect(getResult).toEqual(value);
535
+ });
536
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
537
+ const value = new Set([
538
+ 0,
539
+ -1,
540
+ 1,
541
+ -1.5,
542
+ 1.5,
543
+ NaN,
544
+ Infinity,
545
+ 2n,
546
+ true,
547
+ false,
548
+ "str",
549
+ new Date("2024-01-01"),
550
+ new Set(["a", "b", "c"]),
551
+ new Map([
552
+ ["a", 1],
553
+ ["b", 2],
554
+ ["c", 3],
555
+ ]),
556
+ { a: 1, b: 2 },
557
+ [1, 2, 3],
558
+ /test/,
559
+ ]);
560
+ await storage.addMany({ a: value });
561
+ const { a: getResult } = await storage.getMany(["a"]);
562
+ expect(getResult).toBeInstanceOf(Set);
563
+ expect(getResult).toEqual(value);
564
+ });
565
+ test("Should work with Map", async () => {
566
+ const value = new Map([
567
+ ["a", 1],
568
+ ["b", 2],
569
+ ["c", 3],
570
+ ]);
571
+ await storage.addMany({ a: value });
572
+ const { a: getResult } = await storage.getMany(["a"]);
573
+ expect(getResult).toBeInstanceOf(Map);
574
+ expect(getResult).toEqual(value);
575
+ });
576
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
577
+ const value = new Map([
578
+ ["a", 0],
579
+ ["b", -1],
580
+ ["c", 1],
581
+ ["d", -1.5],
582
+ ["e", 1.5],
583
+ ["f", NaN],
584
+ ["g", Infinity],
585
+ ["h", 2n],
586
+ ["j", true],
587
+ ["l", false],
588
+ ["i", "str"],
589
+ ["r", new Date("2024-01-01")],
590
+ ["k", new Set(["a", "b", "c"])],
591
+ [
592
+ "p",
593
+ new Map([
594
+ ["a", 1],
595
+ ["b", 2],
596
+ ["c", 3],
597
+ ]),
598
+ ],
599
+ ["a", /test/],
600
+ [1, { a: 2, b: -1 }],
601
+ [2, [1, 2, 3]],
602
+ ]);
603
+ await storage.addMany({ a: value });
604
+ const { a: getResult } = await storage.getMany(["a"]);
605
+ expect(getResult).toBeInstanceOf(Map);
606
+ expect(getResult).toEqual(value);
607
+ });
608
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
609
+ const value = new Map([
610
+ [0, "a"],
611
+ [-1, "a"],
612
+ [1, "a"],
613
+ [-1.5, "a"],
614
+ [1.5, "a"],
615
+ [NaN, "a"],
616
+ [Infinity, "a"],
617
+ [2n, "a"],
618
+ [true, "a"],
619
+ [false, "a"],
620
+ ["str", "a"],
621
+ [new Date("2024-01-01"), "a"],
622
+ [new Set(["a", "b", "c"]), "a"],
623
+ [
624
+ new Map([
625
+ ["a", 1],
626
+ ["b", 2],
627
+ ["c", 3],
628
+ ]),
629
+ "a",
630
+ ],
631
+ [/test/, "a"],
632
+ [{ a: 2, b: -1 }, 1],
633
+ [[1, 2, 3], 2],
634
+ ]);
635
+ await storage.addMany({ a: value });
636
+ const { a: getResult } = await storage.getMany(["a"]);
637
+ expect(getResult).toBeInstanceOf(Map);
638
+ expect(getResult).toEqual(value);
639
+ });
640
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
641
+ const value = [
642
+ 0,
643
+ -1,
644
+ 1,
645
+ -1.5,
646
+ 1.5,
647
+ NaN,
648
+ Infinity,
649
+ 2n,
650
+ true,
651
+ false,
652
+ "str",
653
+ new Date("2024-01-01"),
654
+ new Set(["a", "b", "c"]),
655
+ new Map([
656
+ ["a", 1],
657
+ ["b", 2],
658
+ ["c", 3],
659
+ ]),
660
+ /test/,
661
+ ];
662
+ await storage.addMany({ a: value });
663
+ const getResult = await storage.getMany(["a"]);
664
+ expect(getResult).toEqual({ a: value });
665
+ });
666
+ test("Should work with array of objects", async () => {
667
+ const value = [
668
+ Object.fromEntries([
669
+ ["a", 0],
670
+ ["b", -1],
671
+ ["c", 1],
672
+ ["d", -1.5],
673
+ ["e", 1.5],
674
+ ["f", NaN],
675
+ ["g", Infinity],
676
+ ["h", 2n],
677
+ ["j", true],
678
+ ["l", false],
679
+ ["i", "str"],
680
+ ["r", new Date("2024-01-01")],
681
+ ["k", new Set(["a", "b", "c"])],
682
+ [
683
+ "p",
684
+ new Map([
685
+ ["a", 1],
686
+ ["b", 2],
687
+ ["c", 3],
688
+ ]),
689
+ ],
690
+ ["a", /test/],
691
+ ]),
692
+ ];
693
+ await storage.addMany({ a: value });
694
+ const { a: getResult } = await storage.getMany(["a"]);
695
+ expect(getResult).toEqual(value);
696
+ });
697
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
698
+ const value = Object.fromEntries([
699
+ ["a", 0],
700
+ ["b", -1],
701
+ ["c", 1],
702
+ ["d", -1.5],
703
+ ["e", 1.5],
704
+ ["f", NaN],
705
+ ["g", Infinity],
706
+ ["h", 2n],
707
+ ["j", true],
708
+ ["l", false],
709
+ ["i", "str"],
710
+ ["r", new Date("2024-01-01")],
711
+ ["k", new Set(["a", "b", "c"])],
712
+ [
713
+ "p",
714
+ new Map([
715
+ ["a", 1],
716
+ ["b", 2],
717
+ ["c", 3],
718
+ ]),
719
+ ],
720
+ ["a", /test/],
721
+ ]);
722
+ await storage.addMany({ a: value });
723
+ const { a: getResult } = await storage.getMany(["a"]);
724
+ expect(getResult).toEqual(value);
725
+ });
726
+ test("Should work with object of arrays", async () => {
727
+ const value = {
728
+ a: [
729
+ 0,
730
+ -1,
731
+ 1,
732
+ -1.5,
733
+ 1.5,
734
+ NaN,
735
+ Infinity,
736
+ 2n,
737
+ true,
738
+ false,
739
+ "str",
740
+ new Date("2024-01-01"),
741
+ new Set(["a", "b", "c"]),
742
+ new Map([
743
+ ["a", 1],
744
+ ["b", 2],
745
+ ["c", 3],
746
+ ]),
747
+ /test/,
748
+ ],
749
+ };
750
+ await storage.addMany({ a: value });
751
+ const { a: getResult } = await storage.getMany(["a"]);
752
+ expect(getResult).toEqual(value);
753
+ });
754
+ });
755
+ describe("method: getOr", () => {
756
+ test("Should work with positive integer", async () => {
757
+ const value = 1;
758
+ await storage.add("a", value);
759
+ expect(await storage.getOr("a", -1)).toBe(value);
760
+ });
761
+ test("Should work with negative integer", async () => {
762
+ const value = -1;
763
+ await storage.add("a", value);
764
+ expect(await storage.getOr("a", -1)).toBe(value);
765
+ });
766
+ test("Should work with positive decimal", async () => {
767
+ const value = 1.5;
768
+ await storage.add("a", value);
769
+ expect(await storage.getOr("a", -1)).toBe(value);
770
+ });
771
+ test("Should work with negative decimal", async () => {
772
+ const value = -1.5;
773
+ await storage.add("a", value);
774
+ expect(await storage.getOr("a", -1)).toBe(value);
775
+ });
776
+ test("Should work with NaN", async () => {
777
+ const value = NaN;
778
+ await storage.add("a", value);
779
+ const getResult = await storage.getOr("a", -1);
780
+ expect(getResult).toBeNaN();
781
+ });
782
+ test("Should work with Infinity", async () => {
783
+ const value = Infinity;
784
+ await storage.add("a", value);
785
+ const getResult = await storage.getOr("a", -1);
786
+ expect(isFinite(getResult)).toBe(false);
787
+ });
788
+ test("Should work with Bigint", async () => {
789
+ const value = 20n;
790
+ await storage.add("a", value);
791
+ expect(await storage.getOr("a", -1)).toBe(value);
792
+ });
793
+ test("Should work with true", async () => {
794
+ const value = true;
795
+ await storage.add("a", value);
796
+ expect(await storage.getOr("a", -1)).toBe(value);
797
+ });
798
+ test("Should work with false", async () => {
799
+ const value = false;
800
+ await storage.add("a", value);
801
+ expect(await storage.getOr("a", -1)).toBe(value);
802
+ });
803
+ test("Should work with string", async () => {
804
+ const value = "str";
805
+ await storage.add("a", value);
806
+ expect(await storage.getOr("a", -1)).toBe(value);
807
+ });
808
+ test("Should work with Date", async () => {
809
+ const value = new Date("2024-01-01");
810
+ await storage.add("a", value);
811
+ const getResult = await storage.getOr("a", -1);
812
+ expect(getResult).toBeInstanceOf(Date);
813
+ expect(getResult).toEqual(value);
814
+ });
815
+ test("Should work with RegExp", async () => {
816
+ const value = /test/;
817
+ await storage.add("a", value);
818
+ const getResult = await storage.getOr("a", -1);
819
+ expect(getResult).toBeInstanceOf(RegExp);
820
+ expect(getResult).toEqual(value);
821
+ });
822
+ test("Should work with Buffer", async () => {
823
+ const value = Buffer.from("asd");
824
+ await storage.add("a", value);
825
+ const getResult = await storage.getOr("a", null);
826
+ expect(getResult).toBeInstanceOf(Buffer);
827
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
828
+ });
829
+ test("Should work with Uint8Array", async () => {
830
+ const value = new Uint8Array(Buffer.from("asd"));
831
+ await storage.add("a", value);
832
+ const getResult = await storage.getOr("a", null);
833
+ expect(getResult).toBeInstanceOf(Uint8Array);
834
+ expect(getResult
835
+ ? Buffer.from(getResult).toString("base64")
836
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
837
+ });
838
+ test("Should work with Int8Array", async () => {
839
+ const value = new Int8Array(Buffer.from("asd"));
840
+ await storage.add("a", value);
841
+ const getResult = await storage.getOr("a", null);
842
+ expect(getResult).toBeInstanceOf(Int8Array);
843
+ expect(getResult
844
+ ? Buffer.from(getResult).toString("base64")
845
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
846
+ });
847
+ test("Should work with Uint16Array", async () => {
848
+ const value = new Uint16Array(Buffer.from("asd"));
849
+ await storage.add("a", value);
850
+ const getResult = await storage.getOr("a", null);
851
+ expect(getResult).toBeInstanceOf(Uint16Array);
852
+ expect(getResult
853
+ ? Buffer.from(getResult).toString("base64")
854
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
855
+ });
856
+ test("Should work with Int16Array", async () => {
857
+ const value = new Int16Array(Buffer.from("asd"));
858
+ await storage.add("a", value);
859
+ const getResult = await storage.getOr("a", null);
860
+ expect(getResult).toBeInstanceOf(Int16Array);
861
+ expect(getResult
862
+ ? Buffer.from(getResult).toString("base64")
863
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
864
+ });
865
+ test("Should work with Uint32Array", async () => {
866
+ const value = new Uint32Array(Buffer.from("asd"));
867
+ await storage.add("a", value);
868
+ const getResult = await storage.getOr("a", null);
869
+ expect(getResult).toBeInstanceOf(Uint32Array);
870
+ expect(getResult
871
+ ? Buffer.from(getResult).toString("base64")
872
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
873
+ });
874
+ test("Should work with Int32Array", async () => {
875
+ const value = new Int32Array(Buffer.from("asd"));
876
+ await storage.add("a", value);
877
+ const getResult = await storage.getOr("a", null);
878
+ expect(getResult).toBeInstanceOf(Int32Array);
879
+ expect(getResult
880
+ ? Buffer.from(getResult).toString("base64")
881
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
882
+ });
883
+ test("Should work with Float32Array", async () => {
884
+ const value = new Float32Array(Buffer.from("asd"));
885
+ await storage.add("a", value);
886
+ const getResult = await storage.getOr("a", null);
887
+ expect(getResult).toBeInstanceOf(Float32Array);
888
+ expect(getResult
889
+ ? Buffer.from(getResult).toString("base64")
890
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
891
+ });
892
+ test("Should work with Float64Array", async () => {
893
+ const value = new Float64Array(Buffer.from("asd"));
894
+ await storage.add("a", value);
895
+ const getResult = await storage.getOr("a", null);
896
+ expect(getResult).toBeInstanceOf(Float64Array);
897
+ expect(getResult
898
+ ? Buffer.from(getResult).toString("base64")
899
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
900
+ });
901
+ test("Should work with Set", async () => {
902
+ const value = new Set(["a", "b", "c"]);
903
+ await storage.add("a", value);
904
+ const getResult = await storage.getOr("a", -1);
905
+ expect(getResult).toBeInstanceOf(Set);
906
+ expect(getResult).toEqual(value);
907
+ });
908
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
909
+ const value = new Set([
910
+ 0,
911
+ -1,
912
+ 1,
913
+ -1.5,
914
+ 1.5,
915
+ NaN,
916
+ Infinity,
917
+ 2n,
918
+ true,
919
+ false,
920
+ "str",
921
+ new Date("2024-01-01"),
922
+ new Set(["a", "b", "c"]),
923
+ new Map([
924
+ ["a", 1],
925
+ ["b", 2],
926
+ ["c", 3],
927
+ ]),
928
+ { a: 1, b: 2 },
929
+ [1, 2, 3],
930
+ /test/,
931
+ ]);
932
+ await storage.add("a", value);
933
+ const getResult = await storage.getOr("a", -1);
934
+ expect(getResult).toBeInstanceOf(Set);
935
+ expect(getResult).toEqual(value);
936
+ });
937
+ test("Should work with Map", async () => {
938
+ const value = new Map([
939
+ ["a", 1],
940
+ ["b", 2],
941
+ ["c", 3],
942
+ ]);
943
+ await storage.add("a", value);
944
+ const getResult = await storage.getOr("a", -1);
945
+ expect(getResult).toBeInstanceOf(Map);
946
+ expect(getResult).toEqual(value);
947
+ });
948
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
949
+ const value = new Map([
950
+ ["a", 0],
951
+ ["b", -1],
952
+ ["c", 1],
953
+ ["d", -1.5],
954
+ ["e", 1.5],
955
+ ["f", NaN],
956
+ ["g", Infinity],
957
+ ["h", 2n],
958
+ ["j", true],
959
+ ["l", false],
960
+ ["i", "str"],
961
+ ["r", new Date("2024-01-01")],
962
+ ["k", new Set(["a", "b", "c"])],
963
+ [
964
+ "p",
965
+ new Map([
966
+ ["a", 1],
967
+ ["b", 2],
968
+ ["c", 3],
969
+ ]),
970
+ ],
971
+ ["a", /test/],
972
+ [1, { a: 2, b: -1 }],
973
+ [2, [1, 2, 3]],
974
+ ]);
975
+ await storage.add("a", value);
976
+ const getResult = await storage.getOr("a", -1);
977
+ expect(getResult).toBeInstanceOf(Map);
978
+ expect(getResult).toEqual(value);
979
+ });
980
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
981
+ const value = new Map([
982
+ [0, "a"],
983
+ [-1, "a"],
984
+ [1, "a"],
985
+ [-1.5, "a"],
986
+ [1.5, "a"],
987
+ [NaN, "a"],
988
+ [Infinity, "a"],
989
+ [2n, "a"],
990
+ [true, "a"],
991
+ [false, "a"],
992
+ ["str", "a"],
993
+ [new Date("2024-01-01"), "a"],
994
+ [new Set(["a", "b", "c"]), "a"],
995
+ [
996
+ new Map([
997
+ ["a", 1],
998
+ ["b", 2],
999
+ ["c", 3],
1000
+ ]),
1001
+ "a",
1002
+ ],
1003
+ [/test/, "a"],
1004
+ [{ a: 2, b: -1 }, 1],
1005
+ [[1, 2, 3], 2],
1006
+ ]);
1007
+ await storage.add("a", value);
1008
+ const getResult = await storage.getOr("a", -1);
1009
+ expect(getResult).toBeInstanceOf(Map);
1010
+ expect(getResult).toEqual(value);
1011
+ });
1012
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
1013
+ const value = [
1014
+ 0,
1015
+ -1,
1016
+ 1,
1017
+ -1.5,
1018
+ 1.5,
1019
+ NaN,
1020
+ Infinity,
1021
+ 2n,
1022
+ true,
1023
+ false,
1024
+ "str",
1025
+ new Date("2024-01-01"),
1026
+ new Set(["a", "b", "c"]),
1027
+ new Map([
1028
+ ["a", 1],
1029
+ ["b", 2],
1030
+ ["c", 3],
1031
+ ]),
1032
+ /test/,
1033
+ ];
1034
+ await storage.add("a", value);
1035
+ const getResult = await storage.getOr("a", -1);
1036
+ expect(getResult).toEqual(value);
1037
+ });
1038
+ test("Should work with array of objects", async () => {
1039
+ const value = [
1040
+ Object.fromEntries([
1041
+ ["a", 0],
1042
+ ["b", -1],
1043
+ ["c", 1],
1044
+ ["d", -1.5],
1045
+ ["e", 1.5],
1046
+ ["f", NaN],
1047
+ ["g", Infinity],
1048
+ ["h", 2n],
1049
+ ["j", true],
1050
+ ["l", false],
1051
+ ["i", "str"],
1052
+ ["r", new Date("2024-01-01")],
1053
+ ["k", new Set(["a", "b", "c"])],
1054
+ [
1055
+ "p",
1056
+ new Map([
1057
+ ["a", 1],
1058
+ ["b", 2],
1059
+ ["c", 3],
1060
+ ]),
1061
+ ],
1062
+ ["a", /test/],
1063
+ ]),
1064
+ ];
1065
+ await storage.add("a", value);
1066
+ const getResult = await storage.getOr("a", -1);
1067
+ expect(getResult).toEqual(value);
1068
+ });
1069
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
1070
+ const value = Object.fromEntries([
1071
+ ["a", 0],
1072
+ ["b", -1],
1073
+ ["c", 1],
1074
+ ["d", -1.5],
1075
+ ["e", 1.5],
1076
+ ["f", NaN],
1077
+ ["g", Infinity],
1078
+ ["h", 2n],
1079
+ ["j", true],
1080
+ ["l", false],
1081
+ ["i", "str"],
1082
+ ["r", new Date("2024-01-01")],
1083
+ ["k", new Set(["a", "b", "c"])],
1084
+ [
1085
+ "p",
1086
+ new Map([
1087
+ ["a", 1],
1088
+ ["b", 2],
1089
+ ["c", 3],
1090
+ ]),
1091
+ ],
1092
+ ["a", /test/],
1093
+ ]);
1094
+ await storage.add("a", value);
1095
+ const getResult = await storage.getOr("a", -1);
1096
+ expect(getResult).toEqual(value);
1097
+ });
1098
+ test("Should work with object of arrays", async () => {
1099
+ const value = {
1100
+ a: [
1101
+ 0,
1102
+ -1,
1103
+ 1,
1104
+ -1.5,
1105
+ 1.5,
1106
+ NaN,
1107
+ Infinity,
1108
+ 2n,
1109
+ true,
1110
+ false,
1111
+ "str",
1112
+ new Date("2024-01-01"),
1113
+ new Set(["a", "b", "c"]),
1114
+ new Map([
1115
+ ["a", 1],
1116
+ ["b", 2],
1117
+ ["c", 3],
1118
+ ]),
1119
+ /test/,
1120
+ ],
1121
+ };
1122
+ await storage.add("a", value);
1123
+ const getResult = await storage.getOr("a", -1);
1124
+ expect(getResult).toEqual(value);
1125
+ });
1126
+ });
1127
+ describe("method: getOrMany", () => {
1128
+ test("Should work with positive integer", async () => {
1129
+ const value = 1;
1130
+ await storage.addMany({ a: value });
1131
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1132
+ a: value,
1133
+ });
1134
+ });
1135
+ test("Should work with negative integer", async () => {
1136
+ const value = -1;
1137
+ await storage.addMany({ a: value });
1138
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1139
+ a: value,
1140
+ });
1141
+ });
1142
+ test("Should work with positive decimal", async () => {
1143
+ const value = 1.5;
1144
+ await storage.addMany({ a: value });
1145
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1146
+ a: value,
1147
+ });
1148
+ });
1149
+ test("Should work with negative decimal", async () => {
1150
+ const value = -1.5;
1151
+ await storage.addMany({ a: value });
1152
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1153
+ a: value,
1154
+ });
1155
+ });
1156
+ test("Should work with NaN", async () => {
1157
+ const value = NaN;
1158
+ await storage.addMany({ a: value });
1159
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1160
+ expect(getResult).toBeNaN();
1161
+ });
1162
+ test("Should work with Infinity", async () => {
1163
+ const value = Infinity;
1164
+ await storage.addMany({ a: value });
1165
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1166
+ expect(isFinite(getResult)).toBe(false);
1167
+ });
1168
+ test("Should work with Bigint", async () => {
1169
+ const value = 20n;
1170
+ await storage.addMany({ a: value });
1171
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1172
+ a: value,
1173
+ });
1174
+ });
1175
+ test("Should work with true", async () => {
1176
+ const value = true;
1177
+ await storage.addMany({ a: value });
1178
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1179
+ a: value,
1180
+ });
1181
+ });
1182
+ test("Should work with false", async () => {
1183
+ const value = false;
1184
+ await storage.addMany({ a: value });
1185
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1186
+ a: value,
1187
+ });
1188
+ });
1189
+ test("Should work with string", async () => {
1190
+ const value = "str";
1191
+ await storage.addMany({ a: value });
1192
+ expect(await storage.getOrMany({ a: -1 })).toEqual({
1193
+ a: value,
1194
+ });
1195
+ });
1196
+ test("Should work with Date", async () => {
1197
+ const value = new Date("2024-01-01");
1198
+ await storage.addMany({ a: value });
1199
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1200
+ expect(getResult).toBeInstanceOf(Date);
1201
+ expect(getResult).toEqual(value);
1202
+ });
1203
+ test("Should work with RegExp", async () => {
1204
+ const value = /test/;
1205
+ await storage.addMany({ a: value });
1206
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1207
+ expect(getResult).toBeInstanceOf(RegExp);
1208
+ expect(getResult).toEqual(value);
1209
+ });
1210
+ test("Should work with Buffer", async () => {
1211
+ const value = Buffer.from("asd");
1212
+ await storage.addMany({ a: value });
1213
+ const { a: getResult } = await storage.getOrMany({ a: null });
1214
+ expect(getResult).toBeInstanceOf(Buffer);
1215
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
1216
+ });
1217
+ test("Should work with Uint8Array", async () => {
1218
+ const value = new Uint8Array(Buffer.from("asd"));
1219
+ await storage.addMany({ a: value });
1220
+ const { a: getResult } = await storage.getOrMany({ a: null });
1221
+ expect(getResult).toBeInstanceOf(Uint8Array);
1222
+ expect(getResult
1223
+ ? Buffer.from(getResult).toString("base64")
1224
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1225
+ });
1226
+ test("Should work with Int8Array", async () => {
1227
+ const value = new Int8Array(Buffer.from("asd"));
1228
+ await storage.addMany({ a: value });
1229
+ const { a: getResult } = await storage.getOrMany({ a: null });
1230
+ expect(getResult).toBeInstanceOf(Int8Array);
1231
+ expect(getResult
1232
+ ? Buffer.from(getResult).toString("base64")
1233
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1234
+ });
1235
+ test("Should work with Uint16Array", async () => {
1236
+ const value = new Uint16Array(Buffer.from("asd"));
1237
+ await storage.addMany({ a: value });
1238
+ const { a: getResult } = await storage.getOrMany({ a: null });
1239
+ expect(getResult).toBeInstanceOf(Uint16Array);
1240
+ expect(getResult
1241
+ ? Buffer.from(getResult).toString("base64")
1242
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1243
+ });
1244
+ test("Should work with Int16Array", async () => {
1245
+ const value = new Int16Array(Buffer.from("asd"));
1246
+ await storage.addMany({ a: value });
1247
+ const { a: getResult } = await storage.getOrMany({ a: null });
1248
+ expect(getResult).toBeInstanceOf(Int16Array);
1249
+ expect(getResult
1250
+ ? Buffer.from(getResult).toString("base64")
1251
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1252
+ });
1253
+ test("Should work with Uint32Array", async () => {
1254
+ const value = new Uint32Array(Buffer.from("asd"));
1255
+ await storage.addMany({ a: value });
1256
+ const { a: getResult } = await storage.getOrMany({ a: null });
1257
+ expect(getResult).toBeInstanceOf(Uint32Array);
1258
+ expect(getResult
1259
+ ? Buffer.from(getResult).toString("base64")
1260
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1261
+ });
1262
+ test("Should work with Int32Array", async () => {
1263
+ const value = new Int32Array(Buffer.from("asd"));
1264
+ await storage.addMany({ a: value });
1265
+ const { a: getResult } = await storage.getOrMany({ a: null });
1266
+ expect(getResult).toBeInstanceOf(Int32Array);
1267
+ expect(getResult
1268
+ ? Buffer.from(getResult).toString("base64")
1269
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1270
+ });
1271
+ test("Should work with Float32Array", async () => {
1272
+ const value = new Float32Array(Buffer.from("asd"));
1273
+ await storage.addMany({ a: value });
1274
+ const { a: getResult } = await storage.getOrMany({ a: null });
1275
+ expect(getResult).toBeInstanceOf(Float32Array);
1276
+ expect(getResult
1277
+ ? Buffer.from(getResult).toString("base64")
1278
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1279
+ });
1280
+ test("Should work with Float64Array", async () => {
1281
+ const value = new Float64Array(Buffer.from("asd"));
1282
+ await storage.addMany({ a: value });
1283
+ const { a: getResult } = await storage.getOrMany({ a: null });
1284
+ expect(getResult).toBeInstanceOf(Float64Array);
1285
+ expect(getResult
1286
+ ? Buffer.from(getResult).toString("base64")
1287
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1288
+ });
1289
+ test("Should work with Set", async () => {
1290
+ const value = new Set(["a", "b", "c"]);
1291
+ await storage.addMany({ a: value });
1292
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1293
+ expect(getResult).toBeInstanceOf(Set);
1294
+ expect(getResult).toEqual(value);
1295
+ });
1296
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
1297
+ const value = new Set([
1298
+ 0,
1299
+ -1,
1300
+ 1,
1301
+ -1.5,
1302
+ 1.5,
1303
+ NaN,
1304
+ Infinity,
1305
+ 2n,
1306
+ true,
1307
+ false,
1308
+ "str",
1309
+ new Date("2024-01-01"),
1310
+ new Set(["a", "b", "c"]),
1311
+ new Map([
1312
+ ["a", 1],
1313
+ ["b", 2],
1314
+ ["c", 3],
1315
+ ]),
1316
+ { a: 1, b: 2 },
1317
+ [1, 2, 3],
1318
+ /test/,
1319
+ ]);
1320
+ await storage.addMany({ a: value });
1321
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1322
+ expect(getResult).toBeInstanceOf(Set);
1323
+ expect(getResult).toEqual(value);
1324
+ });
1325
+ test("Should work with Map", async () => {
1326
+ const value = new Map([
1327
+ ["a", 1],
1328
+ ["b", 2],
1329
+ ["c", 3],
1330
+ ]);
1331
+ await storage.addMany({ a: value });
1332
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1333
+ expect(getResult).toBeInstanceOf(Map);
1334
+ expect(getResult).toEqual(value);
1335
+ });
1336
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
1337
+ const value = new Map([
1338
+ ["a", 0],
1339
+ ["b", -1],
1340
+ ["c", 1],
1341
+ ["d", -1.5],
1342
+ ["e", 1.5],
1343
+ ["f", NaN],
1344
+ ["g", Infinity],
1345
+ ["h", 2n],
1346
+ ["j", true],
1347
+ ["l", false],
1348
+ ["i", "str"],
1349
+ ["r", new Date("2024-01-01")],
1350
+ ["k", new Set(["a", "b", "c"])],
1351
+ [
1352
+ "p",
1353
+ new Map([
1354
+ ["a", 1],
1355
+ ["b", 2],
1356
+ ["c", 3],
1357
+ ]),
1358
+ ],
1359
+ ["a", /test/],
1360
+ [1, { a: 2, b: -1 }],
1361
+ [2, [1, 2, 3]],
1362
+ ]);
1363
+ await storage.addMany({ a: value });
1364
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1365
+ expect(getResult).toBeInstanceOf(Map);
1366
+ expect(getResult).toEqual(value);
1367
+ });
1368
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
1369
+ const value = new Map([
1370
+ [0, "a"],
1371
+ [-1, "a"],
1372
+ [1, "a"],
1373
+ [-1.5, "a"],
1374
+ [1.5, "a"],
1375
+ [NaN, "a"],
1376
+ [Infinity, "a"],
1377
+ [2n, "a"],
1378
+ [true, "a"],
1379
+ [false, "a"],
1380
+ ["str", "a"],
1381
+ [new Date("2024-01-01"), "a"],
1382
+ [new Set(["a", "b", "c"]), "a"],
1383
+ [
1384
+ new Map([
1385
+ ["a", 1],
1386
+ ["b", 2],
1387
+ ["c", 3],
1388
+ ]),
1389
+ "a",
1390
+ ],
1391
+ [/test/, "a"],
1392
+ [{ a: 2, b: -1 }, 1],
1393
+ [[1, 2, 3], 2],
1394
+ ]);
1395
+ await storage.addMany({ a: value });
1396
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1397
+ expect(getResult).toBeInstanceOf(Map);
1398
+ expect(getResult).toEqual(value);
1399
+ });
1400
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
1401
+ const value = [
1402
+ 0,
1403
+ -1,
1404
+ 1,
1405
+ -1.5,
1406
+ 1.5,
1407
+ NaN,
1408
+ Infinity,
1409
+ 2n,
1410
+ true,
1411
+ false,
1412
+ "str",
1413
+ new Date("2024-01-01"),
1414
+ new Set(["a", "b", "c"]),
1415
+ new Map([
1416
+ ["a", 1],
1417
+ ["b", 2],
1418
+ ["c", 3],
1419
+ ]),
1420
+ /test/,
1421
+ ];
1422
+ await storage.addMany({ a: value });
1423
+ const getResult = await storage.getOrMany({ a: -1 });
1424
+ expect(getResult).toEqual({ a: value });
1425
+ });
1426
+ test("Should work with array of objects", async () => {
1427
+ const value = [
1428
+ Object.fromEntries([
1429
+ ["a", 0],
1430
+ ["b", -1],
1431
+ ["c", 1],
1432
+ ["d", -1.5],
1433
+ ["e", 1.5],
1434
+ ["f", NaN],
1435
+ ["g", Infinity],
1436
+ ["h", 2n],
1437
+ ["j", true],
1438
+ ["l", false],
1439
+ ["i", "str"],
1440
+ ["r", new Date("2024-01-01")],
1441
+ ["k", new Set(["a", "b", "c"])],
1442
+ [
1443
+ "p",
1444
+ new Map([
1445
+ ["a", 1],
1446
+ ["b", 2],
1447
+ ["c", 3],
1448
+ ]),
1449
+ ],
1450
+ ["a", /test/],
1451
+ ]),
1452
+ ];
1453
+ await storage.addMany({ a: value });
1454
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1455
+ expect(getResult).toEqual(value);
1456
+ });
1457
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
1458
+ const value = Object.fromEntries([
1459
+ ["a", 0],
1460
+ ["b", -1],
1461
+ ["c", 1],
1462
+ ["d", -1.5],
1463
+ ["e", 1.5],
1464
+ ["f", NaN],
1465
+ ["g", Infinity],
1466
+ ["h", 2n],
1467
+ ["j", true],
1468
+ ["l", false],
1469
+ ["i", "str"],
1470
+ ["r", new Date("2024-01-01")],
1471
+ ["k", new Set(["a", "b", "c"])],
1472
+ [
1473
+ "p",
1474
+ new Map([
1475
+ ["a", 1],
1476
+ ["b", 2],
1477
+ ["c", 3],
1478
+ ]),
1479
+ ],
1480
+ ["a", /test/],
1481
+ ]);
1482
+ await storage.addMany({ a: value });
1483
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1484
+ expect(getResult).toEqual(value);
1485
+ });
1486
+ test("Should work with object of arrays", async () => {
1487
+ const value = {
1488
+ a: [
1489
+ 0,
1490
+ -1,
1491
+ 1,
1492
+ -1.5,
1493
+ 1.5,
1494
+ NaN,
1495
+ Infinity,
1496
+ 2n,
1497
+ true,
1498
+ false,
1499
+ "str",
1500
+ new Date("2024-01-01"),
1501
+ new Set(["a", "b", "c"]),
1502
+ new Map([
1503
+ ["a", 1],
1504
+ ["b", 2],
1505
+ ["c", 3],
1506
+ ]),
1507
+ /test/,
1508
+ ],
1509
+ };
1510
+ await storage.addMany({ a: value });
1511
+ const { a: getResult } = await storage.getOrMany({ a: -1 });
1512
+ expect(getResult).toEqual(value);
1513
+ });
1514
+ });
1515
+ describe("method: getOrFail", () => {
1516
+ test("Should work with positive integer", async () => {
1517
+ const value = 1;
1518
+ await storage.add("a", value);
1519
+ expect(await storage.getOrFail("a")).toBe(value);
1520
+ });
1521
+ test("Should work with negative integer", async () => {
1522
+ const value = -1;
1523
+ await storage.add("a", value);
1524
+ expect(await storage.getOrFail("a")).toBe(value);
1525
+ });
1526
+ test("Should work with positive decimal", async () => {
1527
+ const value = 1.5;
1528
+ await storage.add("a", value);
1529
+ expect(await storage.getOrFail("a")).toBe(value);
1530
+ });
1531
+ test("Should work with negative decimal", async () => {
1532
+ const value = -1.5;
1533
+ await storage.add("a", value);
1534
+ expect(await storage.getOrFail("a")).toBe(value);
1535
+ });
1536
+ test("Should work with NaN", async () => {
1537
+ const value = NaN;
1538
+ await storage.add("a", value);
1539
+ const getResult = await storage.getOrFail("a");
1540
+ expect(getResult).toBeNaN();
1541
+ });
1542
+ test("Should work with Infinity", async () => {
1543
+ const value = Infinity;
1544
+ await storage.add("a", value);
1545
+ const getResult = await storage.getOrFail("a");
1546
+ expect(isFinite(getResult)).toBe(false);
1547
+ });
1548
+ test("Should work with Bigint", async () => {
1549
+ const value = 20n;
1550
+ await storage.add("a", value);
1551
+ expect(await storage.getOrFail("a")).toBe(value);
1552
+ });
1553
+ test("Should work with true", async () => {
1554
+ const value = true;
1555
+ await storage.add("a", value);
1556
+ expect(await storage.getOrFail("a")).toBe(value);
1557
+ });
1558
+ test("Should work with false", async () => {
1559
+ const value = false;
1560
+ await storage.add("a", value);
1561
+ expect(await storage.getOrFail("a")).toBe(value);
1562
+ });
1563
+ test("Should work with string", async () => {
1564
+ const value = "str";
1565
+ await storage.add("a", value);
1566
+ expect(await storage.getOrFail("a")).toBe(value);
1567
+ });
1568
+ test("Should work with Date", async () => {
1569
+ const value = new Date("2024-01-01");
1570
+ await storage.add("a", value);
1571
+ const getResult = await storage.getOrFail("a");
1572
+ expect(getResult).toBeInstanceOf(Date);
1573
+ expect(getResult).toEqual(value);
1574
+ });
1575
+ test("Should work with RegExp", async () => {
1576
+ const value = /test/;
1577
+ await storage.add("a", value);
1578
+ const getResult = await storage.getOrFail("a");
1579
+ expect(getResult).toBeInstanceOf(RegExp);
1580
+ expect(getResult).toEqual(value);
1581
+ });
1582
+ test("Should work with Buffer", async () => {
1583
+ const value = Buffer.from("asd");
1584
+ await storage.add("a", value);
1585
+ const getResult = await storage.getOrFail("a");
1586
+ expect(getResult).toBeInstanceOf(Buffer);
1587
+ expect(getResult.toString("base64")).toEqual(value.toString("base64"));
1588
+ });
1589
+ test("Should work with Uint8Array", async () => {
1590
+ const value = new Uint8Array(Buffer.from("asd"));
1591
+ await storage.add("a", value);
1592
+ const getResult = await storage.getOrFail("a");
1593
+ expect(getResult).toBeInstanceOf(Uint8Array);
1594
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1595
+ });
1596
+ test("Should work with Int8Array", async () => {
1597
+ const value = new Int8Array(Buffer.from("asd"));
1598
+ await storage.add("a", value);
1599
+ const getResult = await storage.getOrFail("a");
1600
+ expect(getResult).toBeInstanceOf(Int8Array);
1601
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1602
+ });
1603
+ test("Should work with Uint16Array", async () => {
1604
+ const value = new Uint16Array(Buffer.from("asd"));
1605
+ await storage.add("a", value);
1606
+ const getResult = await storage.getOrFail("a");
1607
+ expect(getResult).toBeInstanceOf(Uint16Array);
1608
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1609
+ });
1610
+ test("Should work with Int16Array", async () => {
1611
+ const value = new Int16Array(Buffer.from("asd"));
1612
+ await storage.add("a", value);
1613
+ const getResult = await storage.getOrFail("a");
1614
+ expect(getResult).toBeInstanceOf(Int16Array);
1615
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1616
+ });
1617
+ test("Should work with Uint32Array", async () => {
1618
+ const value = new Uint32Array(Buffer.from("asd"));
1619
+ await storage.add("a", value);
1620
+ const getResult = await storage.getOrFail("a");
1621
+ expect(getResult).toBeInstanceOf(Uint32Array);
1622
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1623
+ });
1624
+ test("Should work with Int32Array", async () => {
1625
+ const value = new Int32Array(Buffer.from("asd"));
1626
+ await storage.add("a", value);
1627
+ const getResult = await storage.getOrFail("a");
1628
+ expect(getResult).toBeInstanceOf(Int32Array);
1629
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1630
+ });
1631
+ test("Should work with Float32Array", async () => {
1632
+ const value = new Float32Array(Buffer.from("asd"));
1633
+ await storage.add("a", value);
1634
+ const getResult = await storage.getOrFail("a");
1635
+ expect(getResult).toBeInstanceOf(Float32Array);
1636
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1637
+ });
1638
+ test("Should work with Float64Array", async () => {
1639
+ const value = new Float64Array(Buffer.from("asd"));
1640
+ await storage.add("a", value);
1641
+ const getResult = await storage.getOrFail("a");
1642
+ expect(getResult).toBeInstanceOf(Float64Array);
1643
+ expect(Buffer.from(getResult).toString("base64")).toEqual(Buffer.from(value).toString("base64"));
1644
+ });
1645
+ test("Should work with Set", async () => {
1646
+ const value = new Set(["a", "b", "c"]);
1647
+ await storage.add("a", value);
1648
+ const getResult = await storage.getOrFail("a");
1649
+ expect(getResult).toBeInstanceOf(Set);
1650
+ expect(getResult).toEqual(value);
1651
+ });
1652
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
1653
+ const value = new Set([
1654
+ 0,
1655
+ -1,
1656
+ 1,
1657
+ -1.5,
1658
+ 1.5,
1659
+ NaN,
1660
+ Infinity,
1661
+ 2n,
1662
+ true,
1663
+ false,
1664
+ "str",
1665
+ new Date("2024-01-01"),
1666
+ new Set(["a", "b", "c"]),
1667
+ new Map([
1668
+ ["a", 1],
1669
+ ["b", 2],
1670
+ ["c", 3],
1671
+ ]),
1672
+ { a: 1, b: 2 },
1673
+ [1, 2, 3],
1674
+ /test/,
1675
+ ]);
1676
+ await storage.add("a", value);
1677
+ const getResult = await storage.getOrFail("a");
1678
+ expect(getResult).toBeInstanceOf(Set);
1679
+ expect(getResult).toEqual(value);
1680
+ });
1681
+ test("Should work with Map", async () => {
1682
+ const value = new Map([
1683
+ ["a", 1],
1684
+ ["b", 2],
1685
+ ["c", 3],
1686
+ ]);
1687
+ await storage.add("a", value);
1688
+ const getResult = await storage.getOrFail("a");
1689
+ expect(getResult).toBeInstanceOf(Map);
1690
+ expect(getResult).toEqual(value);
1691
+ });
1692
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
1693
+ const value = new Map([
1694
+ ["a", 0],
1695
+ ["b", -1],
1696
+ ["c", 1],
1697
+ ["d", -1.5],
1698
+ ["e", 1.5],
1699
+ ["f", NaN],
1700
+ ["g", Infinity],
1701
+ ["h", 2n],
1702
+ ["j", true],
1703
+ ["l", false],
1704
+ ["i", "str"],
1705
+ ["r", new Date("2024-01-01")],
1706
+ ["k", new Set(["a", "b", "c"])],
1707
+ [
1708
+ "p",
1709
+ new Map([
1710
+ ["a", 1],
1711
+ ["b", 2],
1712
+ ["c", 3],
1713
+ ]),
1714
+ ],
1715
+ ["a", /test/],
1716
+ [1, { a: 2, b: -1 }],
1717
+ [2, [1, 2, 3]],
1718
+ ]);
1719
+ await storage.add("a", value);
1720
+ const getResult = await storage.getOrFail("a");
1721
+ expect(getResult).toBeInstanceOf(Map);
1722
+ expect(getResult).toEqual(value);
1723
+ });
1724
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
1725
+ const value = new Map([
1726
+ [0, "a"],
1727
+ [-1, "a"],
1728
+ [1, "a"],
1729
+ [-1.5, "a"],
1730
+ [1.5, "a"],
1731
+ [NaN, "a"],
1732
+ [Infinity, "a"],
1733
+ [2n, "a"],
1734
+ [true, "a"],
1735
+ [false, "a"],
1736
+ ["str", "a"],
1737
+ [new Date("2024-01-01"), "a"],
1738
+ [new Set(["a", "b", "c"]), "a"],
1739
+ [
1740
+ new Map([
1741
+ ["a", 1],
1742
+ ["b", 2],
1743
+ ["c", 3],
1744
+ ]),
1745
+ "a",
1746
+ ],
1747
+ [/test/, "a"],
1748
+ [{ a: 2, b: -1 }, 1],
1749
+ [[1, 2, 3], 2],
1750
+ ]);
1751
+ await storage.add("a", value);
1752
+ const getResult = await storage.getOrFail("a");
1753
+ expect(getResult).toBeInstanceOf(Map);
1754
+ expect(getResult).toEqual(value);
1755
+ });
1756
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
1757
+ const value = [
1758
+ 0,
1759
+ -1,
1760
+ 1,
1761
+ -1.5,
1762
+ 1.5,
1763
+ NaN,
1764
+ Infinity,
1765
+ 2n,
1766
+ true,
1767
+ false,
1768
+ "str",
1769
+ new Date("2024-01-01"),
1770
+ new Set(["a", "b", "c"]),
1771
+ new Map([
1772
+ ["a", 1],
1773
+ ["b", 2],
1774
+ ["c", 3],
1775
+ ]),
1776
+ /test/,
1777
+ ];
1778
+ await storage.add("a", value);
1779
+ const getResult = await storage.getOrFail("a");
1780
+ expect(getResult).toEqual(value);
1781
+ });
1782
+ test("Should work with array of objects", async () => {
1783
+ const value = [
1784
+ Object.fromEntries([
1785
+ ["a", 0],
1786
+ ["b", -1],
1787
+ ["c", 1],
1788
+ ["d", -1.5],
1789
+ ["e", 1.5],
1790
+ ["f", NaN],
1791
+ ["g", Infinity],
1792
+ ["h", 2n],
1793
+ ["j", true],
1794
+ ["l", false],
1795
+ ["i", "str"],
1796
+ ["r", new Date("2024-01-01")],
1797
+ ["k", new Set(["a", "b", "c"])],
1798
+ [
1799
+ "p",
1800
+ new Map([
1801
+ ["a", 1],
1802
+ ["b", 2],
1803
+ ["c", 3],
1804
+ ]),
1805
+ ],
1806
+ ["a", /test/],
1807
+ ]),
1808
+ ];
1809
+ await storage.add("a", value);
1810
+ const getResult = await storage.getOrFail("a");
1811
+ expect(getResult).toEqual(value);
1812
+ });
1813
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
1814
+ const value = Object.fromEntries([
1815
+ ["a", 0],
1816
+ ["b", -1],
1817
+ ["c", 1],
1818
+ ["d", -1.5],
1819
+ ["e", 1.5],
1820
+ ["f", NaN],
1821
+ ["g", Infinity],
1822
+ ["h", 2n],
1823
+ ["j", true],
1824
+ ["l", false],
1825
+ ["i", "str"],
1826
+ ["r", new Date("2024-01-01")],
1827
+ ["k", new Set(["a", "b", "c"])],
1828
+ [
1829
+ "p",
1830
+ new Map([
1831
+ ["a", 1],
1832
+ ["b", 2],
1833
+ ["c", 3],
1834
+ ]),
1835
+ ],
1836
+ ["a", /test/],
1837
+ ]);
1838
+ await storage.add("a", value);
1839
+ const getResult = await storage.getOrFail("a");
1840
+ expect(getResult).toEqual(value);
1841
+ });
1842
+ test("Should work with object of arrays", async () => {
1843
+ const value = {
1844
+ a: [
1845
+ 0,
1846
+ -1,
1847
+ 1,
1848
+ -1.5,
1849
+ 1.5,
1850
+ NaN,
1851
+ Infinity,
1852
+ 2n,
1853
+ true,
1854
+ false,
1855
+ "str",
1856
+ new Date("2024-01-01"),
1857
+ new Set(["a", "b", "c"]),
1858
+ new Map([
1859
+ ["a", 1],
1860
+ ["b", 2],
1861
+ ["c", 3],
1862
+ ]),
1863
+ /test/,
1864
+ ],
1865
+ };
1866
+ await storage.add("a", value);
1867
+ const getResult = await storage.getOrFail("a");
1868
+ expect(getResult).toEqual(value);
1869
+ });
1870
+ });
1871
+ describe("method: update", () => {
1872
+ test("Should work with positive integer", async () => {
1873
+ const value = 1;
1874
+ await storage.add("a", -1);
1875
+ await storage.update("a", value);
1876
+ expect(await storage.get("a")).toBe(value);
1877
+ });
1878
+ test("Should work with negative integer", async () => {
1879
+ const value = -1;
1880
+ await storage.add("a", -1);
1881
+ await storage.update("a", value);
1882
+ expect(await storage.get("a")).toBe(value);
1883
+ });
1884
+ test("Should work with positive decimal", async () => {
1885
+ const value = 1.5;
1886
+ await storage.add("a", -1);
1887
+ await storage.update("a", value);
1888
+ expect(await storage.get("a")).toBe(value);
1889
+ });
1890
+ test("Should work with negative decimal", async () => {
1891
+ const value = -1.5;
1892
+ await storage.add("a", -1);
1893
+ await storage.update("a", value);
1894
+ expect(await storage.get("a")).toBe(value);
1895
+ });
1896
+ test("Should work with NaN", async () => {
1897
+ const value = NaN;
1898
+ await storage.add("a", -1);
1899
+ await storage.update("a", value);
1900
+ const getResult = await storage.get("a");
1901
+ expect(getResult).toBeNaN();
1902
+ });
1903
+ test("Should work with Infinity", async () => {
1904
+ const value = Infinity;
1905
+ await storage.add("a", -1);
1906
+ await storage.update("a", value);
1907
+ const getResult = await storage.get("a");
1908
+ expect(isFinite(getResult)).toBe(false);
1909
+ });
1910
+ test("Should work with Bigint", async () => {
1911
+ const value = 20n;
1912
+ await storage.add("a", -1);
1913
+ await storage.update("a", value);
1914
+ expect(await storage.get("a")).toBe(value);
1915
+ });
1916
+ test("Should work with true", async () => {
1917
+ const value = true;
1918
+ await storage.add("a", -1);
1919
+ await storage.update("a", value);
1920
+ expect(await storage.get("a")).toBe(value);
1921
+ });
1922
+ test("Should work with false", async () => {
1923
+ const value = false;
1924
+ await storage.add("a", -1);
1925
+ await storage.update("a", value);
1926
+ expect(await storage.get("a")).toBe(value);
1927
+ });
1928
+ test("Should work with string", async () => {
1929
+ const value = "str";
1930
+ await storage.add("a", -1);
1931
+ await storage.update("a", value);
1932
+ expect(await storage.get("a")).toBe(value);
1933
+ });
1934
+ test("Should work with Date", async () => {
1935
+ const value = new Date("2024-01-01");
1936
+ await storage.add("a", -1);
1937
+ await storage.update("a", value);
1938
+ const getResult = await storage.get("a");
1939
+ expect(getResult).toBeInstanceOf(Date);
1940
+ expect(getResult).toEqual(value);
1941
+ });
1942
+ test("Should work with RegExp", async () => {
1943
+ const value = /test/;
1944
+ await storage.add("a", -1);
1945
+ await storage.update("a", value);
1946
+ const getResult = await storage.get("a");
1947
+ expect(getResult).toBeInstanceOf(RegExp);
1948
+ expect(getResult).toEqual(value);
1949
+ });
1950
+ test("Should work with Buffer", async () => {
1951
+ const value = Buffer.from("asd");
1952
+ await storage.add("a", -1);
1953
+ await storage.update("a", value);
1954
+ const getResult = await storage.get("a");
1955
+ expect(getResult).toBeInstanceOf(Buffer);
1956
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
1957
+ });
1958
+ test("Should work with Uint8Array", async () => {
1959
+ const value = new Uint8Array(Buffer.from("asd"));
1960
+ await storage.add("a", -1);
1961
+ await storage.update("a", value);
1962
+ const getResult = await storage.get("a");
1963
+ expect(getResult).toBeInstanceOf(Uint8Array);
1964
+ expect(getResult
1965
+ ? Buffer.from(getResult).toString("base64")
1966
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1967
+ });
1968
+ test("Should work with Int8Array", async () => {
1969
+ const value = new Int8Array(Buffer.from("asd"));
1970
+ await storage.add("a", -1);
1971
+ await storage.update("a", value);
1972
+ const getResult = await storage.get("a");
1973
+ expect(getResult).toBeInstanceOf(Int8Array);
1974
+ expect(getResult
1975
+ ? Buffer.from(getResult).toString("base64")
1976
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1977
+ });
1978
+ test("Should work with Uint16Array", async () => {
1979
+ const value = new Uint16Array(Buffer.from("asd"));
1980
+ await storage.add("a", -1);
1981
+ await storage.update("a", value);
1982
+ const getResult = await storage.get("a");
1983
+ expect(getResult).toBeInstanceOf(Uint16Array);
1984
+ expect(getResult
1985
+ ? Buffer.from(getResult).toString("base64")
1986
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1987
+ });
1988
+ test("Should work with Int16Array", async () => {
1989
+ const value = new Int16Array(Buffer.from("asd"));
1990
+ await storage.add("a", -1);
1991
+ await storage.update("a", value);
1992
+ const getResult = await storage.get("a");
1993
+ expect(getResult).toBeInstanceOf(Int16Array);
1994
+ expect(getResult
1995
+ ? Buffer.from(getResult).toString("base64")
1996
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
1997
+ });
1998
+ test("Should work with Uint32Array", async () => {
1999
+ const value = new Uint32Array(Buffer.from("asd"));
2000
+ await storage.add("a", -1);
2001
+ await storage.update("a", value);
2002
+ const getResult = await storage.get("a");
2003
+ expect(getResult).toBeInstanceOf(Uint32Array);
2004
+ expect(getResult
2005
+ ? Buffer.from(getResult).toString("base64")
2006
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2007
+ });
2008
+ test("Should work with Int32Array", async () => {
2009
+ const value = new Int32Array(Buffer.from("asd"));
2010
+ await storage.add("a", -1);
2011
+ await storage.update("a", value);
2012
+ const getResult = await storage.get("a");
2013
+ expect(getResult).toBeInstanceOf(Int32Array);
2014
+ expect(getResult
2015
+ ? Buffer.from(getResult).toString("base64")
2016
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2017
+ });
2018
+ test("Should work with Float32Array", async () => {
2019
+ const value = new Float32Array(Buffer.from("asd"));
2020
+ await storage.add("a", -1);
2021
+ await storage.update("a", value);
2022
+ const getResult = await storage.get("a");
2023
+ expect(getResult).toBeInstanceOf(Float32Array);
2024
+ expect(getResult
2025
+ ? Buffer.from(getResult).toString("base64")
2026
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2027
+ });
2028
+ test("Should work with Float64Array", async () => {
2029
+ const value = new Float64Array(Buffer.from("asd"));
2030
+ await storage.add("a", -1);
2031
+ await storage.update("a", value);
2032
+ const getResult = await storage.get("a");
2033
+ expect(getResult).toBeInstanceOf(Float64Array);
2034
+ expect(getResult
2035
+ ? Buffer.from(getResult).toString("base64")
2036
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2037
+ });
2038
+ test("Should work with Set", async () => {
2039
+ const value = new Set(["a", "b", "c"]);
2040
+ await storage.add("a", -1);
2041
+ await storage.update("a", value);
2042
+ const getResult = await storage.get("a");
2043
+ expect(getResult).toBeInstanceOf(Set);
2044
+ expect(getResult).toEqual(value);
2045
+ });
2046
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
2047
+ const value = new Set([
2048
+ 0,
2049
+ -1,
2050
+ 1,
2051
+ -1.5,
2052
+ 1.5,
2053
+ NaN,
2054
+ Infinity,
2055
+ 2n,
2056
+ true,
2057
+ false,
2058
+ "str",
2059
+ new Date("2024-01-01"),
2060
+ new Set(["a", "b", "c"]),
2061
+ new Map([
2062
+ ["a", 1],
2063
+ ["b", 2],
2064
+ ["c", 3],
2065
+ ]),
2066
+ { a: 1, b: 2 },
2067
+ [1, 2, 3],
2068
+ /test/,
2069
+ ]);
2070
+ await storage.add("a", -1);
2071
+ await storage.update("a", value);
2072
+ const getResult = await storage.get("a");
2073
+ expect(getResult).toBeInstanceOf(Set);
2074
+ expect(getResult).toEqual(value);
2075
+ });
2076
+ test("Should work with Map", async () => {
2077
+ const value = new Map([
2078
+ ["a", 1],
2079
+ ["b", 2],
2080
+ ["c", 3],
2081
+ ]);
2082
+ await storage.add("a", -1);
2083
+ await storage.update("a", value);
2084
+ const getResult = await storage.get("a");
2085
+ expect(getResult).toBeInstanceOf(Map);
2086
+ expect(getResult).toEqual(value);
2087
+ });
2088
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
2089
+ const value = new Map([
2090
+ ["a", 0],
2091
+ ["b", -1],
2092
+ ["c", 1],
2093
+ ["d", -1.5],
2094
+ ["e", 1.5],
2095
+ ["f", NaN],
2096
+ ["g", Infinity],
2097
+ ["h", 2n],
2098
+ ["j", true],
2099
+ ["l", false],
2100
+ ["i", "str"],
2101
+ ["r", new Date("2024-01-01")],
2102
+ ["k", new Set(["a", "b", "c"])],
2103
+ [
2104
+ "p",
2105
+ new Map([
2106
+ ["a", 1],
2107
+ ["b", 2],
2108
+ ["c", 3],
2109
+ ]),
2110
+ ],
2111
+ ["a", /test/],
2112
+ [1, { a: 2, b: -1 }],
2113
+ [2, [1, 2, 3]],
2114
+ ]);
2115
+ await storage.add("a", -1);
2116
+ await storage.update("a", value);
2117
+ const getResult = await storage.get("a");
2118
+ expect(getResult).toBeInstanceOf(Map);
2119
+ expect(getResult).toEqual(value);
2120
+ });
2121
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
2122
+ const value = new Map([
2123
+ [0, "a"],
2124
+ [-1, "a"],
2125
+ [1, "a"],
2126
+ [-1.5, "a"],
2127
+ [1.5, "a"],
2128
+ [NaN, "a"],
2129
+ [Infinity, "a"],
2130
+ [2n, "a"],
2131
+ [true, "a"],
2132
+ [false, "a"],
2133
+ ["str", "a"],
2134
+ [new Date("2024-01-01"), "a"],
2135
+ [new Set(["a", "b", "c"]), "a"],
2136
+ [
2137
+ new Map([
2138
+ ["a", 1],
2139
+ ["b", 2],
2140
+ ["c", 3],
2141
+ ]),
2142
+ "a",
2143
+ ],
2144
+ [/test/, "a"],
2145
+ [{ a: 2, b: -1 }, 1],
2146
+ [[1, 2, 3], 2],
2147
+ ]);
2148
+ await storage.add("a", -1);
2149
+ await storage.update("a", value);
2150
+ const getResult = await storage.get("a");
2151
+ expect(getResult).toBeInstanceOf(Map);
2152
+ expect(getResult).toEqual(value);
2153
+ });
2154
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
2155
+ const value = [
2156
+ 0,
2157
+ -1,
2158
+ 1,
2159
+ -1.5,
2160
+ 1.5,
2161
+ NaN,
2162
+ Infinity,
2163
+ 2n,
2164
+ true,
2165
+ false,
2166
+ "str",
2167
+ new Date("2024-01-01"),
2168
+ new Set(["a", "b", "c"]),
2169
+ new Map([
2170
+ ["a", 1],
2171
+ ["b", 2],
2172
+ ["c", 3],
2173
+ ]),
2174
+ /test/,
2175
+ ];
2176
+ await storage.add("a", -1);
2177
+ await storage.update("a", value);
2178
+ const getResult = await storage.get("a");
2179
+ expect(getResult).toEqual(value);
2180
+ });
2181
+ test("Should work with array of objects", async () => {
2182
+ const value = [
2183
+ Object.fromEntries([
2184
+ ["a", 0],
2185
+ ["b", -1],
2186
+ ["c", 1],
2187
+ ["d", -1.5],
2188
+ ["e", 1.5],
2189
+ ["f", NaN],
2190
+ ["g", Infinity],
2191
+ ["h", 2n],
2192
+ ["j", true],
2193
+ ["l", false],
2194
+ ["i", "str"],
2195
+ ["r", new Date("2024-01-01")],
2196
+ ["k", new Set(["a", "b", "c"])],
2197
+ [
2198
+ "p",
2199
+ new Map([
2200
+ ["a", 1],
2201
+ ["b", 2],
2202
+ ["c", 3],
2203
+ ]),
2204
+ ],
2205
+ ["a", /test/],
2206
+ ]),
2207
+ ];
2208
+ await storage.add("a", -1);
2209
+ await storage.update("a", value);
2210
+ const getResult = await storage.get("a");
2211
+ expect(getResult).toEqual(value);
2212
+ });
2213
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
2214
+ const value = Object.fromEntries([
2215
+ ["a", 0],
2216
+ ["b", -1],
2217
+ ["c", 1],
2218
+ ["d", -1.5],
2219
+ ["e", 1.5],
2220
+ ["f", NaN],
2221
+ ["g", Infinity],
2222
+ ["h", 2n],
2223
+ ["j", true],
2224
+ ["l", false],
2225
+ ["i", "str"],
2226
+ ["r", new Date("2024-01-01")],
2227
+ ["k", new Set(["a", "b", "c"])],
2228
+ [
2229
+ "p",
2230
+ new Map([
2231
+ ["a", 1],
2232
+ ["b", 2],
2233
+ ["c", 3],
2234
+ ]),
2235
+ ],
2236
+ ["a", /test/],
2237
+ ]);
2238
+ await storage.add("a", -1);
2239
+ await storage.update("a", value);
2240
+ const getResult = await storage.get("a");
2241
+ expect(getResult).toEqual(value);
2242
+ });
2243
+ test("Should work with object of arrays", async () => {
2244
+ const value = {
2245
+ a: [
2246
+ 0,
2247
+ -1,
2248
+ 1,
2249
+ -1.5,
2250
+ 1.5,
2251
+ NaN,
2252
+ Infinity,
2253
+ 2n,
2254
+ true,
2255
+ false,
2256
+ "str",
2257
+ new Date("2024-01-01"),
2258
+ new Set(["a", "b", "c"]),
2259
+ new Map([
2260
+ ["a", 1],
2261
+ ["b", 2],
2262
+ ["c", 3],
2263
+ ]),
2264
+ /test/,
2265
+ ],
2266
+ };
2267
+ await storage.add("a", -1);
2268
+ await storage.update("a", value);
2269
+ const getResult = await storage.get("a");
2270
+ expect(getResult).toEqual(value);
2271
+ });
2272
+ });
2273
+ describe("method: updateMany", () => {
2274
+ test("Should work with positive integer", async () => {
2275
+ const value = 1;
2276
+ await storage.add("a", -1);
2277
+ await storage.updateMany({ a: value });
2278
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2279
+ });
2280
+ test("Should work with negative integer", async () => {
2281
+ const value = -1;
2282
+ await storage.add("a", -1);
2283
+ await storage.updateMany({ a: value });
2284
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2285
+ });
2286
+ test("Should work with positive decimal", async () => {
2287
+ const value = 1.5;
2288
+ await storage.add("a", -1);
2289
+ await storage.updateMany({ a: value });
2290
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2291
+ });
2292
+ test("Should work with negative decimal", async () => {
2293
+ const value = -1.5;
2294
+ await storage.add("a", -1);
2295
+ await storage.updateMany({ a: value });
2296
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2297
+ });
2298
+ test("Should work with NaN", async () => {
2299
+ const value = NaN;
2300
+ await storage.add("a", -1);
2301
+ await storage.updateMany({ a: value });
2302
+ const { a: getResult } = await storage.getMany(["a"]);
2303
+ expect(getResult).toBeNaN();
2304
+ });
2305
+ test("Should work with Infinity", async () => {
2306
+ const value = Infinity;
2307
+ await storage.add("a", -1);
2308
+ await storage.updateMany({ a: value });
2309
+ const { a: getResult } = await storage.getMany(["a"]);
2310
+ expect(isFinite(getResult)).toBe(false);
2311
+ });
2312
+ test("Should work with Bigint", async () => {
2313
+ const value = 20n;
2314
+ await storage.add("a", -1);
2315
+ await storage.updateMany({ a: value });
2316
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2317
+ });
2318
+ test("Should work with true", async () => {
2319
+ const value = true;
2320
+ await storage.add("a", -1);
2321
+ await storage.updateMany({ a: value });
2322
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2323
+ });
2324
+ test("Should work with false", async () => {
2325
+ const value = false;
2326
+ await storage.add("a", -1);
2327
+ await storage.updateMany({ a: value });
2328
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2329
+ });
2330
+ test("Should work with string", async () => {
2331
+ const value = "str";
2332
+ await storage.add("a", -1);
2333
+ await storage.updateMany({ a: value });
2334
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
2335
+ });
2336
+ test("Should work with Date", async () => {
2337
+ const value = new Date("2024-01-01");
2338
+ await storage.add("a", -1);
2339
+ await storage.updateMany({ a: value });
2340
+ const { a: getResult } = await storage.getMany(["a"]);
2341
+ expect(getResult).toBeInstanceOf(Date);
2342
+ expect(getResult).toEqual(value);
2343
+ });
2344
+ test("Should work with RegExp", async () => {
2345
+ const value = /test/;
2346
+ await storage.add("a", -1);
2347
+ await storage.updateMany({ a: value });
2348
+ const { a: getResult } = await storage.getMany(["a"]);
2349
+ expect(getResult).toBeInstanceOf(RegExp);
2350
+ expect(getResult).toEqual(value);
2351
+ });
2352
+ test("Should work with Buffer", async () => {
2353
+ const value = Buffer.from("asd");
2354
+ await storage.add("a", -1);
2355
+ await storage.updateMany({ a: value });
2356
+ const { a: getResult } = await storage.getMany([
2357
+ "a",
2358
+ ]);
2359
+ expect(getResult).toBeInstanceOf(Buffer);
2360
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
2361
+ });
2362
+ test("Should work with Uint8Array", async () => {
2363
+ const value = new Uint8Array(Buffer.from("asd"));
2364
+ await storage.add("a", -1);
2365
+ await storage.updateMany({ a: value });
2366
+ const { a: getResult } = await storage.getMany(["a"]);
2367
+ expect(getResult).toBeInstanceOf(Uint8Array);
2368
+ expect(getResult
2369
+ ? Buffer.from(getResult).toString("base64")
2370
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2371
+ });
2372
+ test("Should work with Int8Array", async () => {
2373
+ const value = new Int8Array(Buffer.from("asd"));
2374
+ await storage.add("a", -1);
2375
+ await storage.updateMany({ a: value });
2376
+ const { a: getResult } = await storage.getMany(["a"]);
2377
+ expect(getResult).toBeInstanceOf(Int8Array);
2378
+ expect(getResult
2379
+ ? Buffer.from(getResult).toString("base64")
2380
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2381
+ });
2382
+ test("Should work with Uint16Array", async () => {
2383
+ const value = new Uint16Array(Buffer.from("asd"));
2384
+ await storage.add("a", -1);
2385
+ await storage.updateMany({ a: value });
2386
+ const { a: getResult } = await storage.getMany(["a"]);
2387
+ expect(getResult).toBeInstanceOf(Uint16Array);
2388
+ expect(getResult
2389
+ ? Buffer.from(getResult).toString("base64")
2390
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2391
+ });
2392
+ test("Should work with Int16Array", async () => {
2393
+ const value = new Int16Array(Buffer.from("asd"));
2394
+ await storage.add("a", -1);
2395
+ await storage.updateMany({ a: value });
2396
+ const { a: getResult } = await storage.getMany(["a"]);
2397
+ expect(getResult).toBeInstanceOf(Int16Array);
2398
+ expect(getResult
2399
+ ? Buffer.from(getResult).toString("base64")
2400
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2401
+ });
2402
+ test("Should work with Uint32Array", async () => {
2403
+ const value = new Uint32Array(Buffer.from("asd"));
2404
+ await storage.add("a", -1);
2405
+ await storage.updateMany({ a: value });
2406
+ const { a: getResult } = await storage.getMany(["a"]);
2407
+ expect(getResult).toBeInstanceOf(Uint32Array);
2408
+ expect(getResult
2409
+ ? Buffer.from(getResult).toString("base64")
2410
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2411
+ });
2412
+ test("Should work with Int32Array", async () => {
2413
+ const value = new Int32Array(Buffer.from("asd"));
2414
+ await storage.add("a", -1);
2415
+ await storage.updateMany({ a: value });
2416
+ const { a: getResult } = await storage.getMany(["a"]);
2417
+ expect(getResult).toBeInstanceOf(Int32Array);
2418
+ expect(getResult
2419
+ ? Buffer.from(getResult).toString("base64")
2420
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2421
+ });
2422
+ test("Should work with Float32Array", async () => {
2423
+ const value = new Float32Array(Buffer.from("asd"));
2424
+ await storage.add("a", -1);
2425
+ await storage.updateMany({ a: value });
2426
+ const { a: getResult } = await storage.getMany(["a"]);
2427
+ expect(getResult).toBeInstanceOf(Float32Array);
2428
+ expect(getResult
2429
+ ? Buffer.from(getResult).toString("base64")
2430
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2431
+ });
2432
+ test("Should work with Float64Array", async () => {
2433
+ const value = new Float64Array(Buffer.from("asd"));
2434
+ await storage.add("a", -1);
2435
+ await storage.updateMany({ a: value });
2436
+ const { a: getResult } = await storage.getMany(["a"]);
2437
+ expect(getResult).toBeInstanceOf(Float64Array);
2438
+ expect(getResult
2439
+ ? Buffer.from(getResult).toString("base64")
2440
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2441
+ });
2442
+ test("Should work with Set", async () => {
2443
+ const value = new Set(["a", "b", "c"]);
2444
+ await storage.add("a", -1);
2445
+ await storage.updateMany({ a: value });
2446
+ const { a: getResult } = await storage.getMany(["a"]);
2447
+ expect(getResult).toBeInstanceOf(Set);
2448
+ expect(getResult).toEqual(value);
2449
+ });
2450
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
2451
+ const value = new Set([
2452
+ 0,
2453
+ -1,
2454
+ 1,
2455
+ -1.5,
2456
+ 1.5,
2457
+ NaN,
2458
+ Infinity,
2459
+ 2n,
2460
+ true,
2461
+ false,
2462
+ "str",
2463
+ new Date("2024-01-01"),
2464
+ new Set(["a", "b", "c"]),
2465
+ new Map([
2466
+ ["a", 1],
2467
+ ["b", 2],
2468
+ ["c", 3],
2469
+ ]),
2470
+ { a: 1, b: 2 },
2471
+ [1, 2, 3],
2472
+ /test/,
2473
+ ]);
2474
+ await storage.add("a", -1);
2475
+ await storage.updateMany({ a: value });
2476
+ const { a: getResult } = await storage.getMany(["a"]);
2477
+ expect(getResult).toBeInstanceOf(Set);
2478
+ expect(getResult).toEqual(value);
2479
+ });
2480
+ test("Should work with Map", async () => {
2481
+ const value = new Map([
2482
+ ["a", 1],
2483
+ ["b", 2],
2484
+ ["c", 3],
2485
+ ]);
2486
+ await storage.add("a", -1);
2487
+ await storage.updateMany({ a: value });
2488
+ const { a: getResult } = await storage.getMany(["a"]);
2489
+ expect(getResult).toBeInstanceOf(Map);
2490
+ expect(getResult).toEqual(value);
2491
+ });
2492
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
2493
+ const value = new Map([
2494
+ ["a", 0],
2495
+ ["b", -1],
2496
+ ["c", 1],
2497
+ ["d", -1.5],
2498
+ ["e", 1.5],
2499
+ ["f", NaN],
2500
+ ["g", Infinity],
2501
+ ["h", 2n],
2502
+ ["j", true],
2503
+ ["l", false],
2504
+ ["i", "str"],
2505
+ ["r", new Date("2024-01-01")],
2506
+ ["k", new Set(["a", "b", "c"])],
2507
+ [
2508
+ "p",
2509
+ new Map([
2510
+ ["a", 1],
2511
+ ["b", 2],
2512
+ ["c", 3],
2513
+ ]),
2514
+ ],
2515
+ ["a", /test/],
2516
+ [1, { a: 2, b: -1 }],
2517
+ [2, [1, 2, 3]],
2518
+ ]);
2519
+ await storage.add("a", -1);
2520
+ await storage.updateMany({ a: value });
2521
+ const { a: getResult } = await storage.getMany(["a"]);
2522
+ expect(getResult).toBeInstanceOf(Map);
2523
+ expect(getResult).toEqual(value);
2524
+ });
2525
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
2526
+ const value = new Map([
2527
+ [0, "a"],
2528
+ [-1, "a"],
2529
+ [1, "a"],
2530
+ [-1.5, "a"],
2531
+ [1.5, "a"],
2532
+ [NaN, "a"],
2533
+ [Infinity, "a"],
2534
+ [2n, "a"],
2535
+ [true, "a"],
2536
+ [false, "a"],
2537
+ ["str", "a"],
2538
+ [new Date("2024-01-01"), "a"],
2539
+ [new Set(["a", "b", "c"]), "a"],
2540
+ [
2541
+ new Map([
2542
+ ["a", 1],
2543
+ ["b", 2],
2544
+ ["c", 3],
2545
+ ]),
2546
+ "a",
2547
+ ],
2548
+ [/test/, "a"],
2549
+ [{ a: 2, b: -1 }, 1],
2550
+ [[1, 2, 3], 2],
2551
+ ]);
2552
+ await storage.add("a", -1);
2553
+ await storage.updateMany({ a: value });
2554
+ const { a: getResult } = await storage.getMany(["a"]);
2555
+ expect(getResult).toBeInstanceOf(Map);
2556
+ expect(getResult).toEqual(value);
2557
+ });
2558
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
2559
+ const value = [
2560
+ 0,
2561
+ -1,
2562
+ 1,
2563
+ -1.5,
2564
+ 1.5,
2565
+ NaN,
2566
+ Infinity,
2567
+ 2n,
2568
+ true,
2569
+ false,
2570
+ "str",
2571
+ new Date("2024-01-01"),
2572
+ new Set(["a", "b", "c"]),
2573
+ new Map([
2574
+ ["a", 1],
2575
+ ["b", 2],
2576
+ ["c", 3],
2577
+ ]),
2578
+ /test/,
2579
+ ];
2580
+ await storage.add("a", -1);
2581
+ await storage.updateMany({ a: value });
2582
+ const getResult = await storage.getMany(["a"]);
2583
+ expect(getResult).toEqual({ a: value });
2584
+ });
2585
+ test("Should work with array of objects", async () => {
2586
+ const value = [
2587
+ Object.fromEntries([
2588
+ ["a", 0],
2589
+ ["b", -1],
2590
+ ["c", 1],
2591
+ ["d", -1.5],
2592
+ ["e", 1.5],
2593
+ ["f", NaN],
2594
+ ["g", Infinity],
2595
+ ["h", 2n],
2596
+ ["j", true],
2597
+ ["l", false],
2598
+ ["i", "str"],
2599
+ ["r", new Date("2024-01-01")],
2600
+ ["k", new Set(["a", "b", "c"])],
2601
+ [
2602
+ "p",
2603
+ new Map([
2604
+ ["a", 1],
2605
+ ["b", 2],
2606
+ ["c", 3],
2607
+ ]),
2608
+ ],
2609
+ ["a", /test/],
2610
+ ]),
2611
+ ];
2612
+ await storage.add("a", -1);
2613
+ await storage.updateMany({ a: value });
2614
+ const { a: getResult } = await storage.getMany(["a"]);
2615
+ expect(getResult).toEqual(value);
2616
+ });
2617
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
2618
+ const value = Object.fromEntries([
2619
+ ["a", 0],
2620
+ ["b", -1],
2621
+ ["c", 1],
2622
+ ["d", -1.5],
2623
+ ["e", 1.5],
2624
+ ["f", NaN],
2625
+ ["g", Infinity],
2626
+ ["h", 2n],
2627
+ ["j", true],
2628
+ ["l", false],
2629
+ ["i", "str"],
2630
+ ["r", new Date("2024-01-01")],
2631
+ ["k", new Set(["a", "b", "c"])],
2632
+ [
2633
+ "p",
2634
+ new Map([
2635
+ ["a", 1],
2636
+ ["b", 2],
2637
+ ["c", 3],
2638
+ ]),
2639
+ ],
2640
+ ["a", /test/],
2641
+ ]);
2642
+ await storage.add("a", -1);
2643
+ await storage.updateMany({ a: value });
2644
+ const { a: getResult } = await storage.getMany(["a"]);
2645
+ expect(getResult).toEqual(value);
2646
+ });
2647
+ test("Should work with object of arrays", async () => {
2648
+ const value = {
2649
+ a: [
2650
+ 0,
2651
+ -1,
2652
+ 1,
2653
+ -1.5,
2654
+ 1.5,
2655
+ NaN,
2656
+ Infinity,
2657
+ 2n,
2658
+ true,
2659
+ false,
2660
+ "str",
2661
+ new Date("2024-01-01"),
2662
+ new Set(["a", "b", "c"]),
2663
+ new Map([
2664
+ ["a", 1],
2665
+ ["b", 2],
2666
+ ["c", 3],
2667
+ ]),
2668
+ /test/,
2669
+ ],
2670
+ };
2671
+ await storage.add("a", -1);
2672
+ await storage.updateMany({ a: value });
2673
+ const { a: getResult } = await storage.getMany(["a"]);
2674
+ expect(getResult).toEqual(value);
2675
+ });
2676
+ });
2677
+ describe("method: put", () => {
2678
+ test("Should work with positive integer", async () => {
2679
+ const value = 1;
2680
+ await storage.put("a", value);
2681
+ expect(await storage.get("a")).toBe(value);
2682
+ });
2683
+ test("Should work with negative integer", async () => {
2684
+ const value = -1;
2685
+ await storage.put("a", value);
2686
+ expect(await storage.get("a")).toBe(value);
2687
+ });
2688
+ test("Should work with positive decimal", async () => {
2689
+ const value = 1.5;
2690
+ await storage.put("a", value);
2691
+ expect(await storage.get("a")).toBe(value);
2692
+ });
2693
+ test("Should work with negative decimal", async () => {
2694
+ const value = -1.5;
2695
+ await storage.put("a", value);
2696
+ expect(await storage.get("a")).toBe(value);
2697
+ });
2698
+ test("Should work with NaN", async () => {
2699
+ const value = NaN;
2700
+ await storage.put("a", value);
2701
+ const getResult = await storage.get("a");
2702
+ expect(getResult).toBeNaN();
2703
+ });
2704
+ test("Should work with Infinity", async () => {
2705
+ const value = Infinity;
2706
+ await storage.put("a", value);
2707
+ const getResult = await storage.get("a");
2708
+ expect(isFinite(getResult)).toBe(false);
2709
+ });
2710
+ test("Should work with Bigint", async () => {
2711
+ const value = 20n;
2712
+ await storage.put("a", value);
2713
+ expect(await storage.get("a")).toBe(value);
2714
+ });
2715
+ test("Should work with true", async () => {
2716
+ const value = true;
2717
+ await storage.put("a", value);
2718
+ expect(await storage.get("a")).toBe(value);
2719
+ });
2720
+ test("Should work with false", async () => {
2721
+ const value = false;
2722
+ await storage.put("a", value);
2723
+ expect(await storage.get("a")).toBe(value);
2724
+ });
2725
+ test("Should work with string", async () => {
2726
+ const value = "str";
2727
+ await storage.put("a", value);
2728
+ expect(await storage.get("a")).toBe(value);
2729
+ });
2730
+ test("Should work with Date", async () => {
2731
+ const value = new Date("2024-01-01");
2732
+ await storage.put("a", value);
2733
+ const getResult = await storage.get("a");
2734
+ expect(getResult).toBeInstanceOf(Date);
2735
+ expect(getResult).toEqual(value);
2736
+ });
2737
+ test("Should work with RegExp", async () => {
2738
+ const value = /test/;
2739
+ await storage.put("a", value);
2740
+ const getResult = await storage.get("a");
2741
+ expect(getResult).toBeInstanceOf(RegExp);
2742
+ expect(getResult).toEqual(value);
2743
+ });
2744
+ test("Should work with Buffer", async () => {
2745
+ const value = Buffer.from("asd");
2746
+ await storage.put("a", value);
2747
+ const getResult = await storage.get("a");
2748
+ expect(getResult).toBeInstanceOf(Buffer);
2749
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
2750
+ });
2751
+ test("Should work with Uint8Array", async () => {
2752
+ const value = new Uint8Array(Buffer.from("asd"));
2753
+ await storage.put("a", value);
2754
+ const getResult = await storage.get("a");
2755
+ expect(getResult).toBeInstanceOf(Uint8Array);
2756
+ expect(getResult
2757
+ ? Buffer.from(getResult).toString("base64")
2758
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2759
+ });
2760
+ test("Should work with Int8Array", async () => {
2761
+ const value = new Int8Array(Buffer.from("asd"));
2762
+ await storage.put("a", value);
2763
+ const getResult = await storage.get("a");
2764
+ expect(getResult).toBeInstanceOf(Int8Array);
2765
+ expect(getResult
2766
+ ? Buffer.from(getResult).toString("base64")
2767
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2768
+ });
2769
+ test("Should work with Uint16Array", async () => {
2770
+ const value = new Uint16Array(Buffer.from("asd"));
2771
+ await storage.put("a", value);
2772
+ const getResult = await storage.get("a");
2773
+ expect(getResult).toBeInstanceOf(Uint16Array);
2774
+ expect(getResult
2775
+ ? Buffer.from(getResult).toString("base64")
2776
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2777
+ });
2778
+ test("Should work with Int16Array", async () => {
2779
+ const value = new Int16Array(Buffer.from("asd"));
2780
+ await storage.put("a", value);
2781
+ const getResult = await storage.get("a");
2782
+ expect(getResult).toBeInstanceOf(Int16Array);
2783
+ expect(getResult
2784
+ ? Buffer.from(getResult).toString("base64")
2785
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2786
+ });
2787
+ test("Should work with Uint32Array", async () => {
2788
+ const value = new Uint32Array(Buffer.from("asd"));
2789
+ await storage.put("a", value);
2790
+ const getResult = await storage.get("a");
2791
+ expect(getResult).toBeInstanceOf(Uint32Array);
2792
+ expect(getResult
2793
+ ? Buffer.from(getResult).toString("base64")
2794
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2795
+ });
2796
+ test("Should work with Int32Array", async () => {
2797
+ const value = new Int32Array(Buffer.from("asd"));
2798
+ await storage.put("a", value);
2799
+ const getResult = await storage.get("a");
2800
+ expect(getResult).toBeInstanceOf(Int32Array);
2801
+ expect(getResult
2802
+ ? Buffer.from(getResult).toString("base64")
2803
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2804
+ });
2805
+ test("Should work with Float32Array", async () => {
2806
+ const value = new Float32Array(Buffer.from("asd"));
2807
+ await storage.put("a", value);
2808
+ const getResult = await storage.get("a");
2809
+ expect(getResult).toBeInstanceOf(Float32Array);
2810
+ expect(getResult
2811
+ ? Buffer.from(getResult).toString("base64")
2812
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2813
+ });
2814
+ test("Should work with Float64Array", async () => {
2815
+ const value = new Float64Array(Buffer.from("asd"));
2816
+ await storage.put("a", value);
2817
+ const getResult = await storage.get("a");
2818
+ expect(getResult).toBeInstanceOf(Float64Array);
2819
+ expect(getResult
2820
+ ? Buffer.from(getResult).toString("base64")
2821
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
2822
+ });
2823
+ test("Should work with Set", async () => {
2824
+ const value = new Set(["a", "b", "c"]);
2825
+ await storage.put("a", value);
2826
+ const getResult = await storage.get("a");
2827
+ expect(getResult).toBeInstanceOf(Set);
2828
+ expect(getResult).toEqual(value);
2829
+ });
2830
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
2831
+ const value = new Set([
2832
+ 0,
2833
+ -1,
2834
+ 1,
2835
+ -1.5,
2836
+ 1.5,
2837
+ NaN,
2838
+ Infinity,
2839
+ 2n,
2840
+ true,
2841
+ false,
2842
+ "str",
2843
+ new Date("2024-01-01"),
2844
+ new Set(["a", "b", "c"]),
2845
+ new Map([
2846
+ ["a", 1],
2847
+ ["b", 2],
2848
+ ["c", 3],
2849
+ ]),
2850
+ { a: 1, b: 2 },
2851
+ [1, 2, 3],
2852
+ /test/,
2853
+ ]);
2854
+ await storage.put("a", value);
2855
+ const getResult = await storage.get("a");
2856
+ expect(getResult).toBeInstanceOf(Set);
2857
+ expect(getResult).toEqual(value);
2858
+ });
2859
+ test("Should work with Map", async () => {
2860
+ const value = new Map([
2861
+ ["a", 1],
2862
+ ["b", 2],
2863
+ ["c", 3],
2864
+ ]);
2865
+ await storage.put("a", value);
2866
+ const getResult = await storage.get("a");
2867
+ expect(getResult).toBeInstanceOf(Map);
2868
+ expect(getResult).toEqual(value);
2869
+ });
2870
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
2871
+ const value = new Map([
2872
+ ["a", 0],
2873
+ ["b", -1],
2874
+ ["c", 1],
2875
+ ["d", -1.5],
2876
+ ["e", 1.5],
2877
+ ["f", NaN],
2878
+ ["g", Infinity],
2879
+ ["h", 2n],
2880
+ ["j", true],
2881
+ ["l", false],
2882
+ ["i", "str"],
2883
+ ["r", new Date("2024-01-01")],
2884
+ ["k", new Set(["a", "b", "c"])],
2885
+ [
2886
+ "p",
2887
+ new Map([
2888
+ ["a", 1],
2889
+ ["b", 2],
2890
+ ["c", 3],
2891
+ ]),
2892
+ ],
2893
+ ["a", /test/],
2894
+ [1, { a: 2, b: -1 }],
2895
+ [2, [1, 2, 3]],
2896
+ ]);
2897
+ await storage.put("a", value);
2898
+ const getResult = await storage.get("a");
2899
+ expect(getResult).toBeInstanceOf(Map);
2900
+ expect(getResult).toEqual(value);
2901
+ });
2902
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
2903
+ const value = new Map([
2904
+ [0, "a"],
2905
+ [-1, "a"],
2906
+ [1, "a"],
2907
+ [-1.5, "a"],
2908
+ [1.5, "a"],
2909
+ [NaN, "a"],
2910
+ [Infinity, "a"],
2911
+ [2n, "a"],
2912
+ [true, "a"],
2913
+ [false, "a"],
2914
+ ["str", "a"],
2915
+ [new Date("2024-01-01"), "a"],
2916
+ [new Set(["a", "b", "c"]), "a"],
2917
+ [
2918
+ new Map([
2919
+ ["a", 1],
2920
+ ["b", 2],
2921
+ ["c", 3],
2922
+ ]),
2923
+ "a",
2924
+ ],
2925
+ [/test/, "a"],
2926
+ [{ a: 2, b: -1 }, 1],
2927
+ [[1, 2, 3], 2],
2928
+ ]);
2929
+ await storage.put("a", value);
2930
+ const getResult = await storage.get("a");
2931
+ expect(getResult).toBeInstanceOf(Map);
2932
+ expect(getResult).toEqual(value);
2933
+ });
2934
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
2935
+ const value = [
2936
+ 0,
2937
+ -1,
2938
+ 1,
2939
+ -1.5,
2940
+ 1.5,
2941
+ NaN,
2942
+ Infinity,
2943
+ 2n,
2944
+ true,
2945
+ false,
2946
+ "str",
2947
+ new Date("2024-01-01"),
2948
+ new Set(["a", "b", "c"]),
2949
+ new Map([
2950
+ ["a", 1],
2951
+ ["b", 2],
2952
+ ["c", 3],
2953
+ ]),
2954
+ /test/,
2955
+ ];
2956
+ await storage.put("a", value);
2957
+ const getResult = await storage.get("a");
2958
+ expect(getResult).toEqual(value);
2959
+ });
2960
+ test("Should work with array of objects", async () => {
2961
+ const value = [
2962
+ Object.fromEntries([
2963
+ ["a", 0],
2964
+ ["b", -1],
2965
+ ["c", 1],
2966
+ ["d", -1.5],
2967
+ ["e", 1.5],
2968
+ ["f", NaN],
2969
+ ["g", Infinity],
2970
+ ["h", 2n],
2971
+ ["j", true],
2972
+ ["l", false],
2973
+ ["i", "str"],
2974
+ ["r", new Date("2024-01-01")],
2975
+ ["k", new Set(["a", "b", "c"])],
2976
+ [
2977
+ "p",
2978
+ new Map([
2979
+ ["a", 1],
2980
+ ["b", 2],
2981
+ ["c", 3],
2982
+ ]),
2983
+ ],
2984
+ ["a", /test/],
2985
+ ]),
2986
+ ];
2987
+ await storage.put("a", value);
2988
+ const getResult = await storage.get("a");
2989
+ expect(getResult).toEqual(value);
2990
+ });
2991
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
2992
+ const value = Object.fromEntries([
2993
+ ["a", 0],
2994
+ ["b", -1],
2995
+ ["c", 1],
2996
+ ["d", -1.5],
2997
+ ["e", 1.5],
2998
+ ["f", NaN],
2999
+ ["g", Infinity],
3000
+ ["h", 2n],
3001
+ ["j", true],
3002
+ ["l", false],
3003
+ ["i", "str"],
3004
+ ["r", new Date("2024-01-01")],
3005
+ ["k", new Set(["a", "b", "c"])],
3006
+ [
3007
+ "p",
3008
+ new Map([
3009
+ ["a", 1],
3010
+ ["b", 2],
3011
+ ["c", 3],
3012
+ ]),
3013
+ ],
3014
+ ["a", /test/],
3015
+ ]);
3016
+ await storage.put("a", value);
3017
+ const getResult = await storage.get("a");
3018
+ expect(getResult).toEqual(value);
3019
+ });
3020
+ test("Should work with object of arrays", async () => {
3021
+ const value = {
3022
+ a: [
3023
+ 0,
3024
+ -1,
3025
+ 1,
3026
+ -1.5,
3027
+ 1.5,
3028
+ NaN,
3029
+ Infinity,
3030
+ 2n,
3031
+ true,
3032
+ false,
3033
+ "str",
3034
+ new Date("2024-01-01"),
3035
+ new Set(["a", "b", "c"]),
3036
+ new Map([
3037
+ ["a", 1],
3038
+ ["b", 2],
3039
+ ["c", 3],
3040
+ ]),
3041
+ /test/,
3042
+ ],
3043
+ };
3044
+ await storage.put("a", value);
3045
+ const getResult = await storage.get("a");
3046
+ expect(getResult).toEqual(value);
3047
+ });
3048
+ });
3049
+ describe("method: putMany", () => {
3050
+ test("Should work with positive integer", async () => {
3051
+ const value = 1;
3052
+ await storage.putMany({ a: value });
3053
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3054
+ });
3055
+ test("Should work with negative integer", async () => {
3056
+ const value = -1;
3057
+ await storage.putMany({ a: value });
3058
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3059
+ });
3060
+ test("Should work with positive decimal", async () => {
3061
+ const value = 1.5;
3062
+ await storage.putMany({ a: value });
3063
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3064
+ });
3065
+ test("Should work with negative decimal", async () => {
3066
+ const value = -1.5;
3067
+ await storage.putMany({ a: value });
3068
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3069
+ });
3070
+ test("Should work with NaN", async () => {
3071
+ const value = NaN;
3072
+ await storage.putMany({ a: value });
3073
+ const { a: getResult } = await storage.getMany(["a"]);
3074
+ expect(getResult).toBeNaN();
3075
+ });
3076
+ test("Should work with Infinity", async () => {
3077
+ const value = Infinity;
3078
+ await storage.putMany({ a: value });
3079
+ const { a: getResult } = await storage.getMany(["a"]);
3080
+ expect(isFinite(getResult)).toBe(false);
3081
+ });
3082
+ test("Should work with Bigint", async () => {
3083
+ const value = 20n;
3084
+ await storage.putMany({ a: value });
3085
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3086
+ });
3087
+ test("Should work with true", async () => {
3088
+ const value = true;
3089
+ await storage.putMany({ a: value });
3090
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3091
+ });
3092
+ test("Should work with false", async () => {
3093
+ const value = false;
3094
+ await storage.putMany({ a: value });
3095
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3096
+ });
3097
+ test("Should work with string", async () => {
3098
+ const value = "str";
3099
+ await storage.putMany({ a: value });
3100
+ expect(await storage.getMany(["a"])).toEqual({ a: value });
3101
+ });
3102
+ test("Should work with Date", async () => {
3103
+ const value = new Date("2024-01-01");
3104
+ await storage.putMany({ a: value });
3105
+ const { a: getResult } = await storage.getMany(["a"]);
3106
+ expect(getResult).toBeInstanceOf(Date);
3107
+ expect(getResult).toEqual(value);
3108
+ });
3109
+ test("Should work with RegExp", async () => {
3110
+ const value = /test/;
3111
+ await storage.putMany({ a: value });
3112
+ const { a: getResult } = await storage.getMany(["a"]);
3113
+ expect(getResult).toBeInstanceOf(RegExp);
3114
+ expect(getResult).toEqual(value);
3115
+ });
3116
+ test("Should work with Buffer", async () => {
3117
+ const value = Buffer.from("asd");
3118
+ await storage.putMany({ a: value });
3119
+ const { a: getResult } = await storage.getMany([
3120
+ "a",
3121
+ ]);
3122
+ expect(getResult).toBeInstanceOf(Buffer);
3123
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
3124
+ });
3125
+ test("Should work with Uint8Array", async () => {
3126
+ const value = new Uint8Array(Buffer.from("asd"));
3127
+ await storage.putMany({ a: value });
3128
+ const { a: getResult } = await storage.getMany(["a"]);
3129
+ expect(getResult).toBeInstanceOf(Uint8Array);
3130
+ expect(getResult
3131
+ ? Buffer.from(getResult).toString("base64")
3132
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3133
+ });
3134
+ test("Should work with Int8Array", async () => {
3135
+ const value = new Int8Array(Buffer.from("asd"));
3136
+ await storage.putMany({ a: value });
3137
+ const { a: getResult } = await storage.getMany(["a"]);
3138
+ expect(getResult).toBeInstanceOf(Int8Array);
3139
+ expect(getResult
3140
+ ? Buffer.from(getResult).toString("base64")
3141
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3142
+ });
3143
+ test("Should work with Uint16Array", async () => {
3144
+ const value = new Uint16Array(Buffer.from("asd"));
3145
+ await storage.putMany({ a: value });
3146
+ const { a: getResult } = await storage.getMany(["a"]);
3147
+ expect(getResult).toBeInstanceOf(Uint16Array);
3148
+ expect(getResult
3149
+ ? Buffer.from(getResult).toString("base64")
3150
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3151
+ });
3152
+ test("Should work with Int16Array", async () => {
3153
+ const value = new Int16Array(Buffer.from("asd"));
3154
+ await storage.putMany({ a: value });
3155
+ const { a: getResult } = await storage.getMany(["a"]);
3156
+ expect(getResult).toBeInstanceOf(Int16Array);
3157
+ expect(getResult
3158
+ ? Buffer.from(getResult).toString("base64")
3159
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3160
+ });
3161
+ test("Should work with Uint32Array", async () => {
3162
+ const value = new Uint32Array(Buffer.from("asd"));
3163
+ await storage.putMany({ a: value });
3164
+ const { a: getResult } = await storage.getMany(["a"]);
3165
+ expect(getResult).toBeInstanceOf(Uint32Array);
3166
+ expect(getResult
3167
+ ? Buffer.from(getResult).toString("base64")
3168
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3169
+ });
3170
+ test("Should work with Int32Array", async () => {
3171
+ const value = new Int32Array(Buffer.from("asd"));
3172
+ await storage.putMany({ a: value });
3173
+ const { a: getResult } = await storage.getMany(["a"]);
3174
+ expect(getResult).toBeInstanceOf(Int32Array);
3175
+ expect(getResult
3176
+ ? Buffer.from(getResult).toString("base64")
3177
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3178
+ });
3179
+ test("Should work with Float32Array", async () => {
3180
+ const value = new Float32Array(Buffer.from("asd"));
3181
+ await storage.putMany({ a: value });
3182
+ const { a: getResult } = await storage.getMany(["a"]);
3183
+ expect(getResult).toBeInstanceOf(Float32Array);
3184
+ expect(getResult
3185
+ ? Buffer.from(getResult).toString("base64")
3186
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3187
+ });
3188
+ test("Should work with Float64Array", async () => {
3189
+ const value = new Float64Array(Buffer.from("asd"));
3190
+ await storage.putMany({ a: value });
3191
+ const { a: getResult } = await storage.getMany(["a"]);
3192
+ expect(getResult).toBeInstanceOf(Float64Array);
3193
+ expect(getResult
3194
+ ? Buffer.from(getResult).toString("base64")
3195
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3196
+ });
3197
+ test("Should work with Set", async () => {
3198
+ const value = new Set(["a", "b", "c"]);
3199
+ await storage.putMany({ a: value });
3200
+ const { a: getResult } = await storage.getMany(["a"]);
3201
+ expect(getResult).toBeInstanceOf(Set);
3202
+ expect(getResult).toEqual(value);
3203
+ });
3204
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
3205
+ const value = new Set([
3206
+ 0,
3207
+ -1,
3208
+ 1,
3209
+ -1.5,
3210
+ 1.5,
3211
+ NaN,
3212
+ Infinity,
3213
+ 2n,
3214
+ true,
3215
+ false,
3216
+ "str",
3217
+ new Date("2024-01-01"),
3218
+ new Set(["a", "b", "c"]),
3219
+ new Map([
3220
+ ["a", 1],
3221
+ ["b", 2],
3222
+ ["c", 3],
3223
+ ]),
3224
+ { a: 1, b: 2 },
3225
+ [1, 2, 3],
3226
+ /test/,
3227
+ ]);
3228
+ await storage.putMany({ a: value });
3229
+ const { a: getResult } = await storage.getMany(["a"]);
3230
+ expect(getResult).toBeInstanceOf(Set);
3231
+ expect(getResult).toEqual(value);
3232
+ });
3233
+ test("Should work with Map", async () => {
3234
+ const value = new Map([
3235
+ ["a", 1],
3236
+ ["b", 2],
3237
+ ["c", 3],
3238
+ ]);
3239
+ await storage.putMany({ a: value });
3240
+ const { a: getResult } = await storage.getMany(["a"]);
3241
+ expect(getResult).toBeInstanceOf(Map);
3242
+ expect(getResult).toEqual(value);
3243
+ });
3244
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
3245
+ const value = new Map([
3246
+ ["a", 0],
3247
+ ["b", -1],
3248
+ ["c", 1],
3249
+ ["d", -1.5],
3250
+ ["e", 1.5],
3251
+ ["f", NaN],
3252
+ ["g", Infinity],
3253
+ ["h", 2n],
3254
+ ["j", true],
3255
+ ["l", false],
3256
+ ["i", "str"],
3257
+ ["r", new Date("2024-01-01")],
3258
+ ["k", new Set(["a", "b", "c"])],
3259
+ [
3260
+ "p",
3261
+ new Map([
3262
+ ["a", 1],
3263
+ ["b", 2],
3264
+ ["c", 3],
3265
+ ]),
3266
+ ],
3267
+ ["a", /test/],
3268
+ [1, { a: 2, b: -1 }],
3269
+ [2, [1, 2, 3]],
3270
+ ]);
3271
+ await storage.putMany({ a: value });
3272
+ const { a: getResult } = await storage.getMany(["a"]);
3273
+ expect(getResult).toBeInstanceOf(Map);
3274
+ expect(getResult).toEqual(value);
3275
+ });
3276
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
3277
+ const value = new Map([
3278
+ [0, "a"],
3279
+ [-1, "a"],
3280
+ [1, "a"],
3281
+ [-1.5, "a"],
3282
+ [1.5, "a"],
3283
+ [NaN, "a"],
3284
+ [Infinity, "a"],
3285
+ [2n, "a"],
3286
+ [true, "a"],
3287
+ [false, "a"],
3288
+ ["str", "a"],
3289
+ [new Date("2024-01-01"), "a"],
3290
+ [new Set(["a", "b", "c"]), "a"],
3291
+ [
3292
+ new Map([
3293
+ ["a", 1],
3294
+ ["b", 2],
3295
+ ["c", 3],
3296
+ ]),
3297
+ "a",
3298
+ ],
3299
+ [/test/, "a"],
3300
+ [{ a: 2, b: -1 }, 1],
3301
+ [[1, 2, 3], 2],
3302
+ ]);
3303
+ await storage.putMany({ a: value });
3304
+ const { a: getResult } = await storage.getMany(["a"]);
3305
+ expect(getResult).toBeInstanceOf(Map);
3306
+ expect(getResult).toEqual(value);
3307
+ });
3308
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
3309
+ const value = [
3310
+ 0,
3311
+ -1,
3312
+ 1,
3313
+ -1.5,
3314
+ 1.5,
3315
+ NaN,
3316
+ Infinity,
3317
+ 2n,
3318
+ true,
3319
+ false,
3320
+ "str",
3321
+ new Date("2024-01-01"),
3322
+ new Set(["a", "b", "c"]),
3323
+ new Map([
3324
+ ["a", 1],
3325
+ ["b", 2],
3326
+ ["c", 3],
3327
+ ]),
3328
+ /test/,
3329
+ ];
3330
+ await storage.putMany({ a: value });
3331
+ const getResult = await storage.getMany(["a"]);
3332
+ expect(getResult).toEqual({ a: value });
3333
+ });
3334
+ test("Should work with array of objects", async () => {
3335
+ const value = [
3336
+ Object.fromEntries([
3337
+ ["a", 0],
3338
+ ["b", -1],
3339
+ ["c", 1],
3340
+ ["d", -1.5],
3341
+ ["e", 1.5],
3342
+ ["f", NaN],
3343
+ ["g", Infinity],
3344
+ ["h", 2n],
3345
+ ["j", true],
3346
+ ["l", false],
3347
+ ["i", "str"],
3348
+ ["r", new Date("2024-01-01")],
3349
+ ["k", new Set(["a", "b", "c"])],
3350
+ [
3351
+ "p",
3352
+ new Map([
3353
+ ["a", 1],
3354
+ ["b", 2],
3355
+ ["c", 3],
3356
+ ]),
3357
+ ],
3358
+ ["a", /test/],
3359
+ ]),
3360
+ ];
3361
+ await storage.putMany({ a: value });
3362
+ const { a: getResult } = await storage.getMany(["a"]);
3363
+ expect(getResult).toEqual(value);
3364
+ });
3365
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
3366
+ const value = Object.fromEntries([
3367
+ ["a", 0],
3368
+ ["b", -1],
3369
+ ["c", 1],
3370
+ ["d", -1.5],
3371
+ ["e", 1.5],
3372
+ ["f", NaN],
3373
+ ["g", Infinity],
3374
+ ["h", 2n],
3375
+ ["j", true],
3376
+ ["l", false],
3377
+ ["i", "str"],
3378
+ ["r", new Date("2024-01-01")],
3379
+ ["k", new Set(["a", "b", "c"])],
3380
+ [
3381
+ "p",
3382
+ new Map([
3383
+ ["a", 1],
3384
+ ["b", 2],
3385
+ ["c", 3],
3386
+ ]),
3387
+ ],
3388
+ ["a", /test/],
3389
+ ]);
3390
+ await storage.putMany({ a: value });
3391
+ const { a: getResult } = await storage.getMany(["a"]);
3392
+ expect(getResult).toEqual(value);
3393
+ });
3394
+ test("Should work with object of arrays", async () => {
3395
+ const value = {
3396
+ a: [
3397
+ 0,
3398
+ -1,
3399
+ 1,
3400
+ -1.5,
3401
+ 1.5,
3402
+ NaN,
3403
+ Infinity,
3404
+ 2n,
3405
+ true,
3406
+ false,
3407
+ "str",
3408
+ new Date("2024-01-01"),
3409
+ new Set(["a", "b", "c"]),
3410
+ new Map([
3411
+ ["a", 1],
3412
+ ["b", 2],
3413
+ ["c", 3],
3414
+ ]),
3415
+ /test/,
3416
+ ],
3417
+ };
3418
+ await storage.putMany({ a: value });
3419
+ const { a: getResult } = await storage.getMany(["a"]);
3420
+ expect(getResult).toEqual(value);
3421
+ });
3422
+ });
3423
+ describe("method: getAndRemove", () => {
3424
+ test("Should work with positive integer", async () => {
3425
+ const value = 1;
3426
+ await storage.add("a", value);
3427
+ expect(await storage.getAndRemove("a")).toBe(value);
3428
+ });
3429
+ test("Should work with negative integer", async () => {
3430
+ const value = -1;
3431
+ await storage.add("a", value);
3432
+ expect(await storage.getAndRemove("a")).toBe(value);
3433
+ });
3434
+ test("Should work with positive decimal", async () => {
3435
+ const value = 1.5;
3436
+ await storage.add("a", value);
3437
+ expect(await storage.getAndRemove("a")).toBe(value);
3438
+ });
3439
+ test("Should work with negative decimal", async () => {
3440
+ const value = -1.5;
3441
+ await storage.add("a", value);
3442
+ expect(await storage.getAndRemove("a")).toBe(value);
3443
+ });
3444
+ test("Should work with NaN", async () => {
3445
+ const value = NaN;
3446
+ await storage.add("a", value);
3447
+ const getResult = await storage.getAndRemove("a");
3448
+ expect(getResult).toBeNaN();
3449
+ });
3450
+ test("Should work with Infinity", async () => {
3451
+ const value = Infinity;
3452
+ await storage.add("a", value);
3453
+ const getResult = await storage.getAndRemove("a");
3454
+ expect(isFinite(getResult)).toBe(false);
3455
+ });
3456
+ test("Should work with Bigint", async () => {
3457
+ const value = 20n;
3458
+ await storage.add("a", value);
3459
+ expect(await storage.getAndRemove("a")).toBe(value);
3460
+ });
3461
+ test("Should work with true", async () => {
3462
+ const value = true;
3463
+ await storage.add("a", value);
3464
+ expect(await storage.getAndRemove("a")).toBe(value);
3465
+ });
3466
+ test("Should work with false", async () => {
3467
+ const value = false;
3468
+ await storage.add("a", value);
3469
+ expect(await storage.getAndRemove("a")).toBe(value);
3470
+ });
3471
+ test("Should work with string", async () => {
3472
+ const value = "str";
3473
+ await storage.add("a", value);
3474
+ expect(await storage.getAndRemove("a")).toBe(value);
3475
+ });
3476
+ test("Should work with Date", async () => {
3477
+ const value = new Date("2024-01-01");
3478
+ await storage.add("a", value);
3479
+ const getResult = await storage.getAndRemove("a");
3480
+ expect(getResult).toBeInstanceOf(Date);
3481
+ expect(getResult).toEqual(value);
3482
+ });
3483
+ test("Should work with RegExp", async () => {
3484
+ const value = /test/;
3485
+ await storage.add("a", value);
3486
+ const getResult = await storage.getAndRemove("a");
3487
+ expect(getResult).toBeInstanceOf(RegExp);
3488
+ expect(getResult).toEqual(value);
3489
+ });
3490
+ test("Should work with Buffer", async () => {
3491
+ const value = Buffer.from("asd");
3492
+ await storage.add("a", value);
3493
+ const getResult = await storage.get("a");
3494
+ expect(getResult).toBeInstanceOf(Buffer);
3495
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
3496
+ });
3497
+ test("Should work with Uint8Array", async () => {
3498
+ const value = new Uint8Array(Buffer.from("asd"));
3499
+ await storage.add("a", value);
3500
+ const getResult = await storage.get("a");
3501
+ expect(getResult).toBeInstanceOf(Uint8Array);
3502
+ expect(getResult
3503
+ ? Buffer.from(getResult).toString("base64")
3504
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3505
+ });
3506
+ test("Should work with Int8Array", async () => {
3507
+ const value = new Int8Array(Buffer.from("asd"));
3508
+ await storage.add("a", value);
3509
+ const getResult = await storage.get("a");
3510
+ expect(getResult).toBeInstanceOf(Int8Array);
3511
+ expect(getResult
3512
+ ? Buffer.from(getResult).toString("base64")
3513
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3514
+ });
3515
+ test("Should work with Uint16Array", async () => {
3516
+ const value = new Uint16Array(Buffer.from("asd"));
3517
+ await storage.add("a", value);
3518
+ const getResult = await storage.get("a");
3519
+ expect(getResult).toBeInstanceOf(Uint16Array);
3520
+ expect(getResult
3521
+ ? Buffer.from(getResult).toString("base64")
3522
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3523
+ });
3524
+ test("Should work with Int16Array", async () => {
3525
+ const value = new Int16Array(Buffer.from("asd"));
3526
+ await storage.add("a", value);
3527
+ const getResult = await storage.get("a");
3528
+ expect(getResult).toBeInstanceOf(Int16Array);
3529
+ expect(getResult
3530
+ ? Buffer.from(getResult).toString("base64")
3531
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3532
+ });
3533
+ test("Should work with Uint32Array", async () => {
3534
+ const value = new Uint32Array(Buffer.from("asd"));
3535
+ await storage.add("a", value);
3536
+ const getResult = await storage.get("a");
3537
+ expect(getResult).toBeInstanceOf(Uint32Array);
3538
+ expect(getResult
3539
+ ? Buffer.from(getResult).toString("base64")
3540
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3541
+ });
3542
+ test("Should work with Int32Array", async () => {
3543
+ const value = new Int32Array(Buffer.from("asd"));
3544
+ await storage.add("a", value);
3545
+ const getResult = await storage.get("a");
3546
+ expect(getResult).toBeInstanceOf(Int32Array);
3547
+ expect(getResult
3548
+ ? Buffer.from(getResult).toString("base64")
3549
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3550
+ });
3551
+ test("Should work with Float32Array", async () => {
3552
+ const value = new Float32Array(Buffer.from("asd"));
3553
+ await storage.add("a", value);
3554
+ const getResult = await storage.get("a");
3555
+ expect(getResult).toBeInstanceOf(Float32Array);
3556
+ expect(getResult
3557
+ ? Buffer.from(getResult).toString("base64")
3558
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3559
+ });
3560
+ test("Should work with Float64Array", async () => {
3561
+ const value = new Float64Array(Buffer.from("asd"));
3562
+ await storage.add("a", value);
3563
+ const getResult = await storage.get("a");
3564
+ expect(getResult).toBeInstanceOf(Float64Array);
3565
+ expect(getResult
3566
+ ? Buffer.from(getResult).toString("base64")
3567
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3568
+ });
3569
+ test("Should work with Set", async () => {
3570
+ const value = new Set(["a", "b", "c"]);
3571
+ await storage.add("a", value);
3572
+ const getResult = await storage.getAndRemove("a");
3573
+ expect(getResult).toBeInstanceOf(Set);
3574
+ expect(getResult).toEqual(value);
3575
+ });
3576
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
3577
+ const value = new Set([
3578
+ 0,
3579
+ -1,
3580
+ 1,
3581
+ -1.5,
3582
+ 1.5,
3583
+ NaN,
3584
+ Infinity,
3585
+ 2n,
3586
+ true,
3587
+ false,
3588
+ "str",
3589
+ new Date("2024-01-01"),
3590
+ new Set(["a", "b", "c"]),
3591
+ new Map([
3592
+ ["a", 1],
3593
+ ["b", 2],
3594
+ ["c", 3],
3595
+ ]),
3596
+ { a: 1, b: 2 },
3597
+ [1, 2, 3],
3598
+ /test/,
3599
+ ]);
3600
+ await storage.add("a", value);
3601
+ const getResult = await storage.getAndRemove("a");
3602
+ expect(getResult).toBeInstanceOf(Set);
3603
+ expect(getResult).toEqual(value);
3604
+ });
3605
+ test("Should work with Map", async () => {
3606
+ const value = new Map([
3607
+ ["a", 1],
3608
+ ["b", 2],
3609
+ ["c", 3],
3610
+ ]);
3611
+ await storage.add("a", value);
3612
+ const getResult = await storage.getAndRemove("a");
3613
+ expect(getResult).toBeInstanceOf(Map);
3614
+ expect(getResult).toEqual(value);
3615
+ });
3616
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
3617
+ const value = new Map([
3618
+ ["a", 0],
3619
+ ["b", -1],
3620
+ ["c", 1],
3621
+ ["d", -1.5],
3622
+ ["e", 1.5],
3623
+ ["f", NaN],
3624
+ ["g", Infinity],
3625
+ ["h", 2n],
3626
+ ["j", true],
3627
+ ["l", false],
3628
+ ["i", "str"],
3629
+ ["r", new Date("2024-01-01")],
3630
+ ["k", new Set(["a", "b", "c"])],
3631
+ [
3632
+ "p",
3633
+ new Map([
3634
+ ["a", 1],
3635
+ ["b", 2],
3636
+ ["c", 3],
3637
+ ]),
3638
+ ],
3639
+ ["a", /test/],
3640
+ [1, { a: 2, b: -1 }],
3641
+ [2, [1, 2, 3]],
3642
+ ]);
3643
+ await storage.add("a", value);
3644
+ const getResult = await storage.getAndRemove("a");
3645
+ expect(getResult).toBeInstanceOf(Map);
3646
+ expect(getResult).toEqual(value);
3647
+ });
3648
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
3649
+ const value = new Map([
3650
+ [0, "a"],
3651
+ [-1, "a"],
3652
+ [1, "a"],
3653
+ [-1.5, "a"],
3654
+ [1.5, "a"],
3655
+ [NaN, "a"],
3656
+ [Infinity, "a"],
3657
+ [2n, "a"],
3658
+ [true, "a"],
3659
+ [false, "a"],
3660
+ ["str", "a"],
3661
+ [new Date("2024-01-01"), "a"],
3662
+ [new Set(["a", "b", "c"]), "a"],
3663
+ [
3664
+ new Map([
3665
+ ["a", 1],
3666
+ ["b", 2],
3667
+ ["c", 3],
3668
+ ]),
3669
+ "a",
3670
+ ],
3671
+ [/test/, "a"],
3672
+ [{ a: 2, b: -1 }, 1],
3673
+ [[1, 2, 3], 2],
3674
+ ]);
3675
+ await storage.add("a", value);
3676
+ const getResult = await storage.getAndRemove("a");
3677
+ expect(getResult).toBeInstanceOf(Map);
3678
+ expect(getResult).toEqual(value);
3679
+ });
3680
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
3681
+ const value = [
3682
+ 0,
3683
+ -1,
3684
+ 1,
3685
+ -1.5,
3686
+ 1.5,
3687
+ NaN,
3688
+ Infinity,
3689
+ 2n,
3690
+ true,
3691
+ false,
3692
+ "str",
3693
+ new Date("2024-01-01"),
3694
+ new Set(["a", "b", "c"]),
3695
+ new Map([
3696
+ ["a", 1],
3697
+ ["b", 2],
3698
+ ["c", 3],
3699
+ ]),
3700
+ /test/,
3701
+ ];
3702
+ await storage.add("a", value);
3703
+ const getResult = await storage.getAndRemove("a");
3704
+ expect(getResult).toEqual(value);
3705
+ });
3706
+ test("Should work with array of objects", async () => {
3707
+ const value = [
3708
+ Object.fromEntries([
3709
+ ["a", 0],
3710
+ ["b", -1],
3711
+ ["c", 1],
3712
+ ["d", -1.5],
3713
+ ["e", 1.5],
3714
+ ["f", NaN],
3715
+ ["g", Infinity],
3716
+ ["h", 2n],
3717
+ ["j", true],
3718
+ ["l", false],
3719
+ ["i", "str"],
3720
+ ["r", new Date("2024-01-01")],
3721
+ ["k", new Set(["a", "b", "c"])],
3722
+ [
3723
+ "p",
3724
+ new Map([
3725
+ ["a", 1],
3726
+ ["b", 2],
3727
+ ["c", 3],
3728
+ ]),
3729
+ ],
3730
+ ["a", /test/],
3731
+ ]),
3732
+ ];
3733
+ await storage.add("a", value);
3734
+ const getResult = await storage.getAndRemove("a");
3735
+ expect(getResult).toEqual(value);
3736
+ });
3737
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
3738
+ const value = Object.fromEntries([
3739
+ ["a", 0],
3740
+ ["b", -1],
3741
+ ["c", 1],
3742
+ ["d", -1.5],
3743
+ ["e", 1.5],
3744
+ ["f", NaN],
3745
+ ["g", Infinity],
3746
+ ["h", 2n],
3747
+ ["j", true],
3748
+ ["l", false],
3749
+ ["i", "str"],
3750
+ ["r", new Date("2024-01-01")],
3751
+ ["k", new Set(["a", "b", "c"])],
3752
+ [
3753
+ "p",
3754
+ new Map([
3755
+ ["a", 1],
3756
+ ["b", 2],
3757
+ ["c", 3],
3758
+ ]),
3759
+ ],
3760
+ ["a", /test/],
3761
+ ]);
3762
+ await storage.add("a", value);
3763
+ const getResult = await storage.getAndRemove("a");
3764
+ expect(getResult).toEqual(value);
3765
+ });
3766
+ test("Should work with object of arrays", async () => {
3767
+ const value = {
3768
+ a: [
3769
+ 0,
3770
+ -1,
3771
+ 1,
3772
+ -1.5,
3773
+ 1.5,
3774
+ NaN,
3775
+ Infinity,
3776
+ 2n,
3777
+ true,
3778
+ false,
3779
+ "str",
3780
+ new Date("2024-01-01"),
3781
+ new Set(["a", "b", "c"]),
3782
+ new Map([
3783
+ ["a", 1],
3784
+ ["b", 2],
3785
+ ["c", 3],
3786
+ ]),
3787
+ /test/,
3788
+ ],
3789
+ };
3790
+ await storage.add("a", value);
3791
+ const getResult = await storage.getAndRemove("a");
3792
+ expect(getResult).toEqual(value);
3793
+ });
3794
+ });
3795
+ describe("method: getOrAdd", () => {
3796
+ test("Should work with positive integer", async () => {
3797
+ const value = 1;
3798
+ await storage.getOrAdd("a", value);
3799
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3800
+ });
3801
+ test("Should work with negative integer", async () => {
3802
+ const value = -1;
3803
+ await storage.getOrAdd("a", value);
3804
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3805
+ });
3806
+ test("Should work with positive decimal", async () => {
3807
+ const value = 1.5;
3808
+ await storage.getOrAdd("a", value);
3809
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3810
+ });
3811
+ test("Should work with negative decimal", async () => {
3812
+ const value = -1.5;
3813
+ await storage.getOrAdd("a", value);
3814
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3815
+ });
3816
+ test("Should work with NaN", async () => {
3817
+ const value = NaN;
3818
+ await storage.getOrAdd("a", value);
3819
+ const getResult = await storage.getOrAdd("a", -1);
3820
+ expect(getResult).toBeNaN();
3821
+ });
3822
+ test("Should work with Infinity", async () => {
3823
+ const value = Infinity;
3824
+ await storage.getOrAdd("a", value);
3825
+ const getResult = await storage.getOrAdd("a", -1);
3826
+ expect(isFinite(getResult)).toBe(false);
3827
+ });
3828
+ test("Should work with Bigint", async () => {
3829
+ const value = 20n;
3830
+ await storage.getOrAdd("a", value);
3831
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3832
+ });
3833
+ test("Should work with true", async () => {
3834
+ const value = true;
3835
+ await storage.getOrAdd("a", value);
3836
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3837
+ });
3838
+ test("Should work with false", async () => {
3839
+ const value = false;
3840
+ await storage.getOrAdd("a", value);
3841
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3842
+ });
3843
+ test("Should work with string", async () => {
3844
+ const value = "str";
3845
+ await storage.getOrAdd("a", value);
3846
+ expect(await storage.getOrAdd("a", -1)).toBe(value);
3847
+ });
3848
+ test("Should work with Date", async () => {
3849
+ const value = new Date("2024-01-01");
3850
+ await storage.getOrAdd("a", value);
3851
+ const getResult = await storage.getOrAdd("a", -1);
3852
+ expect(getResult).toBeInstanceOf(Date);
3853
+ expect(getResult).toEqual(value);
3854
+ });
3855
+ test("Should work with RegExp", async () => {
3856
+ const value = /test/;
3857
+ await storage.getOrAdd("a", value);
3858
+ const getResult = await storage.getOrAdd("a", -1);
3859
+ expect(getResult).toBeInstanceOf(RegExp);
3860
+ expect(getResult).toEqual(value);
3861
+ });
3862
+ test("Should work with Buffer", async () => {
3863
+ const value = Buffer.from("asd");
3864
+ await storage.getOrAdd("a", value);
3865
+ const getResult = await storage.get("a");
3866
+ expect(getResult).toBeInstanceOf(Buffer);
3867
+ expect(getResult?.toString("base64")).toEqual(value.toString("base64"));
3868
+ });
3869
+ test("Should work with Uint8Array", async () => {
3870
+ const value = new Uint8Array(Buffer.from("asd"));
3871
+ await storage.getOrAdd("a", value);
3872
+ const getResult = await storage.get("a");
3873
+ expect(getResult).toBeInstanceOf(Uint8Array);
3874
+ expect(getResult
3875
+ ? Buffer.from(getResult).toString("base64")
3876
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3877
+ });
3878
+ test("Should work with Int8Array", async () => {
3879
+ const value = new Int8Array(Buffer.from("asd"));
3880
+ await storage.getOrAdd("a", value);
3881
+ const getResult = await storage.get("a");
3882
+ expect(getResult).toBeInstanceOf(Int8Array);
3883
+ expect(getResult
3884
+ ? Buffer.from(getResult).toString("base64")
3885
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3886
+ });
3887
+ test("Should work with Uint16Array", async () => {
3888
+ const value = new Uint16Array(Buffer.from("asd"));
3889
+ await storage.getOrAdd("a", value);
3890
+ const getResult = await storage.get("a");
3891
+ expect(getResult).toBeInstanceOf(Uint16Array);
3892
+ expect(getResult
3893
+ ? Buffer.from(getResult).toString("base64")
3894
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3895
+ });
3896
+ test("Should work with Int16Array", async () => {
3897
+ const value = new Int16Array(Buffer.from("asd"));
3898
+ await storage.getOrAdd("a", value);
3899
+ const getResult = await storage.get("a");
3900
+ expect(getResult).toBeInstanceOf(Int16Array);
3901
+ expect(getResult
3902
+ ? Buffer.from(getResult).toString("base64")
3903
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3904
+ });
3905
+ test("Should work with Uint32Array", async () => {
3906
+ const value = new Uint32Array(Buffer.from("asd"));
3907
+ await storage.getOrAdd("a", value);
3908
+ const getResult = await storage.get("a");
3909
+ expect(getResult).toBeInstanceOf(Uint32Array);
3910
+ expect(getResult
3911
+ ? Buffer.from(getResult).toString("base64")
3912
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3913
+ });
3914
+ test("Should work with Int32Array", async () => {
3915
+ const value = new Int32Array(Buffer.from("asd"));
3916
+ await storage.getOrAdd("a", value);
3917
+ const getResult = await storage.get("a");
3918
+ expect(getResult).toBeInstanceOf(Int32Array);
3919
+ expect(getResult
3920
+ ? Buffer.from(getResult).toString("base64")
3921
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3922
+ });
3923
+ test("Should work with Float32Array", async () => {
3924
+ const value = new Float32Array(Buffer.from("asd"));
3925
+ await storage.getOrAdd("a", value);
3926
+ const getResult = await storage.get("a");
3927
+ expect(getResult).toBeInstanceOf(Float32Array);
3928
+ expect(getResult
3929
+ ? Buffer.from(getResult).toString("base64")
3930
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3931
+ });
3932
+ test("Should work with Float64Array", async () => {
3933
+ const value = new Float64Array(Buffer.from("asd"));
3934
+ await storage.getOrAdd("a", value);
3935
+ const getResult = await storage.get("a");
3936
+ expect(getResult).toBeInstanceOf(Float64Array);
3937
+ expect(getResult
3938
+ ? Buffer.from(getResult).toString("base64")
3939
+ : undefined).toEqual(Buffer.from(value).toString("base64"));
3940
+ });
3941
+ test("Should work with Set", async () => {
3942
+ const value = new Set(["a", "b", "c"]);
3943
+ await storage.getOrAdd("a", value);
3944
+ const getResult = await storage.getOrAdd("a", -1);
3945
+ expect(getResult).toBeInstanceOf(Set);
3946
+ expect(getResult).toEqual(value);
3947
+ });
3948
+ test("Should work with Set of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays", async () => {
3949
+ const value = new Set([
3950
+ 0,
3951
+ -1,
3952
+ 1,
3953
+ -1.5,
3954
+ 1.5,
3955
+ NaN,
3956
+ Infinity,
3957
+ 2n,
3958
+ true,
3959
+ false,
3960
+ "str",
3961
+ new Date("2024-01-01"),
3962
+ new Set(["a", "b", "c"]),
3963
+ new Map([
3964
+ ["a", 1],
3965
+ ["b", 2],
3966
+ ["c", 3],
3967
+ ]),
3968
+ { a: 1, b: 2 },
3969
+ [1, 2, 3],
3970
+ /test/,
3971
+ ]);
3972
+ await storage.getOrAdd("a", value);
3973
+ const getResult = await storage.getOrAdd("a", -1);
3974
+ expect(getResult).toBeInstanceOf(Set);
3975
+ expect(getResult).toEqual(value);
3976
+ });
3977
+ test("Should work with Map", async () => {
3978
+ const value = new Map([
3979
+ ["a", 1],
3980
+ ["b", 2],
3981
+ ["c", 3],
3982
+ ]);
3983
+ await storage.getOrAdd("a", value);
3984
+ const getResult = await storage.getOrAdd("a", -1);
3985
+ expect(getResult).toBeInstanceOf(Map);
3986
+ expect(getResult).toEqual(value);
3987
+ });
3988
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays values", async () => {
3989
+ const value = new Map([
3990
+ ["a", 0],
3991
+ ["b", -1],
3992
+ ["c", 1],
3993
+ ["d", -1.5],
3994
+ ["e", 1.5],
3995
+ ["f", NaN],
3996
+ ["g", Infinity],
3997
+ ["h", 2n],
3998
+ ["j", true],
3999
+ ["l", false],
4000
+ ["i", "str"],
4001
+ ["r", new Date("2024-01-01")],
4002
+ ["k", new Set(["a", "b", "c"])],
4003
+ [
4004
+ "p",
4005
+ new Map([
4006
+ ["a", 1],
4007
+ ["b", 2],
4008
+ ["c", 3],
4009
+ ]),
4010
+ ],
4011
+ ["a", /test/],
4012
+ [1, { a: 2, b: -1 }],
4013
+ [2, [1, 2, 3]],
4014
+ ]);
4015
+ await storage.getOrAdd("a", value);
4016
+ const getResult = await storage.getOrAdd("a", -1);
4017
+ expect(getResult).toBeInstanceOf(Map);
4018
+ expect(getResult).toEqual(value);
4019
+ });
4020
+ test("Should work with Map of number, boolean, string, Date, Set, Map, RegExp, Objects, Arrays keys", async () => {
4021
+ const value = new Map([
4022
+ [0, "a"],
4023
+ [-1, "a"],
4024
+ [1, "a"],
4025
+ [-1.5, "a"],
4026
+ [1.5, "a"],
4027
+ [NaN, "a"],
4028
+ [Infinity, "a"],
4029
+ [2n, "a"],
4030
+ [true, "a"],
4031
+ [false, "a"],
4032
+ ["str", "a"],
4033
+ [new Date("2024-01-01"), "a"],
4034
+ [new Set(["a", "b", "c"]), "a"],
4035
+ [
4036
+ new Map([
4037
+ ["a", 1],
4038
+ ["b", 2],
4039
+ ["c", 3],
4040
+ ]),
4041
+ "a",
4042
+ ],
4043
+ [/test/, "a"],
4044
+ [{ a: 2, b: -1 }, 1],
4045
+ [[1, 2, 3], 2],
4046
+ ]);
4047
+ await storage.getOrAdd("a", value);
4048
+ const getResult = await storage.getOrAdd("a", -1);
4049
+ expect(getResult).toBeInstanceOf(Map);
4050
+ expect(getResult).toEqual(value);
4051
+ });
4052
+ test("Should work with array of number, boolean, string, Date, Set, Map, RegExp", async () => {
4053
+ const value = [
4054
+ 0,
4055
+ -1,
4056
+ 1,
4057
+ -1.5,
4058
+ 1.5,
4059
+ NaN,
4060
+ Infinity,
4061
+ 2n,
4062
+ true,
4063
+ false,
4064
+ "str",
4065
+ new Date("2024-01-01"),
4066
+ new Set(["a", "b", "c"]),
4067
+ new Map([
4068
+ ["a", 1],
4069
+ ["b", 2],
4070
+ ["c", 3],
4071
+ ]),
4072
+ /test/,
4073
+ ];
4074
+ await storage.getOrAdd("a", value);
4075
+ const getResult = await storage.getOrAdd("a", -1);
4076
+ expect(getResult).toEqual(value);
4077
+ });
4078
+ test("Should work with array of objects", async () => {
4079
+ const value = [
4080
+ Object.fromEntries([
4081
+ ["a", 0],
4082
+ ["b", -1],
4083
+ ["c", 1],
4084
+ ["d", -1.5],
4085
+ ["e", 1.5],
4086
+ ["f", NaN],
4087
+ ["g", Infinity],
4088
+ ["h", 2n],
4089
+ ["j", true],
4090
+ ["l", false],
4091
+ ["i", "str"],
4092
+ ["r", new Date("2024-01-01")],
4093
+ ["k", new Set(["a", "b", "c"])],
4094
+ [
4095
+ "p",
4096
+ new Map([
4097
+ ["a", 1],
4098
+ ["b", 2],
4099
+ ["c", 3],
4100
+ ]),
4101
+ ],
4102
+ ["a", /test/],
4103
+ ]),
4104
+ ];
4105
+ await storage.getOrAdd("a", value);
4106
+ const getResult = await storage.getOrAdd("a", -1);
4107
+ expect(getResult).toEqual(value);
4108
+ });
4109
+ test("Should work with object of number, boolean, string, Date, Set, Map, RegExp", async () => {
4110
+ const value = Object.fromEntries([
4111
+ ["a", 0],
4112
+ ["b", -1],
4113
+ ["c", 1],
4114
+ ["d", -1.5],
4115
+ ["e", 1.5],
4116
+ ["f", NaN],
4117
+ ["g", Infinity],
4118
+ ["h", 2n],
4119
+ ["j", true],
4120
+ ["l", false],
4121
+ ["i", "str"],
4122
+ ["r", new Date("2024-01-01")],
4123
+ ["k", new Set(["a", "b", "c"])],
4124
+ [
4125
+ "p",
4126
+ new Map([
4127
+ ["a", 1],
4128
+ ["b", 2],
4129
+ ["c", 3],
4130
+ ]),
4131
+ ],
4132
+ ["a", /test/],
4133
+ ]);
4134
+ await storage.getOrAdd("a", value);
4135
+ const getResult = await storage.getOrAdd("a", -1);
4136
+ expect(getResult).toEqual(value);
4137
+ });
4138
+ test("Should work with object of arrays", async () => {
4139
+ const value = {
4140
+ a: [
4141
+ 0,
4142
+ -1,
4143
+ 1,
4144
+ -1.5,
4145
+ 1.5,
4146
+ NaN,
4147
+ Infinity,
4148
+ 2n,
4149
+ true,
4150
+ false,
4151
+ "str",
4152
+ new Date("2024-01-01"),
4153
+ new Set(["a", "b", "c"]),
4154
+ new Map([
4155
+ ["a", 1],
4156
+ ["b", 2],
4157
+ ["c", 3],
4158
+ ]),
4159
+ /test/,
4160
+ ],
4161
+ };
4162
+ await storage.getOrAdd("a", value);
4163
+ const getResult = await storage.getOrAdd("a", -1);
4164
+ expect(getResult).toEqual(value);
4165
+ });
4166
+ });
4167
+ });
4168
+ }
4169
+ //# sourceMappingURL=storage-value.test-suite.js.map