Skip to content

Commit 76ee61d

Browse files
committed
run tests on all EventTarget implementations
1 parent ae66ecc commit 76ee61d

File tree

6 files changed

+178
-131
lines changed

6 files changed

+178
-131
lines changed

packages/event-target/redis-event-target/package.json

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@
77
"url": "https://github.com/dotansimha/graphql-yoga.git",
88
"directory": "packages/event-target/redis-event-target"
99
},
10-
"main": "dist/index.js",
11-
"module": "dist/index.mjs",
1210
"scripts": {
13-
"prepack": "bob prepack",
1411
"check": "tsc --pretty --noEmit"
1512
},
1613
"keywords": [
@@ -21,27 +18,6 @@
2118
],
2219
"author": "Laurin Quast <laurinquast@googlemail.com>",
2320
"license": "MIT",
24-
"buildOptions": {
25-
"input": "./src/index.ts"
26-
},
27-
"exports": {
28-
".": {
29-
"require": "./dist/index.js",
30-
"import": "./dist/index.mjs"
31-
},
32-
"./*": {
33-
"require": "./dist/*.js",
34-
"import": "./dist/*.mjs"
35-
}
36-
},
37-
"typings": "dist/index.d.ts",
38-
"typescript": {
39-
"definition": "dist/index.d.ts"
40-
},
41-
"publishConfig": {
42-
"directory": "dist",
43-
"access": "public"
44-
},
4521
"dependencies": {
4622
"@graphql-yoga/typed-event-target": "^0.0.0"
4723
},
@@ -53,5 +29,32 @@
5329
"bob-the-bundler": "^1.5.1",
5430
"ioredis": "5.0.6",
5531
"ioredis-mock": "8.2.2"
32+
},
33+
"main": "dist/cjs/index.js",
34+
"module": "dist/esm/index.js",
35+
"exports": {
36+
".": {
37+
"require": {
38+
"types": "./dist/typings/index.d.ts",
39+
"default": "./dist/cjs/index.js"
40+
},
41+
"import": {
42+
"types": "./dist/typings/index.d.ts",
43+
"default": "./dist/esm/index.js"
44+
},
45+
"default": {
46+
"types": "./dist/typings/index.d.ts",
47+
"default": "./dist/esm/index.js"
48+
}
49+
},
50+
"./package.json": "./package.json"
51+
},
52+
"typings": "dist/typings/index.d.ts",
53+
"typescript": {
54+
"definition": "dist/typings/index.d.ts"
55+
},
56+
"publishConfig": {
57+
"directory": "dist",
58+
"access": "public"
5659
}
5760
}

packages/event-target/typed-event-target/package.json

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
"url": "https://github.com/dotansimha/graphql-yoga.git",
88
"directory": "packages/event-target/typed-event-target"
99
},
10-
"main": "dist/index.js",
11-
"module": "dist/index.mjs",
1210
"scripts": {
1311
"prepack": "bob prepack",
1412
"check": "tsc --pretty --noEmit"
@@ -24,29 +22,38 @@
2422
"buildOptions": {
2523
"input": "./src/index.ts"
2624
},
25+
"dependencies": {
26+
"@repeaterjs/repeater": "^3.0.4",
27+
"tslib": "^2.3.1"
28+
},
29+
"devDependencies": {
30+
"bob-the-bundler": "^1.5.1"
31+
},
32+
"main": "dist/cjs/index.js",
33+
"module": "dist/esm/index.js",
2734
"exports": {
2835
".": {
29-
"require": "./dist/index.js",
30-
"import": "./dist/index.mjs"
36+
"require": {
37+
"types": "./dist/typings/index.d.ts",
38+
"default": "./dist/cjs/index.js"
39+
},
40+
"import": {
41+
"types": "./dist/typings/index.d.ts",
42+
"default": "./dist/esm/index.js"
43+
},
44+
"default": {
45+
"types": "./dist/typings/index.d.ts",
46+
"default": "./dist/esm/index.js"
47+
}
3148
},
32-
"./*": {
33-
"require": "./dist/*.js",
34-
"import": "./dist/*.mjs"
35-
}
49+
"./package.json": "./package.json"
3650
},
37-
"typings": "dist/index.d.ts",
51+
"typings": "dist/typings/index.d.ts",
3852
"typescript": {
39-
"definition": "dist/index.d.ts"
53+
"definition": "dist/typings/index.d.ts"
4054
},
4155
"publishConfig": {
4256
"directory": "dist",
4357
"access": "public"
44-
},
45-
"dependencies": {
46-
"@repeaterjs/repeater": "^3.0.4",
47-
"tslib": "^2.3.1"
48-
},
49-
"devDependencies": {
50-
"bob-the-bundler": "^1.5.1"
5158
}
5259
}

packages/subscription/package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
"url": "https://github.com/dotansimha/graphql-yoga.git",
88
"directory": "packages/subscription"
99
},
10-
"main": "dist/cjs/index.js",
11-
"module": "dist/esm/index.js",
1210
"scripts": {
1311
"check": "tsc --pretty --noEmit"
1412
},
@@ -20,9 +18,8 @@
2018
],
2119
"author": "Laurin Quast <laurinquast@googlemail.com>",
2220
"license": "MIT",
23-
"buildOptions": {
24-
"input": "./src/index.ts"
25-
},
21+
"main": "dist/cjs/index.js",
22+
"module": "dist/esm/index.js",
2623
"exports": {
2724
".": {
2825
"require": {
Lines changed: 108 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Redis from 'ioredis-mock'
2+
import { createRedisEventTarget } from '@graphql-yoga/redis-event-target'
13
import { createPubSub } from './createPubSub.js'
24

35
async function collectAsyncIterableValues<TType>(
@@ -18,97 +20,118 @@ describe('createPubSub', () => {
1820
it('create', () => {
1921
createPubSub()
2022
})
21-
it('subscribe to topic', async () => {
22-
const pubSub = createPubSub<{
23-
a: [number]
24-
}>()
25-
26-
const sub = pubSub.subscribe('a')
27-
const allValues = collectAsyncIterableValues(sub)
28-
pubSub.publish('a', 1)
29-
pubSub.publish('a', 2)
30-
pubSub.publish('a', 3)
31-
32-
setImmediate(() => {
33-
sub.return()
34-
})
3523

36-
const result = await allValues
37-
expect(result).toEqual([1, 2, 3])
38-
})
39-
it('subscribe to multiple topics', async () => {
40-
const pubSub = createPubSub<{
41-
a: [number]
42-
b: [string]
43-
}>()
44-
45-
const sub1 = pubSub.subscribe('a')
46-
const sub2 = pubSub.subscribe('b')
47-
const allValues1 = collectAsyncIterableValues(sub1)
48-
const allValues2 = collectAsyncIterableValues(sub2)
49-
50-
pubSub.publish('a', 1)
51-
pubSub.publish('b', '1')
52-
pubSub.publish('a', 2)
53-
pubSub.publish('b', '2')
54-
pubSub.publish('a', 3)
55-
pubSub.publish('b', '3')
56-
57-
setImmediate(() => {
58-
sub1.return()
59-
sub2.return()
24+
describe.each([
25+
['InMemory', () => new globalThis.EventTarget()],
26+
[
27+
'Redis',
28+
() =>
29+
createRedisEventTarget({
30+
publishClient: new Redis({}),
31+
subscribeClient: new Redis({}),
32+
}),
33+
],
34+
])(`API %s`, (_, createEventTarget) => {
35+
it('subscribe to topic', async () => {
36+
const pubSub = createPubSub<{
37+
a: [number]
38+
}>({
39+
eventTarget: createEventTarget(),
40+
})
41+
42+
const sub = pubSub.subscribe('a')
43+
const allValues = collectAsyncIterableValues(sub)
44+
pubSub.publish('a', 1)
45+
pubSub.publish('a', 2)
46+
pubSub.publish('a', 3)
47+
48+
setImmediate(() => {
49+
sub.return()
50+
})
51+
52+
const result = await allValues
53+
expect(result).toEqual([1, 2, 3])
6054
})
55+
it('subscribe to multiple topics', async () => {
56+
const pubSub = createPubSub<{
57+
a: [number]
58+
b: [string]
59+
}>({
60+
eventTarget: createEventTarget(),
61+
})
6162

62-
const result1 = await allValues1
63-
const result2 = await allValues2
64-
expect(result1).toEqual([1, 2, 3])
65-
expect(result2).toEqual(['1', '2', '3'])
66-
})
67-
it('subscribe to fine-grained topic', async () => {
68-
const pubSub = createPubSub<{
69-
a: [id: string, payload: number]
70-
}>()
71-
const id1 = '1'
72-
const sub1 = pubSub.subscribe('a', id1)
73-
const allValues1 = collectAsyncIterableValues(sub1)
74-
pubSub.publish('a', id1, 1)
75-
pubSub.publish('a', id1, 2)
76-
pubSub.publish('a', id1, 3)
77-
setImmediate(() => {
78-
sub1.return()
63+
const sub1 = pubSub.subscribe('a')
64+
const sub2 = pubSub.subscribe('b')
65+
const allValues1 = collectAsyncIterableValues(sub1)
66+
const allValues2 = collectAsyncIterableValues(sub2)
67+
68+
pubSub.publish('a', 1)
69+
pubSub.publish('b', '1')
70+
pubSub.publish('a', 2)
71+
pubSub.publish('b', '2')
72+
pubSub.publish('a', 3)
73+
pubSub.publish('b', '3')
74+
75+
setImmediate(() => {
76+
sub1.return()
77+
sub2.return()
78+
})
79+
80+
const result1 = await allValues1
81+
const result2 = await allValues2
82+
expect(result1).toEqual([1, 2, 3])
83+
expect(result2).toEqual(['1', '2', '3'])
7984
})
85+
it('subscribe to fine-grained topic', async () => {
86+
const pubSub = createPubSub<{
87+
a: [id: string, payload: number]
88+
}>({
89+
eventTarget: createEventTarget(),
90+
})
91+
const id1 = '1'
92+
const sub1 = pubSub.subscribe('a', id1)
93+
const allValues1 = collectAsyncIterableValues(sub1)
94+
pubSub.publish('a', id1, 1)
95+
pubSub.publish('a', id1, 2)
96+
pubSub.publish('a', id1, 3)
97+
setImmediate(() => {
98+
sub1.return()
99+
})
80100

81-
const result1 = await allValues1
82-
expect(result1).toEqual([1, 2, 3])
83-
})
84-
it('subscribe to multiple fine-grained topics', async () => {
85-
const pubSub = createPubSub<{
86-
a: [id: string, payload: number]
87-
b: [id: string, payload: string]
88-
}>()
89-
const id1 = '1'
90-
const id2 = '1'
91-
92-
const sub1 = pubSub.subscribe('a', id1)
93-
const sub2 = pubSub.subscribe('b', id2)
94-
95-
const allValues1 = collectAsyncIterableValues(sub1)
96-
const allValues2 = collectAsyncIterableValues(sub2)
97-
98-
pubSub.publish('a', id1, 1)
99-
pubSub.publish('b', id1, '1')
100-
pubSub.publish('a', id1, 2)
101-
pubSub.publish('b', id1, '2')
102-
pubSub.publish('a', id1, 3)
103-
pubSub.publish('b', id1, '3')
104-
setImmediate(() => {
105-
sub1.return()
106-
sub2.return()
101+
const result1 = await allValues1
102+
expect(result1).toEqual([1, 2, 3])
107103
})
104+
it('subscribe to multiple fine-grained topics', async () => {
105+
const pubSub = createPubSub<{
106+
a: [id: string, payload: number]
107+
b: [id: string, payload: string]
108+
}>({
109+
eventTarget: createEventTarget(),
110+
})
111+
const id1 = '1'
112+
const id2 = '1'
113+
114+
const sub1 = pubSub.subscribe('a', id1)
115+
const sub2 = pubSub.subscribe('b', id2)
108116

109-
const result1 = await allValues1
110-
const result2 = await allValues2
111-
expect(result1).toEqual([1, 2, 3])
112-
expect(result2).toEqual(['1', '2', '3'])
117+
const allValues1 = collectAsyncIterableValues(sub1)
118+
const allValues2 = collectAsyncIterableValues(sub2)
119+
120+
pubSub.publish('a', id1, 1)
121+
pubSub.publish('b', id1, '1')
122+
pubSub.publish('a', id1, 2)
123+
pubSub.publish('b', id1, '2')
124+
pubSub.publish('a', id1, 3)
125+
pubSub.publish('b', id1, '3')
126+
setImmediate(() => {
127+
sub1.return()
128+
sub2.return()
129+
})
130+
131+
const result1 = await allValues1
132+
const result2 = await allValues2
133+
expect(result1).toEqual([1, 2, 3])
134+
expect(result2).toEqual(['1', '2', '3'])
135+
})
113136
})
114137
})
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
diff --git a/node_modules/@types/ioredis-mock/index.d.ts b/node_modules/@types/ioredis-mock/index.d.ts
2+
index 2da5af1..5b9815b 100755
3+
--- a/node_modules/@types/ioredis-mock/index.d.ts
4+
+++ b/node_modules/@types/ioredis-mock/index.d.ts
5+
@@ -4,8 +4,7 @@
6+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
7+
8+
import RealIORedis = require('ioredis');
9+
-
10+
-export default RealIORedis;
11+
+export default RealIORedis.default;
12+
export type AddressFromResponse = RealIORedis.AddressFromResponse;
13+
export type BooleanResponse = RealIORedis.BooleanResponse;
14+
export type Callback<T> = RealIORedis.Callback<T>;

tsconfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
"@graphql-yoga/plugin-*": ["packages/plugins/*/src/index.ts"],
3434
"@graphql-yoga/typed-event-target": [
3535
"packages/event-target/typed-event-target/src/index.ts"
36+
],
37+
"@graphql-yoga/redis-event-target": [
38+
"packages/event-target/redis-event-target/src/index.ts"
3639
]
3740
},
3841
"jsx": "preserve"

0 commit comments

Comments
 (0)