@daiso-tech/core 0.2.1 → 0.3.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 (260) hide show
  1. package/dist/cjs/_module.js +3 -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/collection/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -1
  17. package/dist/cjs/collection/async-iterable-collection/async-iterable-collection.js.map +1 -1
  18. package/dist/cjs/collection/iterable-collection/_shared/cross-join-iterable.js.map +1 -1
  19. package/dist/cjs/contracts/_module.js +2 -0
  20. package/dist/cjs/contracts/_module.js.map +1 -1
  21. package/dist/cjs/contracts/collection/_module.js.map +1 -1
  22. package/dist/cjs/contracts/serializer/_module.js +18 -0
  23. package/dist/cjs/contracts/serializer/_module.js.map +1 -0
  24. package/dist/cjs/contracts/serializer/serializer.contract.js +25 -0
  25. package/dist/cjs/contracts/serializer/serializer.contract.js.map +1 -0
  26. package/dist/cjs/contracts/storage/_module.js +20 -0
  27. package/dist/cjs/contracts/storage/_module.js.map +1 -0
  28. package/dist/cjs/contracts/storage/_shared.js +32 -0
  29. package/dist/cjs/contracts/storage/_shared.js.map +1 -0
  30. package/dist/cjs/contracts/storage/storage-adapter.contract.js +3 -0
  31. package/dist/cjs/contracts/storage/storage-adapter.contract.js.map +1 -0
  32. package/dist/cjs/contracts/storage/storage.contract.js +3 -0
  33. package/dist/cjs/contracts/storage/storage.contract.js.map +1 -0
  34. package/dist/cjs/serializer/_module.js +22 -0
  35. package/dist/cjs/serializer/_module.js.map +1 -0
  36. package/dist/cjs/serializer/_shared/test-utilities/_module.js +18 -0
  37. package/dist/cjs/serializer/_shared/test-utilities/_module.js.map +1 -0
  38. package/dist/cjs/serializer/_shared/test-utilities/serializer.test-suite.js +361 -0
  39. package/dist/cjs/serializer/_shared/test-utilities/serializer.test-suite.js.map +1 -0
  40. package/dist/cjs/serializer/mongodb-serializer/_module.js +18 -0
  41. package/dist/cjs/serializer/mongodb-serializer/_module.js.map +1 -0
  42. package/dist/cjs/serializer/mongodb-serializer/mongodb-serializer.js +36 -0
  43. package/dist/cjs/serializer/mongodb-serializer/mongodb-serializer.js.map +1 -0
  44. package/dist/cjs/serializer/redis-serializer/_module.js +18 -0
  45. package/dist/cjs/serializer/redis-serializer/_module.js.map +1 -0
  46. package/dist/cjs/serializer/redis-serializer/redis-serializer.js +37 -0
  47. package/dist/cjs/serializer/redis-serializer/redis-serializer.js.map +1 -0
  48. package/dist/cjs/serializer/sql-serializer/_module.js +18 -0
  49. package/dist/cjs/serializer/sql-serializer/_module.js.map +1 -0
  50. package/dist/cjs/serializer/sql-serializer/sql-serializer.js +37 -0
  51. package/dist/cjs/serializer/sql-serializer/sql-serializer.js.map +1 -0
  52. package/dist/cjs/serializer/super-json-serializer/_module.js +18 -0
  53. package/dist/cjs/serializer/super-json-serializer/_module.js.map +1 -0
  54. package/dist/cjs/serializer/super-json-serializer/super-json-serializer.js +304 -0
  55. package/dist/cjs/serializer/super-json-serializer/super-json-serializer.js.map +1 -0
  56. package/dist/cjs/storage/_module.js +23 -0
  57. package/dist/cjs/storage/_module.js.map +1 -0
  58. package/dist/cjs/storage/_shared/test-utilities/_module.js +18 -0
  59. package/dist/cjs/storage/_shared/test-utilities/_module.js.map +1 -0
  60. package/dist/cjs/storage/_shared/test-utilities/storage-api.test-suite.js +572 -0
  61. package/dist/cjs/storage/_shared/test-utilities/storage-api.test-suite.js.map +1 -0
  62. package/dist/cjs/storage/_shared/test-utilities/storage-namespace.test-suite.js +241 -0
  63. package/dist/cjs/storage/_shared/test-utilities/storage-namespace.test-suite.js.map +1 -0
  64. package/dist/cjs/storage/_shared/test-utilities/storage-value.test-suite.js +4172 -0
  65. package/dist/cjs/storage/_shared/test-utilities/storage-value.test-suite.js.map +1 -0
  66. package/dist/cjs/storage/_shared/test-utilities/storage.test-suite.js +12 -0
  67. package/dist/cjs/storage/_shared/test-utilities/storage.test-suite.js.map +1 -0
  68. package/dist/cjs/storage/memory-storage-adapter/_module.js +18 -0
  69. package/dist/cjs/storage/memory-storage-adapter/_module.js.map +1 -0
  70. package/dist/cjs/storage/memory-storage-adapter/memory-storage-adapter.js +62 -0
  71. package/dist/cjs/storage/memory-storage-adapter/memory-storage-adapter.js.map +1 -0
  72. package/dist/cjs/storage/mongodb-storage-adapter/_module.js +6 -0
  73. package/dist/cjs/storage/mongodb-storage-adapter/_module.js.map +1 -0
  74. package/dist/cjs/storage/mongodb-storage-adapter/mongodb-storage-adapter.js +273 -0
  75. package/dist/cjs/storage/mongodb-storage-adapter/mongodb-storage-adapter.js.map +1 -0
  76. package/dist/cjs/storage/namespace-storage-adapter.js +66 -0
  77. package/dist/cjs/storage/namespace-storage-adapter.js.map +1 -0
  78. package/dist/cjs/storage/redis-storage-adapter/_module.js +18 -0
  79. package/dist/cjs/storage/redis-storage-adapter/_module.js.map +1 -0
  80. package/dist/cjs/storage/redis-storage-adapter/redis-storage-adapter.js +248 -0
  81. package/dist/cjs/storage/redis-storage-adapter/redis-storage-adapter.js.map +1 -0
  82. package/dist/cjs/storage/sqlite/_module.js +19 -0
  83. package/dist/cjs/storage/sqlite/_module.js.map +1 -0
  84. package/dist/cjs/storage/sqlite/_shared/_module.js +18 -0
  85. package/dist/cjs/storage/sqlite/_shared/_module.js.map +1 -0
  86. package/dist/cjs/storage/sqlite/_shared/base-sqlite-storage-adapter.js +224 -0
  87. package/dist/cjs/storage/sqlite/_shared/base-sqlite-storage-adapter.js.map +1 -0
  88. package/dist/cjs/storage/sqlite/libsql-storage-adapter/_module.js +18 -0
  89. package/dist/cjs/storage/sqlite/libsql-storage-adapter/_module.js.map +1 -0
  90. package/dist/cjs/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js +53 -0
  91. package/dist/cjs/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js.map +1 -0
  92. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/_module.js +18 -0
  93. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/_module.js.map +1 -0
  94. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js +52 -0
  95. package/dist/cjs/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js.map +1 -0
  96. package/dist/cjs/storage/storage.js +291 -0
  97. package/dist/cjs/storage/storage.js.map +1 -0
  98. package/dist/cjs/storage/usable-storage-adapter.js +102 -0
  99. package/dist/cjs/storage/usable-storage-adapter.js.map +1 -0
  100. package/dist/esm/_module.js +3 -1
  101. package/dist/esm/_module.js.map +1 -1
  102. package/dist/esm/_shared/kysely/_module.js +2 -0
  103. package/dist/esm/_shared/kysely/_module.js.map +1 -0
  104. package/dist/esm/_shared/kysely/kysely-table-name-transformer-plugin.js +41 -0
  105. package/dist/esm/_shared/kysely/kysely-table-name-transformer-plugin.js.map +1 -0
  106. package/dist/esm/_shared/redis/_module.js +4 -0
  107. package/dist/esm/_shared/redis/_module.js.map +1 -0
  108. package/dist/esm/_shared/redis/clear-iterable.js +21 -0
  109. package/dist/esm/_shared/redis/clear-iterable.js.map +1 -0
  110. package/dist/esm/_shared/redis/escape-redis-chars.js +38 -0
  111. package/dist/esm/_shared/redis/escape-redis-chars.js.map +1 -0
  112. package/dist/esm/_shared/redis/is-redis-type-error.js +6 -0
  113. package/dist/esm/_shared/redis/is-redis-type-error.js.map +1 -0
  114. package/dist/esm/_shared/utilities.js.map +1 -1
  115. package/dist/esm/collection/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -1
  116. package/dist/esm/collection/async-iterable-collection/async-iterable-collection.js.map +1 -1
  117. package/dist/esm/collection/iterable-collection/_shared/cross-join-iterable.js.map +1 -1
  118. package/dist/esm/contracts/_module.js +2 -0
  119. package/dist/esm/contracts/_module.js.map +1 -1
  120. package/dist/esm/contracts/collection/_module.js.map +1 -1
  121. package/dist/esm/contracts/serializer/_module.js +2 -0
  122. package/dist/esm/contracts/serializer/_module.js.map +1 -0
  123. package/dist/esm/contracts/serializer/serializer.contract.js +19 -0
  124. package/dist/esm/contracts/serializer/serializer.contract.js.map +1 -0
  125. package/dist/esm/contracts/storage/_module.js +4 -0
  126. package/dist/esm/contracts/storage/_module.js.map +1 -0
  127. package/dist/esm/contracts/storage/_shared.js +25 -0
  128. package/dist/esm/contracts/storage/_shared.js.map +1 -0
  129. package/dist/esm/contracts/storage/storage-adapter.contract.js +1 -0
  130. package/dist/esm/contracts/storage/storage-adapter.contract.js.map +1 -0
  131. package/dist/esm/contracts/storage/storage.contract.js +1 -0
  132. package/dist/esm/contracts/storage/storage.contract.js.map +1 -0
  133. package/dist/esm/serializer/_module.js +6 -0
  134. package/dist/esm/serializer/_module.js.map +1 -0
  135. package/dist/esm/serializer/_shared/test-utilities/_module.js +2 -0
  136. package/dist/esm/serializer/_shared/test-utilities/_module.js.map +1 -0
  137. package/dist/esm/serializer/_shared/test-utilities/serializer.test-suite.js +358 -0
  138. package/dist/esm/serializer/_shared/test-utilities/serializer.test-suite.js.map +1 -0
  139. package/dist/esm/serializer/mongodb-serializer/_module.js +2 -0
  140. package/dist/esm/serializer/mongodb-serializer/_module.js.map +1 -0
  141. package/dist/esm/serializer/mongodb-serializer/mongodb-serializer.js +32 -0
  142. package/dist/esm/serializer/mongodb-serializer/mongodb-serializer.js.map +1 -0
  143. package/dist/esm/serializer/redis-serializer/_module.js +2 -0
  144. package/dist/esm/serializer/redis-serializer/_module.js.map +1 -0
  145. package/dist/esm/serializer/redis-serializer/redis-serializer.js +33 -0
  146. package/dist/esm/serializer/redis-serializer/redis-serializer.js.map +1 -0
  147. package/dist/esm/serializer/sql-serializer/_module.js +2 -0
  148. package/dist/esm/serializer/sql-serializer/_module.js.map +1 -0
  149. package/dist/esm/serializer/sql-serializer/sql-serializer.js +33 -0
  150. package/dist/esm/serializer/sql-serializer/sql-serializer.js.map +1 -0
  151. package/dist/esm/serializer/super-json-serializer/_module.js +2 -0
  152. package/dist/esm/serializer/super-json-serializer/_module.js.map +1 -0
  153. package/dist/esm/serializer/super-json-serializer/super-json-serializer.js +277 -0
  154. package/dist/esm/serializer/super-json-serializer/super-json-serializer.js.map +1 -0
  155. package/dist/esm/storage/_module.js +7 -0
  156. package/dist/esm/storage/_module.js.map +1 -0
  157. package/dist/esm/storage/_shared/test-utilities/_module.js +2 -0
  158. package/dist/esm/storage/_shared/test-utilities/_module.js.map +1 -0
  159. package/dist/esm/storage/_shared/test-utilities/storage-api.test-suite.js +569 -0
  160. package/dist/esm/storage/_shared/test-utilities/storage-api.test-suite.js.map +1 -0
  161. package/dist/esm/storage/_shared/test-utilities/storage-namespace.test-suite.js +238 -0
  162. package/dist/esm/storage/_shared/test-utilities/storage-namespace.test-suite.js.map +1 -0
  163. package/dist/esm/storage/_shared/test-utilities/storage-value.test-suite.js +4169 -0
  164. package/dist/esm/storage/_shared/test-utilities/storage-value.test-suite.js.map +1 -0
  165. package/dist/esm/storage/_shared/test-utilities/storage.test-suite.js +9 -0
  166. package/dist/esm/storage/_shared/test-utilities/storage.test-suite.js.map +1 -0
  167. package/dist/esm/storage/memory-storage-adapter/_module.js +2 -0
  168. package/dist/esm/storage/memory-storage-adapter/_module.js.map +1 -0
  169. package/dist/esm/storage/memory-storage-adapter/memory-storage-adapter.js +58 -0
  170. package/dist/esm/storage/memory-storage-adapter/memory-storage-adapter.js.map +1 -0
  171. package/dist/esm/storage/mongodb-storage-adapter/_module.js +2 -0
  172. package/dist/esm/storage/mongodb-storage-adapter/_module.js.map +1 -0
  173. package/dist/esm/storage/mongodb-storage-adapter/mongodb-storage-adapter.js +266 -0
  174. package/dist/esm/storage/mongodb-storage-adapter/mongodb-storage-adapter.js.map +1 -0
  175. package/dist/esm/storage/namespace-storage-adapter.js +62 -0
  176. package/dist/esm/storage/namespace-storage-adapter.js.map +1 -0
  177. package/dist/esm/storage/redis-storage-adapter/_module.js +2 -0
  178. package/dist/esm/storage/redis-storage-adapter/_module.js.map +1 -0
  179. package/dist/esm/storage/redis-storage-adapter/redis-storage-adapter.js +244 -0
  180. package/dist/esm/storage/redis-storage-adapter/redis-storage-adapter.js.map +1 -0
  181. package/dist/esm/storage/sqlite/_module.js +3 -0
  182. package/dist/esm/storage/sqlite/_module.js.map +1 -0
  183. package/dist/esm/storage/sqlite/_shared/_module.js +2 -0
  184. package/dist/esm/storage/sqlite/_shared/_module.js.map +1 -0
  185. package/dist/esm/storage/sqlite/_shared/base-sqlite-storage-adapter.js +220 -0
  186. package/dist/esm/storage/sqlite/_shared/base-sqlite-storage-adapter.js.map +1 -0
  187. package/dist/esm/storage/sqlite/libsql-storage-adapter/_module.js +2 -0
  188. package/dist/esm/storage/sqlite/libsql-storage-adapter/_module.js.map +1 -0
  189. package/dist/esm/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js +49 -0
  190. package/dist/esm/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.js.map +1 -0
  191. package/dist/esm/storage/sqlite/sqlite-storage-adapter/_module.js +2 -0
  192. package/dist/esm/storage/sqlite/sqlite-storage-adapter/_module.js.map +1 -0
  193. package/dist/esm/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js +48 -0
  194. package/dist/esm/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.js.map +1 -0
  195. package/dist/esm/storage/storage.js +287 -0
  196. package/dist/esm/storage/storage.js.map +1 -0
  197. package/dist/esm/storage/usable-storage-adapter.js +98 -0
  198. package/dist/esm/storage/usable-storage-adapter.js.map +1 -0
  199. package/dist/types/_module.d.ts +3 -1
  200. package/dist/types/_shared/kysely/_module.d.ts +1 -0
  201. package/dist/types/_shared/kysely/kysely-table-name-transformer-plugin.d.ts +13 -0
  202. package/dist/types/_shared/redis/_module.d.ts +3 -0
  203. package/dist/types/_shared/redis/clear-iterable.d.ts +13 -0
  204. package/dist/types/_shared/redis/escape-redis-chars.d.ts +7 -0
  205. package/dist/types/_shared/redis/is-redis-type-error.d.ts +7 -0
  206. package/dist/types/_shared/types.d.ts +15 -2
  207. package/dist/types/_shared/utilities.d.ts +5 -1
  208. package/dist/types/collection/_shared.d.ts +1 -1
  209. package/dist/types/collection/async-iterable-collection/_shared/async-cross-join-iterable.d.ts +2 -1
  210. package/dist/types/collection/async-iterable-collection/_shared/async-group-by-iterable.d.ts +1 -1
  211. package/dist/types/collection/async-iterable-collection/async-iterable-collection.d.ts +2 -2
  212. package/dist/types/collection/iterable-collection/_shared/cross-join-iterable.d.ts +1 -1
  213. package/dist/types/collection/iterable-collection/_shared/group-by-iterable.d.ts +1 -1
  214. package/dist/types/collection/iterable-collection/iterable-collection.d.ts +1 -1
  215. package/dist/types/collection/list-collection/list-collection.d.ts +1 -1
  216. package/dist/types/contracts/_module.d.ts +2 -0
  217. package/dist/types/contracts/collection/_module.d.ts +0 -3
  218. package/dist/types/contracts/collection/_shared.d.ts +1 -1
  219. package/dist/types/contracts/collection/async-collection.contract.d.ts +3 -3
  220. package/dist/types/contracts/collection/collection.contract.d.ts +3 -3
  221. package/dist/types/contracts/serializer/_module.d.ts +1 -0
  222. package/dist/types/contracts/serializer/serializer.contract.d.ts +37 -0
  223. package/dist/types/contracts/storage/_module.d.ts +3 -0
  224. package/dist/types/contracts/storage/_shared.d.ts +27 -0
  225. package/dist/types/contracts/storage/storage-adapter.contract.d.ts +72 -0
  226. package/dist/types/contracts/storage/storage.contract.d.ts +147 -0
  227. package/dist/types/serializer/_module.d.ts +5 -0
  228. package/dist/types/serializer/_shared/test-utilities/_module.d.ts +1 -0
  229. package/dist/types/serializer/_shared/test-utilities/serializer.test-suite.d.ts +18 -0
  230. package/dist/types/serializer/mongodb-serializer/_module.d.ts +1 -0
  231. package/dist/types/serializer/mongodb-serializer/mongodb-serializer.d.ts +13 -0
  232. package/dist/types/serializer/redis-serializer/_module.d.ts +1 -0
  233. package/dist/types/serializer/redis-serializer/redis-serializer.d.ts +13 -0
  234. package/dist/types/serializer/sql-serializer/_module.d.ts +1 -0
  235. package/dist/types/serializer/sql-serializer/sql-serializer.d.ts +13 -0
  236. package/dist/types/serializer/super-json-serializer/_module.d.ts +1 -0
  237. package/dist/types/serializer/super-json-serializer/super-json-serializer.d.ts +37 -0
  238. package/dist/types/storage/_module.d.ts +6 -0
  239. package/dist/types/storage/_shared/test-utilities/_module.d.ts +1 -0
  240. package/dist/types/storage/_shared/test-utilities/storage-api.test-suite.d.ts +20 -0
  241. package/dist/types/storage/_shared/test-utilities/storage-namespace.test-suite.d.ts +20 -0
  242. package/dist/types/storage/_shared/test-utilities/storage-value.test-suite.d.ts +20 -0
  243. package/dist/types/storage/_shared/test-utilities/storage.test-suite.d.ts +20 -0
  244. package/dist/types/storage/memory-storage-adapter/_module.d.ts +1 -0
  245. package/dist/types/storage/memory-storage-adapter/memory-storage-adapter.d.ts +16 -0
  246. package/dist/types/storage/mongodb-storage-adapter/_module.d.ts +1 -0
  247. package/dist/types/storage/mongodb-storage-adapter/mongodb-storage-adapter.d.ts +46 -0
  248. package/dist/types/storage/namespace-storage-adapter.d.ts +30 -0
  249. package/dist/types/storage/redis-storage-adapter/_module.d.ts +1 -0
  250. package/dist/types/storage/redis-storage-adapter/redis-storage-adapter.d.ts +41 -0
  251. package/dist/types/storage/sqlite/_module.d.ts +2 -0
  252. package/dist/types/storage/sqlite/_shared/_module.d.ts +1 -0
  253. package/dist/types/storage/sqlite/_shared/base-sqlite-storage-adapter.d.ts +42 -0
  254. package/dist/types/storage/sqlite/libsql-storage-adapter/_module.d.ts +1 -0
  255. package/dist/types/storage/sqlite/libsql-storage-adapter/libsql-storage-adapter.d.ts +30 -0
  256. package/dist/types/storage/sqlite/sqlite-storage-adapter/_module.d.ts +1 -0
  257. package/dist/types/storage/sqlite/sqlite-storage-adapter/sqlite-storage-adapter.d.ts +30 -0
  258. package/dist/types/storage/storage.d.ts +36 -0
  259. package/dist/types/storage/usable-storage-adapter.d.ts +22 -0
  260. package/package.json +41 -6
@@ -0,0 +1,572 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storageApiTestSuite = storageApiTestSuite;
4
+ const _module_1 = require("../../../contracts/storage/_module");
5
+ const _module_2 = require("../../../storage/_module");
6
+ function storageApiTestSuite(settings) {
7
+ const { expect, test, createAdapter, describe, beforeEach } = settings;
8
+ let storage;
9
+ beforeEach(async () => {
10
+ storage = new _module_2.Storage(await createAdapter());
11
+ });
12
+ describe("Api tests:", () => {
13
+ describe("method: exists", () => {
14
+ test("Should return true when key exists", async () => {
15
+ await storage.add("a", 1);
16
+ expect(await storage.exists("a")).toBe(true);
17
+ });
18
+ test("Should return false when key doesnt exists", async () => {
19
+ expect(await storage.exists("a")).toBe(false);
20
+ });
21
+ });
22
+ describe("method: existsMany", () => {
23
+ test("Should return only true when all keys exists", async () => {
24
+ await storage.addMany({
25
+ a: 1,
26
+ b: 1,
27
+ });
28
+ expect(await storage.existsMany(["a", "b"])).toEqual({
29
+ a: true,
30
+ b: true,
31
+ });
32
+ });
33
+ test("Should return only false when all keys doesnt exists", async () => {
34
+ expect(await storage.existsMany(["a", "b"])).toEqual({
35
+ a: false,
36
+ b: false,
37
+ });
38
+ });
39
+ test("Should return true and false when some keys exists", async () => {
40
+ await storage.add("a", 1);
41
+ expect(await storage.existsMany(["a", "b"])).toEqual({
42
+ a: true,
43
+ b: false,
44
+ });
45
+ });
46
+ });
47
+ describe("method: missing", () => {
48
+ test("Should return false when key exists", async () => {
49
+ await storage.add("a", 1);
50
+ expect(await storage.missing("a")).toBe(false);
51
+ });
52
+ test("Should return true when key doesnt exists", async () => {
53
+ expect(await storage.missing("a")).toBe(true);
54
+ });
55
+ });
56
+ describe("method: missingMany", () => {
57
+ test("Should return only false when all keys exists", async () => {
58
+ await storage.addMany({
59
+ a: 1,
60
+ b: 1,
61
+ });
62
+ expect(await storage.missingMany(["a", "b"])).toEqual({
63
+ a: false,
64
+ b: false,
65
+ });
66
+ });
67
+ test("Should return only true when all keys doesnt exists", async () => {
68
+ expect(await storage.missingMany(["a", "b"])).toEqual({
69
+ a: true,
70
+ b: true,
71
+ });
72
+ });
73
+ test("Should return true and false when some keys exists", async () => {
74
+ await storage.add("a", 1);
75
+ expect(await storage.missingMany(["a", "b"])).toEqual({
76
+ a: false,
77
+ b: true,
78
+ });
79
+ });
80
+ });
81
+ describe("method: get", () => {
82
+ test("Should return value when key exists", async () => {
83
+ await storage.add("a", 1);
84
+ expect(await storage.get("a")).toBe(1);
85
+ });
86
+ test("Should return null when key doesnt exists", async () => {
87
+ expect(await storage.get("a")).toBeNull();
88
+ });
89
+ });
90
+ describe("method: getMany", () => {
91
+ test("Should return only values when all keys exists", async () => {
92
+ await storage.addMany({
93
+ a: 1,
94
+ b: 1,
95
+ });
96
+ expect(await storage.getMany(["a", "b"])).toEqual({
97
+ a: 1,
98
+ b: 1,
99
+ });
100
+ });
101
+ test("Should return only null when all keys doesnt exists", async () => {
102
+ expect(await storage.getMany(["a", "b"])).toEqual({
103
+ a: null,
104
+ b: null,
105
+ });
106
+ });
107
+ test("Should return values and null when some keys exists", async () => {
108
+ await storage.add("a", 1);
109
+ expect(await storage.getMany(["a", "b"])).toEqual({
110
+ a: 1,
111
+ b: null,
112
+ });
113
+ });
114
+ });
115
+ describe("method: getOr", () => {
116
+ test("Should return value when key exists", async () => {
117
+ await storage.add("a", 1);
118
+ expect(await storage.getOr("a", -1)).toBe(1);
119
+ });
120
+ describe("Should return default value when key doesnt exists", () => {
121
+ test("Eager", async () => {
122
+ expect(await storage.getOr("a", -1)).toBe(-1);
123
+ });
124
+ test("Lazy", async () => {
125
+ expect(await storage.getOr("a", () => -1)).toBe(-1);
126
+ });
127
+ test("Async lazy", async () => {
128
+ expect(await storage.getOr("a", () => Promise.resolve(-1))).toBe(-1);
129
+ });
130
+ });
131
+ });
132
+ describe("method: getOrFail", () => {
133
+ test("Should return value when key exists", async () => {
134
+ await storage.add("a", 1);
135
+ expect(await storage.getOrFail("a")).toBe(1);
136
+ });
137
+ test("Should throw KeyNotFoundStorageError value when key doesnt exists", async () => {
138
+ await expect(storage.getOrFail("a")).rejects.toBeInstanceOf(_module_1.KeyNotFoundStorageError);
139
+ });
140
+ });
141
+ describe("method: getOrMany", () => {
142
+ test("Should return only values when all keys exists", async () => {
143
+ await storage.addMany({
144
+ a: 1,
145
+ b: 1,
146
+ });
147
+ expect(await storage.getOrMany({ a: -1, b: -1 })).toEqual({
148
+ a: 1,
149
+ b: 1,
150
+ });
151
+ });
152
+ describe("Should return only default values when all keys doesnt exists", () => {
153
+ test("Eager", async () => {
154
+ expect(await storage.getOrMany({ a: -1, b: -1 })).toEqual({
155
+ a: -1,
156
+ b: -1,
157
+ });
158
+ });
159
+ test("Lazy", async () => {
160
+ expect(await storage.getOrMany({ a: () => -1, b: () => -1 })).toEqual({
161
+ a: -1,
162
+ b: -1,
163
+ });
164
+ });
165
+ test("Async lazy", async () => {
166
+ expect(await storage.getOrMany({
167
+ a: () => Promise.resolve(-1),
168
+ b: () => Promise.resolve(-1),
169
+ })).toEqual({
170
+ a: -1,
171
+ b: -1,
172
+ });
173
+ });
174
+ });
175
+ test("Should return values and default values when some keys exists", async () => {
176
+ await storage.add("a", 1);
177
+ expect(await storage.getOrMany({ a: -1, b: -1 })).toEqual({
178
+ a: 1,
179
+ b: -1,
180
+ });
181
+ });
182
+ });
183
+ describe("method: add", () => {
184
+ test("Should return true when key doesnt exist", async () => {
185
+ expect(await storage.add("a", 1)).toBe(true);
186
+ });
187
+ test("Should persist value when key doesnt exist", async () => {
188
+ await storage.add("a", 1);
189
+ expect(await storage.get("a")).toBe(1);
190
+ });
191
+ test("Should return false when key exist", async () => {
192
+ await storage.add("a", 1);
193
+ expect(await storage.add("a", 1)).toBe(false);
194
+ });
195
+ test("Should not persist value when key exist", async () => {
196
+ await storage.add("a", 1);
197
+ await storage.add("a", 2);
198
+ expect(await storage.get("a")).toBe(1);
199
+ });
200
+ });
201
+ describe("method: addMany", () => {
202
+ test("Should return only true when all keys doesnt exists", async () => {
203
+ expect(await storage.addMany({
204
+ a: 1,
205
+ b: 1,
206
+ })).toEqual({
207
+ a: true,
208
+ b: true,
209
+ });
210
+ });
211
+ test("Should persist values when all keys doesnt exist", async () => {
212
+ await storage.addMany({
213
+ a: 1,
214
+ b: 1,
215
+ });
216
+ expect(await storage.getMany(["a", "b"])).toEqual({
217
+ a: 1,
218
+ b: 1,
219
+ });
220
+ });
221
+ test("Should return only false when all keys exists", async () => {
222
+ await storage.addMany({
223
+ a: 1,
224
+ b: 1,
225
+ });
226
+ expect(await storage.addMany({
227
+ a: 1,
228
+ b: 1,
229
+ })).toEqual({
230
+ a: false,
231
+ b: false,
232
+ });
233
+ });
234
+ test("Should not persist values when key exist", async () => {
235
+ await storage.addMany({
236
+ a: 1,
237
+ b: 1,
238
+ });
239
+ await storage.addMany({
240
+ a: 2,
241
+ b: 2,
242
+ });
243
+ expect(await storage.getMany(["a", "b"])).toEqual({
244
+ a: 1,
245
+ b: 1,
246
+ });
247
+ });
248
+ test("Should return true and false when some keys exists", async () => {
249
+ await storage.add("a", 1);
250
+ expect(await storage.addMany({
251
+ a: 1,
252
+ b: 1,
253
+ })).toEqual({
254
+ a: false,
255
+ b: true,
256
+ });
257
+ });
258
+ test("Should persist and not persist values when some keys exists", async () => {
259
+ await storage.addMany({
260
+ a: 1,
261
+ });
262
+ await storage.addMany({
263
+ a: 2,
264
+ b: 2,
265
+ });
266
+ expect(await storage.getMany(["a", "b"])).toEqual({
267
+ a: 1,
268
+ b: 2,
269
+ });
270
+ });
271
+ });
272
+ describe("method: update", () => {
273
+ test("Should return true when key exists", async () => {
274
+ await storage.add("a", 1);
275
+ expect(await storage.update("a", -1)).toBe(true);
276
+ });
277
+ test("Should persist update when key exists", async () => {
278
+ await storage.add("a", 1);
279
+ await storage.update("a", -1);
280
+ expect(await storage.get("a")).toBe(-1);
281
+ });
282
+ test("Should return false when key doesnt exists", async () => {
283
+ expect(await storage.update("a", -1)).toBe(false);
284
+ });
285
+ test("Should not persist update when key doesnt exists", async () => {
286
+ await storage.update("a", -1);
287
+ expect(await storage.get("a")).toBeNull();
288
+ });
289
+ });
290
+ describe("method: updateMany", () => {
291
+ test("Should return only true when all keys exists", async () => {
292
+ await storage.addMany({
293
+ a: 1,
294
+ b: 1,
295
+ });
296
+ expect(await storage.updateMany({ a: -1, b: -1 })).toEqual({
297
+ a: true,
298
+ b: true,
299
+ });
300
+ });
301
+ test("Should persist values when all keys exist", async () => {
302
+ await storage.addMany({
303
+ a: 1,
304
+ b: 1,
305
+ });
306
+ await storage.updateMany({ a: -1, b: -1 });
307
+ expect(await storage.getMany(["a", "b"])).toEqual({
308
+ a: -1,
309
+ b: -1,
310
+ });
311
+ });
312
+ test("Should return only false when all keys doesnt exists", async () => {
313
+ expect(await storage.updateMany({ a: -1, b: -1 })).toEqual({
314
+ a: false,
315
+ b: false,
316
+ });
317
+ });
318
+ test("Should not persist values when all keys doesnt exist", async () => {
319
+ await storage.updateMany({ a: -1, b: -1 });
320
+ expect(await storage.getMany(["a", "b"])).toEqual({
321
+ a: null,
322
+ b: null,
323
+ });
324
+ });
325
+ test("Should return true and false when some keys exists", async () => {
326
+ await storage.add("a", 1);
327
+ expect(await storage.updateMany({ a: -1, b: -1 })).toEqual({
328
+ a: true,
329
+ b: false,
330
+ });
331
+ });
332
+ test("Should persist and not persist values when some keys exists", async () => {
333
+ await storage.add("a", 1);
334
+ await storage.updateMany({ a: -1, b: -1 });
335
+ expect(await storage.getMany(["a", "b"])).toEqual({
336
+ a: -1,
337
+ b: null,
338
+ });
339
+ });
340
+ });
341
+ describe("method: put", () => {
342
+ test("Should return true when key exists", async () => {
343
+ await storage.add("a", 1);
344
+ expect(await storage.put("a", -1)).toBe(true);
345
+ });
346
+ test("Should persist update when key exists", async () => {
347
+ await storage.add("a", 1);
348
+ await storage.put("a", -1);
349
+ expect(await storage.get("a")).toBe(-1);
350
+ });
351
+ test("Should return false when key doesnt exists", async () => {
352
+ expect(await storage.put("a", -1)).toBe(false);
353
+ });
354
+ test("Should persist insertion when key doesnt exists", async () => {
355
+ await storage.put("a", -1);
356
+ expect(await storage.get("a")).toBe(-1);
357
+ });
358
+ });
359
+ describe("method: putMany", () => {
360
+ test("Should return only true when all keys exists", async () => {
361
+ await storage.addMany({
362
+ a: 1,
363
+ b: 1,
364
+ });
365
+ expect(await storage.putMany({ a: -1, b: -1 })).toEqual({
366
+ a: true,
367
+ b: true,
368
+ });
369
+ });
370
+ test("Should persist values when all keys exist", async () => {
371
+ await storage.addMany({
372
+ a: 1,
373
+ b: 1,
374
+ });
375
+ await storage.putMany({ a: -1, b: -1 });
376
+ expect(await storage.getMany(["a", "b"])).toEqual({
377
+ a: -1,
378
+ b: -1,
379
+ });
380
+ });
381
+ test("Should return only false when all keys doesnt exists", async () => {
382
+ expect(await storage.putMany({ a: -1, b: -1 })).toEqual({
383
+ a: false,
384
+ b: false,
385
+ });
386
+ });
387
+ test("Should persist values when all keys doesnt exist", async () => {
388
+ await storage.putMany({ a: -1, b: -1 });
389
+ expect(await storage.getMany(["a", "b"])).toEqual({
390
+ a: -1,
391
+ b: -1,
392
+ });
393
+ });
394
+ test("Should return true and false when some keys exists", async () => {
395
+ await storage.add("a", 1);
396
+ expect(await storage.putMany({ a: -1, b: -1 })).toEqual({
397
+ a: true,
398
+ b: false,
399
+ });
400
+ });
401
+ test("Should persist all values when some keys exists", async () => {
402
+ await storage.add("a", 1);
403
+ await storage.putMany({ a: -1, b: -1 });
404
+ expect(await storage.getMany(["a", "b"])).toEqual({
405
+ a: -1,
406
+ b: -1,
407
+ });
408
+ });
409
+ });
410
+ describe("method: remove", () => {
411
+ test("Should return true when key exists", async () => {
412
+ await storage.add("a", 1);
413
+ expect(await storage.remove("a")).toBe(true);
414
+ });
415
+ test("Should persist removal when key exists", async () => {
416
+ await storage.add("a", 1);
417
+ await storage.remove("a");
418
+ expect(await storage.get("a")).toBeNull();
419
+ });
420
+ test("Should return false when key doesnt exists", async () => {
421
+ expect(await storage.remove("a")).toBe(false);
422
+ });
423
+ });
424
+ describe("method: removeMany", () => {
425
+ test("Should return only true when all keys exists", async () => {
426
+ await storage.addMany({
427
+ a: 1,
428
+ b: 1,
429
+ });
430
+ expect(await storage.removeMany(["a", "b"])).toEqual({
431
+ a: true,
432
+ b: true,
433
+ });
434
+ });
435
+ test("Should persist values when all keys exist", async () => {
436
+ await storage.addMany({
437
+ a: 1,
438
+ b: 1,
439
+ });
440
+ await storage.removeMany(["a", "b"]);
441
+ expect(await storage.getMany(["a", "b"])).toEqual({
442
+ a: null,
443
+ b: null,
444
+ });
445
+ });
446
+ test("Should return only false when all keys doesnt exists", async () => {
447
+ expect(await storage.removeMany(["a", "b"])).toEqual({
448
+ a: false,
449
+ b: false,
450
+ });
451
+ });
452
+ test("Should return true and false when some keys exists", async () => {
453
+ await storage.add("a", 1);
454
+ expect(await storage.removeMany(["a", "b"])).toEqual({
455
+ a: true,
456
+ b: false,
457
+ });
458
+ });
459
+ });
460
+ describe("method: getAndRemove", () => {
461
+ test("Should return value when key exists", async () => {
462
+ await storage.add("a", 1);
463
+ expect(await storage.getAndRemove("a")).toBe(1);
464
+ });
465
+ test("Should return null when key doesnt exists", async () => {
466
+ expect(await storage.getAndRemove("a")).toBeNull();
467
+ });
468
+ test("Should persist removal when key exists", async () => {
469
+ await storage.add("a", 1);
470
+ await storage.getAndRemove("a");
471
+ expect(await storage.get("a")).toBeNull();
472
+ });
473
+ });
474
+ describe("method: getOrAdd", () => {
475
+ test("Should return value when key exists", async () => {
476
+ await storage.add("a", 1);
477
+ expect(await storage.getOrAdd("a", -1)).toBe(1);
478
+ });
479
+ describe("Should return defaultValue when key doesnt exists", () => {
480
+ test("Eager", async () => {
481
+ expect(await storage.getOrAdd("a", -1)).toBe(-1);
482
+ });
483
+ test("Lazy", async () => {
484
+ expect(await storage.getOrAdd("a", () => -1)).toBe(-1);
485
+ });
486
+ test("Async lazy", async () => {
487
+ expect(await storage.getOrAdd("a", () => Promise.resolve(-1))).toBe(-1);
488
+ });
489
+ });
490
+ describe("Should persist insertion when key doesnt exists", () => {
491
+ test("Eager", async () => {
492
+ await storage.getOrAdd("a", -1);
493
+ expect(await storage.get("a")).toBe(-1);
494
+ });
495
+ test("Lazy", async () => {
496
+ await storage.getOrAdd("a", () => -1);
497
+ expect(await storage.get("a")).toBe(-1);
498
+ });
499
+ test("Async lazy", async () => {
500
+ await storage.getOrAdd("a", () => Promise.resolve(-1));
501
+ expect(await storage.get("a")).toBe(-1);
502
+ });
503
+ });
504
+ });
505
+ describe("method: increment", () => {
506
+ test("Should return true when key exists", async () => {
507
+ await storage.add("a", 1);
508
+ expect(await storage.increment("a", 1)).toBe(true);
509
+ });
510
+ test("Should persist increment when key exists", async () => {
511
+ await storage.add("a", 1);
512
+ await storage.increment("a", 1);
513
+ expect(await storage.get("a")).toBe(2);
514
+ });
515
+ test("Should return false when key doesnt exists", async () => {
516
+ expect(await storage.increment("a", 1)).toBe(false);
517
+ });
518
+ test("Should not persist increment when key doesnt exists", async () => {
519
+ await storage.increment("a", 1);
520
+ expect(await storage.get("a")).toBeNull();
521
+ });
522
+ test("Should throw TypeStorageError key value is not number type", async () => {
523
+ await storage.add("a", "str");
524
+ await expect(storage.increment("a", 1)).rejects.toBeInstanceOf(_module_1.TypeStorageError);
525
+ });
526
+ });
527
+ describe("method: decrement", () => {
528
+ test("Should return true when key exists", async () => {
529
+ await storage.add("a", 1);
530
+ expect(await storage.decrement("a", 1)).toBe(true);
531
+ });
532
+ test("Should persist decrement when key exists", async () => {
533
+ await storage.add("a", 1);
534
+ await storage.decrement("a", 1);
535
+ expect(await storage.get("a")).toBe(0);
536
+ });
537
+ test("Should return false when key doesnt exists", async () => {
538
+ expect(await storage.decrement("a", 1)).toBe(false);
539
+ });
540
+ test("Should not persist decrement when key doesnt exists", async () => {
541
+ await storage.decrement("a", 1);
542
+ expect(await storage.get("a")).toBeNull();
543
+ });
544
+ test("Should throw TypeStorageError key value is not number type", async () => {
545
+ await storage.add("a", "str");
546
+ await expect(storage.decrement("a", 1)).rejects.toBeInstanceOf(_module_1.TypeStorageError);
547
+ });
548
+ });
549
+ describe("method: clear", () => {
550
+ test("Should remove all keys", async () => {
551
+ await storage.addMany({
552
+ a: 1,
553
+ b: 2,
554
+ c: 3,
555
+ d: 4,
556
+ e: 5,
557
+ f: 6,
558
+ });
559
+ await storage.clear();
560
+ expect(await storage.getMany(["a", "b", "c", "d", "e", "f"])).toEqual({
561
+ a: null,
562
+ b: null,
563
+ c: null,
564
+ d: null,
565
+ e: null,
566
+ f: null,
567
+ });
568
+ });
569
+ });
570
+ });
571
+ }
572
+ //# sourceMappingURL=storage-api.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-api.test-suite.js","sourceRoot":"","sources":["../../../../../src/storage/_shared/test-utilities/storage-api.test-suite.ts"],"names":[],"mappings":"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"}