aboutsummaryrefslogtreecommitdiff
path: root/subscription-example.ts
blob: 6dc12130b2d8a398a5da83662824bd21e055dbf8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*** UTILITY ------------------------------------------ ***/

import {
  executeSchema,
  gql,
  GraphQLHTTP,
  GraphQLWS,
  PubSub
} from "./entry.ts";

const pubsub = new PubSub();

const schema = executeSchema({
  resolvers: {
    Mutation: {
      ping: (_: unknown, { msg }: { msg: string }) => {
        pubsub.publish("PING", { pinged: msg });
        return msg;
      }
    },
    Query: {
      hello: () => "world"
    },
    Subscription: {
      pinged: {
        subscribe: () => pubsub.asyncIterator(["PING"])
      }
    }
  },
  typeDefs: gql`
    type Query { hello: String }
    type Mutation { ping(msg: String!): String }
    type Subscription { pinged: String }
  `
});

const subscriptions = GraphQLWS({ schema });

const handler = GraphQLHTTP({
  graphiql: true,
  playgroundOptions: { title: "Subscriptions Example" },
  schema,
  subscriptions
});

/*** PROGRAM ------------------------------------------ ***/

Deno.serve({ port: 4000 }, handler);

setInterval(() => {
  pubsub.publish("PING", { pinged: `tick @ ${new Date().toISOString()}` });
}, 2000);



/*** deno run -A subscription-example.ts ***/