Skip to content

Commit 72c69ce

Browse files
Brandon DailBrandon Dail
authored andcommitted
Add support for ARRAY and ENUM in TypeMapper
Fixed missing semicolon
1 parent c31358a commit 72c69ce

File tree

1 file changed

+57
-22
lines changed

1 file changed

+57
-22
lines changed

src/typeMapper.js

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,61 @@
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';
29

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+
*/
317
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);
2557
}
58+
59+
throw new Error(`Unable to convert ${sequelizeType.key || sequelizeType.toSql()} to a GraphQL type`);
60+
2661
}

0 commit comments

Comments
 (0)