UNPKG

5.58 kBJavaScriptView Raw
1var __extends = (this && this.__extends) || (function () {
2 var extendStatics = Object.setPrototypeOf ||
3 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
4 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
5 return function (d, b) {
6 extendStatics(d, b);
7 function __() { this.constructor = d; }
8 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9 };
10})();
11import { ApolloLink, Observable, } from 'apollo-link';
12import { hasDirectives, getMainDefinition } from 'apollo-utilities';
13import * as Async from 'graphql-anywhere/lib/async';
14var graphql = Async.graphql;
15import { removeClientSetsFromDocument, normalizeTypeDefs } from './utils';
16var capitalizeFirstLetter = function (str) { return str.charAt(0).toUpperCase() + str.slice(1); };
17export var withClientState = function (clientStateConfig) {
18 if (clientStateConfig === void 0) { clientStateConfig = { resolvers: {}, defaults: {} }; }
19 var defaults = clientStateConfig.defaults, cache = clientStateConfig.cache, typeDefs = clientStateConfig.typeDefs, fragmentMatcher = clientStateConfig.fragmentMatcher;
20 if (cache && defaults) {
21 cache.writeData({ data: defaults });
22 }
23 return new (function (_super) {
24 __extends(StateLink, _super);
25 function StateLink() {
26 return _super !== null && _super.apply(this, arguments) || this;
27 }
28 StateLink.prototype.writeDefaults = function () {
29 if (cache && defaults) {
30 cache.writeData({ data: defaults });
31 }
32 };
33 StateLink.prototype.request = function (operation, forward) {
34 if (forward === void 0) { forward = function () { return Observable.of({ data: {} }); }; }
35 if (typeDefs) {
36 var directives_1 = 'directive @client on FIELD';
37 var definition_1 = normalizeTypeDefs(typeDefs);
38 operation.setContext(function (_a) {
39 var _b = _a.schemas, schemas = _b === void 0 ? [] : _b;
40 return ({
41 schemas: schemas.concat([{ definition: definition_1, directives: directives_1 }]),
42 });
43 });
44 }
45 var isClient = hasDirectives(['client'], operation.query);
46 if (!isClient)
47 return forward(operation);
48 var resolvers = typeof clientStateConfig.resolvers === 'function'
49 ? clientStateConfig.resolvers()
50 : clientStateConfig.resolvers;
51 var server = removeClientSetsFromDocument(operation.query);
52 var query = operation.query;
53 var type = capitalizeFirstLetter((getMainDefinition(query) || {}).operation) || 'Query';
54 var resolver = function (fieldName, rootValue, args, context, info) {
55 if (rootValue === void 0) { rootValue = {}; }
56 var resultKey = info.resultKey;
57 var aliasedNode = rootValue[resultKey];
58 var preAliasingNode = rootValue[fieldName];
59 var aliasNeeded = resultKey !== fieldName;
60 if (aliasedNode !== undefined || preAliasingNode !== undefined) {
61 return aliasedNode || preAliasingNode;
62 }
63 var resolverMap = resolvers[rootValue.__typename || type];
64 if (resolverMap) {
65 var resolve = resolverMap[fieldName];
66 if (resolve)
67 return resolve(rootValue, args, context, info);
68 }
69 return ((aliasNeeded ? aliasedNode : preAliasingNode) ||
70 (defaults || {})[fieldName]);
71 };
72 if (server)
73 operation.query = server;
74 var obs = server && forward
75 ? forward(operation)
76 : Observable.of({
77 data: {},
78 });
79 return new Observable(function (observer) {
80 var complete = false;
81 var handlingNext = false;
82 obs.subscribe({
83 next: function (_a) {
84 var data = _a.data, errors = _a.errors;
85 var observerErrorHandler = observer.error.bind(observer);
86 var context = operation.getContext();
87 handlingNext = true;
88 graphql(resolver, query, data, context, operation.variables, {
89 fragmentMatcher: fragmentMatcher,
90 })
91 .then(function (nextData) {
92 observer.next({
93 data: nextData,
94 errors: errors,
95 });
96 if (complete) {
97 observer.complete();
98 }
99 handlingNext = false;
100 })
101 .catch(observerErrorHandler);
102 },
103 error: observer.error.bind(observer),
104 complete: function () {
105 if (!handlingNext) {
106 observer.complete();
107 }
108 complete = true;
109 },
110 });
111 });
112 };
113 return StateLink;
114 }(ApolloLink))();
115};
116//# sourceMappingURL=index.js.map
\No newline at end of file