relay-compiler 8.0.0 → 10.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/RelayCompilerBin.js.flow +169 -0
- package/bin/RelayCompilerMain.js.flow +515 -0
- package/bin/__fixtures__/plugin-module.js.flow +17 -0
- package/bin/relay-compiler +8930 -8967
- package/codegen/CodegenDirectory.js.flow +375 -0
- package/codegen/CodegenRunner.js.flow +432 -0
- package/codegen/CodegenTypes.js.flow +28 -0
- package/codegen/CodegenWatcher.js.flow +254 -0
- package/codegen/NormalizationCodeGenerator.js.flow +563 -0
- package/codegen/ReaderCodeGenerator.js.flow +477 -0
- package/codegen/RelayCodeGenerator.js.flow +85 -0
- package/codegen/RelayFileWriter.js.flow +365 -0
- package/codegen/SourceControl.js.flow +58 -0
- package/codegen/compileRelayArtifacts.js.flow +182 -0
- package/codegen/createPrintRequireModuleDependency.js.flow +21 -0
- package/codegen/sortObjectByKey.js.flow +25 -0
- package/codegen/writeRelayGeneratedFile.js.flow +223 -0
- package/core/ASTCache.js.flow +73 -0
- package/core/ASTConvert.js.flow +233 -0
- package/core/CompilerContext.js.flow +190 -0
- package/core/CompilerError.js.flow +250 -0
- package/core/DotGraphQLParser.js.flow +39 -0
- package/core/GraphQLCompilerProfiler.js.flow +341 -0
- package/core/GraphQLDerivedFromMetadata.js.flow +36 -0
- package/core/GraphQLWatchmanClient.js.flow +111 -0
- package/core/IR.js.flow +327 -0
- package/core/IRPrinter.js.flow +482 -0
- package/core/IRTransformer.js.flow +377 -0
- package/core/IRValidator.js.flow +260 -0
- package/core/IRVisitor.js.flow +150 -0
- package/core/JSModuleParser.js.flow +24 -0
- package/core/RelayCompilerScope.js.flow +199 -0
- package/core/RelayFindGraphQLTags.js.flow +119 -0
- package/core/RelayGraphQLEnumsGenerator.js.flow +55 -0
- package/core/RelayIRTransforms.js.flow +131 -0
- package/core/RelayParser.js.flow +1731 -0
- package/core/RelaySourceModuleParser.js.flow +135 -0
- package/core/Schema.js.flow +1983 -0
- package/core/SchemaUtils.js.flow +120 -0
- package/core/filterContextForNode.js.flow +50 -0
- package/core/getFieldDefinition.js.flow +156 -0
- package/core/getIdentifierForArgumentValue.js.flow +49 -0
- package/core/getIdentifierForSelection.js.flow +69 -0
- package/core/getLiteralArgumentValues.js.flow +32 -0
- package/core/getNormalizationOperationName.js.flow +19 -0
- package/core/inferRootArgumentDefinitions.js.flow +323 -0
- package/index.js +1 -1
- package/index.js.flow +200 -0
- package/language/RelayLanguagePluginInterface.js.flow +283 -0
- package/language/javascript/FindGraphQLTags.js.flow +232 -0
- package/language/javascript/RelayFlowBabelFactories.js.flow +180 -0
- package/language/javascript/RelayFlowGenerator.js.flow +1042 -0
- package/language/javascript/RelayFlowTypeTransformers.js.flow +184 -0
- package/language/javascript/RelayLanguagePluginJavaScript.js.flow +34 -0
- package/language/javascript/formatGeneratedModule.js.flow +65 -0
- package/lib/bin/RelayCompilerBin.js +24 -7
- package/lib/bin/RelayCompilerMain.js +141 -136
- package/lib/codegen/CodegenDirectory.js +13 -8
- package/lib/codegen/CodegenRunner.js +37 -76
- package/lib/codegen/CodegenWatcher.js +13 -21
- package/lib/codegen/NormalizationCodeGenerator.js +117 -140
- package/lib/codegen/ReaderCodeGenerator.js +76 -117
- package/lib/codegen/RelayCodeGenerator.js +17 -6
- package/lib/codegen/RelayFileWriter.js +19 -40
- package/lib/codegen/compileRelayArtifacts.js +16 -30
- package/lib/codegen/sortObjectByKey.js +43 -0
- package/lib/codegen/writeRelayGeneratedFile.js +86 -95
- package/lib/core/ASTCache.js +2 -4
- package/lib/core/CompilerContext.js +2 -4
- package/lib/core/CompilerError.js +27 -54
- package/lib/core/GraphQLCompilerProfiler.js +8 -12
- package/lib/core/GraphQLDerivedFromMetadata.js +1 -10
- package/lib/core/GraphQLWatchmanClient.js +4 -12
- package/lib/core/IRPrinter.js +23 -21
- package/lib/core/IRTransformer.js +8 -16
- package/lib/core/IRValidator.js +1 -9
- package/lib/core/IRVisitor.js +0 -2
- package/lib/core/RelayCompilerScope.js +4 -4
- package/lib/core/RelayGraphQLEnumsGenerator.js +12 -15
- package/lib/core/RelayIRTransforms.js +16 -14
- package/lib/core/RelayParser.js +53 -89
- package/lib/core/RelaySourceModuleParser.js +3 -3
- package/lib/core/Schema.js +61 -73
- package/lib/core/SchemaUtils.js +15 -1
- package/lib/core/getFieldDefinition.js +12 -15
- package/lib/core/getIdentifierForSelection.js +2 -4
- package/lib/core/inferRootArgumentDefinitions.js +33 -73
- package/lib/index.js +4 -5
- package/lib/language/javascript/FindGraphQLTags.js +4 -3
- package/lib/language/javascript/RelayFlowGenerator.js +82 -171
- package/lib/language/javascript/RelayFlowTypeTransformers.js +1 -3
- package/lib/language/javascript/RelayLanguagePluginJavaScript.js +6 -4
- package/lib/language/javascript/formatGeneratedModule.js +11 -2
- package/lib/reporters/ConsoleReporter.js +1 -3
- package/lib/reporters/MultiReporter.js +1 -3
- package/lib/runner/Artifacts.js +69 -170
- package/lib/runner/BufferedFilesystem.js +32 -66
- package/lib/runner/GraphQLASTNodeGroup.js +54 -120
- package/lib/runner/GraphQLNodeMap.js +14 -19
- package/lib/runner/Sources.js +51 -85
- package/lib/runner/StrictMap.js +21 -37
- package/lib/runner/getChangedNodeNames.js +30 -62
- package/lib/transforms/ApplyFragmentArgumentTransform.js +73 -59
- package/lib/transforms/ClientExtensionsTransform.js +12 -16
- package/lib/transforms/ConnectionTransform.js +30 -37
- package/lib/transforms/DeclarativeConnectionMutationTransform.js +167 -0
- package/lib/transforms/DeferStreamTransform.js +30 -73
- package/lib/transforms/DisallowTypenameOnRoot.js +55 -0
- package/lib/transforms/FieldHandleTransform.js +6 -2
- package/lib/transforms/FlattenTransform.js +18 -45
- package/lib/transforms/GenerateIDFieldTransform.js +56 -35
- package/lib/transforms/GenerateTypeNameTransform.js +84 -10
- package/lib/transforms/InlineDataFragmentTransform.js +9 -4
- package/lib/transforms/MaskTransform.js +17 -17
- package/lib/transforms/MatchTransform.js +110 -32
- package/lib/transforms/RefetchableFragmentTransform.js +21 -38
- package/lib/transforms/RelayDirectiveTransform.js +8 -3
- package/lib/transforms/SkipClientExtensionsTransform.js +8 -0
- package/lib/transforms/SkipHandleFieldTransform.js +6 -2
- package/lib/transforms/SkipRedundantNodesTransform.js +7 -4
- package/lib/transforms/SkipSplitOperationTransform.js +32 -0
- package/lib/transforms/SkipUnreachableNodeTransform.js +9 -10
- package/lib/transforms/SkipUnusedVariablesTransform.js +18 -17
- package/lib/transforms/SplitModuleImportTransform.js +2 -2
- package/lib/transforms/TestOperationTransform.js +26 -22
- package/lib/transforms/ValidateGlobalVariablesTransform.js +18 -30
- package/lib/transforms/ValidateRequiredArgumentsTransform.js +12 -16
- package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +16 -30
- package/lib/transforms/ValidateUnusedVariablesTransform.js +18 -30
- package/lib/transforms/query-generators/FetchableQueryGenerator.js +161 -0
- package/lib/transforms/query-generators/NodeQueryGenerator.js +22 -3
- package/lib/transforms/query-generators/QueryQueryGenerator.js +2 -1
- package/lib/transforms/query-generators/ViewerQueryGenerator.js +1 -0
- package/lib/transforms/query-generators/index.js +23 -6
- package/lib/transforms/query-generators/utils.js +17 -16
- package/lib/util/RelayCompilerCache.js +2 -4
- package/lib/util/argumentContainsVariables.js +37 -0
- package/lib/util/dedupeJSONStringify.js +15 -12
- package/lib/util/generateAbstractTypeRefinementKey.js +24 -0
- package/lib/util/getModuleName.js +3 -5
- package/lib/util/joinArgumentDefinitions.js +3 -1
- package/package.json +6 -6
- package/relay-compiler.js +4 -4
- package/relay-compiler.min.js +4 -4
- package/reporters/ConsoleReporter.js.flow +81 -0
- package/reporters/MultiReporter.js.flow +43 -0
- package/reporters/Reporter.js.flow +19 -0
- package/runner/Artifacts.js.flow +219 -0
- package/runner/BufferedFilesystem.js.flow +194 -0
- package/runner/GraphQLASTNodeGroup.js.flow +176 -0
- package/runner/GraphQLASTUtils.js.flow +26 -0
- package/runner/GraphQLNodeMap.js.flow +55 -0
- package/runner/Sources.js.flow +214 -0
- package/runner/StrictMap.js.flow +96 -0
- package/runner/compileArtifacts.js.flow +76 -0
- package/runner/extractAST.js.flow +100 -0
- package/runner/getChangedNodeNames.js.flow +48 -0
- package/runner/getSchemaInstance.js.flow +36 -0
- package/runner/types.js.flow +37 -0
- package/transforms/ApplyFragmentArgumentTransform.js.flow +526 -0
- package/transforms/ClientExtensionsTransform.js.flow +222 -0
- package/transforms/ConnectionTransform.js.flow +856 -0
- package/transforms/DeclarativeConnectionMutationTransform.js.flow +157 -0
- package/transforms/DeferStreamTransform.js.flow +265 -0
- package/transforms/DisallowIdAsAlias.js.flow +47 -0
- package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
- package/transforms/FieldHandleTransform.js.flow +80 -0
- package/transforms/FilterDirectivesTransform.js.flow +45 -0
- package/transforms/FlattenTransform.js.flow +453 -0
- package/transforms/GenerateIDFieldTransform.js.flow +152 -0
- package/transforms/GenerateTypeNameTransform.js.flow +161 -0
- package/transforms/InlineDataFragmentTransform.js.flow +125 -0
- package/transforms/InlineFragmentsTransform.js.flow +71 -0
- package/transforms/MaskTransform.js.flow +126 -0
- package/transforms/MatchTransform.js.flow +583 -0
- package/transforms/RefetchableFragmentTransform.js.flow +272 -0
- package/transforms/RelayDirectiveTransform.js.flow +97 -0
- package/transforms/SkipClientExtensionsTransform.js.flow +54 -0
- package/transforms/SkipHandleFieldTransform.js.flow +44 -0
- package/transforms/SkipRedundantNodesTransform.js.flow +254 -0
- package/transforms/SkipSplitOperationTransform.js.flow +37 -0
- package/transforms/SkipUnreachableNodeTransform.js.flow +149 -0
- package/transforms/SkipUnusedVariablesTransform.js.flow +59 -0
- package/transforms/SplitModuleImportTransform.js.flow +98 -0
- package/transforms/TestOperationTransform.js.flow +142 -0
- package/transforms/TransformUtils.js.flow +26 -0
- package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
- package/transforms/ValidateRequiredArgumentsTransform.js.flow +127 -0
- package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +112 -0
- package/transforms/ValidateUnusedVariablesTransform.js.flow +89 -0
- package/transforms/query-generators/FetchableQueryGenerator.js.flow +189 -0
- package/transforms/query-generators/NodeQueryGenerator.js.flow +219 -0
- package/transforms/query-generators/QueryQueryGenerator.js.flow +57 -0
- package/transforms/query-generators/ViewerQueryGenerator.js.flow +97 -0
- package/transforms/query-generators/index.js.flow +90 -0
- package/transforms/query-generators/utils.js.flow +76 -0
- package/util/CodeMarker.js.flow +79 -0
- package/{lib/core/GraphQLIR.js → util/DefaultHandleKey.js.flow} +9 -2
- package/util/RelayCompilerCache.js.flow +88 -0
- package/util/Rollout.js.flow +39 -0
- package/util/TimeReporter.js.flow +79 -0
- package/util/areEqualOSS.js.flow +123 -0
- package/util/argumentContainsVariables.js.flow +38 -0
- package/util/dedupeJSONStringify.js.flow +152 -0
- package/util/generateAbstractTypeRefinementKey.js.flow +29 -0
- package/util/getDefinitionNodeHash.js.flow +25 -0
- package/util/getModuleName.js.flow +39 -0
- package/util/joinArgumentDefinitions.js.flow +105 -0
- package/util/md5.js.flow +22 -0
- package/util/murmurHash.js.flow +94 -0
- package/util/nullthrowsOSS.js.flow +25 -0
- package/util/orList.js.flow +37 -0
- package/util/partitionArray.js.flow +37 -0
- package/lib/core/GraphQLCompilerContext.js +0 -165
- package/lib/core/GraphQLIRPrinter.js +0 -371
- package/lib/core/GraphQLIRTransformer.js +0 -344
- package/lib/core/GraphQLIRValidator.js +0 -218
- package/lib/core/GraphQLIRVisitor.js +0 -46
- package/lib/core/RelayCompilerError.js +0 -277
- package/lib/transforms/ConnectionFieldTransform.js +0 -276
@@ -1,344 +0,0 @@
|
|
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
|
-
*
|
8
|
-
* @format
|
9
|
-
*/
|
10
|
-
'use strict';
|
11
|
-
|
12
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
13
|
-
|
14
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
|
15
|
-
|
16
|
-
var invariant = require("fbjs/lib/invariant");
|
17
|
-
|
18
|
-
var _require = require('./RelayCompilerError'),
|
19
|
-
eachWithCombinedError = _require.eachWithCombinedError;
|
20
|
-
|
21
|
-
/**
|
22
|
-
* @public
|
23
|
-
*
|
24
|
-
* Helper for writing compiler transforms that apply "map" and/or "filter"-style
|
25
|
-
* operations to compiler contexts. The `visitor` argument accepts a map of IR
|
26
|
-
* kinds to user-defined functions that can map nodes of that kind to new values
|
27
|
-
* (of the same kind).
|
28
|
-
*
|
29
|
-
* If a visitor function is defined for a kind, the visitor function is
|
30
|
-
* responsible for traversing its children (by calling `this.traverse(node)`)
|
31
|
-
* and returning either the input (to indicate no changes), a new node (to
|
32
|
-
* indicate changes), or null/undefined (to indicate the removal of that node
|
33
|
-
* from the output).
|
34
|
-
*
|
35
|
-
* If a visitor function is *not* defined for a kind, a default traversal is
|
36
|
-
* used to evaluate its children.
|
37
|
-
*
|
38
|
-
* The `stateInitializer` argument accepts an optional function to construct the
|
39
|
-
* state for each document (fragment or root) in the context. Any documents for
|
40
|
-
* which the initializer returns null/undefined is deleted from the context
|
41
|
-
* without being traversed.
|
42
|
-
*
|
43
|
-
* Example: Alias all scalar fields with the reverse of their name:
|
44
|
-
*
|
45
|
-
* ```
|
46
|
-
* transform(context, {
|
47
|
-
* ScalarField: visitScalarField,
|
48
|
-
* });
|
49
|
-
*
|
50
|
-
* function visitScalarField(field: ScalarField, state: State): ?ScalarField {
|
51
|
-
* // Traverse child nodes - for a scalar field these are the arguments &
|
52
|
-
* // directives.
|
53
|
-
* const nextField = this.traverse(field, state);
|
54
|
-
* // Return a new node with a different alias.
|
55
|
-
* return {
|
56
|
-
* ...nextField,
|
57
|
-
* alias: nextField.name.split('').reverse().join(''),
|
58
|
-
* };
|
59
|
-
* }
|
60
|
-
* ```
|
61
|
-
*/
|
62
|
-
function transform(context, visitor, stateInitializer) {
|
63
|
-
var transformer = new Transformer(context, visitor);
|
64
|
-
return context.withMutations(function (ctx) {
|
65
|
-
var nextContext = ctx;
|
66
|
-
eachWithCombinedError(context.documents(), function (prevNode) {
|
67
|
-
var nextNode;
|
68
|
-
|
69
|
-
if (stateInitializer === undefined) {
|
70
|
-
nextNode = transformer.visit(prevNode, undefined);
|
71
|
-
} else {
|
72
|
-
var _state = stateInitializer(prevNode);
|
73
|
-
|
74
|
-
if (_state != null) {
|
75
|
-
nextNode = transformer.visit(prevNode, _state);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
|
-
if (!nextNode) {
|
80
|
-
nextContext = nextContext.remove(prevNode.name);
|
81
|
-
} else if (nextNode !== prevNode) {
|
82
|
-
nextContext = nextContext.replace(nextNode);
|
83
|
-
}
|
84
|
-
});
|
85
|
-
return nextContext;
|
86
|
-
});
|
87
|
-
}
|
88
|
-
/**
|
89
|
-
* @internal
|
90
|
-
*/
|
91
|
-
|
92
|
-
|
93
|
-
var Transformer =
|
94
|
-
/*#__PURE__*/
|
95
|
-
function () {
|
96
|
-
function Transformer(context, visitor) {
|
97
|
-
this._context = context;
|
98
|
-
this._states = [];
|
99
|
-
this._visitor = visitor;
|
100
|
-
}
|
101
|
-
/**
|
102
|
-
* @public
|
103
|
-
*
|
104
|
-
* Returns the original compiler context that is being transformed. This can
|
105
|
-
* be used to look up fragments by name, for example.
|
106
|
-
*/
|
107
|
-
|
108
|
-
|
109
|
-
var _proto = Transformer.prototype;
|
110
|
-
|
111
|
-
_proto.getContext = function getContext() {
|
112
|
-
return this._context;
|
113
|
-
}
|
114
|
-
/**
|
115
|
-
* @public
|
116
|
-
*
|
117
|
-
* Transforms the node, calling a user-defined visitor function if defined for
|
118
|
-
* the node's kind. Uses the given state for this portion of the traversal.
|
119
|
-
*
|
120
|
-
* Note: This differs from `traverse` in that it calls a visitor function for
|
121
|
-
* the node itself.
|
122
|
-
*/
|
123
|
-
;
|
124
|
-
|
125
|
-
_proto.visit = function visit(node, state) {
|
126
|
-
this._states.push(state);
|
127
|
-
|
128
|
-
var nextNode = this._visit(node);
|
129
|
-
|
130
|
-
this._states.pop();
|
131
|
-
|
132
|
-
return nextNode;
|
133
|
-
}
|
134
|
-
/**
|
135
|
-
* @public
|
136
|
-
*
|
137
|
-
* Transforms the children of the given node, skipping the user-defined
|
138
|
-
* visitor function for the node itself. Uses the given state for this portion
|
139
|
-
* of the traversal.
|
140
|
-
*
|
141
|
-
* Note: This differs from `visit` in that it does not call a visitor function
|
142
|
-
* for the node itself.
|
143
|
-
*/
|
144
|
-
;
|
145
|
-
|
146
|
-
_proto.traverse = function traverse(node, state) {
|
147
|
-
this._states.push(state);
|
148
|
-
|
149
|
-
var nextNode = this._traverse(node);
|
150
|
-
|
151
|
-
this._states.pop();
|
152
|
-
|
153
|
-
return nextNode;
|
154
|
-
};
|
155
|
-
|
156
|
-
_proto._visit = function _visit(node) {
|
157
|
-
var nodeVisitor = this._visitor[node.kind];
|
158
|
-
|
159
|
-
if (nodeVisitor) {
|
160
|
-
// If a handler for the kind is defined, it is responsible for calling
|
161
|
-
// `traverse` to transform children as necessary.
|
162
|
-
var _state2 = this._getState();
|
163
|
-
|
164
|
-
var nextNode = nodeVisitor.call(this, node, _state2);
|
165
|
-
return nextNode;
|
166
|
-
} // Otherwise traverse is called automatically.
|
167
|
-
|
168
|
-
|
169
|
-
return this._traverse(node);
|
170
|
-
};
|
171
|
-
|
172
|
-
_proto._traverse = function _traverse(prevNode) {
|
173
|
-
var nextNode;
|
174
|
-
|
175
|
-
switch (prevNode.kind) {
|
176
|
-
case 'Argument':
|
177
|
-
nextNode = this._traverseChildren(prevNode, null, ['value']);
|
178
|
-
break;
|
179
|
-
|
180
|
-
case 'Literal':
|
181
|
-
case 'LocalArgumentDefinition':
|
182
|
-
case 'RootArgumentDefinition':
|
183
|
-
case 'Variable':
|
184
|
-
nextNode = prevNode;
|
185
|
-
break;
|
186
|
-
|
187
|
-
case 'Defer':
|
188
|
-
nextNode = this._traverseChildren(prevNode, ['selections'], ['if']);
|
189
|
-
break;
|
190
|
-
|
191
|
-
case 'Stream':
|
192
|
-
nextNode = this._traverseChildren(prevNode, ['selections'], ['if', 'initialCount']);
|
193
|
-
break;
|
194
|
-
|
195
|
-
case 'ClientExtension':
|
196
|
-
nextNode = this._traverseChildren(prevNode, ['selections']);
|
197
|
-
break;
|
198
|
-
|
199
|
-
case 'Directive':
|
200
|
-
nextNode = this._traverseChildren(prevNode, ['args']);
|
201
|
-
break;
|
202
|
-
|
203
|
-
case 'ModuleImport':
|
204
|
-
nextNode = this._traverseChildren(prevNode, ['selections']);
|
205
|
-
|
206
|
-
if (!nextNode.selections.length) {
|
207
|
-
nextNode = null;
|
208
|
-
}
|
209
|
-
|
210
|
-
break;
|
211
|
-
|
212
|
-
case 'FragmentSpread':
|
213
|
-
case 'ScalarField':
|
214
|
-
nextNode = this._traverseChildren(prevNode, ['args', 'directives']);
|
215
|
-
break;
|
216
|
-
|
217
|
-
case 'InlineDataFragmentSpread':
|
218
|
-
nextNode = this._traverseChildren(prevNode, ['selections']);
|
219
|
-
break;
|
220
|
-
|
221
|
-
case 'ConnectionField':
|
222
|
-
case 'LinkedField':
|
223
|
-
nextNode = this._traverseChildren(prevNode, ['args', 'directives', 'selections']);
|
224
|
-
|
225
|
-
if (!nextNode.selections.length) {
|
226
|
-
nextNode = null;
|
227
|
-
}
|
228
|
-
|
229
|
-
break;
|
230
|
-
|
231
|
-
case 'Connection':
|
232
|
-
nextNode = this._traverseChildren(prevNode, ['args', 'selections']);
|
233
|
-
|
234
|
-
if (!nextNode.selections.length) {
|
235
|
-
nextNode = null;
|
236
|
-
}
|
237
|
-
|
238
|
-
break;
|
239
|
-
|
240
|
-
case 'Condition':
|
241
|
-
nextNode = this._traverseChildren(prevNode, ['directives', 'selections'], ['condition']);
|
242
|
-
|
243
|
-
if (!nextNode.selections.length) {
|
244
|
-
nextNode = null;
|
245
|
-
}
|
246
|
-
|
247
|
-
break;
|
248
|
-
|
249
|
-
case 'InlineFragment':
|
250
|
-
nextNode = this._traverseChildren(prevNode, ['directives', 'selections']);
|
251
|
-
|
252
|
-
if (!nextNode.selections.length) {
|
253
|
-
nextNode = null;
|
254
|
-
}
|
255
|
-
|
256
|
-
break;
|
257
|
-
|
258
|
-
case 'Fragment':
|
259
|
-
case 'Root':
|
260
|
-
nextNode = this._traverseChildren(prevNode, ['argumentDefinitions', 'directives', 'selections']);
|
261
|
-
break;
|
262
|
-
|
263
|
-
case 'Request':
|
264
|
-
nextNode = this._traverseChildren(prevNode, null, ['fragment', 'root']);
|
265
|
-
break;
|
266
|
-
|
267
|
-
case 'SplitOperation':
|
268
|
-
nextNode = this._traverseChildren(prevNode, ['selections']);
|
269
|
-
break;
|
270
|
-
|
271
|
-
default:
|
272
|
-
prevNode;
|
273
|
-
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRTransformer: Unknown kind `%s`.', prevNode.kind) : invariant(false) : void 0;
|
274
|
-
}
|
275
|
-
|
276
|
-
return nextNode;
|
277
|
-
};
|
278
|
-
|
279
|
-
_proto._traverseChildren = function _traverseChildren(prevNode, pluralKeys, singularKeys) {
|
280
|
-
var _this = this;
|
281
|
-
|
282
|
-
var nextNode;
|
283
|
-
pluralKeys && pluralKeys.forEach(function (key) {
|
284
|
-
var prevItems = prevNode[key];
|
285
|
-
|
286
|
-
if (!prevItems) {
|
287
|
-
return;
|
288
|
-
}
|
289
|
-
|
290
|
-
!Array.isArray(prevItems) ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRTransformer: Expected data for `%s` to be an array, got `%s`.', key, prevItems) : invariant(false) : void 0;
|
291
|
-
|
292
|
-
var nextItems = _this._map(prevItems);
|
293
|
-
|
294
|
-
if (nextNode || nextItems !== prevItems) {
|
295
|
-
nextNode = nextNode || (0, _objectSpread2["default"])({}, prevNode);
|
296
|
-
nextNode[key] = nextItems;
|
297
|
-
}
|
298
|
-
});
|
299
|
-
singularKeys && singularKeys.forEach(function (key) {
|
300
|
-
var prevItem = prevNode[key];
|
301
|
-
|
302
|
-
if (!prevItem) {
|
303
|
-
return;
|
304
|
-
}
|
305
|
-
|
306
|
-
var nextItem = _this._visit(prevItem);
|
307
|
-
|
308
|
-
if (nextNode || nextItem !== prevItem) {
|
309
|
-
nextNode = nextNode || (0, _objectSpread2["default"])({}, prevNode);
|
310
|
-
nextNode[key] = nextItem;
|
311
|
-
}
|
312
|
-
});
|
313
|
-
return nextNode || prevNode;
|
314
|
-
};
|
315
|
-
|
316
|
-
_proto._map = function _map(prevItems) {
|
317
|
-
var _this2 = this;
|
318
|
-
|
319
|
-
var nextItems;
|
320
|
-
prevItems.forEach(function (prevItem, index) {
|
321
|
-
var nextItem = _this2._visit(prevItem);
|
322
|
-
|
323
|
-
if (nextItems || nextItem !== prevItem) {
|
324
|
-
nextItems = nextItems || prevItems.slice(0, index);
|
325
|
-
|
326
|
-
if (nextItem) {
|
327
|
-
nextItems.push(nextItem);
|
328
|
-
}
|
329
|
-
}
|
330
|
-
});
|
331
|
-
return nextItems || prevItems;
|
332
|
-
};
|
333
|
-
|
334
|
-
_proto._getState = function _getState() {
|
335
|
-
!this._states.length ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRTransformer: Expected a current state to be set but found none. ' + 'This is usually the result of mismatched number of pushState()/popState() ' + 'calls.') : invariant(false) : void 0;
|
336
|
-
return this._states[this._states.length - 1];
|
337
|
-
};
|
338
|
-
|
339
|
-
return Transformer;
|
340
|
-
}();
|
341
|
-
|
342
|
-
module.exports = {
|
343
|
-
transform: transform
|
344
|
-
};
|
@@ -1,218 +0,0 @@
|
|
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
|
-
*
|
8
|
-
* @format
|
9
|
-
*/
|
10
|
-
'use strict';
|
11
|
-
|
12
|
-
var invariant = require("fbjs/lib/invariant");
|
13
|
-
|
14
|
-
var _require = require('./RelayCompilerError'),
|
15
|
-
eachWithCombinedError = _require.eachWithCombinedError;
|
16
|
-
|
17
|
-
/**
|
18
|
-
* @public
|
19
|
-
*
|
20
|
-
* Helper for writing AST validators that shares the same logic with
|
21
|
-
* the transfomer
|
22
|
-
*
|
23
|
-
*/
|
24
|
-
function validate(context, visitor, stateInitializer) {
|
25
|
-
var validator = new Validator(context, visitor);
|
26
|
-
eachWithCombinedError(context.documents(), function (prevNode) {
|
27
|
-
if (stateInitializer === undefined) {
|
28
|
-
validator.visit(prevNode, undefined);
|
29
|
-
} else {
|
30
|
-
var _state = stateInitializer(prevNode);
|
31
|
-
|
32
|
-
if (_state != null) {
|
33
|
-
validator.visit(prevNode, _state);
|
34
|
-
}
|
35
|
-
}
|
36
|
-
});
|
37
|
-
}
|
38
|
-
/**
|
39
|
-
* @internal
|
40
|
-
*/
|
41
|
-
|
42
|
-
|
43
|
-
var Validator =
|
44
|
-
/*#__PURE__*/
|
45
|
-
function () {
|
46
|
-
function Validator(context, visitor) {
|
47
|
-
this._context = context;
|
48
|
-
this._states = [];
|
49
|
-
this._visitor = visitor;
|
50
|
-
}
|
51
|
-
|
52
|
-
var _proto = Validator.prototype;
|
53
|
-
|
54
|
-
_proto.getContext = function getContext() {
|
55
|
-
return this._context;
|
56
|
-
};
|
57
|
-
|
58
|
-
_proto.visit = function visit(node, state) {
|
59
|
-
this._states.push(state);
|
60
|
-
|
61
|
-
this._visit(node);
|
62
|
-
|
63
|
-
this._states.pop();
|
64
|
-
};
|
65
|
-
|
66
|
-
_proto.traverse = function traverse(node, state) {
|
67
|
-
this._states.push(state);
|
68
|
-
|
69
|
-
this._traverse(node);
|
70
|
-
|
71
|
-
this._states.pop();
|
72
|
-
};
|
73
|
-
|
74
|
-
_proto._visit = function _visit(node) {
|
75
|
-
var nodeVisitor = this._visitor[node.kind];
|
76
|
-
|
77
|
-
if (nodeVisitor) {
|
78
|
-
// If a handler for the kind is defined, it is responsible for calling
|
79
|
-
// `traverse` to transform children as necessary.
|
80
|
-
var _state2 = this._getState();
|
81
|
-
|
82
|
-
nodeVisitor.call(this, node, _state2);
|
83
|
-
return;
|
84
|
-
} // Otherwise traverse is called automatically.
|
85
|
-
|
86
|
-
|
87
|
-
this._traverse(node);
|
88
|
-
};
|
89
|
-
|
90
|
-
_proto._traverse = function _traverse(prevNode) {
|
91
|
-
switch (prevNode.kind) {
|
92
|
-
case 'Argument':
|
93
|
-
this._traverseChildren(prevNode, null, ['value']);
|
94
|
-
|
95
|
-
break;
|
96
|
-
|
97
|
-
case 'Literal':
|
98
|
-
case 'LocalArgumentDefinition':
|
99
|
-
case 'RootArgumentDefinition':
|
100
|
-
case 'Variable':
|
101
|
-
break;
|
102
|
-
|
103
|
-
case 'Defer':
|
104
|
-
this._traverseChildren(prevNode, ['selections'], ['if']);
|
105
|
-
|
106
|
-
break;
|
107
|
-
|
108
|
-
case 'Stream':
|
109
|
-
this._traverseChildren(prevNode, ['selections'], ['if', 'initialCount']);
|
110
|
-
|
111
|
-
break;
|
112
|
-
|
113
|
-
case 'ClientExtension':
|
114
|
-
this._traverseChildren(prevNode, ['selections']);
|
115
|
-
|
116
|
-
break;
|
117
|
-
|
118
|
-
case 'Directive':
|
119
|
-
this._traverseChildren(prevNode, ['args']);
|
120
|
-
|
121
|
-
break;
|
122
|
-
|
123
|
-
case 'ModuleImport':
|
124
|
-
this._traverseChildren(prevNode, ['selections']);
|
125
|
-
|
126
|
-
break;
|
127
|
-
|
128
|
-
case 'FragmentSpread':
|
129
|
-
case 'ScalarField':
|
130
|
-
this._traverseChildren(prevNode, ['args', 'directives']);
|
131
|
-
|
132
|
-
break;
|
133
|
-
|
134
|
-
case 'InlineDataFragmentSpread':
|
135
|
-
this._traverseChildren(prevNode, ['selections']);
|
136
|
-
|
137
|
-
break;
|
138
|
-
|
139
|
-
case 'ConnectionField':
|
140
|
-
case 'LinkedField':
|
141
|
-
this._traverseChildren(prevNode, ['args', 'directives', 'selections']);
|
142
|
-
|
143
|
-
break;
|
144
|
-
|
145
|
-
case 'Connection':
|
146
|
-
this._traverseChildren(prevNode, ['args', 'selections']);
|
147
|
-
|
148
|
-
break;
|
149
|
-
|
150
|
-
case 'Condition':
|
151
|
-
this._traverseChildren(prevNode, ['directives', 'selections'], ['condition']);
|
152
|
-
|
153
|
-
break;
|
154
|
-
|
155
|
-
case 'InlineFragment':
|
156
|
-
this._traverseChildren(prevNode, ['directives', 'selections']);
|
157
|
-
|
158
|
-
break;
|
159
|
-
|
160
|
-
case 'Fragment':
|
161
|
-
case 'Root':
|
162
|
-
this._traverseChildren(prevNode, ['argumentDefinitions', 'directives', 'selections']);
|
163
|
-
|
164
|
-
break;
|
165
|
-
|
166
|
-
case 'Request':
|
167
|
-
this._traverseChildren(prevNode, null, ['fragment', 'root']);
|
168
|
-
|
169
|
-
break;
|
170
|
-
|
171
|
-
case 'SplitOperation':
|
172
|
-
this._traverseChildren(prevNode, ['selections']);
|
173
|
-
|
174
|
-
break;
|
175
|
-
|
176
|
-
default:
|
177
|
-
prevNode;
|
178
|
-
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRValidator: Unknown kind `%s`.', prevNode.kind) : invariant(false) : void 0;
|
179
|
-
}
|
180
|
-
};
|
181
|
-
|
182
|
-
_proto._traverseChildren = function _traverseChildren(prevNode, pluralKeys, singularKeys) {
|
183
|
-
var _this = this;
|
184
|
-
|
185
|
-
pluralKeys && pluralKeys.forEach(function (key) {
|
186
|
-
var prevItems = prevNode[key];
|
187
|
-
|
188
|
-
if (!prevItems) {
|
189
|
-
return;
|
190
|
-
}
|
191
|
-
|
192
|
-
!Array.isArray(prevItems) ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRValidator: Expected data for `%s` to be an array, got `%s`.', key, prevItems) : invariant(false) : void 0;
|
193
|
-
prevItems.forEach(function (prevItem) {
|
194
|
-
return _this._visit(prevItem);
|
195
|
-
});
|
196
|
-
});
|
197
|
-
singularKeys && singularKeys.forEach(function (key) {
|
198
|
-
var prevItem = prevNode[key];
|
199
|
-
|
200
|
-
if (!prevItem) {
|
201
|
-
return;
|
202
|
-
}
|
203
|
-
|
204
|
-
_this._visit(prevItem);
|
205
|
-
});
|
206
|
-
};
|
207
|
-
|
208
|
-
_proto._getState = function _getState() {
|
209
|
-
!this._states.length ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRValidator: Expected a current state to be set but found none. ' + 'This is usually the result of mismatched number of pushState()/popState() ' + 'calls.') : invariant(false) : void 0;
|
210
|
-
return this._states[this._states.length - 1];
|
211
|
-
};
|
212
|
-
|
213
|
-
return Validator;
|
214
|
-
}();
|
215
|
-
|
216
|
-
module.exports = {
|
217
|
-
validate: validate
|
218
|
-
};
|
@@ -1,46 +0,0 @@
|
|
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
|
-
*
|
8
|
-
* @format
|
9
|
-
*/
|
10
|
-
'use strict';
|
11
|
-
|
12
|
-
var _require = require('graphql'),
|
13
|
-
visit = _require.visit;
|
14
|
-
|
15
|
-
var NodeKeys = {
|
16
|
-
Argument: ['value'],
|
17
|
-
ClientExtension: ['selections'],
|
18
|
-
Condition: ['condition', 'selections'],
|
19
|
-
Defer: ['selections', 'if'],
|
20
|
-
Connection: ['args', 'selections'],
|
21
|
-
ConnectionField: ['args', 'directives', 'selections'],
|
22
|
-
Directive: ['args'],
|
23
|
-
Fragment: ['argumentDefinitions', 'directives', 'selections'],
|
24
|
-
FragmentSpread: ['args', 'directives'],
|
25
|
-
InlineDataFragmentSpread: ['selections'],
|
26
|
-
InlineFragment: ['directives', 'selections'],
|
27
|
-
LinkedField: ['args', 'directives', 'selections'],
|
28
|
-
Literal: [],
|
29
|
-
LocalArgumentDefinition: [],
|
30
|
-
ModuleImport: ['selections'],
|
31
|
-
Request: ['fragment', 'root'],
|
32
|
-
Root: ['argumentDefinitions', 'directives', 'selections'],
|
33
|
-
RootArgumentDefinition: [],
|
34
|
-
ScalarField: ['args', 'directives'],
|
35
|
-
SplitOperation: ['selections'],
|
36
|
-
Stream: ['selections', 'if', 'initialCount'],
|
37
|
-
Variable: []
|
38
|
-
};
|
39
|
-
|
40
|
-
function visitIR(root, visitor) {
|
41
|
-
return visit(root, visitor, NodeKeys);
|
42
|
-
}
|
43
|
-
|
44
|
-
module.exports = {
|
45
|
-
visit: visitIR
|
46
|
-
};
|