|
1 | | -import { GraphQLInt, GraphQLString, GraphQLBoolean, GraphQLFloat } from 'graphql'; |
| 1 | +import { |
| 2 | + GraphQLInt, |
| 3 | + GraphQLString, |
| 4 | + GraphQLBoolean, |
| 5 | + GraphQLFloat, |
| 6 | + GraphQLEnumType, |
| 7 | + GraphQLList |
| 8 | + } from 'graphql'; |
2 | 9 |
|
| 10 | +/** |
| 11 | + * Checks the type of the sequelize data type and |
| 12 | + * returns the corresponding type in GraphQL |
| 13 | + * @param {Object} sequelizeType |
| 14 | + * @param {Object} sequelizeTypes |
| 15 | + * @return {Function} GraphQL type declaration |
| 16 | + */ |
3 | 17 | export function toGraphQL(sequelizeType, sequelizeTypes) { |
4 | | - if (sequelizeType instanceof sequelizeTypes.BOOLEAN) { |
5 | | - return GraphQLBoolean; |
6 | | - } else if (sequelizeType instanceof sequelizeTypes.FLOAT) { |
7 | | - return GraphQLFloat; |
8 | | - } else if (sequelizeType instanceof sequelizeTypes.INTEGER) { |
9 | | - return GraphQLInt; |
10 | | - } else if ( |
11 | | - sequelizeType instanceof sequelizeTypes.STRING || |
12 | | - sequelizeType instanceof sequelizeTypes.TEXT || |
13 | | - sequelizeType instanceof sequelizeTypes.UUID || |
14 | | - sequelizeType instanceof sequelizeTypes.DATE |
15 | | - ) { |
16 | | - return GraphQLString; |
17 | | - } else if (sequelizeType instanceof sequelizeTypes.VIRTUAL) { |
18 | | - if (sequelizeType.returnType) { |
19 | | - return toGraphQL(sequelizeType.returnType, sequelizeTypes); |
20 | | - } |
21 | | - |
22 | | - return GraphQLString; |
23 | | - } else { |
24 | | - throw new Error(`Unable to convert ${sequelizeType.key || sequelizeType.toSql()} to a GraphQL type`); |
| 18 | + |
| 19 | + const { |
| 20 | + BOOLEAN, |
| 21 | + ENUM, |
| 22 | + FLOAT, |
| 23 | + INTEGER, |
| 24 | + STRING, |
| 25 | + TEXT, |
| 26 | + UUID, |
| 27 | + DATE, |
| 28 | + ARRAY, |
| 29 | + VIRTUAL |
| 30 | + } = sequelizeTypes; |
| 31 | + |
| 32 | + if (sequelizeType instanceof BOOLEAN) return GraphQLBoolean; |
| 33 | + if (sequelizeType instanceof FLOAT) return GraphQLFloat; |
| 34 | + if (sequelizeType instanceof INTEGER) return GraphQLInt; |
| 35 | + |
| 36 | + if (sequelizeType instanceof STRING || |
| 37 | + sequelizeType instanceof TEXT || |
| 38 | + sequelizeType instanceof UUID || |
| 39 | + sequelizeType instanceof DATE |
| 40 | + ) return GraphQLString; |
| 41 | + |
| 42 | + if (sequelizeType instanceof ARRAY) { |
| 43 | + let elementType = toGraphQL(sequelizeType.type, sequelizeTypes); |
| 44 | + return GraphQLList(elementType); |
| 45 | + } |
| 46 | + |
| 47 | + if (sequelizeType instanceof ENUM) { |
| 48 | + return new GraphQLEnumType({ |
| 49 | + values: sequelizeType.values.reduce((obj, value) => { |
| 50 | + obj[value] = {value}; |
| 51 | + return obj; |
| 52 | + }, {})}); |
| 53 | + } |
| 54 | + |
| 55 | + if (sequelizeType instanceof VIRTUAL) { |
| 56 | + return toGraphQL(sequelizeType.returnType, sequelizeTypes); |
25 | 57 | } |
| 58 | + |
| 59 | + throw new Error(`Unable to convert ${sequelizeType.key || sequelizeType.toSql()} to a GraphQL type`); |
| 60 | + |
26 | 61 | } |
0 commit comments