@mtcute/dispatcher 0.7.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 (59) hide show
  1. package/README.md +3 -3
  2. package/cjs/context/base.d.ts +2 -1
  3. package/cjs/context/base.js.map +1 -1
  4. package/cjs/context/callback-query.d.ts +2 -1
  5. package/cjs/context/callback-query.js.map +1 -1
  6. package/cjs/context/chat-join-request.d.ts +2 -1
  7. package/cjs/context/chat-join-request.js.map +1 -1
  8. package/cjs/context/chosen-inline-result.d.ts +2 -1
  9. package/cjs/context/chosen-inline-result.js.map +1 -1
  10. package/cjs/context/inline-query.d.ts +2 -1
  11. package/cjs/context/inline-query.js.map +1 -1
  12. package/cjs/context/message.d.ts +3 -5
  13. package/cjs/context/message.js.map +1 -1
  14. package/cjs/context/parse.js.map +1 -1
  15. package/cjs/context/pre-checkout-query.d.ts +2 -1
  16. package/cjs/context/pre-checkout-query.js.map +1 -1
  17. package/cjs/dispatcher.d.ts +2 -1
  18. package/cjs/dispatcher.js.map +1 -1
  19. package/cjs/handler.d.ts +2 -1
  20. package/cjs/handler.js.map +1 -1
  21. package/esm/context/base.d.ts +2 -1
  22. package/esm/context/base.js.map +1 -1
  23. package/esm/context/callback-query.d.ts +2 -1
  24. package/esm/context/callback-query.js.map +1 -1
  25. package/esm/context/chat-join-request.d.ts +2 -1
  26. package/esm/context/chat-join-request.js.map +1 -1
  27. package/esm/context/chosen-inline-result.d.ts +2 -1
  28. package/esm/context/chosen-inline-result.js.map +1 -1
  29. package/esm/context/inline-query.d.ts +2 -1
  30. package/esm/context/inline-query.js.map +1 -1
  31. package/esm/context/message.d.ts +3 -5
  32. package/esm/context/message.js.map +1 -1
  33. package/esm/context/parse.js.map +1 -1
  34. package/esm/context/pre-checkout-query.d.ts +2 -1
  35. package/esm/context/pre-checkout-query.js.map +1 -1
  36. package/esm/dispatcher.d.ts +2 -1
  37. package/esm/dispatcher.js.map +1 -1
  38. package/esm/filters/message.d.ts +1 -1
  39. package/esm/handler.d.ts +2 -1
  40. package/esm/handler.js.map +1 -1
  41. package/package.json +4 -3
  42. package/cjs/callback-data-builder.test.d.ts +0 -1
  43. package/cjs/callback-data-builder.test.js +0 -74
  44. package/cjs/callback-data-builder.test.js.map +0 -1
  45. package/cjs/filters/bots.test.d.ts +0 -1
  46. package/cjs/filters/bots.test.js +0 -121
  47. package/cjs/filters/bots.test.js.map +0 -1
  48. package/cjs/filters/logic.test.d.ts +0 -1
  49. package/cjs/filters/logic.test.js +0 -169
  50. package/cjs/filters/logic.test.js.map +0 -1
  51. package/esm/callback-data-builder.test.d.ts +0 -1
  52. package/esm/callback-data-builder.test.js +0 -72
  53. package/esm/callback-data-builder.test.js.map +0 -1
  54. package/esm/filters/bots.test.d.ts +0 -1
  55. package/esm/filters/bots.test.js +0 -119
  56. package/esm/filters/bots.test.js.map +0 -1
  57. package/esm/filters/logic.test.d.ts +0 -1
  58. package/esm/filters/logic.test.js +0 -167
  59. package/esm/filters/logic.test.js.map +0 -1
@@ -1,119 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { Message, PeersIndex } from '@mtcute/core';
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
- void ctx.client.storage.self.store({
17
- isBot: true,
18
- isPremium: false,
19
- userId: 0,
20
- usernames: ['testbot'],
21
- });
22
- // eslint-disable-next-line
23
- if (command(...params)(ctx))
24
- return ctx.command;
25
- return null;
26
- };
27
- it('should only parse given commands', () => {
28
- expect(getParsedCommand('/start', 'start')).toEqual(['start']);
29
- expect(getParsedCommand('/start', 'stop')).toEqual(null);
30
- expect(getParsedCommand('/start', ['start', 'stop'])).toEqual(['start']);
31
- });
32
- it('should only parse commands to the current bot', () => {
33
- expect(getParsedCommand('/start@testbot', 'start')).toEqual(['start']);
34
- expect(getParsedCommand('/start@otherbot', 'start')).toEqual(null);
35
- });
36
- it('should parse command arguments', () => {
37
- expect(getParsedCommand('/start foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz']);
38
- expect(getParsedCommand('/start@testbot foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz']);
39
- });
40
- it('should parse quoted command arguments', () => {
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
- expect(getParsedCommand('/start foo "bar \\\\" baz"', 'start')).toEqual(['start', 'foo', 'bar \\" baz']);
44
- });
45
- it('should parse custom prefixes', () => {
46
- expect(getParsedCommand('!start foo "bar baz"', 'start', { prefixes: '!' })).toEqual([
47
- 'start',
48
- 'foo',
49
- 'bar baz',
50
- ]);
51
- });
52
- it('should be case insensitive by default', () => {
53
- expect(getParsedCommand('/START foo', 'start')).toEqual(['start', 'foo']);
54
- expect(getParsedCommand('/START foo BAR', 'start')).toEqual(['start', 'foo', 'BAR']);
55
- });
56
- it('should be case sensitive if asked', () => {
57
- expect(getParsedCommand('/START foo', 'start', { caseSensitive: true })).toEqual(null);
58
- expect(getParsedCommand('/START foo', 'START', { caseSensitive: true })).toEqual(['START', 'foo']);
59
- });
60
- it('should accept multiple commands to match', () => {
61
- expect(getParsedCommand('/foo', ['foo', 'bar'])).toEqual(['foo']);
62
- expect(getParsedCommand('/bar', ['foo', 'bar'])).toEqual(['bar']);
63
- expect(getParsedCommand('/baz', ['foo', 'bar'])).toEqual(null);
64
- });
65
- });
66
- describe('filters.deeplink', () => {
67
- it('should only match given param', () => {
68
- const ctx = createMessageContext({
69
- message: '/start foo',
70
- peerId: { _: 'peerUser', userId: 1 },
71
- });
72
- expect(deeplink('bar')(ctx)).toEqual(false);
73
- expect(deeplink('foo')(ctx)).toEqual(true);
74
- // eslint-disable-next-line
75
- expect(ctx.command).toEqual(['start', 'foo']);
76
- });
77
- it('should add regex matches', () => {
78
- const ctx = createMessageContext({
79
- message: '/start foo_123',
80
- peerId: { _: 'peerUser', userId: 1 },
81
- });
82
- expect(deeplink(/^foo_(\d+)$/)(ctx)).toEqual(true);
83
- // eslint-disable-next-line
84
- expect(ctx.command).toEqual(['start', 'foo_123', '123']);
85
- });
86
- it('should accept multiple params', () => {
87
- const ctx = createMessageContext({
88
- message: '/start foo',
89
- peerId: { _: 'peerUser', userId: 1 },
90
- });
91
- expect(deeplink(['foo', 'bar'])(ctx)).toEqual(true);
92
- // eslint-disable-next-line
93
- expect(ctx.command).toEqual(['start', 'foo']);
94
- });
95
- it('should accept multiple regex params', () => {
96
- const ctx = createMessageContext({
97
- message: '/start foo',
98
- peerId: { _: 'peerUser', userId: 1 },
99
- });
100
- expect(deeplink([/foo/, /bar/])(ctx)).toEqual(true);
101
- // eslint-disable-next-line
102
- expect(ctx.command).toEqual(['start', 'foo']);
103
- });
104
- it('should fail for >1 arguments', () => {
105
- const ctx = createMessageContext({
106
- message: '/start foo bar',
107
- peerId: { _: 'peerUser', userId: 1 },
108
- });
109
- expect(deeplink('foo')(ctx)).toEqual(false);
110
- });
111
- it('should fail for non-pm messages', () => {
112
- const ctx = createMessageContext({
113
- message: '/start foo',
114
- peerId: { _: 'peerChannel', channelId: 1 },
115
- });
116
- expect(deeplink('foo')(ctx)).toEqual(false);
117
- });
118
- });
119
- //# 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/core'\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 void ctx.client.storage.self.store({\n isBot: true,\n isPremium: false,\n userId: 0,\n usernames: ['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
@@ -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"]}