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
@@ -19,6 +19,7 @@ const MatchTransform = require('../../transforms/MatchTransform');
|
|
19
19
|
const Profiler = require('../../core/GraphQLCompilerProfiler');
|
20
20
|
const RefetchableFragmentTransform = require('../../transforms/RefetchableFragmentTransform');
|
21
21
|
const RelayDirectiveTransform = require('../../transforms/RelayDirectiveTransform');
|
22
|
+
const RequiredFieldTransform = require('../../transforms/RequiredFieldTransform');
|
22
23
|
|
23
24
|
const generateAbstractTypeRefinementKey = require('../../util/generateAbstractTypeRefinementKey');
|
24
25
|
const partitionArray = require('../../util/partitionArray');
|
@@ -49,8 +50,11 @@ import type {
|
|
49
50
|
Directive,
|
50
51
|
Metadata,
|
51
52
|
ModuleImport,
|
53
|
+
Selection as IRSelection,
|
52
54
|
} from '../../core/IR';
|
55
|
+
import type {NodeVisitor} from '../../core/IRVisitor';
|
53
56
|
import type {Schema, TypeID, EnumTypeID} from '../../core/Schema';
|
57
|
+
import type {RequiredDirectiveMetadata} from '../../transforms/RequiredFieldTransform';
|
54
58
|
import type {TypeGeneratorOptions} from '../RelayLanguagePluginInterface';
|
55
59
|
|
56
60
|
const babelGenerator = require('@babel/generator').default;
|
@@ -281,7 +285,10 @@ function isPlural(node: Fragment): boolean {
|
|
281
285
|
return Boolean(node.metadata && node.metadata.plural);
|
282
286
|
}
|
283
287
|
|
284
|
-
function createVisitor(
|
288
|
+
function createVisitor(
|
289
|
+
schema: Schema,
|
290
|
+
options: TypeGeneratorOptions,
|
291
|
+
): NodeVisitor {
|
285
292
|
const state = {
|
286
293
|
customScalars: options.customScalars,
|
287
294
|
enumsHasteModule: options.enumsHasteModule,
|
@@ -298,22 +305,31 @@ function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
|
|
298
305
|
};
|
299
306
|
return {
|
300
307
|
leave: {
|
301
|
-
Root(node) {
|
308
|
+
Root(node: Root) {
|
302
309
|
const inputVariablesType = generateInputVariablesType(
|
303
310
|
schema,
|
304
311
|
node,
|
305
312
|
state,
|
306
313
|
);
|
307
314
|
const inputObjectTypes = generateInputObjectTypes(state);
|
315
|
+
|
316
|
+
let responseTypeDefinition = selectionsToBabel(
|
317
|
+
schema,
|
318
|
+
/* $FlowFixMe: selections have already been transformed */
|
319
|
+
(node.selections: $ReadOnlyArray<$ReadOnlyArray<Selection>>),
|
320
|
+
state,
|
321
|
+
false,
|
322
|
+
);
|
323
|
+
|
324
|
+
if (node.metadata?.childrenCanBubbleNull === true) {
|
325
|
+
responseTypeDefinition = t.nullableTypeAnnotation(
|
326
|
+
responseTypeDefinition,
|
327
|
+
);
|
328
|
+
}
|
329
|
+
|
308
330
|
const responseType = exportType(
|
309
331
|
`${node.name}Response`,
|
310
|
-
|
311
|
-
schema,
|
312
|
-
// $FlowFixMe[incompatible-cast] : selections have already been transformed
|
313
|
-
(node.selections: $ReadOnlyArray<$ReadOnlyArray<Selection>>),
|
314
|
-
state,
|
315
|
-
false,
|
316
|
-
),
|
332
|
+
responseTypeDefinition,
|
317
333
|
);
|
318
334
|
|
319
335
|
const operationTypes = [
|
@@ -441,9 +457,12 @@ function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
|
|
441
457
|
unmasked,
|
442
458
|
unmasked ? undefined : getOldFragmentTypeName(node.name),
|
443
459
|
);
|
444
|
-
|
445
|
-
|
446
|
-
|
460
|
+
let type = isPluralFragment ? readOnlyArrayOfType(baseType) : baseType;
|
461
|
+
|
462
|
+
if (node.metadata?.childrenCanBubbleNull === true) {
|
463
|
+
type = t.nullableTypeAnnotation(type);
|
464
|
+
}
|
465
|
+
|
447
466
|
state.runtimeImports.add('FragmentReference');
|
448
467
|
|
449
468
|
return t.program([
|
@@ -489,7 +508,9 @@ function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
|
|
489
508
|
ScalarField(node) {
|
490
509
|
return visitScalarField(schema, node, state);
|
491
510
|
},
|
492
|
-
LinkedField
|
511
|
+
LinkedField(node) {
|
512
|
+
return visitLinkedField(schema, node);
|
513
|
+
},
|
493
514
|
ModuleImport(node) {
|
494
515
|
return [
|
495
516
|
{
|
@@ -536,22 +557,55 @@ function visitNodeWithSelectionsOnly(node) {
|
|
536
557
|
);
|
537
558
|
}
|
538
559
|
|
539
|
-
function visitScalarField(schema, node, state) {
|
560
|
+
function visitScalarField(schema: Schema, node, state: State) {
|
561
|
+
const requiredMetadata: ?RequiredDirectiveMetadata = (node.metadata
|
562
|
+
?.required: $FlowFixMe);
|
563
|
+
const nodeType =
|
564
|
+
requiredMetadata != null ? schema.getNonNullType(node.type) : node.type;
|
540
565
|
return [
|
541
566
|
{
|
542
567
|
key: node.alias,
|
543
568
|
schemaName: node.name,
|
544
|
-
value: transformScalarType(schema,
|
569
|
+
value: transformScalarType(schema, nodeType, state),
|
545
570
|
},
|
546
571
|
];
|
547
572
|
}
|
548
573
|
|
549
|
-
function
|
574
|
+
function getLinkedFieldNodeType(schema: Schema, node) {
|
575
|
+
const requiredMetadata: ?RequiredDirectiveMetadata = (node.metadata
|
576
|
+
?.required: $FlowFixMe);
|
577
|
+
|
578
|
+
if (requiredMetadata != null) {
|
579
|
+
return schema.getNonNullType(node.type);
|
580
|
+
}
|
581
|
+
if (node.metadata?.childrenCanBubbleNull === true) {
|
582
|
+
if (schema.isList(node.type)) {
|
583
|
+
// In a plural field, nulls bubble up to the item, resulting in a list of nullable items.
|
584
|
+
return schema.mapListItemType(node.type, inner =>
|
585
|
+
schema.getNullableType(inner),
|
586
|
+
);
|
587
|
+
} else if (schema.isNonNull(node.type)) {
|
588
|
+
const nullable = schema.getNullableType(node.type);
|
589
|
+
if (schema.isList(nullable)) {
|
590
|
+
return schema.getNonNullType(
|
591
|
+
schema.mapListItemType(nullable, inner =>
|
592
|
+
schema.getNullableType(inner),
|
593
|
+
),
|
594
|
+
);
|
595
|
+
}
|
596
|
+
return nullable;
|
597
|
+
}
|
598
|
+
return node.type;
|
599
|
+
}
|
600
|
+
return node.type;
|
601
|
+
}
|
602
|
+
|
603
|
+
function visitLinkedField(schema: Schema, node) {
|
550
604
|
return [
|
551
605
|
{
|
552
606
|
key: node.alias,
|
553
607
|
schemaName: node.name,
|
554
|
-
nodeType: node
|
608
|
+
nodeType: getLinkedFieldNodeType(schema, node),
|
555
609
|
nodeSelections: selectionsToMap(
|
556
610
|
flattenArray(
|
557
611
|
// $FlowFixMe[incompatible-cast] : selections have already been transformed
|
@@ -679,7 +733,7 @@ function appendLocal3DPayload(
|
|
679
733
|
t.genericTypeAnnotation(
|
680
734
|
t.identifier('Local3DPayload'),
|
681
735
|
t.typeParameterInstantiation([
|
682
|
-
t.stringLiteralTypeAnnotation(moduleImport.documentName),
|
736
|
+
t.stringLiteralTypeAnnotation(nullthrows(moduleImport.documentName)),
|
683
737
|
exactObjectTypeAnnotation(
|
684
738
|
selections
|
685
739
|
.filter(sel => sel.schemaName !== 'js')
|
@@ -735,7 +789,9 @@ function createRawResponseTypeVisitor(schema: Schema, state: State) {
|
|
735
789
|
conditional: true,
|
736
790
|
}));
|
737
791
|
},
|
738
|
-
LinkedField
|
792
|
+
LinkedField(node) {
|
793
|
+
return visitLinkedField(schema, node);
|
794
|
+
},
|
739
795
|
Condition: visitNodeWithSelectionsOnly,
|
740
796
|
Defer: visitNodeWithSelectionsOnly,
|
741
797
|
Stream: visitNodeWithSelectionsOnly,
|
@@ -1025,6 +1081,7 @@ const FLOW_TRANSFORMS: $ReadOnlyArray<IRTransform> = [
|
|
1025
1081
|
RelayDirectiveTransform.transform,
|
1026
1082
|
MaskTransform.transform,
|
1027
1083
|
MatchTransform.transform,
|
1084
|
+
RequiredFieldTransform.transform,
|
1028
1085
|
FlattenTransform.transformWithOptions({}),
|
1029
1086
|
RefetchableFragmentTransform.transform,
|
1030
1087
|
];
|
@@ -23,7 +23,7 @@ import type {Schema, TypeID, EnumTypeID} from '../../core/Schema';
|
|
23
23
|
|
24
24
|
export type BabelTypes = typeof t;
|
25
25
|
export type ScalarTypeMapping = {
|
26
|
-
[type: string]: string | (BabelTypes =>
|
26
|
+
[type: string]: string | (BabelTypes => BabelNode_DEPRECATED),
|
27
27
|
...,
|
28
28
|
};
|
29
29
|
|
@@ -37,7 +37,7 @@ function transformScalarType(
|
|
37
37
|
schema: Schema,
|
38
38
|
type: TypeID,
|
39
39
|
state: State,
|
40
|
-
objectProps?:
|
40
|
+
objectProps?: BabelNode_DEPRECATED,
|
41
41
|
): mixed {
|
42
42
|
if (schema.isNonNull(type)) {
|
43
43
|
return transformNonNullableScalarType(
|
@@ -58,7 +58,7 @@ function transformNonNullableScalarType(
|
|
58
58
|
type: TypeID,
|
59
59
|
state: State,
|
60
60
|
objectProps,
|
61
|
-
) {
|
61
|
+
): BabelNode_DEPRECATED {
|
62
62
|
if (schema.isList(type)) {
|
63
63
|
return readOnlyArrayOfType(
|
64
64
|
transformScalarType(
|
@@ -135,7 +135,7 @@ function transformNonNullableInputType(
|
|
135
135
|
schema: Schema,
|
136
136
|
type: TypeID,
|
137
137
|
state: State,
|
138
|
-
) {
|
138
|
+
): BabelNode_DEPRECATED {
|
139
139
|
if (schema.isList(type)) {
|
140
140
|
return readOnlyArrayOfType(
|
141
141
|
transformInputType(schema, schema.getListItemType(type), state),
|
@@ -18,9 +18,9 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
18
18
|
|
19
19
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
20
20
|
|
21
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (
|
21
|
+
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; } } }; }
|
22
22
|
|
23
|
-
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(
|
23
|
+
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); }
|
24
24
|
|
25
25
|
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; }
|
26
26
|
|
@@ -224,7 +224,7 @@ function getPathBasedConfig(config) {
|
|
224
224
|
}
|
225
225
|
}
|
226
226
|
|
227
|
-
return _objectSpread({}, config, {
|
227
|
+
return _objectSpread(_objectSpread({}, config), {}, {
|
228
228
|
schema: schema,
|
229
229
|
src: src,
|
230
230
|
persistOutput: persistOutput
|
@@ -242,7 +242,7 @@ function _getWatchConfig() {
|
|
242
242
|
if (config.watch) {
|
243
243
|
if (!watchman) {
|
244
244
|
console.error('Watchman is required to watch for changes. Running with watch mode disabled.');
|
245
|
-
return _objectSpread({}, config, {
|
245
|
+
return _objectSpread(_objectSpread({}, config), {}, {
|
246
246
|
watch: false,
|
247
247
|
watchman: false
|
248
248
|
});
|
@@ -256,7 +256,7 @@ function _getWatchConfig() {
|
|
256
256
|
console.log('HINT: pass --watch to keep watching for changes.');
|
257
257
|
}
|
258
258
|
|
259
|
-
return _objectSpread({}, config, {
|
259
|
+
return _objectSpread(_objectSpread({}, config), {}, {
|
260
260
|
watchman: watchman
|
261
261
|
});
|
262
262
|
});
|
@@ -16,9 +16,9 @@ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
|
|
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
|
|
@@ -225,14 +225,13 @@ function generateLinkedField(schema, node) {
|
|
225
225
|
key: handle.key,
|
226
226
|
kind: 'LinkedHandle',
|
227
227
|
name: node.name
|
228
|
-
}; //
|
229
|
-
// NOTE: this intentionally adds a dynamic key in order to avoid
|
228
|
+
}; // NOTE: this intentionally adds a dynamic key in order to avoid
|
230
229
|
// triggering updates to existing queries that do not use dynamic
|
231
230
|
// keys.
|
232
231
|
|
233
232
|
if (handle.dynamicKey != null) {
|
234
233
|
var dynamicKeyArgName = '__dynamicKey';
|
235
|
-
handleNode = _objectSpread({}, handleNode, {
|
234
|
+
handleNode = _objectSpread(_objectSpread({}, handleNode), {}, {
|
236
235
|
dynamicKey: {
|
237
236
|
kind: 'Variable',
|
238
237
|
name: dynamicKeyArgName,
|
@@ -245,7 +244,7 @@ function generateLinkedField(schema, node) {
|
|
245
244
|
var handleArgs = generateArgs(handle.handleArgs);
|
246
245
|
|
247
246
|
if (handleArgs != null) {
|
248
|
-
handleNode = _objectSpread({}, handleNode, {
|
247
|
+
handleNode = _objectSpread(_objectSpread({}, handleNode), {}, {
|
249
248
|
handleArgs: handleArgs
|
250
249
|
});
|
251
250
|
}
|
@@ -268,7 +267,7 @@ function generateLinkedField(schema, node) {
|
|
268
267
|
var storageKey = getStaticStorageKey(field, node.metadata);
|
269
268
|
|
270
269
|
if (storageKey != null) {
|
271
|
-
field = _objectSpread({}, field, {
|
270
|
+
field = _objectSpread(_objectSpread({}, field), {}, {
|
272
271
|
storageKey: storageKey
|
273
272
|
});
|
274
273
|
}
|
@@ -306,7 +305,7 @@ function generateTypeDiscriminator(abstractKey) {
|
|
306
305
|
}
|
307
306
|
|
308
307
|
function generateScalarField(node) {
|
309
|
-
var _node$metadata;
|
308
|
+
var _node$metadata, _node$metadata2;
|
310
309
|
|
311
310
|
// flowlint-next-line sketchy-null-mixed:off
|
312
311
|
if ((_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.skipNormalizationNode) {
|
@@ -321,7 +320,7 @@ function generateScalarField(node) {
|
|
321
320
|
throw createUserError('Dynamic key values are not supported on scalar fields.', [handle.dynamicKey.loc]);
|
322
321
|
}
|
323
322
|
|
324
|
-
|
323
|
+
var nodeHandle = {
|
325
324
|
alias: node.alias === node.name ? null : node.alias,
|
326
325
|
args: generateArgs(node.args),
|
327
326
|
filters: handle.filters,
|
@@ -330,6 +329,13 @@ function generateScalarField(node) {
|
|
330
329
|
kind: 'ScalarHandle',
|
331
330
|
name: node.name
|
332
331
|
};
|
332
|
+
|
333
|
+
if (handle.handleArgs != null) {
|
334
|
+
// $FlowFixMe handleArgs exists in Handle
|
335
|
+
nodeHandle.handleArgs = generateArgs(handle.handleArgs);
|
336
|
+
}
|
337
|
+
|
338
|
+
return nodeHandle;
|
333
339
|
}) || [];
|
334
340
|
var field = {
|
335
341
|
alias: node.alias === node.name ? null : node.alias,
|
@@ -342,11 +348,17 @@ function generateScalarField(node) {
|
|
342
348
|
var storageKey = getStaticStorageKey(field, node.metadata);
|
343
349
|
|
344
350
|
if (storageKey != null) {
|
345
|
-
field = _objectSpread({}, field, {
|
351
|
+
field = _objectSpread(_objectSpread({}, field), {}, {
|
346
352
|
storageKey: storageKey
|
347
353
|
});
|
348
354
|
}
|
349
355
|
|
356
|
+
if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.flight) === true) {
|
357
|
+
field = _objectSpread(_objectSpread({}, field), {}, {
|
358
|
+
kind: 'FlightField'
|
359
|
+
});
|
360
|
+
}
|
361
|
+
|
350
362
|
return [field].concat(handles);
|
351
363
|
}
|
352
364
|
|
@@ -46,11 +46,11 @@ function generate(schema, node) {
|
|
46
46
|
var metadata = null;
|
47
47
|
|
48
48
|
if (node.metadata != null) {
|
49
|
-
var _node$
|
50
|
-
mask = _node$
|
51
|
-
plural = _node$
|
52
|
-
connection = _node$
|
53
|
-
refetch = _node$
|
49
|
+
var _node$metadata4 = node.metadata,
|
50
|
+
mask = _node$metadata4.mask,
|
51
|
+
plural = _node$metadata4.plural,
|
52
|
+
connection = _node$metadata4.connection,
|
53
|
+
refetch = _node$metadata4.refetch;
|
54
54
|
|
55
55
|
if (Array.isArray(connection)) {
|
56
56
|
var _metadata;
|
@@ -85,7 +85,7 @@ function generate(schema, node) {
|
|
85
85
|
};
|
86
86
|
|
87
87
|
if (typeof refetch.identifierField === 'string') {
|
88
|
-
metadata.refetch = _objectSpread({}, metadata.refetch, {
|
88
|
+
metadata.refetch = _objectSpread(_objectSpread({}, metadata.refetch), {}, {
|
89
89
|
identifierField: refetch.identifierField
|
90
90
|
});
|
91
91
|
}
|
@@ -248,6 +248,8 @@ function generateInlineDataFragmentSpread(schema, node) {
|
|
248
248
|
}
|
249
249
|
|
250
250
|
function generateLinkedField(schema, node) {
|
251
|
+
var _node$metadata;
|
252
|
+
|
251
253
|
// Note: it is important that the arguments of this field be sorted to
|
252
254
|
// ensure stable generation of storage keys for equivalent arguments
|
253
255
|
// which may have originally appeared in different orders across an app.
|
@@ -274,14 +276,29 @@ function generateLinkedField(schema, node) {
|
|
274
276
|
var storageKey = getStaticStorageKey(field, node.metadata);
|
275
277
|
|
276
278
|
if (storageKey) {
|
277
|
-
field = _objectSpread({}, field, {
|
279
|
+
field = _objectSpread(_objectSpread({}, field), {}, {
|
278
280
|
storageKey: storageKey
|
279
281
|
});
|
280
282
|
}
|
281
283
|
|
284
|
+
var requiredMetadata = (_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.required;
|
285
|
+
|
286
|
+
if (requiredMetadata != null) {
|
287
|
+
return createRequiredField(field, requiredMetadata);
|
288
|
+
}
|
289
|
+
|
282
290
|
return field;
|
283
291
|
}
|
284
292
|
|
293
|
+
function createRequiredField(field, requiredMetadata) {
|
294
|
+
return {
|
295
|
+
kind: 'RequiredField',
|
296
|
+
field: field,
|
297
|
+
action: requiredMetadata.action,
|
298
|
+
path: requiredMetadata.path
|
299
|
+
};
|
300
|
+
}
|
301
|
+
|
285
302
|
function generateModuleImport(schema, node) {
|
286
303
|
var fragmentName = node.name;
|
287
304
|
var regExpMatch = fragmentName.match(/^([a-zA-Z][a-zA-Z0-9]*)(?:_([a-zA-Z][_a-zA-Z0-9]*))?$/);
|
@@ -305,6 +322,8 @@ function generateModuleImport(schema, node) {
|
|
305
322
|
}
|
306
323
|
|
307
324
|
function generateScalarField(schema, node) {
|
325
|
+
var _node$metadata2, _node$metadata3;
|
326
|
+
|
308
327
|
// Note: it is important that the arguments of this field be sorted to
|
309
328
|
// ensure stable generation of storage keys for equivalent arguments
|
310
329
|
// which may have originally appeared in different orders across an app.
|
@@ -327,11 +346,27 @@ function generateScalarField(schema, node) {
|
|
327
346
|
var storageKey = getStaticStorageKey(field, node.metadata);
|
328
347
|
|
329
348
|
if (storageKey) {
|
330
|
-
field = _objectSpread({}, field, {
|
349
|
+
field = _objectSpread(_objectSpread({}, field), {}, {
|
331
350
|
storageKey: storageKey
|
332
351
|
});
|
333
352
|
}
|
334
353
|
|
354
|
+
if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.flight) === true) {
|
355
|
+
field = _objectSpread(_objectSpread({}, field), {}, {
|
356
|
+
kind: 'FlightField'
|
357
|
+
});
|
358
|
+
}
|
359
|
+
|
360
|
+
var requiredMetadata = (_node$metadata3 = node.metadata) === null || _node$metadata3 === void 0 ? void 0 : _node$metadata3.required;
|
361
|
+
|
362
|
+
if (requiredMetadata != null) {
|
363
|
+
if (field.kind === 'FlightField') {
|
364
|
+
throw new createUserError('@required cannot be used on a ReactFlightComponent.', [node.loc]);
|
365
|
+
}
|
366
|
+
|
367
|
+
return createRequiredField(field, requiredMetadata);
|
368
|
+
}
|
369
|
+
|
335
370
|
return field;
|
336
371
|
}
|
337
372
|
|
@@ -16,9 +16,9 @@ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
|
|
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
|
|
@@ -14,9 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
14
14
|
|
15
15
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
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
|
|
@@ -9,9 +9,9 @@
|
|
9
9
|
*/
|
10
10
|
'use strict';
|
11
11
|
|
12
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (
|
12
|
+
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; } } }; }
|
13
13
|
|
14
|
-
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(
|
14
|
+
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); }
|
15
15
|
|
16
16
|
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; }
|
17
17
|
|
@@ -127,7 +127,7 @@ function writeRelayGeneratedFile(schema, codegenDir, definition, _generatedNode,
|
|
127
127
|
};
|
128
128
|
}
|
129
129
|
|
130
|
-
generatedNode = _objectSpread({}, generatedNode, {
|
130
|
+
generatedNode = _objectSpread(_objectSpread({}, generatedNode), {}, {
|
131
131
|
params: nextRequestParams
|
132
132
|
});
|
133
133
|
} // Strip metadata only used within the compiler
|
@@ -137,7 +137,7 @@ function writeRelayGeneratedFile(schema, codegenDir, definition, _generatedNode,
|
|
137
137
|
var _generatedNode$metada2 = generatedNode.metadata,
|
138
138
|
_ignored3 = _generatedNode$metada2.derivedFrom,
|
139
139
|
metadata = (0, _objectWithoutPropertiesLoose2["default"])(_generatedNode$metada2, ["derivedFrom"]);
|
140
|
-
generatedNode = _objectSpread({}, generatedNode, {
|
140
|
+
generatedNode = _objectSpread(_objectSpread({}, generatedNode), {}, {
|
141
141
|
metadata: metadata
|
142
142
|
});
|
143
143
|
}
|
package/lib/core/ASTCache.js
CHANGED
@@ -22,6 +22,7 @@ var ASTCache = /*#__PURE__*/function () {
|
|
22
22
|
this._baseDir = config.baseDir;
|
23
23
|
this._parse = Profiler.instrument(config.parse, 'ASTCache.parseFn');
|
24
24
|
} // Short-term: we don't do subscriptions/delta updates, instead always use all definitions
|
25
|
+
// $FlowFixMe[value-as-type]
|
25
26
|
|
26
27
|
|
27
28
|
var _proto = ASTCache.prototype;
|
@@ -26,6 +26,7 @@ var _require2 = require('immutable'),
|
|
26
26
|
* For each document, the context stores the IR and any validation errors.
|
27
27
|
*/
|
28
28
|
var CompilerContext = /*#__PURE__*/function () {
|
29
|
+
// $FlowFixMe[value-as-type]
|
29
30
|
function CompilerContext(schema) {
|
30
31
|
this._isMutable = false;
|
31
32
|
this._documents = new ImmutableOrderedMap();
|
@@ -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
|
|
package/lib/core/IRPrinter.js
CHANGED
@@ -295,11 +295,10 @@ function printValue(schema, value, type) {
|
|
295
295
|
if (value.kind === 'Variable') {
|
296
296
|
return '$' + value.variableName;
|
297
297
|
} else if (value.kind === 'ObjectValue') {
|
298
|
-
|
299
|
-
var inputType = schema.assertInputObjectType(type);
|
298
|
+
var inputType = type != null ? schema.asInputObjectType(type) : null;
|
300
299
|
var pairs = value.fields.map(function (field) {
|
301
|
-
var fieldConfig =
|
302
|
-
var innerValue =
|
300
|
+
var fieldConfig = inputType != null ? schema.hasField(inputType, field.name) ? schema.getFieldConfig(schema.expectField(inputType, field.name)) : null : null;
|
301
|
+
var innerValue = printValue(schema, field.value, fieldConfig === null || fieldConfig === void 0 ? void 0 : fieldConfig.type);
|
303
302
|
return innerValue == null ? null : field.name + ': ' + innerValue;
|
304
303
|
}).filter(Boolean);
|
305
304
|
return '{' + pairs.join(', ') + '}';
|
@@ -14,9 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
14
14
|
|
15
15
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
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
|
|