UNPKG

1.91 kBJavaScriptView Raw
1/**
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * strict-local
8 * @format
9 */
10'use strict';
11
12var _objectSpread2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/objectSpread"));
13
14var _toConsumableArray2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/toConsumableArray"));
15
16var ID = 'id';
17var VIEWER_HANDLE = 'viewer';
18var VIEWER_TYPE = 'Viewer';
19/**
20 * A transform that adds a "viewer" handle to all fields whose type is `Viewer`.
21 */
22
23function relayViewerHandleTransform(context) {
24 var viewerType = context.serverSchema.getType(VIEWER_TYPE);
25
26 if (viewerType == null || !(viewerType instanceof require("graphql").GraphQLObjectType) || viewerType.getFields()[ID] != null) {
27 return context;
28 }
29
30 return require("./GraphQLIRTransformer").transform(context, {
31 LinkedField: visitLinkedOrMatchField,
32 MatchField: visitLinkedOrMatchField
33 });
34}
35
36function visitLinkedOrMatchField(field) {
37 var transformedNode = this.traverse(field);
38
39 if (require("./GraphQLSchemaUtils").getRawType(field.type).name !== VIEWER_TYPE) {
40 return transformedNode;
41 }
42
43 var handles = transformedNode.handles;
44 var viewerHandle = {
45 name: VIEWER_HANDLE,
46 key: require("relay-runtime").DEFAULT_HANDLE_KEY,
47 filters: null
48 };
49
50 if (handles && !handles.find(function (handle) {
51 return handle.name === VIEWER_HANDLE;
52 })) {
53 handles = (0, _toConsumableArray2["default"])(handles).concat([viewerHandle]);
54 } else if (!handles) {
55 handles = [viewerHandle];
56 }
57
58 return handles !== transformedNode.handles ? (0, _objectSpread2["default"])({}, transformedNode, {
59 handles: handles
60 }) : transformedNode;
61}
62
63module.exports = {
64 transform: relayViewerHandleTransform
65};
\No newline at end of file