@graphql-guru/loader
Version:
Core loaders from GraphQL Guru Servers
180 lines (147 loc) • 6.02 kB
JavaScript
/*
* Schema Definition
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = function (_ref6) {
var astDocument = _ref6.astDocument,
typeDefinitionList = _ref6.typeDefinitionList;
var schemaDefinition = astDocument.definitions.reduce(function (document, node) {
return definition[node.kind] && definition[node.kind]({ document: document, node: node }) || document;
}, initObj);
var contextStore = {};
schemaDefinition.context = schemaDefinition.types.reduce(function (previous, current) {
var context = function context() {
return _extends({}, current.fields.reduce(function (obj, field) {
if (typeDefinitionList.includes(field.type.name)) {
// add resolve to context store
if (contextStore[field.name] == null) {
var resolve = function resolve(query, args, context) {
var Class = new context.connectors[(0, _toCamelCase2.default)(field.type.name)]();
return Class.resolve(_extends({
query: query,
args: query[field.name]
}, context));
};
Object.defineProperty(resolve, 'name', { value: field.name });
contextStore[field.name] = resolve;
}
return (0, _utils.merge)([obj, _defineProperty({}, current.name, _defineProperty({}, field.name, contextStore[field.name]))]);
} else {
return obj;
}
}, {}));
};
if (context()[current.name]) {
return (0, _utils.merge)([previous, context()]);
} else {
return previous;
}
}, {});
return schemaDefinition;
};
var _utils = require('../utils');
var _toCamelCase = require('to-camel-case');
var _toCamelCase2 = _interopRequireDefault(_toCamelCase);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var initObj = {
context: [],
directives: [],
enums: [],
inputs: [],
interface: [],
scalars: [],
types: [],
json: [],
definitionList: [],
unions: [],
operations: {
Mutation: [],
Query: []
}
};
function createDefinitionList(_ref) {
var document = _ref.document,
node = _ref.node;
return [].concat(_toConsumableArray(document.definitionList), [{
kind: node.kind,
name: node.name.value
}]);
}
function createTypeDefinitions(_ref2) {
var _extends3;
var document = _ref2.document,
node = _ref2.node,
type = _ref2.type;
return _extends({}, document, (_extends3 = {}, _defineProperty(_extends3, type, [].concat(_toConsumableArray(document[type]), [{
name: node.name.value,
fields: createObjectFields(node)
}])), _defineProperty(_extends3, 'definitionList', createDefinitionList({ document: document, node: node })), _defineProperty(_extends3, 'json', [].concat(_toConsumableArray(document.json), [{
name: node.name.value,
fields: node.fields.reduce(function (obj, field) {
var typeName = field.type.type ? (0, _toCamelCase2.default)(field.type.type.name.value) : (0, _toCamelCase2.default)(field.type.name.value);
return _extends({}, obj, _defineProperty({}, field.name.value, {
type: field.kind === 'ListType' ? [typeName] : typeName,
required: Boolean(field.type.kind === 'NonNullType')
}));
}, {})
}])), _extends3));
}
function createObjectFields(node) {
return node.fields.reduce(function (obj, field) {
return [].concat(_toConsumableArray(obj), [{
name: field.name.value,
type: {
kind: field.type.kind,
name: field.type.type ? field.type.type.name.value : field.type.name.value
},
arguments: field.arguments ? field.arguments.reduce(function (o, arg) {
var typeName = arg.type.type ? arg.type.type.name.value : arg.type.name.value;
return {
kind: arg.type.kind,
name: arg.name.value,
type: typeName,
defaultValue: arg.defaultValue || null
};
}, {}) : null
}]);
}, []);
}
var definition = {
InputObjectTypeDefinition: function InputObjectTypeDefinition(_ref3) {
var document = _ref3.document,
node = _ref3.node;
return createTypeDefinitions({ document: document, node: node, type: 'inputs' });
},
EnumTypeDefinition: function EnumTypeDefinition(_ref4) {
var document = _ref4.document,
node = _ref4.node;
return _extends({}, document, {
enums: [].concat(_toConsumableArray(document.enums), [{
name: node.name.value,
values: node.values.map(function (v) {
return v.name.value;
})
}]),
definitionList: createDefinitionList({ document: document, node: node })
});
},
ObjectTypeDefinition: function ObjectTypeDefinition(_ref5) {
var document = _ref5.document,
node = _ref5.node;
var typeName = node.name.value;
if (node.name.value === 'Mutation' || node.name.value === 'Query') {
return _extends({}, document, {
operations: _extends({}, document.operations, _defineProperty({}, typeName, [].concat(_toConsumableArray(document.operations[typeName]), _toConsumableArray(createObjectFields(node)))))
});
} else {
return createTypeDefinitions({ document: document, node: node, type: 'types' });
}
}
};
//# sourceMappingURL=schema-definition.js.map