relay-compiler 1.3.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. package/LICENSE +16 -26
  2. package/bin/relay-compiler +7348 -5939
  3. package/index.js +3 -6
  4. package/lib/{FileParser.js → ASTCache.js} +17 -14
  5. package/lib/ASTConvert.js +84 -70
  6. package/lib/CodegenDirectory.js +122 -28
  7. package/lib/{RelayCodegenRunner.js → CodegenRunner.js} +110 -186
  8. package/lib/CodegenTypes.js +12 -0
  9. package/lib/{RelayCodegenWatcher.js → CodegenWatcher.js} +53 -43
  10. package/lib/DefaultHandleKey.js +2 -4
  11. package/lib/DotGraphQLParser.js +27 -0
  12. package/lib/FilterDirectivesTransform.js +11 -11
  13. package/lib/FindGraphQLTags.js +33 -52
  14. package/lib/FlattenTransform.js +197 -0
  15. package/lib/GraphQLCompilerContext.js +158 -0
  16. package/lib/GraphQLCompilerProfiler.js +271 -0
  17. package/lib/GraphQLCompilerPublic.js +27 -22
  18. package/lib/GraphQLCompilerUserError.js +26 -0
  19. package/lib/GraphQLConsoleReporter.js +58 -0
  20. package/lib/GraphQLIR.js +12 -0
  21. package/lib/{RelayPrinter.js → GraphQLIRPrinter.js} +42 -38
  22. package/lib/{RelayIRTransformer.js → GraphQLIRTransformer.js} +47 -38
  23. package/lib/GraphQLIRTransforms.js +6 -15
  24. package/lib/{RelayIRVisitor.js → GraphQLIRVisitor.js} +7 -6
  25. package/lib/GraphQLMultiReporter.js +50 -0
  26. package/lib/GraphQLParser.js +743 -0
  27. package/lib/GraphQLReporter.js +12 -0
  28. package/lib/GraphQLSchemaUtils.js +10 -36
  29. package/lib/GraphQLValidator.js +13 -15
  30. package/lib/{RelayWatchmanClient.js → GraphQLWatchmanClient.js} +15 -17
  31. package/lib/InlineFragmentsTransform.js +48 -0
  32. package/lib/PatchedBabelGenerator.js +58 -0
  33. package/lib/RelayApplyFragmentArgumentTransform.js +37 -18
  34. package/lib/RelayCodeGenerator.js +130 -60
  35. package/lib/RelayCompilerBin.js +80 -35
  36. package/lib/RelayCompilerCache.js +18 -11
  37. package/lib/RelayCompilerPublic.js +24 -10
  38. package/lib/RelayCompilerScope.js +2 -4
  39. package/lib/RelayConcreteNode.js +31 -14
  40. package/lib/RelayConnectionConstants.js +2 -4
  41. package/lib/RelayConnectionTransform.js +34 -38
  42. package/lib/RelayDefaultHandleKey.js +2 -4
  43. package/lib/RelayDeferrableFragmentTransform.js +464 -0
  44. package/lib/RelayError.js +2 -6
  45. package/lib/RelayFieldHandleTransform.js +15 -11
  46. package/lib/RelayFileWriter.js +119 -98
  47. package/lib/RelayFlowBabelFactories.js +113 -0
  48. package/lib/RelayFlowGenerator.js +180 -200
  49. package/lib/RelayFlowTypeTransformers.js +109 -0
  50. package/lib/RelayGenerateIDFieldTransform.js +131 -0
  51. package/lib/RelayGenerateTypeNameTransform.js +75 -0
  52. package/lib/RelayGraphQLEnumsGenerator.js +65 -0
  53. package/lib/RelayIRTransforms.js +19 -23
  54. package/lib/RelayInternalTypes.js +2 -5
  55. package/lib/RelayInternals.js +2 -5
  56. package/lib/RelayJSModuleParser.js +64 -0
  57. package/lib/RelayMaskTransform.js +129 -0
  58. package/lib/RelayMetricsRecorder.js +9 -9
  59. package/lib/RelayMockRenderer.js +3 -8
  60. package/lib/RelayNetworkDebug.js +4 -7
  61. package/lib/RelayParser.js +28 -645
  62. package/lib/RelayProfiler.js +7 -7
  63. package/lib/RelayQueryCaching.js +2 -5
  64. package/lib/RelayRelayDirectiveTransform.js +47 -33
  65. package/lib/RelayRuntimeTypes.js +22 -0
  66. package/lib/RelayShallowMock.js +4 -7
  67. package/lib/RelaySkipHandleFieldTransform.js +13 -11
  68. package/lib/RelayTaskQueue.js +2 -5
  69. package/lib/RelayTransformUtils.js +20 -0
  70. package/lib/RelayTypes.js +2 -5
  71. package/lib/RelayValidator.js +9 -8
  72. package/lib/RelayViewerHandleTransform.js +22 -18
  73. package/lib/SkipClientFieldTransform.js +36 -53
  74. package/lib/SkipRedundantNodesTransform.js +22 -29
  75. package/lib/SkipUnreachableNodeTransform.js +57 -36
  76. package/lib/SourceControl.js +61 -0
  77. package/lib/StripUnusedVariablesTransform.js +86 -41
  78. package/lib/areEqualOSS.js +2 -4
  79. package/lib/compileRelayArtifacts.js +72 -0
  80. package/lib/dedent.js +2 -5
  81. package/lib/dedupeJSONStringify.js +132 -0
  82. package/lib/deepFreeze.js +3 -5
  83. package/lib/deepMergeAssignments.js +68 -0
  84. package/lib/filterContextForNode.js +5 -7
  85. package/lib/formatGeneratedModule.js +5 -9
  86. package/lib/{getIdentifierForRelayArgumentValue.js → getIdentifierForArgumentValue.js} +8 -10
  87. package/lib/getIdentifierForSelection.js +37 -0
  88. package/lib/getLiteralArgumentValues.js +26 -0
  89. package/lib/getModuleName.js +2 -4
  90. package/lib/getRelayHandleKey.js +2 -4
  91. package/lib/isCompatibleRelayFragmentType.js +2 -5
  92. package/lib/isEquivalentType.js +55 -0
  93. package/lib/isPromise.js +2 -5
  94. package/lib/isScalarAndEqual.js +3 -5
  95. package/lib/murmurHash.js +2 -4
  96. package/lib/nullthrowsOSS.js +7 -5
  97. package/lib/recycleNodesInto.js +2 -4
  98. package/lib/relayUnstableBatchedUpdates.js +2 -5
  99. package/lib/relayUnstableBatchedUpdates.native.js +2 -5
  100. package/lib/requestsForOperation.js +75 -0
  101. package/lib/simpleClone.js +2 -4
  102. package/lib/stableCopy.js +35 -0
  103. package/lib/testEditDistance.js +2 -5
  104. package/lib/throwFailedPromise.js +2 -5
  105. package/lib/writeRelayGeneratedFile.js +84 -50
  106. package/package.json +16 -15
  107. package/relay-compiler.js +7208 -5872
  108. package/relay-compiler.min.js +7200 -5867
  109. package/ARCHITECTURE.md +0 -94
  110. package/PATENTS +0 -33
  111. package/lib/AutoAliasTransform.js +0 -80
  112. package/lib/GraphQLFileParser.js +0 -27
  113. package/lib/GraphQLTextParser.js +0 -46
  114. package/lib/RelayCodegenTypes.js +0 -14
  115. package/lib/RelayCompiledTypes.js +0 -13
  116. package/lib/RelayCompiler.js +0 -144
  117. package/lib/RelayCompilerContext.js +0 -133
  118. package/lib/RelayCompilerUserError.js +0 -30
  119. package/lib/RelayConsoleReporter.js +0 -40
  120. package/lib/RelayFileIRParser.js +0 -66
  121. package/lib/RelayFlattenTransform.js +0 -278
  122. package/lib/RelayFlowParser.js +0 -188
  123. package/lib/RelayGenerateRequisiteFieldsTransform.js +0 -189
  124. package/lib/RelayIR.js +0 -14
  125. package/lib/RelayMultiReporter.js +0 -40
  126. package/lib/RelayReporter.js +0 -14
  127. package/lib/RelayTestSchema.js +0 -21
  128. package/lib/formatStorageKey.js +0 -37
  129. package/lib/getIdentifierForRelaySelection.js +0 -54
  130. package/lib/getRelayLiteralArgumentValues.js +0 -28
  131. package/lib/parseGraphQLText.js +0 -33
  132. package/lib/prettyStringify.js +0 -35
  133. package/lib/printFlowTypes.js +0 -282
  134. package/lib/stableJSONStringify.js +0 -45
  135. package/lib/stableJSONStringifyOSS.js +0 -44
  136. package/lib/transformInputObjectToIR.js +0 -85
  137. package/lib/writeLegacyFlowFile.js +0 -24
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+ *
8
+ * @providesModule RelayGenerateIDFieldTransform
9
+ * @format
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ var _extends3 = _interopRequireDefault(require('babel-runtime/helpers/extends'));
15
+
16
+ var _toConsumableArray3 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
+
20
+ var _require = require('./RelayTransformUtils'),
21
+ hasUnaliasedSelection = _require.hasUnaliasedSelection;
22
+
23
+ var _require2 = require('graphql'),
24
+ assertAbstractType = _require2.assertAbstractType,
25
+ assertCompositeType = _require2.assertCompositeType,
26
+ assertLeafType = _require2.assertLeafType;
27
+
28
+ var _require3 = require('./GraphQLCompilerPublic'),
29
+ CompilerContext = _require3.CompilerContext,
30
+ SchemaUtils = _require3.SchemaUtils,
31
+ IRTransformer = _require3.IRTransformer;
32
+
33
+ var canHaveSelections = SchemaUtils.canHaveSelections,
34
+ getRawType = SchemaUtils.getRawType,
35
+ hasID = SchemaUtils.hasID,
36
+ implementsInterface = SchemaUtils.implementsInterface,
37
+ isAbstractType = SchemaUtils.isAbstractType,
38
+ mayImplement = SchemaUtils.mayImplement;
39
+
40
+
41
+ var ID = 'id';
42
+ var ID_TYPE = 'ID';
43
+ var NODE_TYPE = 'Node';
44
+
45
+ /**
46
+ * A transform that adds an `id` field on any type that has an id field but
47
+ * where there is no unaliased `id` selection.
48
+ */
49
+ function relayGenerateIDFieldTransform(context) {
50
+ var idType = assertLeafType(context.serverSchema.getType(ID_TYPE));
51
+ var idField = {
52
+ kind: 'ScalarField',
53
+ alias: null,
54
+ args: [],
55
+ directives: [],
56
+ handles: null,
57
+ metadata: null,
58
+ name: ID,
59
+ type: idType
60
+ };
61
+ var state = {
62
+ idField: idField
63
+ };
64
+ return IRTransformer.transform(context, {
65
+ LinkedField: visitLinkedField
66
+ }, function () {
67
+ return state;
68
+ });
69
+ }
70
+
71
+ function visitLinkedField(field, state) {
72
+ var transformedNode = this.traverse(field, state);
73
+
74
+ // If the field already has an unaliased `id` field, do nothing
75
+ if (hasUnaliasedSelection(field, ID)) {
76
+ return transformedNode;
77
+ }
78
+
79
+ var context = this.getContext();
80
+ var schema = context.serverSchema;
81
+ var unmodifiedType = assertCompositeType(getRawType(field.type));
82
+
83
+ // If the field type has an `id` subfield add an `id` selection
84
+ if (canHaveSelections(unmodifiedType) && hasID(schema, unmodifiedType)) {
85
+ return (0, _extends3['default'])({}, transformedNode, {
86
+ selections: [].concat((0, _toConsumableArray3['default'])(transformedNode.selections), [state.idField])
87
+ });
88
+ }
89
+
90
+ // If the field type is abstract, then generate a `... on Node { id }`
91
+ // fragment if *any* concrete type implements Node. Then generate a
92
+ // `... on PossibleType { id }` for every concrete type that does *not*
93
+ // implement `Node`
94
+ if (isAbstractType(unmodifiedType)) {
95
+ var selections = [].concat((0, _toConsumableArray3['default'])(transformedNode.selections));
96
+ if (mayImplement(schema, unmodifiedType, NODE_TYPE)) {
97
+ var nodeType = assertCompositeType(schema.getType(NODE_TYPE));
98
+ selections.push(buildIDFragment(nodeType, state.idField));
99
+ }
100
+ var abstractType = assertAbstractType(unmodifiedType);
101
+ schema.getPossibleTypes(abstractType).forEach(function (possibleType) {
102
+ if (!implementsInterface(possibleType, NODE_TYPE) && hasID(schema, possibleType)) {
103
+ selections.push(buildIDFragment(possibleType, state.idField));
104
+ }
105
+ });
106
+ return (0, _extends3['default'])({}, transformedNode, {
107
+ selections: selections
108
+ });
109
+ }
110
+
111
+ return transformedNode;
112
+ }
113
+
114
+ /**
115
+ * @internal
116
+ *
117
+ * Returns IR for `... on FRAGMENT_TYPE { id }`
118
+ */
119
+ function buildIDFragment(fragmentType, idField) {
120
+ return {
121
+ kind: 'InlineFragment',
122
+ directives: [],
123
+ metadata: null,
124
+ typeCondition: fragmentType,
125
+ selections: [idField]
126
+ };
127
+ }
128
+
129
+ module.exports = {
130
+ transform: relayGenerateIDFieldTransform
131
+ };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+ *
8
+ * @providesModule RelayGenerateTypeNameTransform
9
+ * @format
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ var _extends3 = _interopRequireDefault(require('babel-runtime/helpers/extends'));
15
+
16
+ var _toConsumableArray3 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
+
20
+ var _require = require('./RelayTransformUtils'),
21
+ hasUnaliasedSelection = _require.hasUnaliasedSelection;
22
+
23
+ var _require2 = require('graphql'),
24
+ assertLeafType = _require2.assertLeafType;
25
+
26
+ var _require3 = require('./GraphQLCompilerPublic'),
27
+ CompilerContext = _require3.CompilerContext,
28
+ IRTransformer = _require3.IRTransformer,
29
+ SchemaUtils = _require3.SchemaUtils;
30
+
31
+ var isAbstractType = SchemaUtils.isAbstractType;
32
+
33
+
34
+ var TYPENAME_KEY = '__typename';
35
+ var STRING_TYPE = 'String';
36
+
37
+ /**
38
+ * A transform that adds `__typename` field on any `LinkedField` of a union or
39
+ * interface type where there is no unaliased `__typename` selection.
40
+ */
41
+ function relayGenerateTypeNameTransform(context) {
42
+ var stringType = assertLeafType(context.serverSchema.getType(STRING_TYPE));
43
+ var typenameField = {
44
+ kind: 'ScalarField',
45
+ alias: null,
46
+ args: [],
47
+ directives: [],
48
+ handles: null,
49
+ metadata: null,
50
+ name: TYPENAME_KEY,
51
+ type: stringType
52
+ };
53
+ var state = {
54
+ typenameField: typenameField
55
+ };
56
+ return IRTransformer.transform(context, {
57
+ LinkedField: visitLinkedField
58
+ }, function () {
59
+ return state;
60
+ });
61
+ }
62
+
63
+ function visitLinkedField(field, state) {
64
+ var transformedNode = this.traverse(field, state);
65
+ if (isAbstractType(transformedNode.type) && !hasUnaliasedSelection(transformedNode, TYPENAME_KEY)) {
66
+ return (0, _extends3['default'])({}, transformedNode, {
67
+ selections: [state.typenameField].concat((0, _toConsumableArray3['default'])(transformedNode.selections))
68
+ });
69
+ }
70
+ return transformedNode;
71
+ }
72
+
73
+ module.exports = {
74
+ transform: relayGenerateTypeNameTransform
75
+ };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+ * @providesModule RelayGraphQLEnumsGenerator
8
+ *
9
+ * @format
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ var _require = require('graphql'),
15
+ GraphQLEnumType = _require.GraphQLEnumType;
16
+
17
+ function writeForSchema(schema, licenseHeader, codegenDir, moduleName) {
18
+ var typeMap = schema.getTypeMap();
19
+ var stableTypeNames = Object.keys(typeMap).sort();
20
+ var types = [];
21
+ var _iteratorNormalCompletion = true;
22
+ var _didIteratorError = false;
23
+ var _iteratorError = undefined;
24
+
25
+ try {
26
+ for (var _iterator = stableTypeNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
27
+ var name = _step.value;
28
+
29
+ var type = typeMap[name];
30
+ if (type instanceof GraphQLEnumType) {
31
+ var values = type.getValues().map(function (_ref) {
32
+ var value = _ref.value;
33
+ return value;
34
+ });
35
+ values.sort();
36
+ types.push('export type ' + name + ' =\n | \'' + values.join("'\n | '") + "'\n | '%future added value';");
37
+ }
38
+ }
39
+ } catch (err) {
40
+ _didIteratorError = true;
41
+ _iteratorError = err;
42
+ } finally {
43
+ try {
44
+ if (!_iteratorNormalCompletion && _iterator['return']) {
45
+ _iterator['return']();
46
+ }
47
+ } finally {
48
+ if (_didIteratorError) {
49
+ throw _iteratorError;
50
+ }
51
+ }
52
+ }
53
+
54
+ var content = '/**\n' + licenseHeader.map(function (line) {
55
+ return ' * ' + line + '\n';
56
+ }).join('') + ' *\n' + (' * @providesModule ' + moduleName + '\n') + (' * ' + require('signedsource').getSigningToken() + '\n') + ' * @flow\n' + ' */\n' + '\n' +
57
+ // use Flow comment to avoid long Babel compile times
58
+ '/*::\n' + types.join('\n\n') + '\n*/\n';
59
+
60
+ codegenDir.writeFile(moduleName + '.js', require('signedsource').signFile(content));
61
+ }
62
+
63
+ module.exports = {
64
+ writeForSchema: writeForSchema
65
+ };
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayIRTransforms
10
8
  *
@@ -13,39 +11,37 @@
13
11
 
14
12
  'use strict';
15
13
 
16
- var _toConsumableArray3 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
-
20
- var codegenTransforms = require('./GraphQLIRTransforms').codegenTransforms,
21
- fragmentTransforms = require('./GraphQLIRTransforms').fragmentTransforms,
22
- queryTransforms = require('./GraphQLIRTransforms').queryTransforms;
14
+ var _require = require('./GraphQLCompilerPublic'),
15
+ FilterDirectivesTransform = _require.FilterDirectivesTransform,
16
+ FlattenTransform = _require.FlattenTransform,
17
+ InlineFragmentsTransform = _require.InlineFragmentsTransform,
18
+ SkipClientFieldTransform = _require.SkipClientFieldTransform,
19
+ SkipRedundantNodesTransform = _require.SkipRedundantNodesTransform,
20
+ SkipUnreachableNodeTransform = _require.SkipUnreachableNodeTransform,
21
+ StripUnusedVariablesTransform = _require.StripUnusedVariablesTransform;
23
22
 
24
23
  // Transforms applied to the code used to process a query response.
25
-
26
-
27
24
  var relaySchemaExtensions = [require('./RelayConnectionTransform').SCHEMA_EXTENSION, require('./RelayRelayDirectiveTransform').SCHEMA_EXTENSION];
28
25
 
26
+ // Transforms applied to both operations and fragments for both reading and
27
+ // writing from the store.
28
+ var relayCommonTransforms = [require('./RelayConnectionTransform').transform, require('./RelayViewerHandleTransform').transform, require('./RelayRelayDirectiveTransform').transform, require('./RelayMaskTransform').transform, require('./RelayDeferrableFragmentTransform').transformOperations];
29
+
29
30
  // Transforms applied to fragments used for reading data from a store
30
- var relayFragmentTransforms = [function (ctx) {
31
- return require('./RelayConnectionTransform').transform(ctx);
32
- }, require('./RelayViewerHandleTransform').transform, require('./RelayRelayDirectiveTransform').transform, require('./RelayFieldHandleTransform').transform].concat((0, _toConsumableArray3['default'])(fragmentTransforms));
31
+ var relayFragmentTransforms = [require('./RelayFieldHandleTransform').transform, FlattenTransform.transformWithOptions({ flattenAbstractTypes: true }), SkipRedundantNodesTransform.transform];
33
32
 
34
33
  // Transforms applied to queries/mutations/subscriptions that are used for
35
34
  // fetching data from the server and parsing those responses.
36
- var relayQueryTransforms = [function (ctx) {
37
- return require('./RelayConnectionTransform').transform(ctx);
38
- }, require('./RelayViewerHandleTransform').transform, require('./RelayApplyFragmentArgumentTransform').transform].concat((0, _toConsumableArray3['default'])(queryTransforms), [require('./RelayRelayDirectiveTransform').transform, require('./RelayGenerateRequisiteFieldsTransform').transform]);
35
+ var relayQueryTransforms = [require('./RelayDeferrableFragmentTransform').transformSpreads, require('./RelayApplyFragmentArgumentTransform').transform, SkipClientFieldTransform.transform, SkipUnreachableNodeTransform.transform, require('./RelayGenerateIDFieldTransform').transform];
39
36
 
40
37
  // Transforms applied to the code used to process a query response.
41
- var relayCodegenTransforms = codegenTransforms;
38
+ var relayCodegenTransforms = [InlineFragmentsTransform.transform, FlattenTransform.transformWithOptions({ flattenAbstractTypes: true }), SkipRedundantNodesTransform.transform, require('./RelayGenerateTypeNameTransform').transform, FilterDirectivesTransform.transform];
42
39
 
43
40
  // Transforms applied before printing the query sent to the server.
44
- var relayPrintTransforms = [function (ctx) {
45
- return require('./RelayFlattenTransform').transform(ctx, {});
46
- }, require('./RelaySkipHandleFieldTransform').transform, require('./FilterDirectivesTransform').transform];
41
+ var relayPrintTransforms = [FlattenTransform.transformWithOptions({}), require('./RelayGenerateTypeNameTransform').transform, require('./RelaySkipHandleFieldTransform').transform, FilterDirectivesTransform.transform, StripUnusedVariablesTransform.transform];
47
42
 
48
43
  module.exports = {
44
+ commonTransforms: relayCommonTransforms,
49
45
  codegenTransforms: relayCodegenTransforms,
50
46
  fragmentTransforms: relayFragmentTransforms,
51
47
  printTransforms: relayPrintTransforms,
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * @providesModule RelayInternalTypes
10
7
  *
11
8
  * @format
12
9
  */
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * @providesModule RelayInternals
10
7
  *
11
8
  * @format
12
9
  */
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+ * @providesModule RelayJSModuleParser
8
+ *
9
+ * @format
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ var _toConsumableArray3 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
17
+
18
+ var _require = require('./GraphQLCompilerPublic'),
19
+ ASTCache = _require.ASTCache,
20
+ Profiler = _require.Profiler;
21
+
22
+ var parseGraphQL = Profiler.instrument(require('graphql').parse, 'GraphQL.parse');
23
+
24
+ var FIND_OPTIONS = {
25
+ validateNames: true
26
+ };
27
+
28
+ // Throws an error if parsing the file fails
29
+ function parseFile(baseDir, file) {
30
+ var text = require('fs').readFileSync(require('path').join(baseDir, file.relPath), 'utf8');
31
+
32
+ require('fbjs/lib/invariant')(text.indexOf('graphql') >= 0, 'RelayJSModuleParser: Files should be filtered before passed to the ' + 'parser, got unfiltered file `%s`.', file);
33
+
34
+ var astDefinitions = [];
35
+ require('./FindGraphQLTags').memoizedFind(text, baseDir, file, FIND_OPTIONS).forEach(function (template) {
36
+ var ast = parseGraphQL(new (require('graphql').Source)(template, file.relPath));
37
+ require('fbjs/lib/invariant')(ast.definitions.length, 'RelayJSModuleParser: Expected GraphQL text to contain at least one ' + 'definition (fragment, mutation, query, subscription), got `%s`.', template);
38
+ astDefinitions.push.apply(astDefinitions, (0, _toConsumableArray3['default'])(ast.definitions));
39
+ });
40
+
41
+ return {
42
+ kind: 'Document',
43
+ definitions: astDefinitions
44
+ };
45
+ }
46
+
47
+ function getParser(baseDir) {
48
+ return new ASTCache({
49
+ baseDir: baseDir,
50
+ parse: parseFile
51
+ });
52
+ }
53
+
54
+ function getFileFilter(baseDir) {
55
+ return function (file) {
56
+ var text = require('fs').readFileSync(require('path').join(baseDir, file.relPath), 'utf8');
57
+ return text.indexOf('graphql') >= 0;
58
+ };
59
+ }
60
+
61
+ module.exports = {
62
+ getParser: getParser,
63
+ getFileFilter: getFileFilter
64
+ };
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+ * All rights reserved.
8
+ *
9
+ * @providesModule RelayMaskTransform
10
+ *
11
+ * @format
12
+ */
13
+
14
+ 'use strict';
15
+
16
+ var _extends3 = _interopRequireDefault(require('babel-runtime/helpers/extends'));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
+
20
+ var _require = require('./GraphQLCompilerPublic'),
21
+ CompilerContext = _require.CompilerContext,
22
+ IRTransformer = _require.IRTransformer,
23
+ isEquivalentType = _require.isEquivalentType;
24
+
25
+ /**
26
+ * A transform that inlines fragment spreads with the @relay(mask: false)
27
+ * directive.
28
+ */
29
+ function relayMaskTransform(context) {
30
+ return IRTransformer.transform(context, {
31
+ FragmentSpread: visitFragmentSpread,
32
+ Fragment: visitFragment
33
+ }, function () {
34
+ return {
35
+ hoistedArgDefs: new Map()
36
+ };
37
+ });
38
+ }
39
+
40
+ function visitFragment(fragment, state) {
41
+ var result = this.traverse(fragment, state);
42
+ if (state.hoistedArgDefs.length === 0) {
43
+ return result;
44
+ }
45
+ var existingArgDefs = new Map();
46
+ result.argumentDefinitions.forEach(function (argDef) {
47
+ existingArgDefs.set(argDef.name, argDef);
48
+ });
49
+ var combinedArgDefs = result.argumentDefinitions.slice(); // Copy array
50
+ state.hoistedArgDefs.forEach(function (hoistedArgDef, argName) {
51
+ var existingArgDef = existingArgDefs.get(argName);
52
+ if (existingArgDef) {
53
+ require('fbjs/lib/invariant')(areSameArgumentDefinitions(existingArgDef, hoistedArgDef.argDef), 'RelayMaskTransform: Cannot unmask fragment spread `%s` because ' + 'argument `%s` has been declared in `%s` and they are not the same.', hoistedArgDef.source, argName, fragment.name);
54
+ return;
55
+ }
56
+ combinedArgDefs.push(hoistedArgDef.argDef);
57
+ });
58
+ return (0, _extends3['default'])({}, result, {
59
+ argumentDefinitions: combinedArgDefs
60
+ });
61
+ }
62
+
63
+ function visitFragmentSpread(fragmentSpread, state) {
64
+ if (!isUnmaskedSpread(fragmentSpread)) {
65
+ return fragmentSpread;
66
+ }
67
+ require('fbjs/lib/invariant')(fragmentSpread.args.length === 0, 'RelayMaskTransform: Cannot unmask fragment spread `%s` with ' + 'arguments. Use the `ApplyFragmentArgumentTransform` before flattening', fragmentSpread.name);
68
+ var fragment = this.getContext().getFragment(fragmentSpread.name);
69
+ var result = {
70
+ kind: 'InlineFragment',
71
+ directives: fragmentSpread.directives,
72
+ metadata: fragmentSpread.metadata,
73
+ selections: fragment.selections,
74
+ typeCondition: fragment.type
75
+ };
76
+
77
+ require('fbjs/lib/invariant')(!fragment.argumentDefinitions.find(function (argDef) {
78
+ return argDef.kind === 'LocalArgumentDefinition';
79
+ }), 'RelayMaskTransform: Cannot unmask fragment spread `%s` because it has local ' + 'argument definition.', fragmentSpread.name);
80
+
81
+ var _iteratorNormalCompletion = true;
82
+ var _didIteratorError = false;
83
+ var _iteratorError = undefined;
84
+
85
+ try {
86
+ for (var _iterator = fragment.argumentDefinitions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
87
+ var _argDef = _step.value;
88
+
89
+ var hoistedArgDef = state.hoistedArgDefs.get(_argDef.name);
90
+ if (hoistedArgDef) {
91
+ require('fbjs/lib/invariant')(areSameArgumentDefinitions(_argDef, hoistedArgDef.argDef), 'RelayMaskTransform: Cannot unmask fragment spread `%s` because ' + 'argument `%s` has been declared in `%s` and they are not the same.', hoistedArgDef.source, _argDef.name, fragmentSpread.name);
92
+ continue;
93
+ }
94
+ state.hoistedArgDefs.set(_argDef.name, {
95
+ argDef: _argDef,
96
+ source: fragmentSpread.name
97
+ });
98
+ }
99
+ } catch (err) {
100
+ _didIteratorError = true;
101
+ _iteratorError = err;
102
+ } finally {
103
+ try {
104
+ if (!_iteratorNormalCompletion && _iterator['return']) {
105
+ _iterator['return']();
106
+ }
107
+ } finally {
108
+ if (_didIteratorError) {
109
+ throw _iteratorError;
110
+ }
111
+ }
112
+ }
113
+
114
+ return this.traverse(result, state);
115
+ }
116
+
117
+ function isUnmaskedSpread(spread) {
118
+ return Boolean(spread.metadata && spread.metadata.mask === false);
119
+ }
120
+
121
+ function areSameArgumentDefinitions(argDef1, argDef2) {
122
+ return argDef1.kind === argDef2.kind && argDef1.name === argDef2.name && isEquivalentType(argDef1.type, argDef2.type) &&
123
+ // Only LocalArgumentDefinition defines defaultValue
124
+ argDef1.defaultValue === argDef2.defaultValue;
125
+ }
126
+
127
+ module.exports = {
128
+ transform: relayMaskTransform
129
+ };
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * @providesModule RelayMetricsRecorder
10
7
  *
11
8
  * @format
12
9
  */
@@ -19,6 +16,9 @@ var _classCallCheck3 = _interopRequireDefault(require('babel-runtime/helpers/cla
19
16
 
20
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
21
18
 
19
+ var _require = require('relay-runtime'),
20
+ RelayProfiler = _require.RelayProfiler;
21
+
22
22
  var measurementDefaults = {
23
23
  aggregateTime: 0,
24
24
  callCount: 0
@@ -73,8 +73,8 @@ var RelayMetricsRecorder = function () {
73
73
  this._profileStack = [0];
74
74
  this._startTimesStack = [0];
75
75
 
76
- require('./RelayProfiler').attachAggregateHandler('*', this._measure);
77
- require('./RelayProfiler').attachProfileHandler('*', this._instrumentProfile);
76
+ RelayProfiler.attachAggregateHandler('*', this._measure);
77
+ RelayProfiler.attachProfileHandler('*', this._instrumentProfile);
78
78
  };
79
79
 
80
80
  RelayMetricsRecorder.prototype.stop = function stop() {
@@ -84,8 +84,8 @@ var RelayMetricsRecorder = function () {
84
84
  this._recordingTotalTime += require('fbjs/lib/performanceNow')() - this._recordingStartTime;
85
85
  this._isEnabled = false;
86
86
 
87
- require('./RelayProfiler').detachAggregateHandler('*', this._measure);
88
- require('./RelayProfiler').detachProfileHandler('*', this._instrumentProfile);
87
+ RelayProfiler.detachAggregateHandler('*', this._measure);
88
+ RelayProfiler.detachProfileHandler('*', this._instrumentProfile);
89
89
  };
90
90
 
91
91
  RelayMetricsRecorder.prototype.getMetrics = function getMetrics() {
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * @providesModule RelayMockRenderer
10
7
  *
11
8
  * @format
12
9
  */
@@ -29,9 +26,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'd
29
26
  * Note: For unit tests, you may need to mock `ReactDOM` as follows:
30
27
  *
31
28
  * ```
32
- * jest
33
- * .disableAutomock()
34
- * .mock('ReactDOM', () => ({}));
29
+ * jest.mock('ReactDOM', () => ({}));
35
30
  * ```
36
31
  *
37
32
  * Currently ReactDOM and ReactTestRenderer cannot both be loaded in the same
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * @providesModule RelayNetworkDebug
10
7
  *
11
8
  * @format
12
9
  */
@@ -76,7 +73,6 @@ function createDebuggableFromRequest(type, request, graphiqlPrinter) {
76
73
  type: type,
77
74
  promise: request.getPromise(),
78
75
  logResult: function logResult(error, response) {
79
- /* eslint-disable no-console-disallow */
80
76
  var requestSize = formatSize(require('fbjs/lib/xhrSimpleDataSerializer')({
81
77
  q: request.getQueryString(),
82
78
  query_params: request.getVariables()
@@ -98,12 +94,13 @@ function createDebuggableFromRequest(type, request, graphiqlPrinter) {
98
94
  console.groupEnd();
99
95
 
100
96
  if (Object.keys(requestVariables).length > 0) {
97
+ // eslint-disable-next-line no-console
101
98
  console.log('Request Variables\n', request.getVariables());
102
99
  }
103
100
 
104
101
  error && console.error(error);
102
+ // eslint-disable-next-line no-console
105
103
  response && console.log(response);
106
- /* eslint-enable no-console-disallow */
107
104
  }
108
105
  };
109
106
  }