Skip to content

Commit 2ab639e

Browse files
committed
Update buildScalar.js
1 parent 17fb449 commit 2ab639e

File tree

2 files changed

+37
-25
lines changed

2 files changed

+37
-25
lines changed
Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
/* @flow */
2+
13
import { GraphQLScalarType } from 'graphql/type';
24
import { parse } from 'graphql/language';
35
import buildScalar from '../buildScalar';
46

57
describe('buildScalar()', () => {
6-
const generateScalarAST = ({ description, name = 'Scalar' } = {}) => parse(`
8+
const generateScalarNode = ({ description, name = 'Scalar' } = {}): any => parse(`
79
# ${description === undefined ? '' : description}
810
scalar ${name}
911
`).definitions[0];
@@ -15,28 +17,28 @@ describe('buildScalar()', () => {
1517
parseLiteral,
1618
} = {}) => new GraphQLScalarType({ name, description, serialize, parseValue, parseLiteral });
1719

18-
it('should throw with without `serialize` in config', () => {
19-
expect(() => buildScalar(generateScalarAST())).toThrow();
20+
test('throws with without `serialize` in config', () => {
21+
expect(() => buildScalar(generateScalarNode(), ({}: any))).toThrow();
2022
});
2123

22-
it('should work with `serialize` in config', () => {
23-
const config = { serialize() {} };
24-
expect(buildScalar(generateScalarAST(), config)).toEqual(generateScalarType(config));
24+
test('builds with `serialize` in config', () => {
25+
const config: any = { serialize() {} };
26+
expect(buildScalar(generateScalarNode(), config)).toEqual(generateScalarType(config));
2527
});
2628

27-
it('should work with `serialize` in config and description in AST', () => {
28-
const config = { description: 'A description', serialize() {} };
29-
expect(buildScalar(generateScalarAST(config), config)).toEqual(generateScalarType(config));
29+
test('builds with `serialize` in config and description in AST', () => {
30+
const config: any = { description: 'A description', serialize() {} };
31+
expect(buildScalar(generateScalarNode(config), config)).toEqual(generateScalarType(config));
3032
});
3133

32-
it('should work with `serialize`, `parseValue`, and `parseLiteral` in config', () => {
33-
const config = { serialize() {}, parseValue() {}, parseLiteral() {} };
34-
expect(buildScalar(generateScalarAST(), config)).toEqual(generateScalarType(config));
34+
test('builds with `serialize`, `parseValue`, and `parseLiteral` in config', () => {
35+
const config: any = { serialize() {}, parseValue() {}, parseLiteral() {} };
36+
expect(buildScalar(generateScalarNode(), config)).toEqual(generateScalarType(config));
3537
});
3638

37-
it('should work with GraphQL scalar type', () => {
38-
const config = { serialize() {} };
39-
expect(buildScalar(generateScalarAST(), generateScalarType(config)))
39+
test('builds with GraphQLScalarType', () => {
40+
const config: any = { serialize() {} };
41+
expect(buildScalar(generateScalarNode(), generateScalarType(config)))
4042
.toEqual(generateScalarType(config));
4143
});
4244
});

src/build/buildScalar.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
1-
import { GraphQLScalarType } from 'graphql/type';
1+
/* @flow */
2+
3+
import type { ScalarTypeDefinitionNode } from 'graphql/language';
4+
import { type GraphQLScalarTypeConfig, GraphQLScalarType } from 'graphql/type';
25
import { getDescription } from 'graphql/utilities/buildASTSchema';
36

4-
export default function buildScalar(scalarAST, config = {}) {
5-
const {
6-
serialize,
7-
parseValue,
8-
parseLiteral,
9-
// eslint-disable-next-line no-underscore-dangle
10-
} = config instanceof GraphQLScalarType ? config._scalarConfig : config;
11-
const scalarTypeConfig = { name: scalarAST.name.value, serialize, parseValue, parseLiteral };
12-
const description = getDescription(scalarAST);
7+
export default function buildScalar(
8+
node: ScalarTypeDefinitionNode,
9+
configOrType: GraphQLScalarTypeConfig<*, *> | GraphQLScalarType,
10+
): GraphQLScalarType {
11+
const config = configOrType instanceof GraphQLScalarType
12+
? configOrType._scalarConfig // eslint-disable-line no-underscore-dangle
13+
: configOrType;
14+
15+
// TODO: Warn if the user passed a name via the config in addition to the AST.
16+
17+
const scalarTypeConfig = { ...config, name: node.name.value };
18+
const description = getDescription(node);
19+
20+
// TODO: Warn if the user passed a description via the config in addition to the AST.
21+
1322
if (description) scalarTypeConfig.description = description;
23+
1424
return new GraphQLScalarType(scalarTypeConfig);
1525
}

0 commit comments

Comments
 (0)