1
0
Fork 0
arangodb/js/node/node_modules/graphql-sync/lib/execution/values.js

190 lines
6.5 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Copyright (c) 2015, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
exports.getVariableValues = getVariableValues;
exports.getArgumentValues = getArgumentValues;
var _iterall = require('iterall');
var _error = require('graphql/error');
var _invariant = require('graphql/jsutils/invariant');
var _invariant2 = _interopRequireDefault(_invariant);
var _isNullish = require('graphql/jsutils/isNullish');
var _isNullish2 = _interopRequireDefault(_isNullish);
var _keyMap = require('graphql/jsutils/keyMap');
var _keyMap2 = _interopRequireDefault(_keyMap);
var _typeFromAST = require('graphql/utilities/typeFromAST');
var _valueFromAST = require('graphql/utilities/valueFromAST');
var _isValidJSValue = require('graphql/utilities/isValidJSValue');
var _printer = require('graphql/language/printer');
var _definition = require('graphql/type/definition');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Prepares an object map of variableValues of the correct type based on the
* provided variable definitions and arbitrary input. If the input cannot be
* parsed to match the variable definitions, a GraphQLError will be thrown.
*/
function getVariableValues(schema, definitionASTs, inputs) {
return definitionASTs.reduce(function (values, defAST) {
var varName = defAST.variable.name.value;
values[varName] = getVariableValue(schema, defAST, inputs[varName]);
return values;
}, {});
}
/**
* Prepares an object map of argument values given a list of argument
* definitions and list of argument AST nodes.
*/
function getArgumentValues(argDefs, argASTs, variableValues) {
if (!argDefs || !argASTs) {
return {};
}
var argASTMap = (0, _keyMap2.default)(argASTs, function (arg) {
return arg.name.value;
});
return argDefs.reduce(function (result, argDef) {
var name = argDef.name;
var valueAST = argASTMap[name] ? argASTMap[name].value : null;
var value = (0, _valueFromAST.valueFromAST)(valueAST, argDef.type, variableValues);
if ((0, _isNullish2.default)(value)) {
value = argDef.defaultValue;
}
if (!(0, _isNullish2.default)(value)) {
result[name] = value;
}
return result;
}, {});
}
/**
* Given a variable definition, and any value of input, return a value which
* adheres to the variable definition, or throw an error.
*/
function getVariableValue(schema, definitionAST, input) {
var type = (0, _typeFromAST.typeFromAST)(schema, definitionAST.type);
var variable = definitionAST.variable;
if (!type || !(0, _definition.isInputType)(type)) {
throw new _error.GraphQLError('Variable "$' + variable.name.value + '" expected value of type ' + ('"' + (0, _printer.print)(definitionAST.type) + '" which cannot be used as an input type.'), [definitionAST]);
}
var inputType = type;
var errors = (0, _isValidJSValue.isValidJSValue)(input, inputType);
if (!errors.length) {
if ((0, _isNullish2.default)(input)) {
var defaultValue = definitionAST.defaultValue;
if (defaultValue) {
return (0, _valueFromAST.valueFromAST)(defaultValue, inputType);
}
}
return coerceValue(inputType, input);
}
if ((0, _isNullish2.default)(input)) {
throw new _error.GraphQLError('Variable "$' + variable.name.value + '" of required type ' + ('"' + (0, _printer.print)(definitionAST.type) + '" was not provided.'), [definitionAST]);
}
var message = errors ? '\n' + errors.join('\n') : '';
throw new _error.GraphQLError('Variable "$' + variable.name.value + '" got invalid value ' + (JSON.stringify(input) + '.' + message), [definitionAST]);
}
/**
* Given a type and any value, return a runtime value coerced to match the type.
*/
function coerceValue(type, value) {
// Ensure flow knows that we treat function params as const.
var _value = value;
if (type instanceof _definition.GraphQLNonNull) {
// Note: we're not checking that the result of coerceValue is non-null.
// We only call this function after calling isValidJSValue.
return coerceValue(type.ofType, _value);
}
if ((0, _isNullish2.default)(_value)) {
return null;
}
if (type instanceof _definition.GraphQLList) {
var _ret = function () {
var itemType = type.ofType;
if ((0, _iterall.isCollection)(_value)) {
var _ret2 = function () {
var coercedValues = [];
(0, _iterall.forEach)(_value, function (item) {
coercedValues.push(coerceValue(itemType, item));
});
return {
v: {
v: coercedValues
}
};
}();
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
}
return {
v: [coerceValue(itemType, _value)]
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
if (type instanceof _definition.GraphQLInputObjectType) {
var _ret3 = function () {
if ((typeof _value === 'undefined' ? 'undefined' : _typeof(_value)) !== 'object' || _value === null) {
return {
v: null
};
}
var fields = type.getFields();
return {
v: Object.keys(fields).reduce(function (obj, fieldName) {
var field = fields[fieldName];
var fieldValue = coerceValue(field.type, _value[fieldName]);
if ((0, _isNullish2.default)(fieldValue)) {
fieldValue = field.defaultValue;
}
if (!(0, _isNullish2.default)(fieldValue)) {
obj[fieldName] = fieldValue;
}
return obj;
}, {})
};
}();
if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v;
}
(0, _invariant2.default)(type instanceof _definition.GraphQLScalarType || type instanceof _definition.GraphQLEnumType, 'Must be input type');
var parsed = type.parseValue(_value);
if (!(0, _isNullish2.default)(parsed)) {
return parsed;
}
}