@mtcute/dispatcher 0.6.0 → 0.8.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 (194) hide show
  1. package/README.md +3 -3
  2. package/cjs/callback-data-builder.d.ts +1 -1
  3. package/cjs/callback-data-builder.js +5 -5
  4. package/cjs/callback-data-builder.js.map +1 -1
  5. package/cjs/context/base.d.ts +2 -1
  6. package/cjs/context/base.js.map +1 -1
  7. package/cjs/context/callback-query.d.ts +3 -2
  8. package/cjs/context/callback-query.js +3 -3
  9. package/cjs/context/callback-query.js.map +1 -1
  10. package/cjs/context/chat-join-request.d.ts +2 -1
  11. package/cjs/context/chat-join-request.js +2 -2
  12. package/cjs/context/chat-join-request.js.map +1 -1
  13. package/cjs/context/chosen-inline-result.d.ts +2 -1
  14. package/cjs/context/chosen-inline-result.js +3 -3
  15. package/cjs/context/chosen-inline-result.js.map +1 -1
  16. package/cjs/context/inline-query.d.ts +2 -1
  17. package/cjs/context/inline-query.js +2 -2
  18. package/cjs/context/inline-query.js.map +1 -1
  19. package/cjs/context/message.d.ts +4 -6
  20. package/cjs/context/message.js +3 -3
  21. package/cjs/context/message.js.map +1 -1
  22. package/cjs/context/parse.js.map +1 -1
  23. package/cjs/context/pre-checkout-query.d.ts +2 -1
  24. package/cjs/context/pre-checkout-query.js +2 -2
  25. package/cjs/context/pre-checkout-query.js.map +1 -1
  26. package/cjs/dispatcher.d.ts +15 -9
  27. package/cjs/dispatcher.js +41 -78
  28. package/cjs/dispatcher.js.map +1 -1
  29. package/cjs/filters/bots.d.ts +6 -6
  30. package/cjs/filters/bots.js +2 -2
  31. package/cjs/filters/bots.js.map +1 -1
  32. package/cjs/filters/chat.d.ts +1 -1
  33. package/cjs/filters/chat.js +1 -1
  34. package/cjs/filters/chat.js.map +1 -1
  35. package/cjs/filters/group.d.ts +1 -1
  36. package/cjs/filters/group.js.map +1 -1
  37. package/cjs/filters/logic.js.map +1 -1
  38. package/cjs/filters/message.d.ts +75 -67
  39. package/cjs/filters/message.js +3 -3
  40. package/cjs/filters/message.js.map +1 -1
  41. package/cjs/filters/state.d.ts +2 -2
  42. package/cjs/filters/state.js.map +1 -1
  43. package/cjs/filters/text.d.ts +1 -1
  44. package/cjs/filters/text.js.map +1 -1
  45. package/cjs/filters/types.d.ts +2 -2
  46. package/cjs/filters/types.js.map +1 -1
  47. package/cjs/filters/updates.d.ts +1 -1
  48. package/cjs/filters/updates.js.map +1 -1
  49. package/cjs/filters/user.d.ts +1 -1
  50. package/cjs/filters/user.js +4 -4
  51. package/cjs/filters/user.js.map +1 -1
  52. package/cjs/handler.d.ts +4 -3
  53. package/cjs/handler.js.map +1 -1
  54. package/cjs/propagation.js +1 -1
  55. package/cjs/propagation.js.map +1 -1
  56. package/cjs/state/index.d.ts +3 -1
  57. package/cjs/state/index.js +3 -1
  58. package/cjs/state/index.js.map +1 -1
  59. package/cjs/state/key.d.ts +2 -2
  60. package/cjs/state/key.js +2 -2
  61. package/cjs/state/key.js.map +1 -1
  62. package/cjs/state/provider.d.ts +5 -0
  63. package/cjs/state/provider.js +3 -0
  64. package/cjs/state/provider.js.map +1 -0
  65. package/cjs/state/providers/index.d.ts +2 -0
  66. package/cjs/state/providers/index.js +19 -0
  67. package/cjs/state/providers/index.js.map +1 -0
  68. package/cjs/state/providers/memory.d.ts +29 -0
  69. package/cjs/state/providers/memory.js +76 -0
  70. package/cjs/state/providers/memory.js.map +1 -0
  71. package/cjs/state/providers/sqlite.d.ts +29 -0
  72. package/cjs/state/providers/sqlite.js +89 -0
  73. package/cjs/state/providers/sqlite.js.map +1 -0
  74. package/cjs/state/repository.d.ts +62 -0
  75. package/cjs/state/repository.js +3 -0
  76. package/cjs/state/repository.js.map +1 -0
  77. package/cjs/state/service.d.ts +19 -0
  78. package/cjs/state/service.js +68 -0
  79. package/cjs/state/service.js.map +1 -0
  80. package/cjs/state/update-state.d.ts +3 -3
  81. package/cjs/state/update-state.js +7 -7
  82. package/cjs/state/update-state.js.map +1 -1
  83. package/cjs/wizard.d.ts +2 -2
  84. package/cjs/wizard.js +1 -1
  85. package/cjs/wizard.js.map +1 -1
  86. package/esm/callback-data-builder.d.ts +1 -1
  87. package/esm/callback-data-builder.js +1 -1
  88. package/esm/callback-data-builder.js.map +1 -1
  89. package/esm/context/base.d.ts +2 -1
  90. package/esm/context/base.js.map +1 -1
  91. package/esm/context/callback-query.d.ts +3 -2
  92. package/esm/context/callback-query.js +1 -1
  93. package/esm/context/callback-query.js.map +1 -1
  94. package/esm/context/chat-join-request.d.ts +2 -1
  95. package/esm/context/chat-join-request.js +1 -1
  96. package/esm/context/chat-join-request.js.map +1 -1
  97. package/esm/context/chosen-inline-result.d.ts +2 -1
  98. package/esm/context/chosen-inline-result.js +1 -1
  99. package/esm/context/chosen-inline-result.js.map +1 -1
  100. package/esm/context/inline-query.d.ts +2 -1
  101. package/esm/context/inline-query.js +1 -1
  102. package/esm/context/inline-query.js.map +1 -1
  103. package/esm/context/message.d.ts +4 -6
  104. package/esm/context/message.js +1 -1
  105. package/esm/context/message.js.map +1 -1
  106. package/esm/context/parse.js.map +1 -1
  107. package/esm/context/pre-checkout-query.d.ts +2 -1
  108. package/esm/context/pre-checkout-query.js +1 -1
  109. package/esm/context/pre-checkout-query.js.map +1 -1
  110. package/esm/dispatcher.d.ts +15 -9
  111. package/esm/dispatcher.js +29 -66
  112. package/esm/dispatcher.js.map +1 -1
  113. package/esm/filters/bots.d.ts +6 -6
  114. package/esm/filters/bots.js +2 -2
  115. package/esm/filters/bots.js.map +1 -1
  116. package/esm/filters/chat.d.ts +2 -2
  117. package/esm/filters/chat.js +1 -1
  118. package/esm/filters/chat.js.map +1 -1
  119. package/esm/filters/group.d.ts +1 -1
  120. package/esm/filters/group.js.map +1 -1
  121. package/esm/filters/logic.js.map +1 -1
  122. package/esm/filters/message.d.ts +77 -69
  123. package/esm/filters/message.js +1 -1
  124. package/esm/filters/message.js.map +1 -1
  125. package/esm/filters/state.d.ts +2 -2
  126. package/esm/filters/state.js.map +1 -1
  127. package/esm/filters/text.d.ts +1 -1
  128. package/esm/filters/text.js.map +1 -1
  129. package/esm/filters/types.d.ts +2 -2
  130. package/esm/filters/types.js.map +1 -1
  131. package/esm/filters/updates.d.ts +1 -1
  132. package/esm/filters/updates.js.map +1 -1
  133. package/esm/filters/user.d.ts +1 -1
  134. package/esm/filters/user.js +3 -3
  135. package/esm/filters/user.js.map +1 -1
  136. package/esm/handler.d.ts +4 -3
  137. package/esm/handler.js.map +1 -1
  138. package/esm/propagation.js +1 -1
  139. package/esm/propagation.js.map +1 -1
  140. package/esm/state/index.d.ts +3 -1
  141. package/esm/state/index.js +3 -1
  142. package/esm/state/index.js.map +1 -1
  143. package/esm/state/key.d.ts +2 -2
  144. package/esm/state/key.js +1 -1
  145. package/esm/state/key.js.map +1 -1
  146. package/esm/state/provider.d.ts +5 -0
  147. package/esm/state/provider.js +2 -0
  148. package/esm/state/provider.js.map +1 -0
  149. package/esm/state/providers/index.d.ts +2 -0
  150. package/esm/state/providers/index.js +3 -0
  151. package/esm/state/providers/index.js.map +1 -0
  152. package/esm/state/providers/memory.d.ts +29 -0
  153. package/esm/state/providers/memory.js +72 -0
  154. package/esm/state/providers/memory.js.map +1 -0
  155. package/esm/state/providers/sqlite.d.ts +29 -0
  156. package/esm/state/providers/sqlite.js +85 -0
  157. package/esm/state/providers/sqlite.js.map +1 -0
  158. package/esm/state/repository.d.ts +62 -0
  159. package/esm/state/repository.js +2 -0
  160. package/esm/state/repository.js.map +1 -0
  161. package/esm/state/service.d.ts +19 -0
  162. package/esm/state/service.js +64 -0
  163. package/esm/state/service.js.map +1 -0
  164. package/esm/state/update-state.d.ts +3 -3
  165. package/esm/state/update-state.js +2 -2
  166. package/esm/state/update-state.js.map +1 -1
  167. package/esm/wizard.d.ts +2 -2
  168. package/esm/wizard.js +1 -1
  169. package/esm/wizard.js.map +1 -1
  170. package/package.json +11 -3
  171. package/cjs/callback-data-builder.test.d.ts +0 -1
  172. package/cjs/callback-data-builder.test.js +0 -74
  173. package/cjs/callback-data-builder.test.js.map +0 -1
  174. package/cjs/filters/bots.test.d.ts +0 -1
  175. package/cjs/filters/bots.test.js +0 -120
  176. package/cjs/filters/bots.test.js.map +0 -1
  177. package/cjs/filters/logic.test.d.ts +0 -1
  178. package/cjs/filters/logic.test.js +0 -169
  179. package/cjs/filters/logic.test.js.map +0 -1
  180. package/cjs/state/storage.d.ts +0 -96
  181. package/cjs/state/storage.js +0 -17
  182. package/cjs/state/storage.js.map +0 -1
  183. package/esm/callback-data-builder.test.d.ts +0 -1
  184. package/esm/callback-data-builder.test.js +0 -72
  185. package/esm/callback-data-builder.test.js.map +0 -1
  186. package/esm/filters/bots.test.d.ts +0 -1
  187. package/esm/filters/bots.test.js +0 -118
  188. package/esm/filters/bots.test.js.map +0 -1
  189. package/esm/filters/logic.test.d.ts +0 -1
  190. package/esm/filters/logic.test.js +0 -167
  191. package/esm/filters/logic.test.js.map +0 -1
  192. package/esm/state/storage.d.ts +0 -96
  193. package/esm/state/storage.js +0 -13
  194. package/esm/state/storage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"logic.test.js","sourceRoot":"","sources":["../../../src/filters/logic.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi } from 'vitest'\n\nimport { and, not, or } from './logic.js'\n\ndescribe('filters.not', () => {\n it('should negate a given sync filter', () => {\n const filter = vi.fn().mockReturnValue(true)\n const negated = not(filter)\n\n expect(negated(1)).toBe(false)\n expect(filter).toHaveBeenCalledTimes(1)\n expect(filter).toHaveBeenCalledWith(1, undefined)\n })\n\n it('should negate a given async filter', async () => {\n const filter = vi.fn().mockResolvedValue(true)\n const negated = not(filter)\n\n await expect(negated(1)).resolves.toBe(false)\n expect(filter).toHaveBeenCalledTimes(1)\n expect(filter).toHaveBeenCalledWith(1, undefined)\n })\n})\n\ndescribe('filters.and', () => {\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should combine %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should not continue execution after false (%s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).not.toHaveBeenCalled()\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should combine %s, %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b, c)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).toHaveBeenCalledTimes(1)\n expect(c).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should not continue execution after false (%s, %s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b, c)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).not.toHaveBeenCalled()\n })\n})\n\ndescribe('filters.or', () => {\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should combine %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should not continue execution after true (%s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).not.toHaveBeenCalled()\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should combine %s, %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b, c)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).toHaveBeenCalledTimes(1)\n expect(c).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should not continue execution after true (%s, %s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b, c)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).not.toHaveBeenCalled()\n })\n})\n"]}
@@ -1,96 +0,0 @@
1
- import { MaybeAsync } from '@mtcute/client';
2
- /**
3
- * Interface for FSM storage for the dispatcher.
4
- *
5
- * All of the officially supported storages already implement
6
- * this interface, so you can just re-use it.
7
- *
8
- * Current scene is a special case of a `string` state,
9
- * Most of the time you can just store it the same way
10
- * as normal state, prefixing with something like `$current_state_`
11
- * (scene name can't start with `$`).
12
- * Alternatively, you can store them as simple strings
13
- */
14
- export interface IStateStorage {
15
- /**
16
- * Load state from some external storage.
17
- * Should be used either to load session content from file/network/etc
18
- * to memory, or to open required connections to fetch session content later
19
- *
20
- * This method may be called multiple times and should handle that.
21
- */
22
- load?(): MaybeAsync<void>;
23
- /**
24
- * Save state to some external storage.
25
- * Should be used to commit pending changes in the session.
26
- * For example, saving session content to file/network/etc,
27
- * or committing a database transaction
28
- */
29
- save?(): MaybeAsync<void>;
30
- /**
31
- * Cleanup storage and release all used resources.
32
- *
33
- * This method may be called multiple times and should handle that.
34
- */
35
- destroy?(): MaybeAsync<void>;
36
- /**
37
- * Retrieve state from the storage
38
- *
39
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
40
- */
41
- getState(key: string): MaybeAsync<unknown>;
42
- /**
43
- * Save state to the storage
44
- *
45
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
46
- * @param state Object representing the state
47
- * @param ttl TTL for the state, in seconds
48
- */
49
- setState(key: string, state: unknown, ttl?: number): MaybeAsync<void>;
50
- /**
51
- * Delete state from the storage
52
- *
53
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
54
- */
55
- deleteState(key: string): MaybeAsync<void>;
56
- /**
57
- * Retrieve the current scene UID from the storage
58
- *
59
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
60
- */
61
- getCurrentScene(key: string): MaybeAsync<string | null>;
62
- /**
63
- * Change current scene's UID from the storage
64
- *
65
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
66
- * @param scene New scene
67
- * @param ttl TTL for the scene, in seconds
68
- */
69
- setCurrentScene(key: string, scene: string, ttl?: number): MaybeAsync<void>;
70
- /**
71
- * Delete current scene from the storage, effectively "exiting" to root.
72
- *
73
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
74
- */
75
- deleteCurrentScene(key: string): MaybeAsync<void>;
76
- /**
77
- * Get information about a rate limit.
78
- *
79
- * It is recommended that you use sliding window or leaky bucket
80
- * to implement rate limiting ([learn more](https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/)),
81
- *
82
- * @param key Key of the rate limit
83
- * @param limit Maximum number of requests in `window`
84
- * @param window Window size in seconds
85
- * @returns Tuple containing the number of remaining and
86
- * unix time in ms when the user can try again
87
- */
88
- getRateLimit(key: string, limit: number, window: number): MaybeAsync<[number, number]>;
89
- /**
90
- * Reset a rate limit.
91
- *
92
- * @param key Key of the rate limit
93
- */
94
- resetRateLimit(key: string): MaybeAsync<void>;
95
- }
96
- export declare function isCompatibleStorage(storage: unknown): storage is IStateStorage;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isCompatibleStorage = void 0;
4
- function isCompatibleStorage(storage) {
5
- return (typeof storage === 'object' &&
6
- storage !== null &&
7
- 'getState' in storage &&
8
- 'setState' in storage &&
9
- 'deleteState' in storage &&
10
- 'getCurrentScene' in storage &&
11
- 'setCurrentScene' in storage &&
12
- 'deleteCurrentScene' in storage &&
13
- 'getRateLimit' in storage &&
14
- 'resetRateLimit' in storage);
15
- }
16
- exports.isCompatibleStorage = isCompatibleStorage;
17
- //# sourceMappingURL=storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/state/storage.ts"],"names":[],"mappings":";;;AA4GA,SAAgB,mBAAmB,CAAC,OAAgB;IAChD,OAAO,CACH,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,UAAU,IAAI,OAAO;QACrB,UAAU,IAAI,OAAO;QACrB,aAAa,IAAI,OAAO;QACxB,iBAAiB,IAAI,OAAO;QAC5B,iBAAiB,IAAI,OAAO;QAC5B,oBAAoB,IAAI,OAAO;QAC/B,cAAc,IAAI,OAAO;QACzB,gBAAgB,IAAI,OAAO,CAC9B,CAAA;AACL,CAAC;AAbD,kDAaC","sourcesContent":["import { MaybeAsync } from '@mtcute/client'\n\n// ⚠️ Important: when modifying the below interface, also update it\n// in packages/core/src/storage/storage.test-utils.ts\n\n/**\n * Interface for FSM storage for the dispatcher.\n *\n * All of the officially supported storages already implement\n * this interface, so you can just re-use it.\n *\n * Current scene is a special case of a `string` state,\n * Most of the time you can just store it the same way\n * as normal state, prefixing with something like `$current_state_`\n * (scene name can't start with `$`).\n * Alternatively, you can store them as simple strings\n */\nexport interface IStateStorage {\n /**\n * Load state from some external storage.\n * Should be used either to load session content from file/network/etc\n * to memory, or to open required connections to fetch session content later\n *\n * This method may be called multiple times and should handle that.\n */\n load?(): MaybeAsync<void>\n /**\n * Save state to some external storage.\n * Should be used to commit pending changes in the session.\n * For example, saving session content to file/network/etc,\n * or committing a database transaction\n */\n save?(): MaybeAsync<void>\n /**\n * Cleanup storage and release all used resources.\n *\n * This method may be called multiple times and should handle that.\n */\n destroy?(): MaybeAsync<void>\n\n /**\n * Retrieve state from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n getState(key: string): MaybeAsync<unknown>\n\n /**\n * Save state to the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n * @param state Object representing the state\n * @param ttl TTL for the state, in seconds\n */\n setState(key: string, state: unknown, ttl?: number): MaybeAsync<void>\n\n /**\n * Delete state from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n deleteState(key: string): MaybeAsync<void>\n\n /**\n * Retrieve the current scene UID from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n getCurrentScene(key: string): MaybeAsync<string | null>\n\n /**\n * Change current scene's UID from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n * @param scene New scene\n * @param ttl TTL for the scene, in seconds\n */\n setCurrentScene(key: string, scene: string, ttl?: number): MaybeAsync<void>\n\n /**\n * Delete current scene from the storage, effectively \"exiting\" to root.\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n deleteCurrentScene(key: string): MaybeAsync<void>\n\n /**\n * Get information about a rate limit.\n *\n * It is recommended that you use sliding window or leaky bucket\n * to implement rate limiting ([learn more](https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/)),\n *\n * @param key Key of the rate limit\n * @param limit Maximum number of requests in `window`\n * @param window Window size in seconds\n * @returns Tuple containing the number of remaining and\n * unix time in ms when the user can try again\n */\n getRateLimit(key: string, limit: number, window: number): MaybeAsync<[number, number]>\n\n /**\n * Reset a rate limit.\n *\n * @param key Key of the rate limit\n */\n resetRateLimit(key: string): MaybeAsync<void>\n}\n\nexport function isCompatibleStorage(storage: unknown): storage is IStateStorage {\n return (\n typeof storage === 'object' &&\n storage !== null &&\n 'getState' in storage &&\n 'setState' in storage &&\n 'deleteState' in storage &&\n 'getCurrentScene' in storage &&\n 'setCurrentScene' in storage &&\n 'deleteCurrentScene' in storage &&\n 'getRateLimit' in storage &&\n 'resetRateLimit' in storage\n )\n}\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,72 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { CallbackQuery, MtArgumentError, PeersIndex } from '@mtcute/client';
3
- import { utf8EncodeToBuffer } from '@mtcute/client/utils.js';
4
- import { createStub } from '@mtcute/test';
5
- import { CallbackDataBuilder } from './callback-data-builder.js';
6
- describe('CallbackDataBuilder', () => {
7
- it('should correctly build data', () => {
8
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
9
- expect(cdb.build({ foo: 'foo', bar: 'bar' })).toEqual('prefix:foo:bar');
10
- });
11
- it('should correctly throw on invalid data when building', () => {
12
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
13
- expect(() => cdb.build({ foo: 'foo:1', bar: 'bar' })).toThrow(MtArgumentError);
14
- });
15
- it('should correctly throw on too long data when building', () => {
16
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
17
- expect(() => cdb.build({
18
- foo: 'foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo',
19
- bar: 'bar',
20
- })).toThrow(MtArgumentError);
21
- });
22
- it('should correctly parse data', () => {
23
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
24
- expect(cdb.parse('prefix:foo:bar')).toEqual({ foo: 'foo', bar: 'bar' });
25
- });
26
- it('should throw on invalid prefix when parsing', () => {
27
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
28
- expect(() => cdb.parse('123:foo:bar')).toThrow(MtArgumentError);
29
- });
30
- it('should throw on invalid parts count when parsing', () => {
31
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
32
- expect(() => cdb.parse('prefix:foo:bar:baz')).toThrow(MtArgumentError);
33
- });
34
- describe('filter', () => {
35
- const createCb = (data) => new CallbackQuery(createStub('updateBotCallbackQuery', {
36
- data: utf8EncodeToBuffer(data),
37
- }), new PeersIndex());
38
- const getFilterMatch = (filter, data) => {
39
- const cb = createCb(data);
40
- const matched = filter(cb);
41
- if (!matched)
42
- return null;
43
- // eslint-disable-next-line
44
- return cb.match;
45
- };
46
- it('should create a filter without params', () => {
47
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
48
- expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar')).toEqual({
49
- foo: 'foo',
50
- bar: 'bar',
51
- });
52
- expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar:baz')).toEqual(null);
53
- });
54
- it('should create a filter with params', () => {
55
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
56
- expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:foo:bar')).toEqual({
57
- foo: 'foo',
58
- bar: 'bar',
59
- });
60
- expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:bar:bar')).toEqual(null);
61
- });
62
- it('should create a filter with regex params', () => {
63
- const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
64
- expect(getFilterMatch(cdb.filter({ foo: /\d+/ }), 'prefix:123:bar')).toEqual({
65
- foo: '123',
66
- bar: 'bar',
67
- });
68
- expect(getFilterMatch(cdb.filter({ foo: /\d+/ }), 'prefix:bar:bar')).toEqual(null);
69
- });
70
- });
71
- });
72
- //# sourceMappingURL=callback-data-builder.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"callback-data-builder.test.js","sourceRoot":"","sources":["../../src/callback-data-builder.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { CallbackQuery, MtArgumentError, PeersIndex } from '@mtcute/client'\nimport { utf8EncodeToBuffer } from '@mtcute/client/utils.js'\nimport { createStub } from '@mtcute/test'\n\nimport { CallbackDataBuilder } from './callback-data-builder.js'\nimport { UpdateFilter } from './filters/index.js'\n\ndescribe('CallbackDataBuilder', () => {\n it('should correctly build data', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(cdb.build({ foo: 'foo', bar: 'bar' })).toEqual('prefix:foo:bar')\n })\n\n it('should correctly throw on invalid data when building', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() => cdb.build({ foo: 'foo:1', bar: 'bar' })).toThrow(MtArgumentError)\n })\n\n it('should correctly throw on too long data when building', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() =>\n cdb.build({\n foo: 'foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo',\n bar: 'bar',\n }),\n ).toThrow(MtArgumentError)\n })\n\n it('should correctly parse data', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(cdb.parse('prefix:foo:bar')).toEqual({ foo: 'foo', bar: 'bar' })\n })\n\n it('should throw on invalid prefix when parsing', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() => cdb.parse('123:foo:bar')).toThrow(MtArgumentError)\n })\n\n it('should throw on invalid parts count when parsing', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() => cdb.parse('prefix:foo:bar:baz')).toThrow(MtArgumentError)\n })\n\n describe('filter', () => {\n const createCb = (data: string) =>\n new CallbackQuery(\n createStub('updateBotCallbackQuery', {\n data: utf8EncodeToBuffer(data),\n }),\n new PeersIndex(),\n )\n\n const getFilterMatch = (filter: UpdateFilter<CallbackQuery>, data: string) => {\n const cb = createCb(data)\n\n const matched = filter(cb)\n if (!matched) return null\n\n // eslint-disable-next-line\n return (cb as any).match\n }\n\n it('should create a filter without params', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar')).toEqual({\n foo: 'foo',\n bar: 'bar',\n })\n expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar:baz')).toEqual(null)\n })\n\n it('should create a filter with params', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:foo:bar')).toEqual({\n foo: 'foo',\n bar: 'bar',\n })\n expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:bar:bar')).toEqual(null)\n })\n\n it('should create a filter with regex params', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(getFilterMatch(cdb.filter({ foo: /\\d+/ }), 'prefix:123:bar')).toEqual({\n foo: '123',\n bar: 'bar',\n })\n expect(getFilterMatch(cdb.filter({ foo: /\\d+/ }), 'prefix:bar:bar')).toEqual(null)\n })\n })\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,118 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { Message, PeersIndex } from '@mtcute/client';
3
- import { createStub, StubTelegramClient } from '@mtcute/test';
4
- import { MessageContext } from '../index.js';
5
- import { command, deeplink } from './bots.js';
6
- const peers = new PeersIndex();
7
- peers.users.set(1, createStub('user', { id: 1 }));
8
- peers.chats.set(1, createStub('channel', { id: 1 }));
9
- const createMessageContext = (partial) => new MessageContext(StubTelegramClient.full(), // eslint-disable-line
10
- new Message(createStub('message', partial), peers, false));
11
- describe('filters.command', () => {
12
- const getParsedCommand = (text, ...params) => {
13
- const ctx = createMessageContext({
14
- message: text,
15
- });
16
- ctx.client.getAuthState = () => ({
17
- isBot: true,
18
- userId: 0,
19
- selfUsername: 'testbot',
20
- });
21
- // eslint-disable-next-line
22
- if (command(...params)(ctx))
23
- return ctx.command;
24
- return null;
25
- };
26
- it('should only parse given commands', () => {
27
- expect(getParsedCommand('/start', 'start')).toEqual(['start']);
28
- expect(getParsedCommand('/start', 'stop')).toEqual(null);
29
- expect(getParsedCommand('/start', ['start', 'stop'])).toEqual(['start']);
30
- });
31
- it('should only parse commands to the current bot', () => {
32
- expect(getParsedCommand('/start@testbot', 'start')).toEqual(['start']);
33
- expect(getParsedCommand('/start@otherbot', 'start')).toEqual(null);
34
- });
35
- it('should parse command arguments', () => {
36
- expect(getParsedCommand('/start foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz']);
37
- expect(getParsedCommand('/start@testbot foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz']);
38
- });
39
- it('should parse quoted command arguments', () => {
40
- expect(getParsedCommand('/start foo "bar baz"', 'start')).toEqual(['start', 'foo', 'bar baz']);
41
- expect(getParsedCommand('/start foo "bar \\" baz"', 'start')).toEqual(['start', 'foo', 'bar " baz']);
42
- expect(getParsedCommand('/start foo "bar \\\\" baz"', 'start')).toEqual(['start', 'foo', 'bar \\" baz']);
43
- });
44
- it('should parse custom prefixes', () => {
45
- expect(getParsedCommand('!start foo "bar baz"', 'start', { prefixes: '!' })).toEqual([
46
- 'start',
47
- 'foo',
48
- 'bar baz',
49
- ]);
50
- });
51
- it('should be case insensitive by default', () => {
52
- expect(getParsedCommand('/START foo', 'start')).toEqual(['start', 'foo']);
53
- expect(getParsedCommand('/START foo BAR', 'start')).toEqual(['start', 'foo', 'BAR']);
54
- });
55
- it('should be case sensitive if asked', () => {
56
- expect(getParsedCommand('/START foo', 'start', { caseSensitive: true })).toEqual(null);
57
- expect(getParsedCommand('/START foo', 'START', { caseSensitive: true })).toEqual(['START', 'foo']);
58
- });
59
- it('should accept multiple commands to match', () => {
60
- expect(getParsedCommand('/foo', ['foo', 'bar'])).toEqual(['foo']);
61
- expect(getParsedCommand('/bar', ['foo', 'bar'])).toEqual(['bar']);
62
- expect(getParsedCommand('/baz', ['foo', 'bar'])).toEqual(null);
63
- });
64
- });
65
- describe('filters.deeplink', () => {
66
- it('should only match given param', () => {
67
- const ctx = createMessageContext({
68
- message: '/start foo',
69
- peerId: { _: 'peerUser', userId: 1 },
70
- });
71
- expect(deeplink('bar')(ctx)).toEqual(false);
72
- expect(deeplink('foo')(ctx)).toEqual(true);
73
- // eslint-disable-next-line
74
- expect(ctx.command).toEqual(['start', 'foo']);
75
- });
76
- it('should add regex matches', () => {
77
- const ctx = createMessageContext({
78
- message: '/start foo_123',
79
- peerId: { _: 'peerUser', userId: 1 },
80
- });
81
- expect(deeplink(/^foo_(\d+)$/)(ctx)).toEqual(true);
82
- // eslint-disable-next-line
83
- expect(ctx.command).toEqual(['start', 'foo_123', '123']);
84
- });
85
- it('should accept multiple params', () => {
86
- const ctx = createMessageContext({
87
- message: '/start foo',
88
- peerId: { _: 'peerUser', userId: 1 },
89
- });
90
- expect(deeplink(['foo', 'bar'])(ctx)).toEqual(true);
91
- // eslint-disable-next-line
92
- expect(ctx.command).toEqual(['start', 'foo']);
93
- });
94
- it('should accept multiple regex params', () => {
95
- const ctx = createMessageContext({
96
- message: '/start foo',
97
- peerId: { _: 'peerUser', userId: 1 },
98
- });
99
- expect(deeplink([/foo/, /bar/])(ctx)).toEqual(true);
100
- // eslint-disable-next-line
101
- expect(ctx.command).toEqual(['start', 'foo']);
102
- });
103
- it('should fail for >1 arguments', () => {
104
- const ctx = createMessageContext({
105
- message: '/start foo bar',
106
- peerId: { _: 'peerUser', userId: 1 },
107
- });
108
- expect(deeplink('foo')(ctx)).toEqual(false);
109
- });
110
- it('should fail for non-pm messages', () => {
111
- const ctx = createMessageContext({
112
- message: '/start foo',
113
- peerId: { _: 'peerChannel', channelId: 1 },
114
- });
115
- expect(deeplink('foo')(ctx)).toEqual(false);
116
- });
117
- });
118
- //# sourceMappingURL=bots.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bots.test.js","sourceRoot":"","sources":["../../../src/filters/bots.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { Message, PeersIndex, tl } from '@mtcute/client'\nimport { createStub, StubTelegramClient } from '@mtcute/test'\n\nimport { MessageContext } from '../index.js'\nimport { command, deeplink } from './bots.js'\n\nconst peers = new PeersIndex()\npeers.users.set(1, createStub('user', { id: 1 }))\npeers.chats.set(1, createStub('channel', { id: 1 }))\nconst createMessageContext = (partial: Partial<tl.RawMessage>) =>\n new MessageContext(\n StubTelegramClient.full(), // eslint-disable-line\n new Message(createStub('message', partial), peers, false),\n )\n\ndescribe('filters.command', () => {\n const getParsedCommand = (text: string, ...params: Parameters<typeof command>) => {\n const ctx = createMessageContext({\n message: text,\n })\n ctx.client.getAuthState = () => ({\n isBot: true,\n userId: 0,\n selfUsername: 'testbot',\n })\n\n // eslint-disable-next-line\n if (command(...params)(ctx)) return (ctx as any).command\n\n return null\n }\n\n it('should only parse given commands', () => {\n expect(getParsedCommand('/start', 'start')).toEqual(['start'])\n expect(getParsedCommand('/start', 'stop')).toEqual(null)\n expect(getParsedCommand('/start', ['start', 'stop'])).toEqual(['start'])\n })\n\n it('should only parse commands to the current bot', () => {\n expect(getParsedCommand('/start@testbot', 'start')).toEqual(['start'])\n expect(getParsedCommand('/start@otherbot', 'start')).toEqual(null)\n })\n\n it('should parse command arguments', () => {\n expect(getParsedCommand('/start foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz'])\n expect(getParsedCommand('/start@testbot foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz'])\n })\n\n it('should parse quoted command arguments', () => {\n expect(getParsedCommand('/start foo \"bar baz\"', 'start')).toEqual(['start', 'foo', 'bar baz'])\n expect(getParsedCommand('/start foo \"bar \\\\\" baz\"', 'start')).toEqual(['start', 'foo', 'bar \" baz'])\n expect(getParsedCommand('/start foo \"bar \\\\\\\\\" baz\"', 'start')).toEqual(['start', 'foo', 'bar \\\\\" baz'])\n })\n\n it('should parse custom prefixes', () => {\n expect(getParsedCommand('!start foo \"bar baz\"', 'start', { prefixes: '!' })).toEqual([\n 'start',\n 'foo',\n 'bar baz',\n ])\n })\n\n it('should be case insensitive by default', () => {\n expect(getParsedCommand('/START foo', 'start')).toEqual(['start', 'foo'])\n expect(getParsedCommand('/START foo BAR', 'start')).toEqual(['start', 'foo', 'BAR'])\n })\n\n it('should be case sensitive if asked', () => {\n expect(getParsedCommand('/START foo', 'start', { caseSensitive: true })).toEqual(null)\n expect(getParsedCommand('/START foo', 'START', { caseSensitive: true })).toEqual(['START', 'foo'])\n })\n\n it('should accept multiple commands to match', () => {\n expect(getParsedCommand('/foo', ['foo', 'bar'])).toEqual(['foo'])\n expect(getParsedCommand('/bar', ['foo', 'bar'])).toEqual(['bar'])\n expect(getParsedCommand('/baz', ['foo', 'bar'])).toEqual(null)\n })\n})\n\ndescribe('filters.deeplink', () => {\n it('should only match given param', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink('bar')(ctx)).toEqual(false)\n expect(deeplink('foo')(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo'])\n })\n\n it('should add regex matches', () => {\n const ctx = createMessageContext({\n message: '/start foo_123',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink(/^foo_(\\d+)$/)(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo_123', '123'])\n })\n\n it('should accept multiple params', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink(['foo', 'bar'])(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo'])\n })\n\n it('should accept multiple regex params', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink([/foo/, /bar/])(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo'])\n })\n\n it('should fail for >1 arguments', () => {\n const ctx = createMessageContext({\n message: '/start foo bar',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink('foo')(ctx)).toEqual(false)\n })\n\n it('should fail for non-pm messages', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerChannel', channelId: 1 },\n })\n\n expect(deeplink('foo')(ctx)).toEqual(false)\n })\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,167 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { and, not, or } from './logic.js';
3
- describe('filters.not', () => {
4
- it('should negate a given sync filter', () => {
5
- const filter = vi.fn().mockReturnValue(true);
6
- const negated = not(filter);
7
- expect(negated(1)).toBe(false);
8
- expect(filter).toHaveBeenCalledTimes(1);
9
- expect(filter).toHaveBeenCalledWith(1, undefined);
10
- });
11
- it('should negate a given async filter', async () => {
12
- const filter = vi.fn().mockResolvedValue(true);
13
- const negated = not(filter);
14
- await expect(negated(1)).resolves.toBe(false);
15
- expect(filter).toHaveBeenCalledTimes(1);
16
- expect(filter).toHaveBeenCalledWith(1, undefined);
17
- });
18
- });
19
- describe('filters.and', () => {
20
- it.each([
21
- ['sync', 'sync'],
22
- ['sync', 'async'],
23
- ['async', 'sync'],
24
- ['async', 'async'],
25
- ])('should combine %s and %s filters', async (aType, bType) => {
26
- const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true));
27
- const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
28
- const combined = and(a, b);
29
- expect(await combined(1)).toBe(true);
30
- expect(a).toHaveBeenCalledTimes(1);
31
- expect(a).toHaveBeenCalledWith(1, undefined);
32
- expect(b).toHaveBeenCalledTimes(1);
33
- expect(b).toHaveBeenCalledWith(1, undefined);
34
- });
35
- it.each([
36
- ['sync', 'sync'],
37
- ['sync', 'async'],
38
- ['async', 'sync'],
39
- ['async', 'async'],
40
- ])('should not continue execution after false (%s and %s filters)', async (aType, bType) => {
41
- const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
42
- const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
43
- const combined = and(a, b);
44
- expect(await combined(1)).toBe(false);
45
- expect(a).toHaveBeenCalledTimes(1);
46
- expect(a).toHaveBeenCalledWith(1, undefined);
47
- expect(b).not.toHaveBeenCalled();
48
- });
49
- it.each([
50
- ['sync', 'sync', 'sync'],
51
- ['sync', 'sync', 'async'],
52
- ['sync', 'async', 'sync'],
53
- ['sync', 'async', 'async'],
54
- ['async', 'sync', 'sync'],
55
- ['async', 'sync', 'async'],
56
- ['async', 'async', 'sync'],
57
- ['async', 'async', 'async'],
58
- ])('should combine %s, %s and %s filters', async (aType, bType) => {
59
- const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true));
60
- const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
61
- const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
62
- const combined = and(a, b, c);
63
- expect(await combined(1)).toBe(true);
64
- expect(a).toHaveBeenCalledTimes(1);
65
- expect(a).toHaveBeenCalledWith(1, undefined);
66
- expect(b).toHaveBeenCalledTimes(1);
67
- expect(b).toHaveBeenCalledWith(1, undefined);
68
- expect(c).toHaveBeenCalledTimes(1);
69
- expect(c).toHaveBeenCalledWith(1, undefined);
70
- });
71
- it.each([
72
- ['sync', 'sync', 'sync'],
73
- ['sync', 'sync', 'async'],
74
- ['sync', 'async', 'sync'],
75
- ['sync', 'async', 'async'],
76
- ['async', 'sync', 'sync'],
77
- ['async', 'sync', 'async'],
78
- ['async', 'async', 'sync'],
79
- ['async', 'async', 'async'],
80
- ])('should not continue execution after false (%s, %s and %s filters)', async (aType, bType) => {
81
- const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true));
82
- const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
83
- const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
84
- const combined = and(a, b, c);
85
- expect(await combined(1)).toBe(false);
86
- expect(a).toHaveBeenCalledTimes(1);
87
- expect(a).toHaveBeenCalledWith(1, undefined);
88
- expect(b).toHaveBeenCalledTimes(1);
89
- expect(b).toHaveBeenCalledWith(1, undefined);
90
- expect(c).not.toHaveBeenCalled();
91
- });
92
- });
93
- describe('filters.or', () => {
94
- it.each([
95
- ['sync', 'sync'],
96
- ['sync', 'async'],
97
- ['async', 'sync'],
98
- ['async', 'async'],
99
- ])('should combine %s and %s filters', async (aType, bType) => {
100
- const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
101
- const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
102
- const combined = or(a, b);
103
- expect(await combined(1)).toBe(false);
104
- expect(a).toHaveBeenCalledTimes(1);
105
- expect(a).toHaveBeenCalledWith(1, undefined);
106
- expect(b).toHaveBeenCalledTimes(1);
107
- expect(b).toHaveBeenCalledWith(1, undefined);
108
- });
109
- it.each([
110
- ['sync', 'sync'],
111
- ['sync', 'async'],
112
- ['async', 'sync'],
113
- ['async', 'async'],
114
- ])('should not continue execution after true (%s and %s filters)', async (aType, bType) => {
115
- const a = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
116
- const b = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
117
- const combined = or(a, b);
118
- expect(await combined(1)).toBe(true);
119
- expect(a).toHaveBeenCalledTimes(1);
120
- expect(a).toHaveBeenCalledWith(1, undefined);
121
- expect(b).not.toHaveBeenCalled();
122
- });
123
- it.each([
124
- ['sync', 'sync', 'sync'],
125
- ['sync', 'sync', 'async'],
126
- ['sync', 'async', 'sync'],
127
- ['sync', 'async', 'async'],
128
- ['async', 'sync', 'sync'],
129
- ['async', 'sync', 'async'],
130
- ['async', 'async', 'sync'],
131
- ['async', 'async', 'async'],
132
- ])('should combine %s, %s and %s filters', async (aType, bType) => {
133
- const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
134
- const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
135
- const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
136
- const combined = or(a, b, c);
137
- expect(await combined(1)).toBe(false);
138
- expect(a).toHaveBeenCalledTimes(1);
139
- expect(a).toHaveBeenCalledWith(1, undefined);
140
- expect(b).toHaveBeenCalledTimes(1);
141
- expect(b).toHaveBeenCalledWith(1, undefined);
142
- expect(c).toHaveBeenCalledTimes(1);
143
- expect(c).toHaveBeenCalledWith(1, undefined);
144
- });
145
- it.each([
146
- ['sync', 'sync', 'sync'],
147
- ['sync', 'sync', 'async'],
148
- ['sync', 'async', 'sync'],
149
- ['sync', 'async', 'async'],
150
- ['async', 'sync', 'sync'],
151
- ['async', 'sync', 'async'],
152
- ['async', 'async', 'sync'],
153
- ['async', 'async', 'async'],
154
- ])('should not continue execution after true (%s, %s and %s filters)', async (aType, bType) => {
155
- const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
156
- const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
157
- const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
158
- const combined = or(a, b, c);
159
- expect(await combined(1)).toBe(true);
160
- expect(a).toHaveBeenCalledTimes(1);
161
- expect(a).toHaveBeenCalledWith(1, undefined);
162
- expect(b).toHaveBeenCalledTimes(1);
163
- expect(b).toHaveBeenCalledWith(1, undefined);
164
- expect(c).not.toHaveBeenCalled();
165
- });
166
- });
167
- //# sourceMappingURL=logic.test.js.map