@ardatan/relay-compiler 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- 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 +19066 -0
- 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 +566 -0
- package/codegen/ReaderCodeGenerator.js.flow +512 -0
- package/codegen/RelayCodeGenerator.js.flow +85 -0
- package/codegen/RelayFileWriter.js.flow +367 -0
- package/codegen/SourceControl.js.flow +58 -0
- package/codegen/compileRelayArtifacts.js.flow +182 -0
- package/codegen/createPrintRequireModuleDependency.js.flow +19 -0
- package/codegen/sortObjectByKey.js.flow +25 -0
- package/codegen/writeRelayGeneratedFile.js.flow +239 -0
- package/core/ASTCache.js.flow +74 -0
- package/core/ASTConvert.js.flow +233 -0
- package/core/CompilerContext.js.flow +191 -0
- package/core/CompilerError.js.flow +255 -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 +326 -0
- package/core/IRPrinter.js.flow +478 -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 +138 -0
- package/core/RelayParser.js.flow +1734 -0
- package/core/RelaySourceModuleParser.js.flow +135 -0
- package/core/Schema.js.flow +2037 -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 +10 -0
- package/index.js.flow +200 -0
- package/language/RelayLanguagePluginInterface.js.flow +283 -0
- package/language/javascript/FindGraphQLTags.js.flow +137 -0
- package/language/javascript/RelayFlowBabelFactories.js.flow +176 -0
- package/language/javascript/RelayFlowGenerator.js.flow +1100 -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 +143 -0
- package/lib/bin/RelayCompilerMain.js +486 -0
- package/lib/bin/__fixtures__/plugin-module.js +16 -0
- package/lib/codegen/CodegenDirectory.js +336 -0
- package/lib/codegen/CodegenRunner.js +433 -0
- package/lib/codegen/CodegenTypes.js +11 -0
- package/lib/codegen/CodegenWatcher.js +271 -0
- package/lib/codegen/NormalizationCodeGenerator.js +480 -0
- package/lib/codegen/ReaderCodeGenerator.js +472 -0
- package/lib/codegen/RelayCodeGenerator.js +68 -0
- package/lib/codegen/RelayFileWriter.js +270 -0
- package/lib/codegen/SourceControl.js +60 -0
- package/lib/codegen/compileRelayArtifacts.js +157 -0
- package/lib/codegen/createPrintRequireModuleDependency.js +19 -0
- package/lib/codegen/sortObjectByKey.js +41 -0
- package/lib/codegen/writeRelayGeneratedFile.js +208 -0
- package/lib/core/ASTCache.js +70 -0
- package/lib/core/ASTConvert.js +198 -0
- package/lib/core/CompilerContext.js +165 -0
- package/lib/core/CompilerError.js +251 -0
- package/lib/core/DotGraphQLParser.js +40 -0
- package/lib/core/GraphQLCompilerProfiler.js +299 -0
- package/lib/core/GraphQLDerivedFromMetadata.js +31 -0
- package/lib/core/GraphQLWatchmanClient.js +150 -0
- package/lib/core/IR.js +11 -0
- package/lib/core/IRPrinter.js +389 -0
- package/lib/core/IRTransformer.js +345 -0
- package/lib/core/IRValidator.js +226 -0
- package/lib/core/IRVisitor.js +45 -0
- package/lib/core/JSModuleParser.js +18 -0
- package/lib/core/RelayCompilerScope.js +149 -0
- package/lib/core/RelayFindGraphQLTags.js +79 -0
- package/lib/core/RelayGraphQLEnumsGenerator.js +50 -0
- package/lib/core/RelayIRTransforms.js +109 -0
- package/lib/core/RelayParser.js +1382 -0
- package/lib/core/RelaySourceModuleParser.js +104 -0
- package/lib/core/Schema.js +1877 -0
- package/lib/core/SchemaUtils.js +98 -0
- package/lib/core/filterContextForNode.js +49 -0
- package/lib/core/getFieldDefinition.js +145 -0
- package/lib/core/getIdentifierForArgumentValue.js +53 -0
- package/lib/core/getIdentifierForSelection.js +48 -0
- package/lib/core/getLiteralArgumentValues.js +26 -0
- package/lib/core/getNormalizationOperationName.js +17 -0
- package/lib/core/inferRootArgumentDefinitions.js +351 -0
- package/lib/index.js +178 -0
- package/lib/language/RelayLanguagePluginInterface.js +14 -0
- package/lib/language/javascript/FindGraphQLTags.js +126 -0
- package/lib/language/javascript/RelayFlowBabelFactories.js +160 -0
- package/lib/language/javascript/RelayFlowGenerator.js +857 -0
- package/lib/language/javascript/RelayFlowTypeTransformers.js +119 -0
- package/lib/language/javascript/RelayLanguagePluginJavaScript.js +30 -0
- package/lib/language/javascript/formatGeneratedModule.js +36 -0
- package/lib/reporters/ConsoleReporter.js +61 -0
- package/lib/reporters/MultiReporter.js +45 -0
- package/lib/reporters/Reporter.js +11 -0
- package/lib/runner/Artifacts.js +323 -0
- package/lib/runner/BufferedFilesystem.js +261 -0
- package/lib/runner/GraphQLASTNodeGroup.js +256 -0
- package/lib/runner/GraphQLASTUtils.js +23 -0
- package/lib/runner/GraphQLNodeMap.js +81 -0
- package/lib/runner/Sources.js +271 -0
- package/lib/runner/StrictMap.js +134 -0
- package/lib/runner/compileArtifacts.js +39 -0
- package/lib/runner/extractAST.js +77 -0
- package/lib/runner/getChangedNodeNames.js +82 -0
- package/lib/runner/getSchemaInstance.js +30 -0
- package/lib/runner/types.js +12 -0
- package/lib/transforms/ApplyFragmentArgumentTransform.js +393 -0
- package/lib/transforms/ClientExtensionsTransform.js +222 -0
- package/lib/transforms/ConnectionTransform.js +643 -0
- package/lib/transforms/DeclarativeConnectionMutationTransform.js +221 -0
- package/lib/transforms/DeferStreamTransform.js +247 -0
- package/lib/transforms/DisallowIdAsAlias.js +41 -0
- package/lib/transforms/DisallowTypenameOnRoot.js +53 -0
- package/lib/transforms/FieldHandleTransform.js +81 -0
- package/lib/transforms/FilterCompilerDirectivesTransform.js +29 -0
- package/lib/transforms/FilterDirectivesTransform.js +41 -0
- package/lib/transforms/FlattenTransform.js +308 -0
- package/lib/transforms/GenerateIDFieldTransform.js +137 -0
- package/lib/transforms/GenerateTypeNameTransform.js +155 -0
- package/lib/transforms/InlineDataFragmentTransform.js +104 -0
- package/lib/transforms/InlineFragmentsTransform.js +63 -0
- package/lib/transforms/MaskTransform.js +121 -0
- package/lib/transforms/MatchTransform.js +438 -0
- package/lib/transforms/ReactFlightComponentTransform.js +161 -0
- package/lib/transforms/RefetchableFragmentTransform.js +249 -0
- package/lib/transforms/RelayDirectiveTransform.js +85 -0
- package/lib/transforms/RequiredFieldTransform.js +373 -0
- package/lib/transforms/SkipClientExtensionsTransform.js +49 -0
- package/lib/transforms/SkipHandleFieldTransform.js +45 -0
- package/lib/transforms/SkipRedundantNodesTransform.js +255 -0
- package/lib/transforms/SkipSplitOperationTransform.js +32 -0
- package/lib/transforms/SkipUnreachableNodeTransform.js +158 -0
- package/lib/transforms/SkipUnusedVariablesTransform.js +74 -0
- package/lib/transforms/SplitModuleImportTransform.js +85 -0
- package/lib/transforms/TestOperationTransform.js +145 -0
- package/lib/transforms/TransformUtils.js +21 -0
- package/lib/transforms/ValidateGlobalVariablesTransform.js +91 -0
- package/lib/transforms/ValidateRequiredArgumentsTransform.js +118 -0
- package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +111 -0
- package/lib/transforms/ValidateUnusedVariablesTransform.js +96 -0
- package/lib/transforms/query-generators/FetchableQueryGenerator.js +157 -0
- package/lib/transforms/query-generators/NodeQueryGenerator.js +166 -0
- package/lib/transforms/query-generators/QueryQueryGenerator.js +48 -0
- package/lib/transforms/query-generators/ViewerQueryGenerator.js +77 -0
- package/lib/transforms/query-generators/index.js +60 -0
- package/lib/transforms/query-generators/utils.js +92 -0
- package/lib/util/CodeMarker.js +80 -0
- package/lib/util/DefaultHandleKey.js +15 -0
- package/lib/util/RelayCompilerCache.js +98 -0
- package/lib/util/Rollout.js +40 -0
- package/lib/util/TimeReporter.js +83 -0
- package/lib/util/areEqualArgValues.js +135 -0
- package/lib/util/argumentContainsVariables.js +37 -0
- package/lib/util/dedupeJSONStringify.js +160 -0
- package/lib/util/generateAbstractTypeRefinementKey.js +24 -0
- package/lib/util/getDefinitionNodeHash.js +22 -0
- package/lib/util/getModuleName.js +32 -0
- package/lib/util/joinArgumentDefinitions.js +66 -0
- package/lib/util/md5.js +17 -0
- package/lib/util/murmurHash.js +86 -0
- package/lib/util/nullthrowsOSS.js +23 -0
- package/lib/util/orList.js +36 -0
- package/lib/util/partitionArray.js +35 -0
- package/package.json +42 -0
- package/relay-compiler.js +17 -0
- package/relay-compiler.min.js +22 -0
- 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 +228 -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 +226 -0
- package/transforms/ConnectionTransform.js.flow +859 -0
- package/transforms/DeclarativeConnectionMutationTransform.js.flow +250 -0
- package/transforms/DeferStreamTransform.js.flow +266 -0
- package/transforms/DisallowIdAsAlias.js.flow +48 -0
- package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
- package/transforms/FieldHandleTransform.js.flow +81 -0
- package/transforms/FilterCompilerDirectivesTransform.js.flow +33 -0
- package/transforms/FilterDirectivesTransform.js.flow +45 -0
- package/transforms/FlattenTransform.js.flow +462 -0
- package/transforms/GenerateIDFieldTransform.js.flow +154 -0
- package/transforms/GenerateTypeNameTransform.js.flow +167 -0
- package/transforms/InlineDataFragmentTransform.js.flow +129 -0
- package/transforms/InlineFragmentsTransform.js.flow +73 -0
- package/transforms/MaskTransform.js.flow +130 -0
- package/transforms/MatchTransform.js.flow +593 -0
- package/transforms/ReactFlightComponentTransform.js.flow +198 -0
- package/transforms/RefetchableFragmentTransform.js.flow +272 -0
- package/transforms/RelayDirectiveTransform.js.flow +99 -0
- package/transforms/RequiredFieldTransform.js.flow +419 -0
- package/transforms/SkipClientExtensionsTransform.js.flow +57 -0
- package/transforms/SkipHandleFieldTransform.js.flow +45 -0
- package/transforms/SkipRedundantNodesTransform.js.flow +259 -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 +101 -0
- package/transforms/TestOperationTransform.js.flow +143 -0
- package/transforms/TransformUtils.js.flow +26 -0
- package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
- package/transforms/ValidateRequiredArgumentsTransform.js.flow +131 -0
- package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +115 -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/util/DefaultHandleKey.js.flow +17 -0
- package/util/RelayCompilerCache.js.flow +88 -0
- package/util/Rollout.js.flow +39 -0
- package/util/TimeReporter.js.flow +79 -0
- package/util/areEqualArgValues.js.flow +126 -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
|
@@ -0,0 +1,149 @@
|
|
|
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 _require = require('./CompilerError'),
|
|
14
|
+
createUserError = _require.createUserError,
|
|
15
|
+
eachWithCombinedError = _require.eachWithCombinedError;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Creates a scope for a `Root`, with each argument mapped to a variable of the
|
|
19
|
+
* same name. Example:
|
|
20
|
+
*
|
|
21
|
+
* Query:
|
|
22
|
+
* query Foo($id: ID, $size: Int = 42) { ... }
|
|
23
|
+
*
|
|
24
|
+
* Scope:
|
|
25
|
+
* {
|
|
26
|
+
* id: $id,
|
|
27
|
+
* size: $size,
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* Note that even though a default value is defined for $size, the scope must
|
|
31
|
+
* assume that this could be overridden at runtime. The value cannot be decided
|
|
32
|
+
* statically and therefore is set to a variable.
|
|
33
|
+
*/
|
|
34
|
+
function getRootScope(definitions) {
|
|
35
|
+
var scope = {};
|
|
36
|
+
definitions.forEach(function (definition) {
|
|
37
|
+
scope[definition.name] = {
|
|
38
|
+
kind: 'Variable',
|
|
39
|
+
loc: definition.loc,
|
|
40
|
+
variableName: definition.name,
|
|
41
|
+
type: definition.type
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
return scope;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates a scope for a `Fragment` by translating fragment spread arguments in
|
|
48
|
+
* the context of a parent scope into a new scope and validating them against
|
|
49
|
+
* the argument definitions.
|
|
50
|
+
*
|
|
51
|
+
*
|
|
52
|
+
* Parent Scope:
|
|
53
|
+
* {
|
|
54
|
+
* active: $parentActive
|
|
55
|
+
* }
|
|
56
|
+
*
|
|
57
|
+
* Fragment Spread:
|
|
58
|
+
* ...Bar(size: 42, enabled: $active)
|
|
59
|
+
*
|
|
60
|
+
* Fragment:
|
|
61
|
+
* fragment Bar on Foo @argumentDefinitions(
|
|
62
|
+
* id: {type: "ID"}
|
|
63
|
+
* size: {type: "Int"}
|
|
64
|
+
* enabled: {type: "Boolean}
|
|
65
|
+
* scale: {type: "Int", imports: "pixelRatio"}
|
|
66
|
+
* )
|
|
67
|
+
*
|
|
68
|
+
* Scope:
|
|
69
|
+
* {
|
|
70
|
+
* // No argument is provided for $id, it gets the default value which in this
|
|
71
|
+
* // case is `null`:
|
|
72
|
+
* id: null,
|
|
73
|
+
*
|
|
74
|
+
* // The parent passes 42 as a literal value for $size:
|
|
75
|
+
* size: 42,
|
|
76
|
+
*
|
|
77
|
+
* // The parent passes a variable as the value of $enabled. This variable is
|
|
78
|
+
* // resolved in the parent scope to the value $parentActive, which becomes
|
|
79
|
+
* // the value of $enabled:
|
|
80
|
+
* $enabled: $parentActive,
|
|
81
|
+
*
|
|
82
|
+
* // $scale imports pixelRatio from the root scope. Since any argument in a
|
|
83
|
+
* // root scope maps to a variable of the same name, that means the value of
|
|
84
|
+
* // pixelRatio in the root is $pixelRatio:
|
|
85
|
+
* $scale: $pixelRatio,
|
|
86
|
+
* }
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
function getFragmentScope(schema, definitions, args, parentScope, spread) {
|
|
91
|
+
var argMap = new Map();
|
|
92
|
+
args.forEach(function (arg) {
|
|
93
|
+
if (arg.value.kind === 'Literal') {
|
|
94
|
+
argMap.set(arg.name, arg.value);
|
|
95
|
+
} else if (arg.value.kind === 'Variable') {
|
|
96
|
+
argMap.set(arg.name, parentScope[arg.value.variableName]);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
var fragmentScope = {};
|
|
100
|
+
eachWithCombinedError(definitions, function (definition) {
|
|
101
|
+
if (definition.kind === 'RootArgumentDefinition') {
|
|
102
|
+
if (argMap.has(definition.name)) {
|
|
103
|
+
var _argNode$loc;
|
|
104
|
+
|
|
105
|
+
var argNode = args.find(function (a) {
|
|
106
|
+
return a.name === definition.name;
|
|
107
|
+
});
|
|
108
|
+
throw createUserError("Unexpected argument '".concat(definition.name, "' supplied to fragment '").concat(spread.name, "'. @arguments may only be provided for variables defined in the fragment's @argumentDefinitions."), [(_argNode$loc = argNode === null || argNode === void 0 ? void 0 : argNode.loc) !== null && _argNode$loc !== void 0 ? _argNode$loc : spread.loc]);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fragmentScope[definition.name] = {
|
|
112
|
+
kind: 'Variable',
|
|
113
|
+
loc: definition.loc,
|
|
114
|
+
variableName: definition.name,
|
|
115
|
+
type: definition.type
|
|
116
|
+
};
|
|
117
|
+
} else {
|
|
118
|
+
var arg = argMap.get(definition.name);
|
|
119
|
+
|
|
120
|
+
if (arg == null || arg.kind === 'Literal' && arg.value == null) {
|
|
121
|
+
// No variable or literal null was passed, fall back to default
|
|
122
|
+
// value.
|
|
123
|
+
if (definition.defaultValue == null && schema.isNonNull(definition.type)) {
|
|
124
|
+
var _argNode$loc2;
|
|
125
|
+
|
|
126
|
+
var _argNode = args.find(function (a) {
|
|
127
|
+
return a.name === definition.name;
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
throw createUserError("No value found for required argument '".concat(definition.name, ": ").concat(schema.getTypeString(definition.type), "' on fragment '").concat(spread.name, "'."), [(_argNode$loc2 = _argNode === null || _argNode === void 0 ? void 0 : _argNode.loc) !== null && _argNode$loc2 !== void 0 ? _argNode$loc2 : spread.loc]);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fragmentScope[definition.name] = {
|
|
134
|
+
kind: 'Literal',
|
|
135
|
+
value: definition.defaultValue
|
|
136
|
+
};
|
|
137
|
+
} else {
|
|
138
|
+
// Variable or non-null literal.
|
|
139
|
+
fragmentScope[definition.name] = arg;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return fragmentScope;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
module.exports = {
|
|
147
|
+
getFragmentScope: getFragmentScope,
|
|
148
|
+
getRootScope: getRootScope
|
|
149
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
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 RelayCompilerCache = require('../util/RelayCompilerCache');
|
|
14
|
+
|
|
15
|
+
var getModuleName = require('../util/getModuleName');
|
|
16
|
+
|
|
17
|
+
var graphql = require('graphql');
|
|
18
|
+
|
|
19
|
+
var path = require('path');
|
|
20
|
+
|
|
21
|
+
var util = require('util');
|
|
22
|
+
|
|
23
|
+
var cache = new RelayCompilerCache('RelayFindGraphQLTags', 'v1');
|
|
24
|
+
|
|
25
|
+
function memoizedFind(tagFinder, text, baseDir, file) {
|
|
26
|
+
!file.exists ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayFindGraphQLTags: Called with non-existent file `%s`', file.relPath) : invariant(false) : void 0;
|
|
27
|
+
return cache.getOrCompute(file.hash, find.bind(null, tagFinder, text, path.join(baseDir, file.relPath)));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function find(tagFinder, text, absPath) {
|
|
31
|
+
var tags = tagFinder(text, absPath);
|
|
32
|
+
var moduleName = getModuleName(absPath);
|
|
33
|
+
tags.forEach(function (tag) {
|
|
34
|
+
return validateTemplate(tag, moduleName, absPath);
|
|
35
|
+
});
|
|
36
|
+
return tags.map(function (tag) {
|
|
37
|
+
return tag.template;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function validateTemplate(_ref, moduleName, filePath) {
|
|
42
|
+
var template = _ref.template,
|
|
43
|
+
keyName = _ref.keyName,
|
|
44
|
+
sourceLocationOffset = _ref.sourceLocationOffset;
|
|
45
|
+
var ast = graphql.parse(new graphql.Source(template, filePath, sourceLocationOffset));
|
|
46
|
+
ast.definitions.forEach(function (def) {
|
|
47
|
+
if (def.kind === 'OperationDefinition') {
|
|
48
|
+
!(def.name != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayFindGraphQLTags: In module `%s`, an operation requires a name.', moduleName, def.kind) : invariant(false) : void 0;
|
|
49
|
+
var definitionName = def.name.value;
|
|
50
|
+
var operationNameParts = definitionName.match(/^(.*)(Mutation|Query|Subscription)$/);
|
|
51
|
+
!(operationNameParts && definitionName.startsWith(moduleName)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayFindGraphQLTags: Operation names in graphql tags must be prefixed ' + 'with the module name and end in "Mutation", "Query", or ' + '"Subscription". Got `%s` in module `%s`.', definitionName, moduleName) : invariant(false) : void 0;
|
|
52
|
+
} else if (def.kind === 'FragmentDefinition') {
|
|
53
|
+
var _definitionName = def.name.value;
|
|
54
|
+
|
|
55
|
+
if (keyName != null) {
|
|
56
|
+
!(_definitionName === moduleName + '_' + keyName) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayFindGraphQLTags: Container fragment names must be ' + '`<ModuleName>_<propName>`. Got `%s`, expected `%s`.', _definitionName, moduleName + '_' + keyName) : invariant(false) : void 0;
|
|
57
|
+
} else {
|
|
58
|
+
!_definitionName.startsWith(moduleName) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayFindGraphQLTags: Fragment names in graphql tags must be prefixed ' + 'with the module name. Got `%s` in module `%s`.', _definitionName, moduleName) : invariant(false) : void 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
} // TODO: Not sure why this is defined here rather than imported, is it so that it doesn’t get stripped in prod?
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
function invariant(condition, msg) {
|
|
66
|
+
if (!condition) {
|
|
67
|
+
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
68
|
+
args[_key - 2] = arguments[_key];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
throw new Error(util.format.apply(util, [msg].concat(args)));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
module.exports = {
|
|
76
|
+
find: find,
|
|
77
|
+
// Exported for testing only.
|
|
78
|
+
memoizedFind: memoizedFind
|
|
79
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
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 _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
|
+
|
|
17
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
18
|
+
|
|
19
|
+
var SignedSource = require('signedsource');
|
|
20
|
+
|
|
21
|
+
function writeForSchema(schema, licenseHeader, codegenDir, getModuleName) {
|
|
22
|
+
var header = '/**\n' + licenseHeader.map(function (line) {
|
|
23
|
+
return " * ".concat(line, "\n");
|
|
24
|
+
}).join('') + ' *\n' + " * ".concat(SignedSource.getSigningToken(), "\n") + ' * @flow strict\n' + ' */\n' + '\n';
|
|
25
|
+
var enumTypes = schema.getTypes().filter(function (type) {
|
|
26
|
+
return schema.isEnum(type);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(enumTypes),
|
|
30
|
+
_step;
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
34
|
+
var type = _step.value;
|
|
35
|
+
var enumType = schema.assertEnumType(type);
|
|
36
|
+
var name = schema.getTypeString(type);
|
|
37
|
+
var values = (0, _toConsumableArray2["default"])(schema.getEnumValues(enumType)).sort();
|
|
38
|
+
var enumFileContent = header + "export type ".concat(name, " =\n | '") + values.join("'\n | '") + "'\n | '%future added value';\n";
|
|
39
|
+
codegenDir.writeFile("".concat(getModuleName(name), ".js"), SignedSource.signFile(enumFileContent));
|
|
40
|
+
}
|
|
41
|
+
} catch (err) {
|
|
42
|
+
_iterator.e(err);
|
|
43
|
+
} finally {
|
|
44
|
+
_iterator.f();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = {
|
|
49
|
+
writeForSchema: writeForSchema
|
|
50
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
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 ApplyFragmentArgumentTransform = require('../transforms/ApplyFragmentArgumentTransform');
|
|
14
|
+
|
|
15
|
+
var ClientExtensionsTransform = require('../transforms/ClientExtensionsTransform');
|
|
16
|
+
|
|
17
|
+
var ConnectionTransform = require('../transforms/ConnectionTransform');
|
|
18
|
+
|
|
19
|
+
var DeclarativeConnectionMutationTransform = require('../transforms/DeclarativeConnectionMutationTransform');
|
|
20
|
+
|
|
21
|
+
var DeferStreamTransform = require('../transforms/DeferStreamTransform');
|
|
22
|
+
|
|
23
|
+
var DisallowIdAsAlias = require('../transforms/DisallowIdAsAlias');
|
|
24
|
+
|
|
25
|
+
var DisallowTypenameOnRoot = require('../transforms/DisallowTypenameOnRoot');
|
|
26
|
+
|
|
27
|
+
var FieldHandleTransform = require('../transforms/FieldHandleTransform');
|
|
28
|
+
|
|
29
|
+
var FilterCompilerDirectivesTransform = require('../transforms/FilterCompilerDirectivesTransform');
|
|
30
|
+
|
|
31
|
+
var FilterDirectivesTransform = require('../transforms/FilterDirectivesTransform');
|
|
32
|
+
|
|
33
|
+
var FlattenTransform = require('../transforms/FlattenTransform');
|
|
34
|
+
|
|
35
|
+
var GenerateIDFieldTransform = require('../transforms/GenerateIDFieldTransform');
|
|
36
|
+
|
|
37
|
+
var GenerateTypeNameTransform = require('../transforms/GenerateTypeNameTransform');
|
|
38
|
+
|
|
39
|
+
var InlineDataFragmentTransform = require('../transforms/InlineDataFragmentTransform');
|
|
40
|
+
|
|
41
|
+
var InlineFragmentsTransform = require('../transforms/InlineFragmentsTransform');
|
|
42
|
+
|
|
43
|
+
var MaskTransform = require('../transforms/MaskTransform');
|
|
44
|
+
|
|
45
|
+
var MatchTransform = require('../transforms/MatchTransform');
|
|
46
|
+
|
|
47
|
+
var ReactFlightComponentTransform = require('../transforms/ReactFlightComponentTransform');
|
|
48
|
+
|
|
49
|
+
var RefetchableFragmentTransform = require('../transforms/RefetchableFragmentTransform');
|
|
50
|
+
|
|
51
|
+
var RelayDirectiveTransform = require('../transforms/RelayDirectiveTransform');
|
|
52
|
+
|
|
53
|
+
var RelayFlowGenerator = require('../language/javascript/RelayFlowGenerator');
|
|
54
|
+
|
|
55
|
+
var RequiredFieldTransform = require('../transforms/RequiredFieldTransform');
|
|
56
|
+
|
|
57
|
+
var SkipClientExtensionsTransform = require('../transforms/SkipClientExtensionsTransform');
|
|
58
|
+
|
|
59
|
+
var SkipHandleFieldTransform = require('../transforms/SkipHandleFieldTransform');
|
|
60
|
+
|
|
61
|
+
var SkipRedundantNodesTransform = require('../transforms/SkipRedundantNodesTransform');
|
|
62
|
+
|
|
63
|
+
var SkipSplitOperationTransform = require('../transforms/SkipSplitOperationTransform');
|
|
64
|
+
|
|
65
|
+
var SkipUnreachableNodeTransform = require('../transforms/SkipUnreachableNodeTransform');
|
|
66
|
+
|
|
67
|
+
var SkipUnusedVariablesTransform = require('../transforms/SkipUnusedVariablesTransform');
|
|
68
|
+
|
|
69
|
+
var SplitModuleImportTransform = require('../transforms/SplitModuleImportTransform');
|
|
70
|
+
|
|
71
|
+
var TestOperationTransform = require('../transforms/TestOperationTransform');
|
|
72
|
+
|
|
73
|
+
var ValidateGlobalVariablesTransform = require('../transforms/ValidateGlobalVariablesTransform');
|
|
74
|
+
|
|
75
|
+
var ValidateRequiredArgumentsTransform = require('../transforms/ValidateRequiredArgumentsTransform');
|
|
76
|
+
|
|
77
|
+
var ValidateUnusedVariablesTransform = require('../transforms/ValidateUnusedVariablesTransform');
|
|
78
|
+
|
|
79
|
+
// Transforms applied to the code used to process a query response.
|
|
80
|
+
var relaySchemaExtensions = [ConnectionTransform.SCHEMA_EXTENSION, DeclarativeConnectionMutationTransform.SCHEMA_EXTENSION, InlineDataFragmentTransform.SCHEMA_EXTENSION, MatchTransform.SCHEMA_EXTENSION, RequiredFieldTransform.SCHEMA_EXTENSION, RefetchableFragmentTransform.SCHEMA_EXTENSION, RelayDirectiveTransform.SCHEMA_EXTENSION, RelayFlowGenerator.SCHEMA_EXTENSION, TestOperationTransform.SCHEMA_EXTENSION, ValidateUnusedVariablesTransform.SCHEMA_EXTENSION]; // Transforms applied to both operations and fragments for both reading and
|
|
81
|
+
// writing from the store.
|
|
82
|
+
|
|
83
|
+
var relayCommonTransforms = [DisallowIdAsAlias.transform, ConnectionTransform.transform, RelayDirectiveTransform.transform, MaskTransform.transform, MatchTransform.transform, RefetchableFragmentTransform.transform, DeferStreamTransform.transform, ReactFlightComponentTransform.transform]; // Transforms applied to fragments used for reading data from a store
|
|
84
|
+
|
|
85
|
+
var relayFragmentTransforms = [ClientExtensionsTransform.transform, FieldHandleTransform.transform, InlineDataFragmentTransform.transform, FlattenTransform.transformWithOptions({
|
|
86
|
+
isForCodegen: true
|
|
87
|
+
}), RequiredFieldTransform.transform, SkipRedundantNodesTransform.transform]; // Transforms applied to queries/mutations/subscriptions that are used for
|
|
88
|
+
// fetching data from the server and parsing those responses.
|
|
89
|
+
|
|
90
|
+
var relayQueryTransforms = [SplitModuleImportTransform.transform, DisallowTypenameOnRoot.transform, ValidateUnusedVariablesTransform.transform, ApplyFragmentArgumentTransform.transform, ValidateGlobalVariablesTransform.transform, GenerateIDFieldTransform.transform, DeclarativeConnectionMutationTransform.transform]; // Transforms applied to the code used to process a query response.
|
|
91
|
+
|
|
92
|
+
var relayCodegenTransforms = [FilterCompilerDirectivesTransform.transform, SkipUnreachableNodeTransform.transform, InlineFragmentsTransform.transform, // NOTE: For the codegen context, we make sure to run ClientExtensions
|
|
93
|
+
// transform after we've inlined fragment spreads (i.e. InlineFragmentsTransform)
|
|
94
|
+
// This will ensure that we don't generate nested ClientExtension nodes
|
|
95
|
+
ClientExtensionsTransform.transform, GenerateTypeNameTransform.transform, FlattenTransform.transformWithOptions({
|
|
96
|
+
isForCodegen: true
|
|
97
|
+
}), SkipRedundantNodesTransform.transform, TestOperationTransform.transform]; // Transforms applied before printing the query sent to the server.
|
|
98
|
+
|
|
99
|
+
var relayPrintTransforms = [SkipSplitOperationTransform.transform, // NOTE: Skipping client extensions might leave empty selections, which we
|
|
100
|
+
// skip by running SkipUnreachableNodeTransform immediately after.
|
|
101
|
+
ClientExtensionsTransform.transform, SkipClientExtensionsTransform.transform, SkipUnreachableNodeTransform.transform, GenerateTypeNameTransform.transform, FlattenTransform.transformWithOptions({}), SkipHandleFieldTransform.transform, FilterDirectivesTransform.transform, SkipUnusedVariablesTransform.transform, ValidateRequiredArgumentsTransform.transform];
|
|
102
|
+
module.exports = {
|
|
103
|
+
commonTransforms: relayCommonTransforms,
|
|
104
|
+
codegenTransforms: relayCodegenTransforms,
|
|
105
|
+
fragmentTransforms: relayFragmentTransforms,
|
|
106
|
+
printTransforms: relayPrintTransforms,
|
|
107
|
+
queryTransforms: relayQueryTransforms,
|
|
108
|
+
schemaExtensions: relaySchemaExtensions
|
|
109
|
+
};
|