relay-compiler 0.0.0-main-4d287de9 → 0.0.0-main-9a79039d
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/cli.js +23 -0
- package/index.js +19 -3
- package/linux-x64/relay +0 -0
- package/macos-x64/relay +0 -0
- package/package.json +2 -26
- package/win-x64/relay.exe +0 -0
- package/bin/RelayCompilerBin.js.flow +0 -168
- package/bin/RelayCompilerMain.js.flow +0 -513
- package/bin/__fixtures__/plugin-module.js.flow +0 -17
- package/bin/relay-compiler +0 -19066
- package/codegen/CodegenDirectory.js.flow +0 -372
- package/codegen/CodegenRunner.js.flow +0 -424
- package/codegen/CodegenTypes.js.flow +0 -28
- package/codegen/CodegenWatcher.js.flow +0 -250
- package/codegen/NormalizationCodeGenerator.js.flow +0 -565
- package/codegen/ReaderCodeGenerator.js.flow +0 -510
- package/codegen/RelayCodeGenerator.js.flow +0 -85
- package/codegen/RelayFileWriter.js.flow +0 -365
- package/codegen/SourceControl.js.flow +0 -58
- package/codegen/compileRelayArtifacts.js.flow +0 -181
- package/codegen/createPrintRequireModuleDependency.js.flow +0 -19
- package/codegen/sortObjectByKey.js.flow +0 -25
- package/codegen/writeRelayGeneratedFile.js.flow +0 -235
- package/core/ASTCache.js.flow +0 -73
- package/core/ASTConvert.js.flow +0 -230
- package/core/CompilerContext.js.flow +0 -189
- package/core/CompilerError.js.flow +0 -255
- package/core/DotGraphQLParser.js.flow +0 -37
- package/core/GraphQLCompilerProfiler.js.flow +0 -341
- package/core/GraphQLDerivedFromMetadata.js.flow +0 -36
- package/core/GraphQLWatchmanClient.js.flow +0 -109
- package/core/IR.js.flow +0 -326
- package/core/IRPrinter.js.flow +0 -472
- package/core/IRTransformer.js.flow +0 -376
- package/core/IRValidator.js.flow +0 -259
- package/core/IRVisitor.js.flow +0 -150
- package/core/JSModuleParser.js.flow +0 -24
- package/core/RelayCompilerScope.js.flow +0 -199
- package/core/RelayFindGraphQLTags.js.flow +0 -118
- package/core/RelayGraphQLEnumsGenerator.js.flow +0 -55
- package/core/RelayIRTransforms.js.flow +0 -138
- package/core/RelayParser.js.flow +0 -1731
- package/core/RelaySourceModuleParser.js.flow +0 -133
- package/core/Schema.js.flow +0 -2035
- package/core/SchemaUtils.js.flow +0 -120
- package/core/filterContextForNode.js.flow +0 -49
- package/core/getFieldDefinition.js.flow +0 -156
- package/core/getIdentifierForArgumentValue.js.flow +0 -49
- package/core/getIdentifierForSelection.js.flow +0 -68
- package/core/getLiteralArgumentValues.js.flow +0 -32
- package/core/getNormalizationOperationName.js.flow +0 -19
- package/core/inferRootArgumentDefinitions.js.flow +0 -322
- package/index.js.flow +0 -198
- package/language/RelayLanguagePluginInterface.js.flow +0 -283
- package/language/javascript/FindGraphQLTags.js.flow +0 -136
- package/language/javascript/RelayFlowBabelFactories.js.flow +0 -176
- package/language/javascript/RelayFlowGenerator.js.flow +0 -1096
- package/language/javascript/RelayFlowTypeTransformers.js.flow +0 -181
- package/language/javascript/RelayLanguagePluginJavaScript.js.flow +0 -33
- package/language/javascript/formatGeneratedModule.js.flow +0 -65
- package/lib/bin/RelayCompilerBin.js +0 -143
- package/lib/bin/RelayCompilerMain.js +0 -486
- package/lib/bin/__fixtures__/plugin-module.js +0 -16
- package/lib/codegen/CodegenDirectory.js +0 -335
- package/lib/codegen/CodegenRunner.js +0 -433
- package/lib/codegen/CodegenTypes.js +0 -11
- package/lib/codegen/CodegenWatcher.js +0 -271
- package/lib/codegen/NormalizationCodeGenerator.js +0 -487
- package/lib/codegen/ReaderCodeGenerator.js +0 -473
- package/lib/codegen/RelayCodeGenerator.js +0 -75
- package/lib/codegen/RelayFileWriter.js +0 -270
- package/lib/codegen/SourceControl.js +0 -60
- package/lib/codegen/compileRelayArtifacts.js +0 -157
- package/lib/codegen/createPrintRequireModuleDependency.js +0 -19
- package/lib/codegen/sortObjectByKey.js +0 -41
- package/lib/codegen/writeRelayGeneratedFile.js +0 -206
- package/lib/core/ASTCache.js +0 -70
- package/lib/core/ASTConvert.js +0 -198
- package/lib/core/CompilerContext.js +0 -165
- package/lib/core/CompilerError.js +0 -252
- package/lib/core/DotGraphQLParser.js +0 -40
- package/lib/core/GraphQLCompilerProfiler.js +0 -299
- package/lib/core/GraphQLDerivedFromMetadata.js +0 -31
- package/lib/core/GraphQLWatchmanClient.js +0 -150
- package/lib/core/IR.js +0 -11
- package/lib/core/IRPrinter.js +0 -388
- package/lib/core/IRTransformer.js +0 -345
- package/lib/core/IRValidator.js +0 -226
- package/lib/core/IRVisitor.js +0 -45
- package/lib/core/JSModuleParser.js +0 -18
- package/lib/core/RelayCompilerScope.js +0 -183
- package/lib/core/RelayFindGraphQLTags.js +0 -79
- package/lib/core/RelayGraphQLEnumsGenerator.js +0 -50
- package/lib/core/RelayIRTransforms.js +0 -109
- package/lib/core/RelayParser.js +0 -1381
- package/lib/core/RelaySourceModuleParser.js +0 -104
- package/lib/core/Schema.js +0 -1877
- package/lib/core/SchemaUtils.js +0 -98
- package/lib/core/filterContextForNode.js +0 -50
- package/lib/core/getFieldDefinition.js +0 -145
- package/lib/core/getIdentifierForArgumentValue.js +0 -54
- package/lib/core/getIdentifierForSelection.js +0 -49
- package/lib/core/getLiteralArgumentValues.js +0 -26
- package/lib/core/getNormalizationOperationName.js +0 -17
- package/lib/core/inferRootArgumentDefinitions.js +0 -351
- package/lib/index.js +0 -178
- package/lib/language/RelayLanguagePluginInterface.js +0 -26
- package/lib/language/javascript/FindGraphQLTags.js +0 -126
- package/lib/language/javascript/RelayFlowBabelFactories.js +0 -160
- package/lib/language/javascript/RelayFlowGenerator.js +0 -856
- package/lib/language/javascript/RelayFlowTypeTransformers.js +0 -119
- package/lib/language/javascript/RelayLanguagePluginJavaScript.js +0 -30
- package/lib/language/javascript/formatGeneratedModule.js +0 -36
- package/lib/reporters/ConsoleReporter.js +0 -61
- package/lib/reporters/MultiReporter.js +0 -45
- package/lib/reporters/Reporter.js +0 -11
- package/lib/runner/Artifacts.js +0 -323
- package/lib/runner/BufferedFilesystem.js +0 -262
- package/lib/runner/GraphQLASTNodeGroup.js +0 -256
- package/lib/runner/GraphQLASTUtils.js +0 -23
- package/lib/runner/GraphQLNodeMap.js +0 -81
- package/lib/runner/Sources.js +0 -271
- package/lib/runner/StrictMap.js +0 -134
- package/lib/runner/compileArtifacts.js +0 -39
- package/lib/runner/extractAST.js +0 -77
- package/lib/runner/getChangedNodeNames.js +0 -82
- package/lib/runner/getSchemaInstance.js +0 -30
- package/lib/runner/types.js +0 -12
- package/lib/transforms/ApplyFragmentArgumentTransform.js +0 -393
- package/lib/transforms/ClientExtensionsTransform.js +0 -221
- package/lib/transforms/ConnectionTransform.js +0 -639
- package/lib/transforms/DeclarativeConnectionMutationTransform.js +0 -218
- package/lib/transforms/DeferStreamTransform.js +0 -246
- package/lib/transforms/DisallowIdAsAlias.js +0 -40
- package/lib/transforms/DisallowTypenameOnRoot.js +0 -53
- package/lib/transforms/FieldHandleTransform.js +0 -79
- package/lib/transforms/FilterCompilerDirectivesTransform.js +0 -29
- package/lib/transforms/FilterDirectivesTransform.js +0 -42
- package/lib/transforms/FlattenTransform.js +0 -306
- package/lib/transforms/GenerateIDFieldTransform.js +0 -135
- package/lib/transforms/GenerateTypeNameTransform.js +0 -149
- package/lib/transforms/InlineDataFragmentTransform.js +0 -100
- package/lib/transforms/InlineFragmentsTransform.js +0 -61
- package/lib/transforms/MaskTransform.js +0 -117
- package/lib/transforms/MatchTransform.js +0 -434
- package/lib/transforms/ReactFlightComponentTransform.js +0 -158
- package/lib/transforms/RefetchableFragmentTransform.js +0 -249
- package/lib/transforms/RelayDirectiveTransform.js +0 -83
- package/lib/transforms/RequiredFieldTransform.js +0 -369
- package/lib/transforms/SkipClientExtensionsTransform.js +0 -46
- package/lib/transforms/SkipHandleFieldTransform.js +0 -45
- package/lib/transforms/SkipRedundantNodesTransform.js +0 -261
- package/lib/transforms/SkipSplitOperationTransform.js +0 -32
- package/lib/transforms/SkipUnreachableNodeTransform.js +0 -158
- package/lib/transforms/SkipUnusedVariablesTransform.js +0 -75
- package/lib/transforms/SplitModuleImportTransform.js +0 -82
- package/lib/transforms/TestOperationTransform.js +0 -144
- package/lib/transforms/TransformUtils.js +0 -21
- package/lib/transforms/ValidateGlobalVariablesTransform.js +0 -92
- package/lib/transforms/ValidateRequiredArgumentsTransform.js +0 -114
- package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +0 -108
- package/lib/transforms/ValidateUnusedVariablesTransform.js +0 -96
- package/lib/transforms/query-generators/FetchableQueryGenerator.js +0 -157
- package/lib/transforms/query-generators/NodeQueryGenerator.js +0 -166
- package/lib/transforms/query-generators/QueryQueryGenerator.js +0 -48
- package/lib/transforms/query-generators/ViewerQueryGenerator.js +0 -77
- package/lib/transforms/query-generators/index.js +0 -60
- package/lib/transforms/query-generators/utils.js +0 -92
- package/lib/util/CodeMarker.js +0 -80
- package/lib/util/DefaultHandleKey.js +0 -15
- package/lib/util/RelayCompilerCache.js +0 -97
- package/lib/util/Rollout.js +0 -40
- package/lib/util/TimeReporter.js +0 -83
- package/lib/util/areEqualArgValues.js +0 -135
- package/lib/util/argumentContainsVariables.js +0 -37
- package/lib/util/dedupeJSONStringify.js +0 -160
- package/lib/util/generateAbstractTypeRefinementKey.js +0 -24
- package/lib/util/getDefinitionNodeHash.js +0 -22
- package/lib/util/getModuleName.js +0 -32
- package/lib/util/joinArgumentDefinitions.js +0 -67
- package/lib/util/md5.js +0 -17
- package/lib/util/murmurHash.js +0 -86
- package/lib/util/nullthrowsOSS.js +0 -23
- package/lib/util/orList.js +0 -36
- package/lib/util/partitionArray.js +0 -35
- package/relay-compiler.js +0 -17
- package/relay-compiler.min.js +0 -22
- package/reporters/ConsoleReporter.js.flow +0 -81
- package/reporters/MultiReporter.js.flow +0 -43
- package/reporters/Reporter.js.flow +0 -19
- package/runner/Artifacts.js.flow +0 -215
- package/runner/BufferedFilesystem.js.flow +0 -194
- package/runner/GraphQLASTNodeGroup.js.flow +0 -174
- package/runner/GraphQLASTUtils.js.flow +0 -26
- package/runner/GraphQLNodeMap.js.flow +0 -55
- package/runner/Sources.js.flow +0 -227
- package/runner/StrictMap.js.flow +0 -96
- package/runner/compileArtifacts.js.flow +0 -75
- package/runner/extractAST.js.flow +0 -98
- package/runner/getChangedNodeNames.js.flow +0 -48
- package/runner/getSchemaInstance.js.flow +0 -36
- package/runner/types.js.flow +0 -37
- package/transforms/ApplyFragmentArgumentTransform.js.flow +0 -524
- package/transforms/ClientExtensionsTransform.js.flow +0 -224
- package/transforms/ConnectionTransform.js.flow +0 -850
- package/transforms/DeclarativeConnectionMutationTransform.js.flow +0 -245
- package/transforms/DeferStreamTransform.js.flow +0 -263
- package/transforms/DisallowIdAsAlias.js.flow +0 -46
- package/transforms/DisallowTypenameOnRoot.js.flow +0 -44
- package/transforms/FieldHandleTransform.js.flow +0 -77
- package/transforms/FilterCompilerDirectivesTransform.js.flow +0 -33
- package/transforms/FilterDirectivesTransform.js.flow +0 -45
- package/transforms/FlattenTransform.js.flow +0 -458
- package/transforms/GenerateIDFieldTransform.js.flow +0 -151
- package/transforms/GenerateTypeNameTransform.js.flow +0 -159
- package/transforms/InlineDataFragmentTransform.js.flow +0 -123
- package/transforms/InlineFragmentsTransform.js.flow +0 -70
- package/transforms/MaskTransform.js.flow +0 -124
- package/transforms/MatchTransform.js.flow +0 -587
- package/transforms/ReactFlightComponentTransform.js.flow +0 -194
- package/transforms/RefetchableFragmentTransform.js.flow +0 -266
- package/transforms/RelayDirectiveTransform.js.flow +0 -96
- package/transforms/RequiredFieldTransform.js.flow +0 -413
- package/transforms/SkipClientExtensionsTransform.js.flow +0 -54
- package/transforms/SkipHandleFieldTransform.js.flow +0 -44
- package/transforms/SkipRedundantNodesTransform.js.flow +0 -255
- package/transforms/SkipSplitOperationTransform.js.flow +0 -37
- package/transforms/SkipUnreachableNodeTransform.js.flow +0 -148
- package/transforms/SkipUnusedVariablesTransform.js.flow +0 -59
- package/transforms/SplitModuleImportTransform.js.flow +0 -97
- package/transforms/TestOperationTransform.js.flow +0 -142
- package/transforms/TransformUtils.js.flow +0 -26
- package/transforms/ValidateGlobalVariablesTransform.js.flow +0 -80
- package/transforms/ValidateRequiredArgumentsTransform.js.flow +0 -126
- package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +0 -111
- package/transforms/ValidateUnusedVariablesTransform.js.flow +0 -88
- package/transforms/query-generators/FetchableQueryGenerator.js.flow +0 -188
- package/transforms/query-generators/NodeQueryGenerator.js.flow +0 -217
- package/transforms/query-generators/QueryQueryGenerator.js.flow +0 -57
- package/transforms/query-generators/ViewerQueryGenerator.js.flow +0 -97
- package/transforms/query-generators/index.js.flow +0 -89
- package/transforms/query-generators/utils.js.flow +0 -76
- package/util/CodeMarker.js.flow +0 -79
- package/util/DefaultHandleKey.js.flow +0 -17
- package/util/RelayCompilerCache.js.flow +0 -86
- package/util/Rollout.js.flow +0 -39
- package/util/TimeReporter.js.flow +0 -79
- package/util/areEqualArgValues.js.flow +0 -126
- package/util/argumentContainsVariables.js.flow +0 -38
- package/util/dedupeJSONStringify.js.flow +0 -152
- package/util/generateAbstractTypeRefinementKey.js.flow +0 -29
- package/util/getDefinitionNodeHash.js.flow +0 -24
- package/util/getModuleName.js.flow +0 -39
- package/util/joinArgumentDefinitions.js.flow +0 -105
- package/util/md5.js.flow +0 -19
- package/util/murmurHash.js.flow +0 -94
- package/util/nullthrowsOSS.js.flow +0 -25
- package/util/orList.js.flow +0 -37
- package/util/partitionArray.js.flow +0 -37
@@ -1,235 +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
|
-
* @flow strict-local
|
8
|
-
* @format
|
9
|
-
*/
|
10
|
-
|
11
|
-
// flowlint ambiguous-object-type:error
|
12
|
-
|
13
|
-
'use strict';
|
14
|
-
|
15
|
-
import type {GeneratedDefinition} from '../core/IR';
|
16
|
-
import type {Schema} from '../core/Schema';
|
17
|
-
import type {
|
18
|
-
FormatModule,
|
19
|
-
PluginInterface,
|
20
|
-
} from '../language/RelayLanguagePluginInterface';
|
21
|
-
import type CodegenDirectory from './CodegenDirectory';
|
22
|
-
import type {GeneratedNode, RequestParameters} from 'relay-runtime';
|
23
|
-
|
24
|
-
const CodeMarker = require('../util/CodeMarker');
|
25
|
-
const dedupeJSONStringify = require('../util/dedupeJSONStringify');
|
26
|
-
const md5 = require('../util/md5');
|
27
|
-
const createPrintRequireModuleDependency = require('./createPrintRequireModuleDependency');
|
28
|
-
const invariant = require('invariant');
|
29
|
-
const {RelayConcreteNode} = require('relay-runtime');
|
30
|
-
|
31
|
-
function getConcreteType(node: GeneratedNode): string {
|
32
|
-
switch (node.kind) {
|
33
|
-
case RelayConcreteNode.FRAGMENT:
|
34
|
-
return 'ReaderFragment';
|
35
|
-
case RelayConcreteNode.REQUEST:
|
36
|
-
return 'ConcreteRequest';
|
37
|
-
case RelayConcreteNode.SPLIT_OPERATION:
|
38
|
-
return 'NormalizationSplitOperation';
|
39
|
-
case RelayConcreteNode.INLINE_DATA_FRAGMENT:
|
40
|
-
return 'ReaderInlineDataFragment';
|
41
|
-
default:
|
42
|
-
(node: empty);
|
43
|
-
invariant(false, 'Unexpected GeneratedNode kind: `%s`.', node.kind);
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
|
-
function writeRelayGeneratedFile(
|
48
|
-
schema: Schema,
|
49
|
-
codegenDir: CodegenDirectory,
|
50
|
-
definition: GeneratedDefinition,
|
51
|
-
_generatedNode: GeneratedNode,
|
52
|
-
formatModule: FormatModule,
|
53
|
-
typeText: string,
|
54
|
-
_persistQuery: ?(text: string) => Promise<string>,
|
55
|
-
sourceHash: string,
|
56
|
-
extension: string,
|
57
|
-
printModuleDependency: (
|
58
|
-
moduleName: string,
|
59
|
-
) => string = createPrintRequireModuleDependency(),
|
60
|
-
shouldRepersist: boolean,
|
61
|
-
writeQueryParameters: (
|
62
|
-
dir: CodegenDirectory,
|
63
|
-
filename: string,
|
64
|
-
moduleName: string,
|
65
|
-
params: RequestParameters,
|
66
|
-
) => void,
|
67
|
-
languagePlugin: ?PluginInterface,
|
68
|
-
): Promise<?GeneratedNode> {
|
69
|
-
let generatedNode: GeneratedNode = _generatedNode;
|
70
|
-
// Copy to const so Flow can refine.
|
71
|
-
const persistQuery = _persistQuery;
|
72
|
-
const operationName =
|
73
|
-
generatedNode.kind === 'Request'
|
74
|
-
? generatedNode.params.name
|
75
|
-
: generatedNode.name;
|
76
|
-
const moduleName = languagePlugin?.getModuleName
|
77
|
-
? languagePlugin.getModuleName(operationName)
|
78
|
-
: operationName + '.graphql';
|
79
|
-
|
80
|
-
const filename = moduleName + '.' + extension;
|
81
|
-
const queryParametersFilename =
|
82
|
-
generatedNode.kind === 'Request'
|
83
|
-
? `${generatedNode.params.name}$Parameters.${extension}`
|
84
|
-
: null;
|
85
|
-
|
86
|
-
const typeName = getConcreteType(generatedNode);
|
87
|
-
|
88
|
-
let docText;
|
89
|
-
if (generatedNode.kind === RelayConcreteNode.REQUEST) {
|
90
|
-
docText =
|
91
|
-
generatedNode.params.text != null ? generatedNode.params.text : null;
|
92
|
-
}
|
93
|
-
|
94
|
-
// Use `Promise.resolve` to work around a Babel 7.8/7.9 issue.
|
95
|
-
return Promise.resolve().then(async () => {
|
96
|
-
let hash = null;
|
97
|
-
if (generatedNode.kind === RelayConcreteNode.REQUEST) {
|
98
|
-
invariant(
|
99
|
-
docText != null,
|
100
|
-
'writeRelayGeneratedFile: Expected `text` for operations to be set.',
|
101
|
-
);
|
102
|
-
|
103
|
-
const {
|
104
|
-
isRefetchableQuery: _ignored,
|
105
|
-
derivedFrom: _ignored2,
|
106
|
-
...nextMetadata
|
107
|
-
} = generatedNode.params.metadata;
|
108
|
-
|
109
|
-
let nextRequestParams;
|
110
|
-
if (persistQuery != null) {
|
111
|
-
hash = md5(docText);
|
112
|
-
|
113
|
-
let id = null;
|
114
|
-
if (!shouldRepersist) {
|
115
|
-
// Unless we `shouldRepersist` the query, check if the @relayHash matches
|
116
|
-
// the operation text of the current text and re-use the persisted
|
117
|
-
// operation id.
|
118
|
-
const oldContent = codegenDir.read(filename);
|
119
|
-
const oldHash = extractHash(oldContent);
|
120
|
-
const oldRequestID = extractRelayRequestID(oldContent);
|
121
|
-
if (hash === oldHash && oldRequestID != null) {
|
122
|
-
id = oldRequestID;
|
123
|
-
}
|
124
|
-
}
|
125
|
-
if (id == null) {
|
126
|
-
id = await persistQuery(docText);
|
127
|
-
}
|
128
|
-
nextRequestParams = {
|
129
|
-
id,
|
130
|
-
metadata: nextMetadata,
|
131
|
-
// $FlowFixMe[prop-missing]
|
132
|
-
// $FlowFixMe[incompatible-use]
|
133
|
-
name: generatedNode.params.name,
|
134
|
-
// $FlowFixMe[prop-missing]
|
135
|
-
// $FlowFixMe[incompatible-use]
|
136
|
-
operationKind: generatedNode.params.operationKind,
|
137
|
-
text: null,
|
138
|
-
};
|
139
|
-
} else {
|
140
|
-
nextRequestParams = {
|
141
|
-
cacheID: md5(docText),
|
142
|
-
id: null,
|
143
|
-
metadata: nextMetadata,
|
144
|
-
// $FlowFixMe[prop-missing]
|
145
|
-
// $FlowFixMe[incompatible-use]
|
146
|
-
name: generatedNode.params.name,
|
147
|
-
// $FlowFixMe[prop-missing]
|
148
|
-
// $FlowFixMe[incompatible-use]
|
149
|
-
operationKind: generatedNode.params.operationKind,
|
150
|
-
text: docText,
|
151
|
-
};
|
152
|
-
}
|
153
|
-
// $FlowFixMe[incompatible-type]
|
154
|
-
generatedNode = {
|
155
|
-
...generatedNode,
|
156
|
-
params: nextRequestParams,
|
157
|
-
};
|
158
|
-
}
|
159
|
-
|
160
|
-
// Strip metadata only used within the compiler
|
161
|
-
if (
|
162
|
-
generatedNode.kind === RelayConcreteNode.SPLIT_OPERATION &&
|
163
|
-
generatedNode.metadata?.derivedFrom != null
|
164
|
-
) {
|
165
|
-
const {derivedFrom: _ignored, ...metadata} = generatedNode.metadata;
|
166
|
-
// $FlowFixMe[incompatible-type]
|
167
|
-
generatedNode = {
|
168
|
-
...generatedNode,
|
169
|
-
metadata,
|
170
|
-
};
|
171
|
-
}
|
172
|
-
|
173
|
-
const moduleText = formatModule({
|
174
|
-
moduleName,
|
175
|
-
documentType: typeName,
|
176
|
-
definition,
|
177
|
-
kind: generatedNode.kind,
|
178
|
-
docText,
|
179
|
-
typeText,
|
180
|
-
hash: hash != null ? `@relayHash ${hash}` : null,
|
181
|
-
concreteText: CodeMarker.postProcess(
|
182
|
-
dedupeJSONStringify(generatedNode),
|
183
|
-
printModuleDependency,
|
184
|
-
),
|
185
|
-
sourceHash,
|
186
|
-
// $FlowFixMe[incompatible-call]
|
187
|
-
node: generatedNode,
|
188
|
-
schema,
|
189
|
-
});
|
190
|
-
codegenDir.writeFile(filename, moduleText, shouldRepersist);
|
191
|
-
if (
|
192
|
-
writeQueryParameters &&
|
193
|
-
queryParametersFilename != null &&
|
194
|
-
generatedNode.kind === RelayConcreteNode.REQUEST &&
|
195
|
-
// $FlowFixMe[incompatible-type]
|
196
|
-
generatedNode.params.operationKind === 'query'
|
197
|
-
) {
|
198
|
-
writeQueryParameters(
|
199
|
-
codegenDir,
|
200
|
-
queryParametersFilename,
|
201
|
-
moduleName,
|
202
|
-
// $FlowFixMe[incompatible-call]
|
203
|
-
generatedNode.params,
|
204
|
-
);
|
205
|
-
}
|
206
|
-
// $FlowFixMe[incompatible-call]
|
207
|
-
return generatedNode;
|
208
|
-
});
|
209
|
-
}
|
210
|
-
|
211
|
-
function extractHash(text: ?string): ?string {
|
212
|
-
if (text == null || text.length === 0) {
|
213
|
-
return null;
|
214
|
-
}
|
215
|
-
if (/<<<<<|>>>>>/.test(text)) {
|
216
|
-
// looks like a merge conflict
|
217
|
-
return null;
|
218
|
-
}
|
219
|
-
const match = text.match(/@relayHash (\w{32})\b/m);
|
220
|
-
return match && match[1];
|
221
|
-
}
|
222
|
-
|
223
|
-
function extractRelayRequestID(text: ?string): ?string {
|
224
|
-
if (text == null || text.length === 0) {
|
225
|
-
return null;
|
226
|
-
}
|
227
|
-
if (/<<<<<|>>>>>/.test(text)) {
|
228
|
-
// looks like a merge conflict
|
229
|
-
return null;
|
230
|
-
}
|
231
|
-
const match = text.match(/@relayRequestID (.+)/);
|
232
|
-
return match ? match[1] : null;
|
233
|
-
}
|
234
|
-
|
235
|
-
module.exports = writeRelayGeneratedFile;
|
package/core/ASTCache.js.flow
DELETED
@@ -1,73 +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
|
-
* @flow strict
|
8
|
-
* @format
|
9
|
-
*/
|
10
|
-
|
11
|
-
// flowlint ambiguous-object-type:error
|
12
|
-
|
13
|
-
'use strict';
|
14
|
-
|
15
|
-
import type {File} from '../codegen/CodegenTypes';
|
16
|
-
import type {DocumentNode} from 'graphql';
|
17
|
-
|
18
|
-
const Profiler = require('./GraphQLCompilerProfiler');
|
19
|
-
// $FlowFixMe[untyped-import] : Immutable is not typed
|
20
|
-
const {Map: ImmutableMap} = require('immutable');
|
21
|
-
|
22
|
-
type ParseFn = (baseDir: string, file: File) => ?DocumentNode;
|
23
|
-
|
24
|
-
class ASTCache {
|
25
|
-
_documents: Map<string, DocumentNode>;
|
26
|
-
|
27
|
-
_baseDir: string;
|
28
|
-
_parse: ParseFn;
|
29
|
-
|
30
|
-
constructor(config: {baseDir: string, parse: ParseFn, ...}) {
|
31
|
-
this._documents = new Map();
|
32
|
-
this._baseDir = config.baseDir;
|
33
|
-
this._parse = Profiler.instrument(config.parse, 'ASTCache.parseFn');
|
34
|
-
}
|
35
|
-
|
36
|
-
// Short-term: we don't do subscriptions/delta updates, instead always use all definitions
|
37
|
-
// $FlowFixMe[value-as-type]
|
38
|
-
documents(): ImmutableMap<string, DocumentNode> {
|
39
|
-
return ImmutableMap(this._documents);
|
40
|
-
}
|
41
|
-
|
42
|
-
// parse should return the set of changes
|
43
|
-
parseFiles(files: Set<File>): ImmutableMap<string, DocumentNode> {
|
44
|
-
let documents = ImmutableMap();
|
45
|
-
|
46
|
-
files.forEach(file => {
|
47
|
-
if (!file.exists) {
|
48
|
-
this._documents.delete(file.relPath);
|
49
|
-
return;
|
50
|
-
}
|
51
|
-
|
52
|
-
const doc = (() => {
|
53
|
-
try {
|
54
|
-
return this._parse(this._baseDir, file);
|
55
|
-
} catch (error) {
|
56
|
-
throw new Error(`Parse error: ${error} in "${file.relPath}"`);
|
57
|
-
}
|
58
|
-
})();
|
59
|
-
|
60
|
-
if (!doc) {
|
61
|
-
this._documents.delete(file.relPath);
|
62
|
-
return;
|
63
|
-
}
|
64
|
-
|
65
|
-
documents = documents.set(file.relPath, doc);
|
66
|
-
this._documents.set(file.relPath, doc);
|
67
|
-
});
|
68
|
-
|
69
|
-
return documents;
|
70
|
-
}
|
71
|
-
}
|
72
|
-
|
73
|
-
module.exports = ASTCache;
|
package/core/ASTConvert.js.flow
DELETED
@@ -1,230 +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
|
-
* @flow strict
|
8
|
-
* @format
|
9
|
-
*/
|
10
|
-
|
11
|
-
// flowlint ambiguous-object-type:error
|
12
|
-
|
13
|
-
'use strict';
|
14
|
-
|
15
|
-
import type {Fragment, Root} from './IR';
|
16
|
-
import type {Schema} from './Schema';
|
17
|
-
import type {
|
18
|
-
DefinitionNode,
|
19
|
-
DocumentNode,
|
20
|
-
FragmentDefinitionNode,
|
21
|
-
FragmentSpreadNode,
|
22
|
-
GraphQLSchema,
|
23
|
-
OperationDefinitionNode,
|
24
|
-
TypeSystemDefinitionNode,
|
25
|
-
TypeSystemExtensionNode,
|
26
|
-
} from 'graphql';
|
27
|
-
|
28
|
-
const Profiler = require('./GraphQLCompilerProfiler');
|
29
|
-
const {
|
30
|
-
isExecutableDefinitionAST,
|
31
|
-
isSchemaDefinitionAST,
|
32
|
-
} = require('./SchemaUtils');
|
33
|
-
const {extendSchema, parse, print, visit} = require('graphql');
|
34
|
-
|
35
|
-
type ASTDefinitionNode = FragmentDefinitionNode | OperationDefinitionNode;
|
36
|
-
type TransformFn = (
|
37
|
-
schema: Schema,
|
38
|
-
definitions: $ReadOnlyArray<ASTDefinitionNode>,
|
39
|
-
) => $ReadOnlyArray<Root | Fragment>;
|
40
|
-
|
41
|
-
function convertASTDocuments(
|
42
|
-
schema: Schema,
|
43
|
-
documents: $ReadOnlyArray<DocumentNode>,
|
44
|
-
transform: TransformFn,
|
45
|
-
): $ReadOnlyArray<Fragment | Root> {
|
46
|
-
return Profiler.run('ASTConvert.convertASTDocuments', () => {
|
47
|
-
const definitions = definitionsFromDocuments(documents);
|
48
|
-
|
49
|
-
const astDefinitions: Array<ASTDefinitionNode> = [];
|
50
|
-
documents.forEach(doc => {
|
51
|
-
doc.definitions.forEach(definition => {
|
52
|
-
if (isExecutableDefinitionAST(definition)) {
|
53
|
-
astDefinitions.push(definition);
|
54
|
-
}
|
55
|
-
});
|
56
|
-
});
|
57
|
-
|
58
|
-
return convertASTDefinitions(schema, definitions, transform);
|
59
|
-
});
|
60
|
-
}
|
61
|
-
|
62
|
-
function convertASTDocumentsWithBase(
|
63
|
-
schema: Schema,
|
64
|
-
baseDocuments: $ReadOnlyArray<DocumentNode>,
|
65
|
-
documents: $ReadOnlyArray<DocumentNode>,
|
66
|
-
transform: TransformFn,
|
67
|
-
): $ReadOnlyArray<Fragment | Root> {
|
68
|
-
return Profiler.run('ASTConvert.convertASTDocumentsWithBase', () => {
|
69
|
-
const baseDefinitions = definitionsFromDocuments(baseDocuments);
|
70
|
-
const definitions = definitionsFromDocuments(documents);
|
71
|
-
|
72
|
-
const requiredDefinitions = new Map();
|
73
|
-
const baseMap: Map<string, ASTDefinitionNode> = new Map();
|
74
|
-
baseDefinitions.forEach(definition => {
|
75
|
-
if (isExecutableDefinitionAST(definition)) {
|
76
|
-
const definitionName = definition.name && definition.name.value;
|
77
|
-
// If there's no name, no reason to put in the map
|
78
|
-
if (definitionName != null) {
|
79
|
-
if (baseMap.has(definitionName)) {
|
80
|
-
throw new Error(`Duplicate definition of '${definitionName}'.`);
|
81
|
-
}
|
82
|
-
baseMap.set(definitionName, definition);
|
83
|
-
}
|
84
|
-
}
|
85
|
-
});
|
86
|
-
|
87
|
-
const definitionsToVisit: Array<ASTDefinitionNode> = [];
|
88
|
-
definitions.forEach(definition => {
|
89
|
-
if (isExecutableDefinitionAST(definition)) {
|
90
|
-
definitionsToVisit.push(definition);
|
91
|
-
}
|
92
|
-
});
|
93
|
-
while (definitionsToVisit.length > 0) {
|
94
|
-
const definition = definitionsToVisit.pop();
|
95
|
-
const name = definition.name && definition.name.value;
|
96
|
-
if (name == null) {
|
97
|
-
continue;
|
98
|
-
}
|
99
|
-
if (requiredDefinitions.has(name)) {
|
100
|
-
if (requiredDefinitions.get(name) !== definition) {
|
101
|
-
throw new Error(`Duplicate definition of '${name}'.`);
|
102
|
-
}
|
103
|
-
continue;
|
104
|
-
}
|
105
|
-
requiredDefinitions.set(name, definition);
|
106
|
-
visit(definition, {
|
107
|
-
FragmentSpread(spread: FragmentSpreadNode) {
|
108
|
-
const baseDefinition = baseMap.get(spread.name.value);
|
109
|
-
if (baseDefinition) {
|
110
|
-
// We only need to add those definitions not already included
|
111
|
-
// in definitions
|
112
|
-
definitionsToVisit.push(baseDefinition);
|
113
|
-
}
|
114
|
-
},
|
115
|
-
});
|
116
|
-
}
|
117
|
-
|
118
|
-
const definitionsToConvert = [];
|
119
|
-
requiredDefinitions.forEach(definition =>
|
120
|
-
definitionsToConvert.push(definition),
|
121
|
-
);
|
122
|
-
return convertASTDefinitions(schema, definitionsToConvert, transform);
|
123
|
-
});
|
124
|
-
}
|
125
|
-
|
126
|
-
function convertASTDefinitions(
|
127
|
-
schema: Schema,
|
128
|
-
definitions: $ReadOnlyArray<DefinitionNode>,
|
129
|
-
transform: TransformFn,
|
130
|
-
): $ReadOnlyArray<Fragment | Root> {
|
131
|
-
const operationDefinitions: Array<ASTDefinitionNode> = [];
|
132
|
-
definitions.forEach(definition => {
|
133
|
-
if (isExecutableDefinitionAST(definition)) {
|
134
|
-
operationDefinitions.push(definition);
|
135
|
-
}
|
136
|
-
});
|
137
|
-
return transform(schema, operationDefinitions);
|
138
|
-
}
|
139
|
-
|
140
|
-
function definitionsFromDocuments(
|
141
|
-
documents: $ReadOnlyArray<DocumentNode>,
|
142
|
-
): $ReadOnlyArray<DefinitionNode> {
|
143
|
-
const definitions = [];
|
144
|
-
documents.forEach(doc => {
|
145
|
-
doc.definitions.forEach(definition => definitions.push(definition));
|
146
|
-
});
|
147
|
-
return definitions;
|
148
|
-
}
|
149
|
-
|
150
|
-
/**
|
151
|
-
* Extends a GraphQLSchema with a list of schema extensions in string form.
|
152
|
-
*/
|
153
|
-
function transformASTSchema(
|
154
|
-
schema: GraphQLSchema,
|
155
|
-
schemaExtensions: $ReadOnlyArray<string>,
|
156
|
-
): GraphQLSchema {
|
157
|
-
return Profiler.run('ASTConvert.transformASTSchema', () => {
|
158
|
-
if (schemaExtensions.length === 0) {
|
159
|
-
return schema;
|
160
|
-
}
|
161
|
-
const extension = schemaExtensions.join('\n');
|
162
|
-
return cachedExtend(schema, extension, () =>
|
163
|
-
extendSchema(schema, parse(extension)),
|
164
|
-
);
|
165
|
-
});
|
166
|
-
}
|
167
|
-
|
168
|
-
/**
|
169
|
-
* Extends a GraphQLSchema with a list of schema extensions in AST form.
|
170
|
-
*/
|
171
|
-
function extendASTSchema(
|
172
|
-
baseSchema: GraphQLSchema,
|
173
|
-
documents: $ReadOnlyArray<DocumentNode>,
|
174
|
-
): GraphQLSchema {
|
175
|
-
return Profiler.run('ASTConvert.extendASTSchema', () => {
|
176
|
-
const schemaExtensions: Array<
|
177
|
-
TypeSystemDefinitionNode | TypeSystemExtensionNode,
|
178
|
-
> = [];
|
179
|
-
documents.forEach(doc => {
|
180
|
-
doc.definitions.forEach(definition => {
|
181
|
-
if (isSchemaDefinitionAST(definition)) {
|
182
|
-
schemaExtensions.push(definition);
|
183
|
-
}
|
184
|
-
});
|
185
|
-
});
|
186
|
-
if (schemaExtensions.length === 0) {
|
187
|
-
return baseSchema;
|
188
|
-
}
|
189
|
-
const key = schemaExtensions.map(print).join('\n');
|
190
|
-
return cachedExtend(baseSchema, key, () =>
|
191
|
-
extendSchema(
|
192
|
-
baseSchema,
|
193
|
-
{
|
194
|
-
kind: 'Document',
|
195
|
-
definitions: schemaExtensions,
|
196
|
-
},
|
197
|
-
// TODO T24511737 figure out if this is dangerous
|
198
|
-
{assumeValid: true},
|
199
|
-
),
|
200
|
-
);
|
201
|
-
});
|
202
|
-
}
|
203
|
-
|
204
|
-
const extendedSchemas: Map<GraphQLSchema, {[key: string]: GraphQLSchema, ...}> =
|
205
|
-
new Map();
|
206
|
-
|
207
|
-
function cachedExtend(
|
208
|
-
schema: GraphQLSchema,
|
209
|
-
key: string,
|
210
|
-
compute: () => GraphQLSchema,
|
211
|
-
): GraphQLSchema {
|
212
|
-
let cache = extendedSchemas.get(schema);
|
213
|
-
if (!cache) {
|
214
|
-
cache = {};
|
215
|
-
extendedSchemas.set(schema, cache);
|
216
|
-
}
|
217
|
-
let extendedSchema = cache[key];
|
218
|
-
if (!extendedSchema) {
|
219
|
-
extendedSchema = compute();
|
220
|
-
cache[key] = extendedSchema;
|
221
|
-
}
|
222
|
-
return extendedSchema;
|
223
|
-
}
|
224
|
-
|
225
|
-
module.exports = {
|
226
|
-
convertASTDocuments,
|
227
|
-
convertASTDocumentsWithBase,
|
228
|
-
extendASTSchema,
|
229
|
-
transformASTSchema,
|
230
|
-
};
|