UNPKG

3.27 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var graphql_1 = require("graphql");
4var apollo_link_1 = require("apollo-link");
5var apollo_link_ws_1 = require("apollo-link-ws");
6var apollo_link_error_1 = require("apollo-link-error");
7var ws = require("ws");
8var http_link_dataloader_1 = require("http-link-dataloader");
9function makePrismaLink(_a) {
10 var endpoint = _a.endpoint, token = _a.token, debug = _a.debug;
11 var httpLink = new http_link_dataloader_1.HTTPLinkDataloader({
12 uri: endpoint,
13 headers: token ? { Authorization: "Bearer " + token } : {},
14 });
15 // also works for https/wss
16 var wsEndpoint = endpoint.replace(/^http/, 'ws');
17 var wsLink = new apollo_link_ws_1.WebSocketLink({
18 uri: wsEndpoint,
19 options: {
20 reconnect: true,
21 connectionParams: token
22 ? {
23 Authorization: "Bearer " + token,
24 }
25 : {},
26 lazy: true,
27 inactivityTimeout: 30000,
28 },
29 webSocketImpl: ws,
30 });
31 // TODO fix link typings
32 var backendLink = apollo_link_1.split(function (op) { return isSubscription(op); }, wsLink, httpLink);
33 var reportErrors = apollo_link_error_1.onError(function (_a) {
34 var graphQLErrors = _a.graphQLErrors, networkError = _a.networkError;
35 if (graphQLErrors)
36 graphQLErrors.map(function (_a) {
37 var message = _a.message, locations = _a.locations, path = _a.path;
38 return console.log("[GraphQL error]: Message: " + message + ", Location: " + locations + ", Path: " + path);
39 });
40 if (networkError)
41 console.log("[Network error]: " + networkError);
42 });
43 if (debug) {
44 var debugLink = new apollo_link_1.ApolloLink(function (operation, forward) {
45 console.log("Request to " + endpoint + ":");
46 console.log("query:");
47 console.log(graphql_1.print(operation.query).trim());
48 console.log("operationName: " + operation.operationName);
49 console.log("variables:");
50 console.log(JSON.stringify(operation.variables, null, 2));
51 return forward(operation).map(function (data) {
52 console.log("Response from " + endpoint + ":");
53 console.log(JSON.stringify(data.data, null, 2));
54 return data;
55 });
56 });
57 return apollo_link_1.ApolloLink.from([debugLink, reportErrors, backendLink]);
58 }
59 else {
60 return apollo_link_1.ApolloLink.from([reportErrors, backendLink]);
61 }
62}
63exports.makePrismaLink = makePrismaLink;
64function isSubscription(operation) {
65 var selectedOperation = getSelectedOperation(operation);
66 if (selectedOperation) {
67 return selectedOperation.operation === 'subscription';
68 }
69 return false;
70}
71function getSelectedOperation(operation) {
72 if (operation.query.definitions.length === 1) {
73 return operation.query.definitions[0];
74 }
75 return operation.query.definitions.find(function (d) {
76 return d.kind === 'OperationDefinition' &&
77 !!d.name &&
78 d.name.value === operation.operationName;
79 });
80}
81//# sourceMappingURL=link.js.map
\No newline at end of file