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,277 +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
|
-
GraphQLError = _require.GraphQLError;
|
14
|
-
|
15
|
-
/**
|
16
|
-
* Creates an error describing invalid application code (GraphQL/Schema)
|
17
|
-
* that must be fixed by the end developer. This should only be used
|
18
|
-
* for local errors that don't affect processing of other user code.
|
19
|
-
*/
|
20
|
-
function createUserError(message, locations, nodes) {
|
21
|
-
var _nodes;
|
22
|
-
|
23
|
-
var messageWithLocations = message;
|
24
|
-
|
25
|
-
if (locations != null) {
|
26
|
-
var printedLocations = printLocations(locations);
|
27
|
-
messageWithLocations = printedLocations.length === 0 ? message : [message].concat(printedLocations).join('\n\n') + '\n';
|
28
|
-
}
|
29
|
-
|
30
|
-
return new GraphQLError(messageWithLocations, (_nodes = nodes) !== null && _nodes !== void 0 ? _nodes : []);
|
31
|
-
}
|
32
|
-
/**
|
33
|
-
* Similar to createUserError but for errors that are *not* recoverable:
|
34
|
-
* the compiler should not continue to process other inputs because their
|
35
|
-
* validity can't be determined.
|
36
|
-
*/
|
37
|
-
|
38
|
-
|
39
|
-
function createNonRecoverableUserError(message, locations, nodes) {
|
40
|
-
var _nodes2;
|
41
|
-
|
42
|
-
var messageWithLocations = message;
|
43
|
-
|
44
|
-
if (locations != null) {
|
45
|
-
var printedLocations = printLocations(locations);
|
46
|
-
messageWithLocations = printedLocations.length === 0 ? message : [message].concat(printedLocations).join('\n\n') + '\n';
|
47
|
-
}
|
48
|
-
|
49
|
-
var error = new GraphQLError(messageWithLocations, (_nodes2 = nodes) !== null && _nodes2 !== void 0 ? _nodes2 : []);
|
50
|
-
return new Error(error.message);
|
51
|
-
}
|
52
|
-
/**
|
53
|
-
* Creates an error describing a problem with the compiler itself - such
|
54
|
-
* as a broken invariant - that must be fixed within the compiler.
|
55
|
-
*/
|
56
|
-
|
57
|
-
|
58
|
-
function createCompilerError(message, locations, nodes) {
|
59
|
-
var _nodes3;
|
60
|
-
|
61
|
-
var messageWithLocations = message;
|
62
|
-
|
63
|
-
if (locations != null) {
|
64
|
-
var printedLocations = printLocations(locations);
|
65
|
-
messageWithLocations = printedLocations.length === 0 ? message : [message].concat(printedLocations).join('\n\n') + '\n';
|
66
|
-
}
|
67
|
-
|
68
|
-
var error = new GraphQLError("Internal Error: ".concat(messageWithLocations), (_nodes3 = nodes) !== null && _nodes3 !== void 0 ? _nodes3 : []);
|
69
|
-
return new Error(error.message);
|
70
|
-
}
|
71
|
-
/**
|
72
|
-
* Iterates over the elements of some iterable value, calling the
|
73
|
-
* supplied callback for each item with a guard for user errors.
|
74
|
-
*
|
75
|
-
* Non-user errors abort the iteration and are instantly rethrown.
|
76
|
-
* User errors are collected and rethrown at the end, if multiple user errors
|
77
|
-
* occur, a combined error is thrown.
|
78
|
-
*/
|
79
|
-
|
80
|
-
|
81
|
-
function eachWithCombinedError(iterable, fn) {
|
82
|
-
var errors = [];
|
83
|
-
var _iteratorNormalCompletion = true;
|
84
|
-
var _didIteratorError = false;
|
85
|
-
var _iteratorError = undefined;
|
86
|
-
|
87
|
-
try {
|
88
|
-
for (var _iterator = iterable[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
89
|
-
var item = _step.value;
|
90
|
-
|
91
|
-
try {
|
92
|
-
fn(item);
|
93
|
-
} catch (error) {
|
94
|
-
if (error instanceof GraphQLError) {
|
95
|
-
errors.push(error);
|
96
|
-
} else {
|
97
|
-
throw error;
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
} catch (err) {
|
102
|
-
_didIteratorError = true;
|
103
|
-
_iteratorError = err;
|
104
|
-
} finally {
|
105
|
-
try {
|
106
|
-
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
107
|
-
_iterator["return"]();
|
108
|
-
}
|
109
|
-
} finally {
|
110
|
-
if (_didIteratorError) {
|
111
|
-
throw _iteratorError;
|
112
|
-
}
|
113
|
-
}
|
114
|
-
}
|
115
|
-
|
116
|
-
if (errors.length > 0) {
|
117
|
-
if (errors.length === 1) {
|
118
|
-
throw errors[0];
|
119
|
-
}
|
120
|
-
|
121
|
-
throw createUserError("Encountered ".concat(errors.length, " errors:\n") + errors.map(function (error) {
|
122
|
-
return String(error).split('\n').map(function (line, index) {
|
123
|
-
return index === 0 ? "- ".concat(line) : " ".concat(line);
|
124
|
-
}).join('\n');
|
125
|
-
}).join('\n'));
|
126
|
-
}
|
127
|
-
}
|
128
|
-
|
129
|
-
function printLocations(locations) {
|
130
|
-
var printedLocations = [];
|
131
|
-
var _iteratorNormalCompletion2 = true;
|
132
|
-
var _didIteratorError2 = false;
|
133
|
-
var _iteratorError2 = undefined;
|
134
|
-
|
135
|
-
try {
|
136
|
-
for (var _iterator2 = locations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
137
|
-
var location = _step2.value;
|
138
|
-
var sourceLocation = location;
|
139
|
-
|
140
|
-
while (sourceLocation.kind === 'Derived') {
|
141
|
-
sourceLocation = sourceLocation.source;
|
142
|
-
}
|
143
|
-
|
144
|
-
switch (sourceLocation.kind) {
|
145
|
-
case 'Source':
|
146
|
-
{
|
147
|
-
// source location
|
148
|
-
var prefix = sourceLocation === location ? 'Source: ' : 'Source (derived): ';
|
149
|
-
printedLocations.push(prefix + highlightSourceAtLocation(sourceLocation.source, getLocation(sourceLocation.source, sourceLocation.start)));
|
150
|
-
break;
|
151
|
-
}
|
152
|
-
|
153
|
-
case 'Generated':
|
154
|
-
{
|
155
|
-
printedLocations.push('Source: (generated)');
|
156
|
-
break;
|
157
|
-
}
|
158
|
-
|
159
|
-
case 'Unknown':
|
160
|
-
{
|
161
|
-
printedLocations.push('Source: (unknown)');
|
162
|
-
break;
|
163
|
-
}
|
164
|
-
|
165
|
-
default:
|
166
|
-
{
|
167
|
-
sourceLocation;
|
168
|
-
throw createCompilerError("RelayCompilerError: cannot print location '".concat(String(sourceLocation), "'."));
|
169
|
-
}
|
170
|
-
}
|
171
|
-
}
|
172
|
-
} catch (err) {
|
173
|
-
_didIteratorError2 = true;
|
174
|
-
_iteratorError2 = err;
|
175
|
-
} finally {
|
176
|
-
try {
|
177
|
-
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
|
178
|
-
_iterator2["return"]();
|
179
|
-
}
|
180
|
-
} finally {
|
181
|
-
if (_didIteratorError2) {
|
182
|
-
throw _iteratorError2;
|
183
|
-
}
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
return printedLocations;
|
188
|
-
}
|
189
|
-
/**
|
190
|
-
* Render a helpful description of the location of the error in the GraphQL
|
191
|
-
* Source document.
|
192
|
-
*/
|
193
|
-
|
194
|
-
|
195
|
-
function highlightSourceAtLocation(source, location) {
|
196
|
-
var firstLineColumnOffset = source.locationOffset.column - 1;
|
197
|
-
var body = whitespace(firstLineColumnOffset) + source.body;
|
198
|
-
var lineIndex = location.line - 1;
|
199
|
-
var lineOffset = source.locationOffset.line - 1;
|
200
|
-
var lineNum = location.line + lineOffset;
|
201
|
-
var columnOffset = location.line === 1 ? firstLineColumnOffset : 0;
|
202
|
-
var columnNum = location.column + columnOffset;
|
203
|
-
var lines = body.split(/\r\n|[\n\r]/g);
|
204
|
-
return "".concat(source.name, " (").concat(lineNum, ":").concat(columnNum, ")\n") + printPrefixedLines([// Lines specified like this: ["prefix", "string"],
|
205
|
-
["".concat(lineNum - 1, ": "), lines[lineIndex - 1]], ["".concat(lineNum, ": "), lines[lineIndex]], ['', whitespace(columnNum - 1) + '^'], ["".concat(lineNum + 1, ": "), lines[lineIndex + 1]]]);
|
206
|
-
}
|
207
|
-
|
208
|
-
function printPrefixedLines(lines) {
|
209
|
-
var existingLines = lines.filter(function (_ref) {
|
210
|
-
var _ = _ref[0],
|
211
|
-
line = _ref[1];
|
212
|
-
return line !== undefined;
|
213
|
-
});
|
214
|
-
var padLen = 0;
|
215
|
-
var _iteratorNormalCompletion3 = true;
|
216
|
-
var _didIteratorError3 = false;
|
217
|
-
var _iteratorError3 = undefined;
|
218
|
-
|
219
|
-
try {
|
220
|
-
for (var _iterator3 = existingLines[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
221
|
-
var _step3$value = _step3.value,
|
222
|
-
prefix = _step3$value[0];
|
223
|
-
padLen = Math.max(padLen, prefix.length);
|
224
|
-
}
|
225
|
-
} catch (err) {
|
226
|
-
_didIteratorError3 = true;
|
227
|
-
_iteratorError3 = err;
|
228
|
-
} finally {
|
229
|
-
try {
|
230
|
-
if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
|
231
|
-
_iterator3["return"]();
|
232
|
-
}
|
233
|
-
} finally {
|
234
|
-
if (_didIteratorError3) {
|
235
|
-
throw _iteratorError3;
|
236
|
-
}
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
return existingLines.map(function (_ref2) {
|
241
|
-
var prefix = _ref2[0],
|
242
|
-
line = _ref2[1];
|
243
|
-
return lpad(padLen, prefix) + line;
|
244
|
-
}).join('\n');
|
245
|
-
}
|
246
|
-
|
247
|
-
function whitespace(len) {
|
248
|
-
return Array(len + 1).join(' ');
|
249
|
-
}
|
250
|
-
|
251
|
-
function lpad(len, str) {
|
252
|
-
return whitespace(len - str.length) + str;
|
253
|
-
}
|
254
|
-
|
255
|
-
function getLocation(source, position) {
|
256
|
-
var lineRegexp = /\r\n|[\n\r]/g;
|
257
|
-
var line = 1;
|
258
|
-
var column = position + 1;
|
259
|
-
var match;
|
260
|
-
|
261
|
-
while ((match = lineRegexp.exec(source.body)) && match.index < position) {
|
262
|
-
line += 1;
|
263
|
-
column = position + 1 - (match.index + match[0].length);
|
264
|
-
}
|
265
|
-
|
266
|
-
return {
|
267
|
-
line: line,
|
268
|
-
column: column
|
269
|
-
};
|
270
|
-
}
|
271
|
-
|
272
|
-
module.exports = {
|
273
|
-
createCompilerError: createCompilerError,
|
274
|
-
createNonRecoverableUserError: createNonRecoverableUserError,
|
275
|
-
createUserError: createUserError,
|
276
|
-
eachWithCombinedError: eachWithCombinedError
|
277
|
-
};
|
@@ -1,276 +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
|
-
// flowlint ambiguous-object-type:error
|
11
|
-
'use strict';
|
12
|
-
|
13
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
14
|
-
|
15
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
|
16
|
-
|
17
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
18
|
-
|
19
|
-
var IRTransformer = require('../core/IRTransformer');
|
20
|
-
|
21
|
-
var _require = require('../core/CompilerError'),
|
22
|
-
createUserError = _require.createUserError;
|
23
|
-
|
24
|
-
var _require2 = require('./ConnectionTransform'),
|
25
|
-
buildConnectionMetadata = _require2.buildConnectionMetadata;
|
26
|
-
|
27
|
-
var _require3 = require('relay-runtime'),
|
28
|
-
ConnectionInterface = _require3.ConnectionInterface;
|
29
|
-
|
30
|
-
var SCHEMA_EXTENSION = "\n directive @connection_resolver(label: String!) on FIELD\n directive @stream_connection_resolver(\n label: String!\n initial_count: Int!\n if: Boolean = true\n ) on FIELD\n";
|
31
|
-
|
32
|
-
/**
|
33
|
-
* This transform rewrites LinkedField nodes with @connection_resolver and
|
34
|
-
* rewrites their edges/pageInfo selections to be wrapped in a Connection node.
|
35
|
-
*/
|
36
|
-
function connectionFieldTransform(context) {
|
37
|
-
return IRTransformer.transform(context, {
|
38
|
-
Fragment: visitFragmentOrRoot,
|
39
|
-
LinkedField: visitLinkedField,
|
40
|
-
Root: visitFragmentOrRoot,
|
41
|
-
ScalarField: visitScalarField
|
42
|
-
}, function (node) {
|
43
|
-
return {
|
44
|
-
documentName: node.name,
|
45
|
-
labels: new Map(),
|
46
|
-
path: [],
|
47
|
-
connectionMetadata: []
|
48
|
-
};
|
49
|
-
});
|
50
|
-
}
|
51
|
-
|
52
|
-
function visitFragmentOrRoot(node, state) {
|
53
|
-
var transformedNode = this.traverse(node, state);
|
54
|
-
var connectionMetadata = state.connectionMetadata;
|
55
|
-
|
56
|
-
if (connectionMetadata.length) {
|
57
|
-
return (0, _objectSpread2["default"])({}, transformedNode, {
|
58
|
-
metadata: (0, _objectSpread2["default"])({}, transformedNode.metadata, {
|
59
|
-
connection: connectionMetadata
|
60
|
-
})
|
61
|
-
});
|
62
|
-
}
|
63
|
-
|
64
|
-
return transformedNode;
|
65
|
-
}
|
66
|
-
|
67
|
-
function visitLinkedField(field, state) {
|
68
|
-
var context = this.getContext();
|
69
|
-
var schema = context.getSchema();
|
70
|
-
var path = state.path.concat(field.alias);
|
71
|
-
var transformed = this.traverse(field, (0, _objectSpread2["default"])({}, state, {
|
72
|
-
path: path
|
73
|
-
}));
|
74
|
-
var connectionDirective = transformed.directives.find(function (directive) {
|
75
|
-
return directive.name === 'connection_resolver' || directive.name === 'stream_connection_resolver';
|
76
|
-
});
|
77
|
-
|
78
|
-
if (connectionDirective == null) {
|
79
|
-
return transformed;
|
80
|
-
}
|
81
|
-
|
82
|
-
if (schema.isList(schema.getNullableType(transformed.type))) {
|
83
|
-
throw createUserError("@connection_resolver fields must return a single value, not a list, found '" + "".concat(schema.getTypeString(transformed.type), "'"), [transformed.loc]);
|
84
|
-
}
|
85
|
-
|
86
|
-
var labelArg = connectionDirective.args.find(function (_ref4) {
|
87
|
-
var name = _ref4.name;
|
88
|
-
return name === 'label';
|
89
|
-
});
|
90
|
-
var label = getLiteralStringArgument(connectionDirective, 'label');
|
91
|
-
|
92
|
-
if (typeof label !== 'string' || label !== state.documentName && label.indexOf(state.documentName + '$') !== 0) {
|
93
|
-
var _ref;
|
94
|
-
|
95
|
-
throw createUserError('Invalid usage of @connection_resolver, expected a static string ' + "'label'. Labels may be the document name ('".concat(state.documentName, "') ") + "or be prefixed with the document name ('".concat(state.documentName, "$<name>')"), [(_ref = labelArg === null || labelArg === void 0 ? void 0 : labelArg.loc) !== null && _ref !== void 0 ? _ref : connectionDirective.loc]);
|
96
|
-
}
|
97
|
-
|
98
|
-
var previousDirective = state.labels.get(label);
|
99
|
-
|
100
|
-
if (previousDirective != null) {
|
101
|
-
var _ref2;
|
102
|
-
|
103
|
-
var prevLabelArg = previousDirective.args.find(function (_ref5) {
|
104
|
-
var name = _ref5.name;
|
105
|
-
return name === 'label';
|
106
|
-
});
|
107
|
-
var previousLocation = (_ref2 = prevLabelArg === null || prevLabelArg === void 0 ? void 0 : prevLabelArg.loc) !== null && _ref2 !== void 0 ? _ref2 : previousDirective.loc;
|
108
|
-
|
109
|
-
if (labelArg) {
|
110
|
-
throw createUserError('Invalid use of @connection_resolver, the provided label is ' + "not unique. Specify a unique 'label' as a literal string.", [labelArg === null || labelArg === void 0 ? void 0 : labelArg.loc, previousLocation]);
|
111
|
-
} else {
|
112
|
-
throw createUserError('Invalid use of @connection_resolver, could not generate a ' + "default label that is unique. Specify a unique 'label' " + 'as a literal string.', [connectionDirective.loc, previousLocation]);
|
113
|
-
}
|
114
|
-
}
|
115
|
-
|
116
|
-
state.labels.set(label, connectionDirective);
|
117
|
-
var stream = null;
|
118
|
-
|
119
|
-
if (connectionDirective.name === 'stream_connection_resolver') {
|
120
|
-
var initialCountArg = connectionDirective.args.find(function (arg) {
|
121
|
-
return arg.name === 'initial_count';
|
122
|
-
});
|
123
|
-
var ifArg = connectionDirective.args.find(function (arg) {
|
124
|
-
return arg.name === 'if';
|
125
|
-
});
|
126
|
-
|
127
|
-
if (initialCountArg == null || initialCountArg.value.kind === 'Literal' && !Number.isInteger(initialCountArg.value.value)) {
|
128
|
-
var _ref3;
|
129
|
-
|
130
|
-
throw createUserError("Invalid use of @connection_resolver, 'initial_count' is required " + "and must be an integer or variable of type 'Int!''.", [(_ref3 = initialCountArg === null || initialCountArg === void 0 ? void 0 : initialCountArg.loc) !== null && _ref3 !== void 0 ? _ref3 : connectionDirective.loc]);
|
131
|
-
}
|
132
|
-
|
133
|
-
stream = {
|
134
|
-
deferLabel: label,
|
135
|
-
initialCount: initialCountArg.value,
|
136
|
-
"if": ifArg != null ? ifArg.value : null,
|
137
|
-
streamLabel: label
|
138
|
-
};
|
139
|
-
}
|
140
|
-
|
141
|
-
var _ConnectionInterface$ = ConnectionInterface.get(),
|
142
|
-
EDGES = _ConnectionInterface$.EDGES,
|
143
|
-
PAGE_INFO = _ConnectionInterface$.PAGE_INFO;
|
144
|
-
|
145
|
-
var edgeField;
|
146
|
-
var pageInfoField;
|
147
|
-
var selections = [];
|
148
|
-
transformed.selections.forEach(function (selection) {
|
149
|
-
if (!(selection.kind === 'LinkedField' || selection.kind === 'ScalarField')) {
|
150
|
-
throw createUserError('Invalid use of @connection_resolver, selections on the connection ' + 'must be linked or scalar fields.', [selection.loc]);
|
151
|
-
}
|
152
|
-
|
153
|
-
if (selection.kind === 'LinkedField') {
|
154
|
-
if (selection.name === EDGES) {
|
155
|
-
edgeField = selection;
|
156
|
-
} else if (selection.name === PAGE_INFO) {
|
157
|
-
pageInfoField = selection;
|
158
|
-
} else {
|
159
|
-
selections.push(selection);
|
160
|
-
}
|
161
|
-
} else {
|
162
|
-
selections.push(selection);
|
163
|
-
}
|
164
|
-
});
|
165
|
-
|
166
|
-
if (edgeField == null || pageInfoField == null) {
|
167
|
-
throw createUserError("Invalid use of @connection_resolver, fields '".concat(EDGES, "' and ") + "'".concat(PAGE_INFO, "' must be fetched."), [connectionDirective.loc]);
|
168
|
-
}
|
169
|
-
|
170
|
-
var connectionType = schema.getRawType(transformed.type);
|
171
|
-
var edgesFieldDef = schema.isObject(connectionType) ? schema.getFieldByName(schema.assertObjectType(connectionType), 'edges') : null;
|
172
|
-
var edgesType = edgesFieldDef != null ? schema.getRawType(schema.getFieldType(edgesFieldDef)) : null;
|
173
|
-
var nodeFieldDef = edgesType != null && schema.isObject(edgesType) ? schema.getFieldByName(schema.assertObjectType(edgesType), 'node') : null;
|
174
|
-
var nodeType = nodeFieldDef != null ? schema.getRawType(schema.getFieldType(nodeFieldDef)) : null;
|
175
|
-
|
176
|
-
if (edgesType == null || nodeType == null || !(schema.isObject(nodeType) || schema.isInterface(nodeType) || schema.isUnion(nodeType))) {
|
177
|
-
throw createUserError('Invalid usage of @connection_resolver, expected field to have shape ' + "'field { edges { node { ...} } }'.", [transformed.loc]);
|
178
|
-
}
|
179
|
-
|
180
|
-
edgeField = (0, _objectSpread2["default"])({}, edgeField, {
|
181
|
-
selections: [].concat((0, _toConsumableArray2["default"])(edgeField.selections), [{
|
182
|
-
alias: '__id',
|
183
|
-
args: [],
|
184
|
-
directives: [],
|
185
|
-
handles: null,
|
186
|
-
kind: 'ScalarField',
|
187
|
-
loc: edgeField.loc,
|
188
|
-
metadata: null,
|
189
|
-
name: '__id',
|
190
|
-
type: schema.assertScalarFieldType(schema.getNonNullType(schema.expectIdType()))
|
191
|
-
}, {
|
192
|
-
alias: 'node',
|
193
|
-
args: [],
|
194
|
-
connection: false,
|
195
|
-
directives: [],
|
196
|
-
handles: null,
|
197
|
-
kind: 'LinkedField',
|
198
|
-
loc: edgeField.loc,
|
199
|
-
metadata: null,
|
200
|
-
name: 'node',
|
201
|
-
selections: [{
|
202
|
-
alias: '__id',
|
203
|
-
args: [],
|
204
|
-
directives: [],
|
205
|
-
handles: null,
|
206
|
-
kind: 'ScalarField',
|
207
|
-
loc: edgeField.loc,
|
208
|
-
metadata: null,
|
209
|
-
name: '__id',
|
210
|
-
type: schema.assertScalarFieldType(schema.getNonNullType(schema.expectIdType()))
|
211
|
-
}],
|
212
|
-
type: schema.assertLinkedFieldType(nodeType)
|
213
|
-
}])
|
214
|
-
});
|
215
|
-
selections.push({
|
216
|
-
args: transformed.args,
|
217
|
-
kind: 'Connection',
|
218
|
-
label: label,
|
219
|
-
loc: transformed.loc,
|
220
|
-
name: transformed.name,
|
221
|
-
selections: [edgeField, pageInfoField],
|
222
|
-
stream: stream,
|
223
|
-
type: transformed.type
|
224
|
-
});
|
225
|
-
var connectionMetadata = buildConnectionMetadata(transformed, path, stream != null);
|
226
|
-
state.connectionMetadata.push(connectionMetadata);
|
227
|
-
return {
|
228
|
-
alias: transformed.alias,
|
229
|
-
args: transformed.args,
|
230
|
-
directives: transformed.directives.filter(function (directive) {
|
231
|
-
return directive !== connectionDirective;
|
232
|
-
}),
|
233
|
-
kind: 'ConnectionField',
|
234
|
-
loc: transformed.loc,
|
235
|
-
metadata: null,
|
236
|
-
name: transformed.name,
|
237
|
-
selections: selections,
|
238
|
-
type: transformed.type
|
239
|
-
};
|
240
|
-
}
|
241
|
-
|
242
|
-
function visitScalarField(field) {
|
243
|
-
var connectionDirective = field.directives.find(function (directive) {
|
244
|
-
return directive.name === 'connection_resolver';
|
245
|
-
});
|
246
|
-
|
247
|
-
if (connectionDirective != null) {
|
248
|
-
throw createUserError('The @connection_resolver direction is not supported on scalar fields, ' + 'only fields returning an object/interface/union', [connectionDirective.loc]);
|
249
|
-
}
|
250
|
-
|
251
|
-
return field;
|
252
|
-
}
|
253
|
-
|
254
|
-
function getLiteralStringArgument(directive, argName) {
|
255
|
-
var arg = directive.args.find(function (_ref6) {
|
256
|
-
var name = _ref6.name;
|
257
|
-
return name === argName;
|
258
|
-
});
|
259
|
-
|
260
|
-
if (arg == null) {
|
261
|
-
return null;
|
262
|
-
}
|
263
|
-
|
264
|
-
var value = arg.value.kind === 'Literal' ? arg.value.value : null;
|
265
|
-
|
266
|
-
if (value == null || typeof value !== 'string') {
|
267
|
-
throw createUserError("Expected the '".concat(argName, "' value to @").concat(directive.name, " to be a string literal if provided."), [arg.value.loc]);
|
268
|
-
}
|
269
|
-
|
270
|
-
return value;
|
271
|
-
}
|
272
|
-
|
273
|
-
module.exports = {
|
274
|
-
SCHEMA_EXTENSION: SCHEMA_EXTENSION,
|
275
|
-
transform: connectionFieldTransform
|
276
|
-
};
|