babel-plugin-relay 2.0.0-rc.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/babel-plugin-relay.js +2 -2
- package/babel-plugin-relay.min.js +2 -2
- package/index.js +1 -1
- package/lib/BabelPluginRelay.js +33 -10
- package/lib/BabelPluginRelay.macro.js +18 -5
- package/lib/GraphQLRelayDirective.js +6 -4
- package/lib/RelayQLAST.js +82 -52
- package/lib/RelayQLNodeInterface.js +1 -1
- package/lib/RelayQLPrinter.js +61 -43
- package/lib/RelayQLTransformer.js +46 -25
- package/lib/RelayTransformError.js +1 -1
- package/lib/compileGraphQLTag.js +14 -68
- package/lib/compileRelayQLTag.js +6 -4
- package/lib/createClassicNode.js +26 -16
- package/lib/createModernNode.js +16 -9
- package/lib/createTransformError.js +7 -2
- package/lib/getClassicTransformer.js +13 -5
- package/lib/getDocumentName.js +4 -1
- package/lib/getFragmentNameParts.js +1 -1
- package/lib/getSchemaIntrospection.js +22 -5
- package/lib/getValidGraphQLTag.js +3 -2
- package/lib/invariant.js +3 -1
- package/macro.js +1 -1
- package/package.json +3 -3
- package/yarn.lock +0 -87
package/lib/RelayQLPrinter.js
CHANGED
@@ -10,9 +10,29 @@
|
|
10
10
|
*/
|
11
11
|
'use strict';
|
12
12
|
|
13
|
-
var
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
14
14
|
|
15
|
-
var
|
15
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
|
16
|
+
|
17
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
18
|
+
|
19
|
+
var RelayTransformError = require("./RelayTransformError");
|
20
|
+
|
21
|
+
var find = require("./find");
|
22
|
+
|
23
|
+
var util = require("util");
|
24
|
+
|
25
|
+
var _require = require("./RelayQLAST"),
|
26
|
+
RelayQLField = _require.RelayQLField,
|
27
|
+
RelayQLFragment = _require.RelayQLFragment,
|
28
|
+
RelayQLFragmentSpread = _require.RelayQLFragmentSpread,
|
29
|
+
RelayQLInlineFragment = _require.RelayQLInlineFragment,
|
30
|
+
RelayQLMutation = _require.RelayQLMutation,
|
31
|
+
RelayQLQuery = _require.RelayQLQuery,
|
32
|
+
RelayQLSubscription = _require.RelayQLSubscription;
|
33
|
+
|
34
|
+
var _require2 = require("./RelayQLNodeInterface"),
|
35
|
+
ID = _require2.ID;
|
16
36
|
|
17
37
|
module.exports = function (t, options) {
|
18
38
|
var formatFields = options.snakeCase ? function (fields) {
|
@@ -55,16 +75,16 @@ module.exports = function (t, options) {
|
|
55
75
|
var enableValidation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
56
76
|
var printedDocument;
|
57
77
|
|
58
|
-
if (definition instanceof
|
78
|
+
if (definition instanceof RelayQLQuery) {
|
59
79
|
printedDocument = this.printQuery(definition, enableValidation);
|
60
|
-
} else if (definition instanceof
|
80
|
+
} else if (definition instanceof RelayQLFragment) {
|
61
81
|
printedDocument = this.printFragment(definition);
|
62
|
-
} else if (definition instanceof
|
82
|
+
} else if (definition instanceof RelayQLMutation) {
|
63
83
|
printedDocument = this.printMutation(definition, enableValidation);
|
64
|
-
} else if (definition instanceof
|
84
|
+
} else if (definition instanceof RelayQLSubscription) {
|
65
85
|
printedDocument = this.printSubscription(definition, enableValidation);
|
66
86
|
} else {
|
67
|
-
throw new
|
87
|
+
throw new RelayTransformError(util.format('Unsupported definition: %s', definition), definition.getLocation());
|
68
88
|
}
|
69
89
|
|
70
90
|
return t.callExpression(t.functionExpression(null, substitutions.map(function (substitution) {
|
@@ -78,7 +98,7 @@ module.exports = function (t, options) {
|
|
78
98
|
var rootFields = query.getFields();
|
79
99
|
|
80
100
|
if (rootFields.length !== 1 && enableValidation) {
|
81
|
-
throw new
|
101
|
+
throw new RelayTransformError(util.format('There are %d fields supplied to the query named `%s`, but queries ' + 'must have exactly one field.', rootFields.length, query.getName()), query.getLocation());
|
82
102
|
}
|
83
103
|
|
84
104
|
var rootField = rootFields[0];
|
@@ -107,7 +127,7 @@ module.exports = function (t, options) {
|
|
107
127
|
}
|
108
128
|
|
109
129
|
if (rootFieldArgs.length > 1) {
|
110
|
-
throw new
|
130
|
+
throw new RelayTransformError(util.format('Invalid root field `%s`; Relay only supports root fields with zero ' + 'or one argument.', rootField.getName()), query.getLocation());
|
111
131
|
}
|
112
132
|
|
113
133
|
var calls = NULL;
|
@@ -154,8 +174,8 @@ module.exports = function (t, options) {
|
|
154
174
|
var requisiteFields = {};
|
155
175
|
var idFragment;
|
156
176
|
|
157
|
-
if (fragmentType.hasField(
|
158
|
-
requisiteFields[
|
177
|
+
if (fragmentType.hasField(ID)) {
|
178
|
+
requisiteFields[ID] = true;
|
159
179
|
} else if (shouldGenerateIdFragment(fragment)) {
|
160
180
|
idFragment = fragmentType.generateIdFragment();
|
161
181
|
}
|
@@ -166,11 +186,9 @@ module.exports = function (t, options) {
|
|
166
186
|
|
167
187
|
var selections = this.printSelections(fragment, requisiteFields, idFragment ? [idFragment] : null, fragment.hasDirective('generated'));
|
168
188
|
var relayDirective = findRelayDirective(fragment);
|
169
|
-
|
170
|
-
var selectVariables = relayDirective && require("./find")(relayDirective.getArguments(), function (arg) {
|
189
|
+
var selectVariables = relayDirective && find(relayDirective.getArguments(), function (arg) {
|
171
190
|
return arg.getName() === 'variables';
|
172
191
|
});
|
173
|
-
|
174
192
|
var metadata = this.printRelayDirectiveMetadata(fragment, {
|
175
193
|
isAbstract: fragmentType.isAbstract(),
|
176
194
|
isTrackingEnabled: !!selectVariables
|
@@ -191,7 +209,7 @@ module.exports = function (t, options) {
|
|
191
209
|
var selectVariablesValue = selectVariables.getValue();
|
192
210
|
|
193
211
|
if (!Array.isArray(selectVariablesValue)) {
|
194
|
-
throw new
|
212
|
+
throw new RelayTransformError('The variables argument to the @relay directive should be an array ' + 'of strings.', fragment.getLocation());
|
195
213
|
}
|
196
214
|
|
197
215
|
return t.callExpression(t.memberExpression(identify(this.tagName), t.identifier('__createFragment')), [fragmentCode, t.objectExpression(selectVariablesValue.map(function (item) {
|
@@ -212,7 +230,7 @@ module.exports = function (t, options) {
|
|
212
230
|
var rootFields = mutation.getFields();
|
213
231
|
|
214
232
|
if (rootFields.length !== 1 && enableValidation) {
|
215
|
-
throw new
|
233
|
+
throw new RelayTransformError(util.format('There are %d fields supplied to the mutation named `%s`, but ' + 'mutations must have exactly one field.', rootFields.length, mutation.getName()), mutation.getLocation());
|
216
234
|
}
|
217
235
|
|
218
236
|
var rootField = rootFields[0];
|
@@ -250,7 +268,7 @@ module.exports = function (t, options) {
|
|
250
268
|
var rootFields = subscription.getFields();
|
251
269
|
|
252
270
|
if (rootFields.length !== 1 && enableValidation) {
|
253
|
-
throw new
|
271
|
+
throw new RelayTransformError(util.format('There are %d fields supplied to the subscription named `%s`, but ' + 'subscriptions must have exactly one field.', rootFields.length, subscription.getName()), subscription.getLocation());
|
254
272
|
}
|
255
273
|
|
256
274
|
var rootField = rootFields[0];
|
@@ -296,20 +314,20 @@ module.exports = function (t, options) {
|
|
296
314
|
var printedFragments = [];
|
297
315
|
var didPrintFragmentReference = false;
|
298
316
|
parent.getSelections().forEach(function (selection) {
|
299
|
-
if (selection instanceof
|
317
|
+
if (selection instanceof RelayQLFragmentSpread) {
|
300
318
|
// Assume that all spreads exist via template substitution.
|
301
319
|
if (selection.getDirectives().length !== 0) {
|
302
|
-
throw new
|
320
|
+
throw new RelayTransformError('Directives are not yet supported for `${fragment}`-style fragment ' + 'references.', selection.getLocation());
|
303
321
|
}
|
304
322
|
|
305
323
|
printedFragments.push(_this2.printFragmentReference(selection));
|
306
324
|
didPrintFragmentReference = true;
|
307
|
-
} else if (selection instanceof
|
325
|
+
} else if (selection instanceof RelayQLInlineFragment) {
|
308
326
|
printedFragments.push(_this2.printFragment(selection.getFragment()));
|
309
|
-
} else if (selection instanceof
|
327
|
+
} else if (selection instanceof RelayQLField) {
|
310
328
|
fields.push(selection);
|
311
329
|
} else {
|
312
|
-
throw new
|
330
|
+
throw new RelayTransformError(util.format('Unsupported selection type `%s`.', selection), selection.getLocation());
|
313
331
|
}
|
314
332
|
});
|
315
333
|
|
@@ -320,7 +338,7 @@ module.exports = function (t, options) {
|
|
320
338
|
}
|
321
339
|
|
322
340
|
var printedFields = this.printFields(fields, parent, requisiteFields, isGeneratedQuery);
|
323
|
-
var selections = (0, _toConsumableArray2["default"])(printedFields)
|
341
|
+
var selections = [].concat((0, _toConsumableArray2["default"])(printedFields), printedFragments);
|
324
342
|
|
325
343
|
if (selections.length) {
|
326
344
|
var arrayExpressionOfSelections = t.arrayExpression(selections);
|
@@ -364,8 +382,8 @@ module.exports = function (t, options) {
|
|
364
382
|
var requisiteFields = {};
|
365
383
|
var idFragment;
|
366
384
|
|
367
|
-
if (fieldType.hasField(
|
368
|
-
requisiteFields[
|
385
|
+
if (fieldType.hasField(ID)) {
|
386
|
+
requisiteFields[ID] = true;
|
369
387
|
} else if (shouldGenerateIdFragment(field)) {
|
370
388
|
idFragment = fieldType.generateIdFragment();
|
371
389
|
}
|
@@ -381,7 +399,7 @@ module.exports = function (t, options) {
|
|
381
399
|
|
382
400
|
if (fieldType.alwaysImplements('Node')) {
|
383
401
|
metadata.inferredRootCallName = 'node';
|
384
|
-
metadata.inferredPrimaryKey =
|
402
|
+
metadata.inferredPrimaryKey = ID;
|
385
403
|
}
|
386
404
|
|
387
405
|
if (fieldType.isConnection()) {
|
@@ -532,7 +550,7 @@ module.exports = function (t, options) {
|
|
532
550
|
if (relayDirective) {
|
533
551
|
relayDirective.getArguments().forEach(function (arg) {
|
534
552
|
if (arg.isVariable()) {
|
535
|
-
throw new
|
553
|
+
throw new RelayTransformError(util.format('You supplied `$%s` as the `%s` argument to the `@relay` ' + 'directive, but `@relay` require scalar argument values.', arg.getVariableName(), arg.getName()), node.getLocation());
|
536
554
|
}
|
537
555
|
|
538
556
|
if (arg.getName() !== 'variables') {
|
@@ -551,11 +569,11 @@ module.exports = function (t, options) {
|
|
551
569
|
}
|
552
570
|
|
553
571
|
return t.objectExpression(properties);
|
554
|
-
}
|
572
|
+
}
|
555
573
|
/**
|
556
574
|
* Prints the type for arguments that are transmitted via variables.
|
557
575
|
*/
|
558
|
-
|
576
|
+
;
|
559
577
|
|
560
578
|
_proto.printArgumentTypeForMetadata = function printArgumentTypeForMetadata(argType) {
|
561
579
|
// Only booleans and strings can be safely inlined, which is indicated to
|
@@ -589,7 +607,7 @@ module.exports = function (t, options) {
|
|
589
607
|
|
590
608
|
function shouldGenerateIdFragment(node) {
|
591
609
|
return node.getType().mayImplement('Node') && !node.getSelections().some(function (selection) {
|
592
|
-
return selection instanceof
|
610
|
+
return selection instanceof RelayQLInlineFragment && selection.getFragment().getType().getName({
|
593
611
|
modifiers: false
|
594
612
|
}) === 'Node';
|
595
613
|
});
|
@@ -600,8 +618,8 @@ module.exports = function (t, options) {
|
|
600
618
|
var argTypes = field.getDeclaredArguments();
|
601
619
|
var argNames = Object.keys(argTypes);
|
602
620
|
|
603
|
-
if (!parentType.isQueryType() && argNames.length === 1 && argNames[0] ===
|
604
|
-
throw new
|
621
|
+
if (!parentType.isQueryType() && argNames.length === 1 && argNames[0] === ID) {
|
622
|
+
throw new RelayTransformError(util.format('You defined a `node(%s: %s)` field on type `%s`, but Relay requires ' + 'the `node` field to be defined on the root type. See the Object ' + 'Identification Guide: \n' + 'https://relay.dev/docs/en/graphql-server-specification#object-identification', ID, argNames[0] && argTypes[argNames[0]].getName({
|
605
623
|
modifiers: true
|
606
624
|
}), parentType.getName({
|
607
625
|
modifiers: false
|
@@ -619,19 +637,19 @@ module.exports = function (t, options) {
|
|
619
637
|
var condition = !first || !last || first.isVariable() && last.isVariable();
|
620
638
|
|
621
639
|
if (!condition) {
|
622
|
-
throw new
|
640
|
+
throw new RelayTransformError(util.format('Connection arguments `%s(first: <count>, last: <count>)` are ' + 'not supported unless both are variables. Use `(first: <count>)`, ' + '`(last: <count>)`, or `(first: $<var>, last: $<var>)`.', field.getName()), field.getLocation());
|
623
641
|
}
|
624
642
|
|
625
643
|
condition = !first || !before || first.isVariable() && before.isVariable();
|
626
644
|
|
627
645
|
if (!condition) {
|
628
|
-
throw new
|
646
|
+
throw new RelayTransformError(util.format('Connection arguments `%s(before: <cursor>, first: <count>)` are ' + 'not supported unless both are variables. Use `(first: <count>)`, ' + '`(after: <cursor>, first: <count>)`, `(before: <cursor>, last: <count>)`, ' + 'or `(before: $<var>, first: $<var>)`.', field.getName()), field.getLocation());
|
629
647
|
}
|
630
648
|
|
631
649
|
condition = !last || !after || last.isVariable() && after.isVariable();
|
632
650
|
|
633
651
|
if (!condition) {
|
634
|
-
throw new
|
652
|
+
throw new RelayTransformError(util.format('Connection arguments `%s(after: <cursor>, last: <count>)` are ' + 'not supported unless both are variables. Use `(last: <count>)`, ' + '`(before: <cursor>, last: <count>)`, `(after: <cursor>, first: <count>)`, ' + 'or `(after: $<var>, last: $<var>)`.', field.getName()), field.getLocation());
|
635
653
|
} // Use `any` because we already check `isConnection` before validating.
|
636
654
|
|
637
655
|
|
@@ -642,7 +660,7 @@ module.exports = function (t, options) {
|
|
642
660
|
var hasCondition = field.isPattern() || field.hasArgument('find') || field.hasArgument('first') || field.hasArgument('last');
|
643
661
|
|
644
662
|
if (!hasCondition) {
|
645
|
-
throw new
|
663
|
+
throw new RelayTransformError(util.format('You supplied the `%s` field on a connection named `%s`, but you did ' + 'not supply an argument necessary for Relay to handle the connection. ' + 'Please specify a limit argument like `first`, or `last` or ' + 'fetch a specific item with a `find` argument.', subfield.getName(), field.getName()), field.getLocation());
|
646
664
|
}
|
647
665
|
} else {
|
648
666
|
// Suggest `edges{node{...}}` instead of `nodes{...}`.
|
@@ -654,7 +672,7 @@ module.exports = function (t, options) {
|
|
654
672
|
});
|
655
673
|
|
656
674
|
if (isNodesLikeField) {
|
657
|
-
throw new
|
675
|
+
throw new RelayTransformError(util.format('You supplied a field named `%s` on a connection named `%s`, but ' + 'pagination is not supported on connections without using `%s`. ' + 'Use `%s{%s{%s{...}}}` instead.', subfield.getName(), field.getName(), FIELDS.edges, field.getName(), FIELDS.edges, FIELDS.node), field.getLocation());
|
658
676
|
}
|
659
677
|
}
|
660
678
|
});
|
@@ -665,25 +683,25 @@ module.exports = function (t, options) {
|
|
665
683
|
var declaredArgNames = Object.keys(declaredArgs);
|
666
684
|
|
667
685
|
if (declaredArgNames.length !== 1) {
|
668
|
-
throw new
|
686
|
+
throw new RelayTransformError(util.format('Your schema defines a mutation field `%s` that takes %d arguments, ' + 'but mutation fields must have exactly one argument named `%s`.', rootField.getName(), declaredArgNames.length, INPUT_ARGUMENT_NAME), rootField.getLocation());
|
669
687
|
}
|
670
688
|
|
671
689
|
if (declaredArgNames[0] !== INPUT_ARGUMENT_NAME) {
|
672
|
-
throw new
|
690
|
+
throw new RelayTransformError(util.format('Your schema defines a mutation field `%s` that takes an argument ' + 'named `%s`, but mutation fields must have exactly one argument ' + 'named `%s`.', rootField.getName(), declaredArgNames[0], INPUT_ARGUMENT_NAME), rootField.getLocation());
|
673
691
|
}
|
674
692
|
|
675
693
|
var rootFieldArgs = rootField.getArguments();
|
676
694
|
|
677
695
|
if (rootFieldArgs.length > 1) {
|
678
|
-
throw new
|
696
|
+
throw new RelayTransformError(util.format('There are %d arguments supplied to the mutation field named `%s`, ' + 'but mutation fields must have exactly one `%s` argument.', rootFieldArgs.length, rootField.getName(), INPUT_ARGUMENT_NAME), rootField.getLocation());
|
679
697
|
}
|
680
698
|
}
|
681
699
|
|
682
700
|
var forEachRecursiveField = function forEachRecursiveField(parentSelection, callback) {
|
683
701
|
parentSelection.getSelections().forEach(function (selection) {
|
684
|
-
if (selection instanceof
|
702
|
+
if (selection instanceof RelayQLField) {
|
685
703
|
callback(selection);
|
686
|
-
} else if (selection instanceof
|
704
|
+
} else if (selection instanceof RelayQLInlineFragment) {
|
687
705
|
forEachRecursiveField(selection.getFragment(), callback);
|
688
706
|
} // Ignore `RelayQLFragmentSpread` selections.
|
689
707
|
|
@@ -748,7 +766,7 @@ module.exports = function (t, options) {
|
|
748
766
|
}
|
749
767
|
|
750
768
|
function findRelayDirective(node) {
|
751
|
-
return
|
769
|
+
return find(node.getDirectives(), function (directive) {
|
752
770
|
return directive.getName() === 'relay';
|
753
771
|
});
|
754
772
|
}
|
@@ -10,6 +10,31 @@
|
|
10
10
|
*/
|
11
11
|
'use strict';
|
12
12
|
|
13
|
+
var RelayQLPrinter = require("./RelayQLPrinter");
|
14
|
+
|
15
|
+
var invariant = require("./invariant");
|
16
|
+
|
17
|
+
var util = require("util");
|
18
|
+
|
19
|
+
var _require = require("./RelayQLAST"),
|
20
|
+
RelayQLFragment = _require.RelayQLFragment,
|
21
|
+
RelayQLMutation = _require.RelayQLMutation,
|
22
|
+
RelayQLQuery = _require.RelayQLQuery,
|
23
|
+
RelayQLSubscription = _require.RelayQLSubscription;
|
24
|
+
|
25
|
+
var _require2 = require("graphql"),
|
26
|
+
formatError = _require2.formatError,
|
27
|
+
parse = _require2.parse,
|
28
|
+
Source = _require2.Source,
|
29
|
+
validate = _require2.validate,
|
30
|
+
FieldsOnCorrectTypeRule = _require2.FieldsOnCorrectTypeRule,
|
31
|
+
FragmentsOnCompositeTypesRule = _require2.FragmentsOnCompositeTypesRule,
|
32
|
+
KnownArgumentNamesRule = _require2.KnownArgumentNamesRule,
|
33
|
+
KnownTypeNamesRule = _require2.KnownTypeNamesRule,
|
34
|
+
PossibleFragmentSpreadsRule = _require2.PossibleFragmentSpreadsRule,
|
35
|
+
ValuesOfCorrectTypeRule = _require2.ValuesOfCorrectTypeRule,
|
36
|
+
VariablesInAllowedPositionRule = _require2.VariablesInAllowedPositionRule;
|
37
|
+
|
13
38
|
/**
|
14
39
|
* Transforms a TemplateLiteral node into a RelayQLDefinition, which is then
|
15
40
|
* transformed into a Babel AST via RelayQLPrinter.
|
@@ -33,17 +58,15 @@ function () {
|
|
33
58
|
|
34
59
|
var documentText = this.processTemplateText(templateText, options);
|
35
60
|
var definition = this.processDocumentText(documentText, options);
|
36
|
-
|
37
|
-
var Printer = require("./RelayQLPrinter")(t, this.options);
|
38
|
-
|
61
|
+
var Printer = RelayQLPrinter(t, this.options);
|
39
62
|
return new Printer(options.tagName, variableNames).print(definition, substitutions, options.enableValidation);
|
40
|
-
}
|
63
|
+
}
|
41
64
|
/**
|
42
65
|
* Convert TemplateLiteral into a single template string with substitution
|
43
66
|
* names, a matching array of substituted values, and a set of substituted
|
44
67
|
* variable names.
|
45
68
|
*/
|
46
|
-
|
69
|
+
;
|
47
70
|
|
48
71
|
_proto.processTemplateLiteral = function processTemplateLiteral(node, documentName) {
|
49
72
|
var _this = this;
|
@@ -64,7 +87,7 @@ function () {
|
|
64
87
|
});
|
65
88
|
|
66
89
|
if (/:\s*$/.test(chunk)) {
|
67
|
-
!_this.options.substituteVariables ? process.env.NODE_ENV !== "production" ?
|
90
|
+
!_this.options.substituteVariables ? process.env.NODE_ENV !== "production" ? invariant(false, 'You supplied a GraphQL document named `%s` that uses template ' + 'substitution for an argument value, but variable substitution ' + 'has not been enabled.', documentName) : invariant(false) : void 0;
|
68
91
|
chunks.push('$' + name);
|
69
92
|
variableNames[name] = undefined;
|
70
93
|
} else {
|
@@ -77,18 +100,18 @@ function () {
|
|
77
100
|
templateText: chunks.join('').trim(),
|
78
101
|
variableNames: variableNames
|
79
102
|
};
|
80
|
-
}
|
103
|
+
}
|
81
104
|
/**
|
82
105
|
* Converts the template string into a valid GraphQL document string.
|
83
106
|
*/
|
84
|
-
|
107
|
+
;
|
85
108
|
|
86
109
|
_proto.processTemplateText = function processTemplateText(templateText, _ref) {
|
87
110
|
var documentName = _ref.documentName,
|
88
111
|
propName = _ref.propName;
|
89
112
|
var pattern = /^(fragment|mutation|query|subscription)\s*(\w*)?([\s\S]*)/;
|
90
113
|
var matches = pattern.exec(templateText);
|
91
|
-
!matches ? process.env.NODE_ENV !== "production" ?
|
114
|
+
!matches ? process.env.NODE_ENV !== "production" ? invariant(false, 'You supplied a GraphQL document named `%s` with invalid syntax. It ' + 'must start with `fragment`, `mutation`, `query`, or `subscription`.', documentName) : invariant(false) : void 0;
|
92
115
|
var type = matches[1];
|
93
116
|
var name = matches[2] || documentName;
|
94
117
|
var rest = matches[3]; // Allow `fragment on Type {...}`.
|
@@ -100,22 +123,20 @@ function () {
|
|
100
123
|
|
101
124
|
var definitionName = capitalize(name);
|
102
125
|
return type + ' ' + definitionName + ' ' + rest;
|
103
|
-
}
|
126
|
+
}
|
104
127
|
/**
|
105
128
|
* Parses the GraphQL document string into a RelayQLDocument.
|
106
129
|
*/
|
107
|
-
|
130
|
+
;
|
108
131
|
|
109
132
|
_proto.processDocumentText = function processDocumentText(documentText, _ref2) {
|
110
133
|
var documentName = _ref2.documentName,
|
111
134
|
enableValidation = _ref2.enableValidation;
|
112
|
-
|
113
|
-
var document = require("graphql").parse(new (require("graphql").Source)(documentText, documentName));
|
114
|
-
|
135
|
+
var document = parse(new Source(documentText, documentName));
|
115
136
|
var validationErrors = enableValidation ? this.validateDocument(document, documentName) : null;
|
116
137
|
|
117
138
|
if (validationErrors) {
|
118
|
-
var error = new Error(
|
139
|
+
var error = new Error(util.format('You supplied a GraphQL document named `%s` with validation errors.', documentName));
|
119
140
|
error.validationErrors = validationErrors;
|
120
141
|
error.sourceText = documentText;
|
121
142
|
throw error;
|
@@ -130,36 +151,36 @@ function () {
|
|
130
151
|
};
|
131
152
|
|
132
153
|
if (definition.kind === 'FragmentDefinition') {
|
133
|
-
return new
|
154
|
+
return new RelayQLFragment(context, definition);
|
134
155
|
} else if (definition.kind === 'OperationDefinition') {
|
135
156
|
if (definition.operation === 'mutation') {
|
136
|
-
return new
|
157
|
+
return new RelayQLMutation(context, definition);
|
137
158
|
} else if (definition.operation === 'query') {
|
138
|
-
return new
|
159
|
+
return new RelayQLQuery(context, definition);
|
139
160
|
} else if (definition.operation === 'subscription') {
|
140
|
-
return new
|
161
|
+
return new RelayQLSubscription(context, definition);
|
141
162
|
} else {
|
142
|
-
!false ? process.env.NODE_ENV !== "production" ?
|
163
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unsupported operation: %s', definition.operation) : invariant(false) : void 0;
|
143
164
|
}
|
144
165
|
} else {
|
145
|
-
!false ? process.env.NODE_ENV !== "production" ?
|
166
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unsupported definition kind: %s', definition.kind) : invariant(false) : void 0;
|
146
167
|
}
|
147
168
|
};
|
148
169
|
|
149
170
|
_proto.validateDocument = function validateDocument(document, documentName) {
|
150
|
-
!(document.definitions.length === 1) ? process.env.NODE_ENV !== "production" ?
|
171
|
+
!(document.definitions.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, 'You supplied a GraphQL document named `%s` with %d definitions, but ' + 'it must have exactly one definition.', documentName, document.definitions.length) : invariant(false) : void 0;
|
151
172
|
var validator = this.options.validator;
|
152
173
|
var validationErrors;
|
153
174
|
|
154
175
|
if (validator) {
|
155
176
|
validationErrors = validator().validate(this.schema, document);
|
156
177
|
} else {
|
157
|
-
var rules = [
|
158
|
-
validationErrors =
|
178
|
+
var rules = [FieldsOnCorrectTypeRule, FragmentsOnCompositeTypesRule, KnownArgumentNamesRule, KnownTypeNamesRule, PossibleFragmentSpreadsRule, ValuesOfCorrectTypeRule, VariablesInAllowedPositionRule];
|
179
|
+
validationErrors = validate(this.schema, document, rules);
|
159
180
|
}
|
160
181
|
|
161
182
|
if (validationErrors && validationErrors.length > 0) {
|
162
|
-
return validationErrors.map(
|
183
|
+
return validationErrors.map(formatError);
|
163
184
|
}
|
164
185
|
|
165
186
|
return null;
|
package/lib/compileGraphQLTag.js
CHANGED
@@ -9,69 +9,28 @@
|
|
9
9
|
*/
|
10
10
|
'use strict';
|
11
11
|
|
12
|
+
var createClassicNode = require("./createClassicNode");
|
13
|
+
|
14
|
+
var createCompatNode = require("./createCompatNode");
|
15
|
+
|
16
|
+
var createModernNode = require("./createModernNode");
|
17
|
+
|
12
18
|
/**
|
13
19
|
* Given a graphql`` tagged template literal, replace it with the appropriate
|
14
20
|
* runtime artifact.
|
15
21
|
*/
|
16
22
|
function compileGraphQLTag(t, path, state, ast) {
|
17
|
-
|
18
|
-
|
19
|
-
if (mainDefinition.kind === 'FragmentDefinition') {
|
20
|
-
var objPropName = getAssignedObjectPropertyName(t, path);
|
21
|
-
|
22
|
-
if (objPropName) {
|
23
|
-
if (ast.definitions.length !== 1) {
|
24
|
-
throw new Error('BabelPluginRelay: Expected exactly one fragment in the ' + "graphql tag referenced by the property ".concat(objPropName, "."));
|
25
|
-
}
|
26
|
-
|
27
|
-
return replaceMemoized(t, path, createAST(t, state, path, mainDefinition));
|
28
|
-
}
|
29
|
-
|
30
|
-
var nodeMap = {};
|
31
|
-
var _iteratorNormalCompletion = true;
|
32
|
-
var _didIteratorError = false;
|
33
|
-
var _iteratorError = undefined;
|
34
|
-
|
35
|
-
try {
|
36
|
-
for (var _iterator = ast.definitions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
37
|
-
var definition = _step.value;
|
38
|
-
|
39
|
-
if (definition.kind !== 'FragmentDefinition') {
|
40
|
-
throw new Error('BabelPluginRelay: Expected only fragments within this ' + 'graphql tag.');
|
41
|
-
}
|
42
|
-
|
43
|
-
var _getFragmentNameParts = require("./getFragmentNameParts")(definition.name.value),
|
44
|
-
propName = _getFragmentNameParts[1];
|
45
|
-
|
46
|
-
nodeMap[propName] = createAST(t, state, path, definition);
|
47
|
-
}
|
48
|
-
} catch (err) {
|
49
|
-
_didIteratorError = true;
|
50
|
-
_iteratorError = err;
|
51
|
-
} finally {
|
52
|
-
try {
|
53
|
-
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
54
|
-
_iterator["return"]();
|
55
|
-
}
|
56
|
-
} finally {
|
57
|
-
if (_didIteratorError) {
|
58
|
-
throw _iteratorError;
|
59
|
-
}
|
60
|
-
}
|
61
|
-
}
|
62
|
-
|
63
|
-
return replaceMemoized(t, path, createObject(t, nodeMap));
|
23
|
+
if (ast.definitions.length !== 1) {
|
24
|
+
throw new Error('BabelPluginRelay: Expected exactly one definition per graphql tag.');
|
64
25
|
}
|
65
26
|
|
66
|
-
|
67
|
-
if (ast.definitions.length !== 1) {
|
68
|
-
throw new Error('BabelPluginRelay: Expected exactly one operation ' + '(query, mutation, or subscription) per graphql tag.');
|
69
|
-
}
|
27
|
+
var definition = ast.definitions[0];
|
70
28
|
|
71
|
-
|
29
|
+
if (definition.kind !== 'FragmentDefinition' && definition.kind !== 'OperationDefinition') {
|
30
|
+
throw new Error('BabelPluginRelay: Expected a fragment, mutation, query, or ' + 'subscription, got `' + definition.kind + '`.');
|
72
31
|
}
|
73
32
|
|
74
|
-
|
33
|
+
return replaceMemoized(t, path, createAST(t, state, path, definition));
|
75
34
|
}
|
76
35
|
|
77
36
|
function createAST(t, state, path, graphqlDefinition) {
|
@@ -82,8 +41,7 @@ function createAST(t, state, path, graphqlDefinition) {
|
|
82
41
|
var buildCommand = state.opts && state.opts.buildCommand || 'relay-compiler'; // Fallback is 'true'
|
83
42
|
|
84
43
|
var isDevelopment = (process.env.BABEL_ENV || process.env.NODE_ENV) !== 'production';
|
85
|
-
|
86
|
-
var modernNode = require("./createModernNode")(t, graphqlDefinition, state, {
|
44
|
+
var modernNode = createModernNode(t, graphqlDefinition, state, {
|
87
45
|
artifactDirectory: artifactDirectory,
|
88
46
|
buildCommand: buildCommand,
|
89
47
|
isDevelopment: isDevelopment,
|
@@ -92,7 +50,7 @@ function createAST(t, state, path, graphqlDefinition) {
|
|
92
50
|
});
|
93
51
|
|
94
52
|
if (isCompatMode) {
|
95
|
-
return
|
53
|
+
return createCompatNode(t, modernNode, createClassicNode(t, path, graphqlDefinition, state));
|
96
54
|
}
|
97
55
|
|
98
56
|
return modernNode;
|
@@ -119,16 +77,4 @@ function createObject(t, obj) {
|
|
119
77
|
}));
|
120
78
|
}
|
121
79
|
|
122
|
-
function getAssignedObjectPropertyName(t, path) {
|
123
|
-
var property = path;
|
124
|
-
|
125
|
-
while (property) {
|
126
|
-
if (t.isObjectProperty(property) && property.node.key.name) {
|
127
|
-
return property.node.key.name;
|
128
|
-
}
|
129
|
-
|
130
|
-
property = property.parentPath;
|
131
|
-
}
|
132
|
-
}
|
133
|
-
|
134
80
|
module.exports = compileGraphQLTag;
|
package/lib/compileRelayQLTag.js
CHANGED
@@ -9,6 +9,10 @@
|
|
9
9
|
*/
|
10
10
|
'use strict';
|
11
11
|
|
12
|
+
var createTransformError = require("./createTransformError");
|
13
|
+
|
14
|
+
var getClassicTransformer = require("./getClassicTransformer");
|
15
|
+
|
12
16
|
/**
|
13
17
|
* Given all the metadata about a found RelayQL tag, compile it and return
|
14
18
|
* the resulting Babel AST.
|
@@ -16,9 +20,7 @@
|
|
16
20
|
function compileRelayQLTag(t, path, schemaProvider, quasi, documentName, propName, tagName, enableValidation, state) {
|
17
21
|
try {
|
18
22
|
var fileOpts = state.file && state.file.opts || {};
|
19
|
-
|
20
|
-
var transformer = require("./getClassicTransformer")(schemaProvider, state.opts || {}, fileOpts);
|
21
|
-
|
23
|
+
var transformer = getClassicTransformer(schemaProvider, state.opts || {}, fileOpts);
|
22
24
|
return transformer.transform(t, quasi, {
|
23
25
|
documentName: documentName,
|
24
26
|
propName: propName,
|
@@ -26,7 +28,7 @@ function compileRelayQLTag(t, path, schemaProvider, quasi, documentName, propNam
|
|
26
28
|
enableValidation: enableValidation
|
27
29
|
});
|
28
30
|
} catch (error) {
|
29
|
-
throw path.buildCodeFrameError(
|
31
|
+
throw path.buildCodeFrameError(createTransformError(error), Error);
|
30
32
|
}
|
31
33
|
}
|
32
34
|
|