1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.coerceInputValue = coerceInputValue;
var _objectValues3 = _interopRequireDefault(require("../polyfills/objectValues.js"));
var _inspect = _interopRequireDefault(require("../jsutils/inspect.js"));
var _invariant = _interopRequireDefault(require("../jsutils/invariant.js"));
var _didYouMean = _interopRequireDefault(require("../jsutils/didYouMean.js"));
var _isObjectLike = _interopRequireDefault(require("../jsutils/isObjectLike.js"));
var _safeArrayFrom = _interopRequireDefault(require("../jsutils/safeArrayFrom.js"));
var _suggestionList = _interopRequireDefault(require("../jsutils/suggestionList.js"));
var _printPathArray = _interopRequireDefault(require("../jsutils/printPathArray.js"));
var _Path = require("../jsutils/Path.js");
var _GraphQLError = require("../error/GraphQLError.js");
var _definition = require("../type/definition.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Coerces a JavaScript value given a GraphQL Input Type.
*/
function coerceInputValue(inputValue, type) {
var onError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultOnError;
return coerceInputValueImpl(inputValue, type, onError);
}
function defaultOnError(path, invalidValue, error) {
var errorPrefix = 'Invalid value ' + (0, _inspect.default)(invalidValue);
if (path.length > 0) {
errorPrefix += " at \"value".concat((0, _printPathArray.default)(path), "\"");
}
error.message = errorPrefix + ': ' + error.message;
throw error;
}
function coerceInputValueImpl(inputValue, type, onError, path) {
if ((0, _definition.isNonNullType)(type)) {
if (inputValue != null) {
return coerceInputValueImpl(inputValue, type.ofType, onError, path);
}
onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError("Expected non-nullable type \"".concat((0, _inspect.default)(type), "\" not to be null.")));
return;
}
if (inputValue == null) {
// Explicitly return the value null.
return null;
}
if ((0, _definition.isListType)(type)) {
var itemType = type.ofType;
var coercedList = (0, _safeArrayFrom.default)(inputValue, function (itemValue, index) {
var itemPath = (0, _Path.addPath)(path, index, undefined);
return coerceInputValueImpl(itemValue, itemType, onError, itemPath);
});
if (coercedList != null) {
return coercedList;
} // Lists accept a non-list value as a list of one.
return [coerceInputValueImpl(inputValue, itemType, onError, path)];
}
if ((0, _definition.isInputObjectType)(type)) {
if (!(0, _isObjectLike.default)(inputValue)) {
onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError("Expected type \"".concat(type.name, "\" to be an object.")));
return;
}
var coercedValue = {};
var fieldDefs = type.getFields();
for (var _i2 = 0, _objectValues2 = (0, _objectValues3.default)(fieldDefs); _i2 < _objectValues2.length; _i2++) {
var field = _objectValues2[_i2];
var fieldValue = inputValue[field.name];
if (fieldValue === undefined) {
if (field.defaultValue !== undefined) {
coercedValue[field.name] = field.defaultValue;
} else if ((0, _definition.isNonNullType)(field.type)) {
var typeStr = (0, _inspect.default)(field.type);
onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError("Field \"".concat(field.name, "\" of required type \"").concat(typeStr, "\" was not provided.")));
}
continue;
}
coercedValue[field.name] = coerceInputValueImpl(fieldValue, field.type, onError, (0, _Path.addPath)(path, field.name, type.name));
} // Ensure every provided field is defined.
for (var _i4 = 0, _Object$keys2 = Object.keys(inputValue); _i4 < _Object$keys2.length; _i4++) {
var fieldName = _Object$keys2[_i4];
if (!fieldDefs[fieldName]) {
var suggestions = (0, _suggestionList.default)(fieldName, Object.keys(type.getFields()));
onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError("Field \"".concat(fieldName, "\" is not defined by type \"").concat(type.name, "\".") + (0, _didYouMean.default)(suggestions)));
}
}
return coercedValue;
} // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2618')
if ((0, _definition.isLeafType)(type)) {
var parseResult; // Scalars and Enums determine if a input value is valid via parseValue(),
// which can throw to indicate failure. If it throws, maintain a reference
// to the original error.
try {
parseResult = type.parseValue(inputValue);
} catch (error) {
if (error instanceof _GraphQLError.GraphQLError) {
onError((0, _Path.pathToArray)(path), inputValue, error);
} else {
onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError("Expected type \"".concat(type.name, "\". ") + error.message, undefined, undefined, undefined, undefined, error));
}
return;
}
if (parseResult === undefined) {
onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError("Expected type \"".concat(type.name, "\".")));
}
return parseResult;
} // istanbul ignore next (Not reachable. All possible input types have been considered)
false || (0, _invariant.default)(0, 'Unexpected input type: ' + (0, _inspect.default)(type));
}
|