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