relay-compiler 10.0.1 → 10.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/relay-compiler +1347 -604
- package/codegen/NormalizationCodeGenerator.js.flow +12 -4
- package/codegen/ReaderCodeGenerator.js.flow +38 -3
- package/codegen/RelayFileWriter.js.flow +2 -0
- package/codegen/writeRelayGeneratedFile.js.flow +1 -1
- package/core/ASTCache.js.flow +1 -0
- package/core/CompilerContext.js.flow +1 -0
- package/core/IR.js.flow +0 -1
- package/core/IRPrinter.js.flow +3 -8
- package/core/RelayIRTransforms.js.flow +7 -0
- package/core/Schema.js.flow +55 -1
- package/index.js +1 -1
- package/language/javascript/FindGraphQLTags.js.flow +2 -97
- package/language/javascript/RelayFlowBabelFactories.js.flow +11 -15
- package/language/javascript/RelayFlowGenerator.js.flow +76 -19
- package/language/javascript/RelayFlowTypeTransformers.js.flow +4 -4
- package/lib/bin/RelayCompilerMain.js +5 -5
- package/lib/codegen/CodegenRunner.js +2 -2
- package/lib/codegen/NormalizationCodeGenerator.js +20 -8
- package/lib/codegen/ReaderCodeGenerator.js +43 -8
- package/lib/codegen/RelayFileWriter.js +2 -2
- package/lib/codegen/compileRelayArtifacts.js +2 -2
- package/lib/codegen/sortObjectByKey.js +2 -2
- package/lib/codegen/writeRelayGeneratedFile.js +2 -2
- package/lib/core/ASTCache.js +1 -0
- package/lib/core/CompilerContext.js +1 -0
- package/lib/core/CompilerError.js +2 -2
- package/lib/core/IRPrinter.js +3 -4
- package/lib/core/RelayGraphQLEnumsGenerator.js +2 -2
- package/lib/core/RelayIRTransforms.js +10 -4
- package/lib/core/RelayParser.js +4 -4
- package/lib/core/Schema.js +48 -7
- package/lib/core/getFieldDefinition.js +2 -2
- package/lib/core/inferRootArgumentDefinitions.js +4 -4
- package/lib/language/javascript/FindGraphQLTags.js +3 -69
- package/lib/language/javascript/RelayFlowBabelFactories.js +5 -5
- package/lib/language/javascript/RelayFlowGenerator.js +80 -21
- package/lib/runner/Artifacts.js +2 -2
- package/lib/runner/BufferedFilesystem.js +2 -2
- package/lib/runner/GraphQLASTNodeGroup.js +2 -2
- package/lib/runner/GraphQLNodeMap.js +2 -2
- package/lib/runner/Sources.js +21 -2
- package/lib/runner/StrictMap.js +2 -2
- package/lib/runner/getChangedNodeNames.js +2 -2
- package/lib/transforms/ApplyFragmentArgumentTransform.js +14 -14
- package/lib/transforms/ClientExtensionsTransform.js +5 -3
- package/lib/transforms/ConnectionTransform.js +8 -9
- package/lib/transforms/DeclarativeConnectionMutationTransform.js +113 -55
- package/lib/transforms/DeferStreamTransform.js +2 -2
- package/lib/transforms/DisallowTypenameOnRoot.js +2 -2
- package/lib/transforms/FieldHandleTransform.js +2 -2
- package/lib/transforms/FilterCompilerDirectivesTransform.js +29 -0
- package/lib/transforms/FlattenTransform.js +13 -12
- package/lib/transforms/GenerateIDFieldTransform.js +2 -2
- package/lib/transforms/GenerateTypeNameTransform.js +3 -3
- package/lib/transforms/InlineDataFragmentTransform.js +2 -2
- package/lib/transforms/MaskTransform.js +3 -3
- package/lib/transforms/MatchTransform.js +7 -3
- package/lib/transforms/ReactFlightComponentTransform.js +162 -0
- package/lib/transforms/RefetchableFragmentTransform.js +4 -4
- package/lib/transforms/RelayDirectiveTransform.js +2 -2
- package/lib/transforms/RequiredFieldTransform.js +380 -0
- package/lib/transforms/SkipHandleFieldTransform.js +1 -1
- package/lib/transforms/SkipRedundantNodesTransform.js +3 -1
- package/lib/transforms/SkipUnreachableNodeTransform.js +1 -1
- package/lib/transforms/SkipUnusedVariablesTransform.js +3 -3
- package/lib/transforms/TestOperationTransform.js +2 -2
- package/lib/transforms/ValidateGlobalVariablesTransform.js +2 -2
- package/lib/transforms/ValidateRequiredArgumentsTransform.js +2 -2
- package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +2 -2
- package/lib/transforms/ValidateUnusedVariablesTransform.js +2 -2
- package/lib/transforms/query-generators/FetchableQueryGenerator.js +1 -1
- package/lib/transforms/query-generators/NodeQueryGenerator.js +1 -1
- package/lib/transforms/query-generators/index.js +2 -2
- package/lib/transforms/query-generators/utils.js +2 -2
- package/package.json +3 -3
- package/relay-compiler.js +4 -4
- package/relay-compiler.min.js +4 -4
- package/runner/Sources.js.flow +14 -0
- package/transforms/ClientExtensionsTransform.js.flow +2 -0
- package/transforms/ConnectionTransform.js.flow +0 -1
- package/transforms/DeclarativeConnectionMutationTransform.js.flow +137 -48
- package/transforms/FieldHandleTransform.js.flow +0 -1
- package/transforms/FilterCompilerDirectivesTransform.js.flow +33 -0
- package/transforms/FlattenTransform.js.flow +3 -2
- package/transforms/MatchTransform.js.flow +6 -0
- package/transforms/ReactFlightComponentTransform.js.flow +195 -0
- package/transforms/RequiredFieldTransform.js.flow +415 -0
- package/transforms/SkipRedundantNodesTransform.js.flow +3 -0
@@ -16,9 +16,9 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
16
16
|
|
17
17
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
18
18
|
|
19
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (
|
19
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
20
20
|
|
21
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(
|
21
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
22
22
|
|
23
23
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
24
24
|
|
@@ -35,10 +35,15 @@ var _require2 = require('relay-runtime'),
|
|
35
35
|
ConnectionInterface = _require2.ConnectionInterface;
|
36
36
|
|
37
37
|
var DELETE_RECORD = 'deleteRecord';
|
38
|
+
var DELETE_EDGE = 'deleteEdge';
|
38
39
|
var APPEND_EDGE = 'appendEdge';
|
39
40
|
var PREPEND_EDGE = 'prependEdge';
|
40
|
-
var
|
41
|
-
var
|
41
|
+
var APPEND_NODE = 'appendNode';
|
42
|
+
var PREPEND_NODE = 'prependNode';
|
43
|
+
var EDGE_LINKED_FIELD_DIRECTIVES = [APPEND_EDGE, PREPEND_EDGE];
|
44
|
+
var NODE_LINKED_FIELD_DIRECTIVES = [APPEND_NODE, PREPEND_NODE];
|
45
|
+
var LINKED_FIELD_DIRECTIVES = [].concat(EDGE_LINKED_FIELD_DIRECTIVES, NODE_LINKED_FIELD_DIRECTIVES);
|
46
|
+
var SCHEMA_EXTENSION = "\n directive @".concat(DELETE_RECORD, " on FIELD\n directive @").concat(DELETE_EDGE, "(\n connections: [ID!]!\n ) on FIELD\n directive @").concat(APPEND_EDGE, "(\n connections: [ID!]!\n ) on FIELD\n directive @").concat(PREPEND_EDGE, "(\n connections: [ID!]!\n ) on FIELD\n directive @").concat(APPEND_NODE, "(\n connections: [ID!]!\n edgeTypeName: String!\n ) on FIELD\n directive @").concat(PREPEND_NODE, "(\n connections: [ID!]!\n edgeTypeName: String!\n ) on FIELD\n");
|
42
47
|
|
43
48
|
function transform(context) {
|
44
49
|
return IRTransformer.transform(context, {
|
@@ -62,29 +67,42 @@ function visitScalarField(field) {
|
|
62
67
|
throw createUserError("Invalid use of @".concat(linkedFieldDirective.name, " on scalar field '").concat(field.name, "'"), [linkedFieldDirective.loc]);
|
63
68
|
}
|
64
69
|
|
65
|
-
var
|
70
|
+
var deleteNodeDirective = field.directives.find(function (directive) {
|
66
71
|
return directive.name === DELETE_RECORD;
|
67
72
|
});
|
73
|
+
var deleteEdgeDirective = field.directives.find(function (directive) {
|
74
|
+
return directive.name === DELETE_EDGE;
|
75
|
+
});
|
76
|
+
|
77
|
+
if (deleteNodeDirective != null && deleteEdgeDirective != null) {
|
78
|
+
throw createUserError("Both @deleteNode and @deleteEdge are used on field '".concat(field.name, "'. Only one directive is supported for now."), [deleteNodeDirective.loc, deleteEdgeDirective.loc]);
|
79
|
+
}
|
80
|
+
|
81
|
+
var targetDirective = deleteNodeDirective !== null && deleteNodeDirective !== void 0 ? deleteNodeDirective : deleteEdgeDirective;
|
68
82
|
|
69
|
-
if (
|
83
|
+
if (targetDirective == null) {
|
70
84
|
return field;
|
71
85
|
}
|
72
86
|
|
73
87
|
var schema = this.getContext().getSchema();
|
74
88
|
|
75
|
-
if (!schema.isId(field.type)) {
|
76
|
-
throw createUserError("Invalid use of @".concat(
|
89
|
+
if (!schema.isId(schema.getRawType(field.type))) {
|
90
|
+
throw createUserError("Invalid use of @".concat(targetDirective.name, " on field '").concat(field.name, "'. Expected field to return an ID or list of ID values, got ").concat(schema.getTypeString(field.type), "."), [targetDirective.loc]);
|
77
91
|
}
|
78
92
|
|
93
|
+
var connectionsArg = targetDirective.args.find(function (arg) {
|
94
|
+
return arg.name === 'connections';
|
95
|
+
});
|
79
96
|
var handle = {
|
80
|
-
name:
|
97
|
+
name: targetDirective.name,
|
81
98
|
key: '',
|
82
99
|
dynamicKey: null,
|
83
|
-
filters: null
|
100
|
+
filters: null,
|
101
|
+
handleArgs: connectionsArg ? [connectionsArg] : undefined
|
84
102
|
};
|
85
|
-
return _objectSpread({}, field, {
|
103
|
+
return _objectSpread(_objectSpread({}, field), {}, {
|
86
104
|
directives: field.directives.filter(function (directive) {
|
87
|
-
return directive !==
|
105
|
+
return directive !== targetDirective;
|
88
106
|
}),
|
89
107
|
handles: field.handles ? [].concat((0, _toConsumableArray2["default"])(field.handles), [handle]) : [handle]
|
90
108
|
});
|
@@ -101,64 +119,104 @@ function visitLinkedField(field) {
|
|
101
119
|
}
|
102
120
|
|
103
121
|
var edgeDirective = transformedField.directives.find(function (directive) {
|
104
|
-
return
|
122
|
+
return EDGE_LINKED_FIELD_DIRECTIVES.indexOf(directive.name) > -1;
|
123
|
+
});
|
124
|
+
var nodeDirective = transformedField.directives.find(function (directive) {
|
125
|
+
return NODE_LINKED_FIELD_DIRECTIVES.indexOf(directive.name) > -1;
|
105
126
|
});
|
106
127
|
|
107
|
-
if (edgeDirective == null) {
|
128
|
+
if (edgeDirective == null && nodeDirective == null) {
|
108
129
|
return transformedField;
|
109
130
|
}
|
110
131
|
|
111
|
-
|
132
|
+
if (edgeDirective != null && nodeDirective != null) {
|
133
|
+
throw createUserError("Invalid use of @".concat(edgeDirective.name, " and @").concat(nodeDirective.name, " on field '").concat(transformedField.name, "' - these directives cannot be used together."), [edgeDirective.loc]);
|
134
|
+
}
|
135
|
+
|
136
|
+
var targetDirective = edgeDirective !== null && edgeDirective !== void 0 ? edgeDirective : nodeDirective;
|
137
|
+
var connectionsArg = targetDirective.args.find(function (arg) {
|
112
138
|
return arg.name === 'connections';
|
113
139
|
});
|
114
140
|
|
115
141
|
if (connectionsArg == null) {
|
116
|
-
throw createUserError("Expected the 'connections' argument to be defined on @".concat(
|
142
|
+
throw createUserError("Expected the 'connections' argument to be defined on @".concat(targetDirective.name, "."), [targetDirective.loc]);
|
117
143
|
}
|
118
144
|
|
119
145
|
var schema = this.getContext().getSchema();
|
120
|
-
var fields = schema.getFields(transformedField.type);
|
121
|
-
var cursorFieldID;
|
122
|
-
var nodeFieldID;
|
123
|
-
|
124
|
-
var _iterator = _createForOfIteratorHelper(fields),
|
125
|
-
_step;
|
126
|
-
|
127
|
-
try {
|
128
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
129
|
-
var fieldID = _step.value;
|
130
|
-
var fieldName = schema.getFieldName(fieldID);
|
131
|
-
|
132
|
-
if (fieldName === ConnectionInterface.get().CURSOR) {
|
133
|
-
cursorFieldID = fieldID;
|
134
|
-
} else if (fieldName === ConnectionInterface.get().NODE) {
|
135
|
-
nodeFieldID = fieldID;
|
136
|
-
}
|
137
|
-
} // Edge
|
138
|
-
|
139
|
-
} catch (err) {
|
140
|
-
_iterator.e(err);
|
141
|
-
} finally {
|
142
|
-
_iterator.f();
|
143
|
-
}
|
144
146
|
|
145
|
-
if (
|
146
|
-
var
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
147
|
+
if (edgeDirective) {
|
148
|
+
var fields = schema.getFields(transformedField.type);
|
149
|
+
var cursorFieldID;
|
150
|
+
var nodeFieldID;
|
151
|
+
|
152
|
+
var _iterator = _createForOfIteratorHelper(fields),
|
153
|
+
_step;
|
154
|
+
|
155
|
+
try {
|
156
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
157
|
+
var fieldID = _step.value;
|
158
|
+
var fieldName = schema.getFieldName(fieldID);
|
159
|
+
|
160
|
+
if (fieldName === ConnectionInterface.get().CURSOR) {
|
161
|
+
cursorFieldID = fieldID;
|
162
|
+
} else if (fieldName === ConnectionInterface.get().NODE) {
|
163
|
+
nodeFieldID = fieldID;
|
164
|
+
}
|
165
|
+
} // Edge
|
166
|
+
|
167
|
+
} catch (err) {
|
168
|
+
_iterator.e(err);
|
169
|
+
} finally {
|
170
|
+
_iterator.f();
|
171
|
+
}
|
172
|
+
|
173
|
+
if (cursorFieldID != null && nodeFieldID != null) {
|
174
|
+
var handle = {
|
175
|
+
name: edgeDirective.name,
|
176
|
+
key: '',
|
177
|
+
dynamicKey: null,
|
178
|
+
filters: null,
|
179
|
+
handleArgs: [connectionsArg]
|
180
|
+
};
|
181
|
+
return _objectSpread(_objectSpread({}, transformedField), {}, {
|
182
|
+
directives: transformedField.directives.filter(function (directive) {
|
183
|
+
return directive !== edgeDirective;
|
184
|
+
}),
|
185
|
+
handles: transformedField.handles ? [].concat((0, _toConsumableArray2["default"])(transformedField.handles), [handle]) : [handle]
|
186
|
+
});
|
187
|
+
}
|
188
|
+
|
189
|
+
throw createUserError("Unsupported use of @".concat(edgeDirective.name, " on field '").concat(transformedField.name, "', expected an edge field (a field with 'cursor' and 'node' selection)."), [targetDirective.loc]);
|
190
|
+
} else {
|
191
|
+
// Node
|
192
|
+
var edgeTypeNameArg = nodeDirective.args.find(function (arg) {
|
193
|
+
return arg.name === 'edgeTypeName';
|
158
194
|
});
|
159
|
-
}
|
160
195
|
|
161
|
-
|
196
|
+
if (!edgeTypeNameArg) {
|
197
|
+
throw createUserError("Unsupported use of @".concat(nodeDirective.name, " on field '").concat(transformedField.name, "', 'edgeTypeName' argument must be provided."), [targetDirective.loc]);
|
198
|
+
}
|
199
|
+
|
200
|
+
var rawType = schema.getRawType(transformedField.type);
|
201
|
+
|
202
|
+
if (schema.canHaveSelections(rawType)) {
|
203
|
+
var _handle = {
|
204
|
+
name: nodeDirective.name,
|
205
|
+
key: '',
|
206
|
+
dynamicKey: null,
|
207
|
+
filters: null,
|
208
|
+
handleArgs: [connectionsArg, edgeTypeNameArg]
|
209
|
+
};
|
210
|
+
return _objectSpread(_objectSpread({}, transformedField), {}, {
|
211
|
+
directives: transformedField.directives.filter(function (directive) {
|
212
|
+
return directive !== nodeDirective;
|
213
|
+
}),
|
214
|
+
handles: transformedField.handles ? [].concat((0, _toConsumableArray2["default"])(transformedField.handles), [_handle]) : [_handle]
|
215
|
+
});
|
216
|
+
}
|
217
|
+
|
218
|
+
throw createUserError("Unsupported use of @".concat(nodeDirective.name, " on field '").concat(transformedField.name, "'. Expected an object, union or interface, but got '").concat(schema.getTypeString(transformedField.type), "'."), [nodeDirective.loc]);
|
219
|
+
}
|
162
220
|
}
|
163
221
|
|
164
222
|
module.exports = {
|
@@ -95,7 +95,7 @@ function visitLinkedField(field, state) {
|
|
95
95
|
throw createUserError("Invalid use of @stream on non-plural field '".concat(field.name, "'"), [streamDirective.loc]);
|
96
96
|
}
|
97
97
|
|
98
|
-
transformedField = _objectSpread({}, transformedField, {
|
98
|
+
transformedField = _objectSpread(_objectSpread({}, transformedField), {}, {
|
99
99
|
directives: transformedField.directives.filter(function (directive) {
|
100
100
|
return directive.name !== 'stream';
|
101
101
|
})
|
@@ -173,7 +173,7 @@ function visitFragmentSpread(spread, state) {
|
|
173
173
|
return transformedSpread;
|
174
174
|
}
|
175
175
|
|
176
|
-
transformedSpread = _objectSpread({}, transformedSpread, {
|
176
|
+
transformedSpread = _objectSpread(_objectSpread({}, transformedSpread), {}, {
|
177
177
|
directives: transformedSpread.directives.filter(function (directive) {
|
178
178
|
return directive.name !== 'defer';
|
179
179
|
})
|
@@ -10,9 +10,9 @@
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
11
11
|
'use strict';
|
12
12
|
|
13
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (
|
13
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
14
14
|
|
15
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(
|
15
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
16
16
|
|
17
17
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
18
18
|
|
@@ -58,7 +58,7 @@ function visitField(field) {
|
|
58
58
|
var filters = handle.filters;
|
59
59
|
var args = filters ? nextField.args.filter(function (arg) {
|
60
60
|
return filters.indexOf(arg.name) !== -1;
|
61
|
-
}) : [];
|
61
|
+
}) : [];
|
62
62
|
|
63
63
|
if (handle.dynamicKey != null) {
|
64
64
|
args.push({
|
@@ -70,7 +70,7 @@ function visitField(field) {
|
|
70
70
|
});
|
71
71
|
}
|
72
72
|
|
73
|
-
return _objectSpread({}, nextField, {
|
73
|
+
return _objectSpread(_objectSpread({}, nextField), {}, {
|
74
74
|
args: args,
|
75
75
|
alias: alias,
|
76
76
|
name: name,
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
3
|
+
*
|
4
|
+
* This source code is licensed under the MIT license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*
|
7
|
+
*
|
8
|
+
* @format
|
9
|
+
*/
|
10
|
+
'use strict';
|
11
|
+
|
12
|
+
var IRTransformer = require('../core/IRTransformer');
|
13
|
+
|
14
|
+
var COMPILE_TIME_DIRECTIVES = new Set(['required']);
|
15
|
+
/**
|
16
|
+
* A transform that removes any directives that are only interpreted by the Relay compiler.
|
17
|
+
*/
|
18
|
+
|
19
|
+
function filterDirectivesTransform(context) {
|
20
|
+
return IRTransformer.transform(context, {
|
21
|
+
Directive: function Directive(directive) {
|
22
|
+
return COMPILE_TIME_DIRECTIVES.has(directive.name) ? null : directive;
|
23
|
+
}
|
24
|
+
});
|
25
|
+
}
|
26
|
+
|
27
|
+
module.exports = {
|
28
|
+
transform: filterDirectivesTransform
|
29
|
+
};
|
@@ -45,9 +45,10 @@ function flattenTransformImpl(context, options) {
|
|
45
45
|
Condition: visitorFn,
|
46
46
|
Defer: visitorFn,
|
47
47
|
Fragment: visitorFn,
|
48
|
-
InlineFragment: visitorFn,
|
49
48
|
InlineDataFragmentSpread: visitorFn,
|
49
|
+
InlineFragment: visitorFn,
|
50
50
|
LinkedField: visitorFn,
|
51
|
+
ModuleImport: visitorFn,
|
51
52
|
Root: visitorFn,
|
52
53
|
SplitOperation: visitorFn
|
53
54
|
}, function () {
|
@@ -84,7 +85,7 @@ function memoizedFlattenSelection(cache) {
|
|
84
85
|
|
85
86
|
var nextSelections = new Map();
|
86
87
|
var hasFlattened = flattenSelectionsInto(context.getSchema(), nextSelections, node, state, type);
|
87
|
-
var flattenedNode = hasFlattened ? _objectSpread({}, node, {
|
88
|
+
var flattenedNode = hasFlattened ? _objectSpread(_objectSpread({}, node), {}, {
|
88
89
|
selections: Array.from(nextSelections.values())
|
89
90
|
}) : node;
|
90
91
|
state.parentType = type;
|
@@ -124,7 +125,7 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
124
125
|
throw createCompilerError("FlattenTransform: Expected an InlineFragment, got a '".concat(selection.kind, "'"), [selection.loc]);
|
125
126
|
}
|
126
127
|
|
127
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({}, flattenedSelection, {
|
128
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({}, flattenedSelection), {}, {
|
128
129
|
selections: mergeSelections(schema, flattenedSelection, selection, state, selection.typeCondition)
|
129
130
|
}));
|
130
131
|
} else if (flattenedSelection.kind === 'Condition') {
|
@@ -132,7 +133,7 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
132
133
|
throw createCompilerError("FlattenTransform: Expected a Condition, got a '".concat(selection.kind, "'"), [selection.loc]);
|
133
134
|
}
|
134
135
|
|
135
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({}, flattenedSelection, {
|
136
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({}, flattenedSelection), {}, {
|
136
137
|
selections: mergeSelections(schema, flattenedSelection, selection, state, type)
|
137
138
|
}));
|
138
139
|
} else if (flattenedSelection.kind === 'ClientExtension') {
|
@@ -140,7 +141,7 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
140
141
|
throw createCompilerError("FlattenTransform: Expected a ClientExtension, got a '".concat(selection.kind, "'"), [selection.loc]);
|
141
142
|
}
|
142
143
|
|
143
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({}, flattenedSelection, {
|
144
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({}, flattenedSelection), {}, {
|
144
145
|
selections: mergeSelections(schema, flattenedSelection, selection, state, type)
|
145
146
|
}));
|
146
147
|
} else if (flattenedSelection.kind === 'FragmentSpread') {// Ignore duplicate fragment spreads.
|
@@ -153,7 +154,7 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
153
154
|
throw createUserError('Found conflicting @module selections: use a unique alias on the ' + 'parent fields.', [selection.loc, flattenedSelection.loc]);
|
154
155
|
}
|
155
156
|
|
156
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({}, flattenedSelection, {
|
157
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({}, flattenedSelection), {}, {
|
157
158
|
selections: mergeSelections(schema, flattenedSelection, selection, state, type)
|
158
159
|
}));
|
159
160
|
} else if (flattenedSelection.kind === 'Defer') {
|
@@ -161,9 +162,9 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
161
162
|
throw createCompilerError("FlattenTransform: Expected a Defer, got a '".concat(selection.kind, "'"), [selection.loc]);
|
162
163
|
}
|
163
164
|
|
164
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({
|
165
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({
|
165
166
|
kind: 'Defer'
|
166
|
-
}, flattenedSelection, {
|
167
|
+
}, flattenedSelection), {}, {
|
167
168
|
selections: mergeSelections(schema, flattenedSelection, selection, state, type)
|
168
169
|
}));
|
169
170
|
} else if (flattenedSelection.kind === 'Stream') {
|
@@ -171,9 +172,9 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
171
172
|
throw createCompilerError("FlattenTransform: Expected a Stream, got a '".concat(selection.kind, "'"), [selection.loc]);
|
172
173
|
}
|
173
174
|
|
174
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({
|
175
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({
|
175
176
|
kind: 'Stream'
|
176
|
-
}, flattenedSelection, {
|
177
|
+
}, flattenedSelection), {}, {
|
177
178
|
selections: mergeSelections(schema, flattenedSelection, selection, state, type)
|
178
179
|
}));
|
179
180
|
} else if (flattenedSelection.kind === 'LinkedField') {
|
@@ -204,9 +205,9 @@ function flattenSelectionsInto(schema, flattenedSelections, node, state, type) {
|
|
204
205
|
assertUniqueArgsForAlias(selection, flattenedSelection);
|
205
206
|
|
206
207
|
if (selection.handles && selection.handles.length > 0) {
|
207
|
-
flattenedSelections.set(nodeIdentifier, _objectSpread({
|
208
|
+
flattenedSelections.set(nodeIdentifier, _objectSpread(_objectSpread({
|
208
209
|
kind: 'ScalarField'
|
209
|
-
}, flattenedSelection, {
|
210
|
+
}, flattenedSelection), {}, {
|
210
211
|
handles: mergeHandles(selection, flattenedSelection)
|
211
212
|
}));
|
212
213
|
}
|
@@ -95,7 +95,7 @@ function visitLinkedField(field, state) {
|
|
95
95
|
var unmodifiedType = schema.assertCompositeType(schema.getRawType(field.type)); // If the field type has an `id` subfield add an `id` selection
|
96
96
|
|
97
97
|
if (schema.canHaveSelections(unmodifiedType) && schema.hasId(unmodifiedType)) {
|
98
|
-
return _objectSpread({}, transformedNode, {
|
98
|
+
return _objectSpread(_objectSpread({}, transformedNode), {}, {
|
99
99
|
selections: [].concat((0, _toConsumableArray2["default"])(transformedNode.selections), [state.idFieldForType(unmodifiedType)])
|
100
100
|
});
|
101
101
|
} // If the field type is abstract, then generate a `... on Node { id }`
|
@@ -126,7 +126,7 @@ function visitLinkedField(field, state) {
|
|
126
126
|
}).forEach(function (concreteType) {
|
127
127
|
selections.push(state.idFragmentForType(concreteType));
|
128
128
|
});
|
129
|
-
return _objectSpread({}, transformedNode, {
|
129
|
+
return _objectSpread(_objectSpread({}, transformedNode), {}, {
|
130
130
|
selections: selections
|
131
131
|
});
|
132
132
|
}
|
@@ -69,7 +69,7 @@ function visitFragment(fragment, state) {
|
|
69
69
|
|
70
70
|
if (!isClientType && schema.isAbstractType(rawType)) {
|
71
71
|
var abstractKey = generateAbstractTypeRefinementKey(schema, rawType);
|
72
|
-
transformedNode = _objectSpread({}, transformedNode, {
|
72
|
+
transformedNode = _objectSpread(_objectSpread({}, transformedNode), {}, {
|
73
73
|
selections: [{
|
74
74
|
kind: 'ScalarField',
|
75
75
|
alias: abstractKey,
|
@@ -105,7 +105,7 @@ function visitInlineFragment(fragment, state) {
|
|
105
105
|
|
106
106
|
if (!isClientType && schema.isAbstractType(rawType)) {
|
107
107
|
var abstractKey = generateAbstractTypeRefinementKey(schema, rawType);
|
108
|
-
transformedNode = _objectSpread({}, transformedNode, {
|
108
|
+
transformedNode = _objectSpread(_objectSpread({}, transformedNode), {}, {
|
109
109
|
selections: [{
|
110
110
|
kind: 'ScalarField',
|
111
111
|
alias: abstractKey,
|
@@ -139,7 +139,7 @@ function visitLinkedField(field, state) {
|
|
139
139
|
transformedNode = this.traverse(field, state);
|
140
140
|
|
141
141
|
if (schema.isAbstractType(schema.getRawType(transformedNode.type)) && !hasUnaliasedSelection(transformedNode, TYPENAME_KEY)) {
|
142
|
-
transformedNode = _objectSpread({}, transformedNode, {
|
142
|
+
transformedNode = _objectSpread(_objectSpread({}, transformedNode), {}, {
|
143
143
|
selections: [state.typenameField].concat((0, _toConsumableArray2["default"])(transformedNode.selections))
|
144
144
|
});
|
145
145
|
}
|
@@ -49,11 +49,11 @@ function visitFragment(fragment) {
|
|
49
49
|
return transformedFragment;
|
50
50
|
}
|
51
51
|
|
52
|
-
return _objectSpread({}, transformedFragment, {
|
52
|
+
return _objectSpread(_objectSpread({}, transformedFragment), {}, {
|
53
53
|
directives: transformedFragment.directives.filter(function (directive) {
|
54
54
|
return directive !== inlineDirective;
|
55
55
|
}),
|
56
|
-
metadata: _objectSpread({}, transformedFragment.metadata || {}, {
|
56
|
+
metadata: _objectSpread(_objectSpread({}, transformedFragment.metadata || {}), {}, {
|
57
57
|
inlineData: true
|
58
58
|
})
|
59
59
|
});
|
@@ -14,9 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
14
14
|
|
15
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
16
16
|
|
17
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (
|
17
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
18
18
|
|
19
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(
|
19
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
20
20
|
|
21
21
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
22
22
|
|
@@ -56,7 +56,7 @@ function visitFragment(fragment, state) {
|
|
56
56
|
}
|
57
57
|
|
58
58
|
var joinedArgumentDefinitions = joinArgumentDefinitions(this.getContext().getSchema(), fragment, state.reachableArguments, '@relay(unmask: true)');
|
59
|
-
return _objectSpread({}, result, {
|
59
|
+
return _objectSpread(_objectSpread({}, result), {}, {
|
60
60
|
argumentDefinitions: joinedArgumentDefinitions
|
61
61
|
});
|
62
62
|
}
|
@@ -64,7 +64,7 @@ function matchTransform(context) {
|
|
64
64
|
}
|
65
65
|
|
66
66
|
function visitInlineFragment(node, state) {
|
67
|
-
return this.traverse(node, _objectSpread({}, state, {
|
67
|
+
return this.traverse(node, _objectSpread(_objectSpread({}, state), {}, {
|
68
68
|
parentType: node.typeCondition
|
69
69
|
}));
|
70
70
|
}
|
@@ -111,7 +111,7 @@ function visitLinkedField(node, state) {
|
|
111
111
|
}
|
112
112
|
|
113
113
|
state.path.push(node);
|
114
|
-
var transformedNode = this.traverse(node, _objectSpread({}, state, {
|
114
|
+
var transformedNode = this.traverse(node, _objectSpread(_objectSpread({}, state), {}, {
|
115
115
|
moduleKey: moduleKey,
|
116
116
|
parentType: node.type
|
117
117
|
}));
|
@@ -135,6 +135,10 @@ function visitLinkedField(node, state) {
|
|
135
135
|
});
|
136
136
|
|
137
137
|
if (supportedArgumentDefinition == null) {
|
138
|
+
if (moduleKey == null) {
|
139
|
+
throw createUserError('@match on a field without the `supported` argument is a no-op, please remove the `@match`.', [node.loc]);
|
140
|
+
}
|
141
|
+
|
138
142
|
return transformedNode;
|
139
143
|
}
|
140
144
|
|
@@ -418,7 +422,7 @@ function visitFragmentSpread(spread, _ref2) {
|
|
418
422
|
module: moduleName,
|
419
423
|
sourceDocument: documentName,
|
420
424
|
name: spread.name,
|
421
|
-
selections: [_objectSpread({}, spread, {
|
425
|
+
selections: [_objectSpread(_objectSpread({}, spread), {}, {
|
422
426
|
directives: spread.directives.filter(function (directive) {
|
423
427
|
return directive !== moduleDirective;
|
424
428
|
})
|