Skip to content

Commit c8592d8

Browse files
committed
Check field name validity too
1 parent 2edab8b commit c8592d8

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/type/__tests__/validation.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,17 @@ describe('Type System: Objects must have fields', () => {
296296
);
297297
});
298298

299+
it('rejects an Object type with incorrectly named fields', () => {
300+
expect(
301+
() => schemaWithFieldType(new GraphQLObjectType({
302+
name: 'SomeObject',
303+
fields: { 'bad-name-with-dashes': { type: GraphQLString } }
304+
}))
305+
).to.throw(
306+
'Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "bad-name-with-dashes" does not.'
307+
);
308+
});
309+
299310
it('rejects an Object type with incorrectly typed fields', () => {
300311
expect(
301312
() => schemaWithFieldType(new GraphQLObjectType({
@@ -387,7 +398,7 @@ describe('Type System: Fields args must be properly named', () => {
387398
});
388399
return new GraphQLSchema({ query: QueryType });
389400
}).to.throw(
390-
'Field arg names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "bad-name-with-dashes" does not.'
401+
'Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "bad-name-with-dashes" does not.'
391402
);
392403
});
393404

src/type/schema.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,12 @@ function typeMapReducer(map: TypeMap, type: ?GraphQLType): TypeMap {
147147
var fieldMap = type.getFields();
148148
Object.keys(fieldMap).forEach(fieldName => {
149149
var field = fieldMap[fieldName];
150+
assertValidName(fieldName);
151+
150152
if (field.args) {
151153
var fieldArgTypes = field.args.map(arg => arg.type);
152154

153-
field.args.forEach(arg =>
154-
invariant(
155-
/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(arg.name),
156-
`Field arg names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ ` +
157-
`but "${arg.name}" does not.`
158-
));
155+
field.args.forEach(arg => assertValidName(arg.name));
159156

160157
reducedMap = fieldArgTypes.reduce(typeMapReducer, reducedMap);
161158
}
@@ -166,6 +163,13 @@ function typeMapReducer(map: TypeMap, type: ?GraphQLType): TypeMap {
166163
return reducedMap;
167164
}
168165

166+
function assertValidName(name: string): void {
167+
invariant(
168+
/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(name),
169+
`Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ ` +
170+
`but "${name}" does not.`);
171+
}
172+
169173
function assertObjectImplementsInterface(
170174
object: GraphQLObjectType,
171175
iface: GraphQLInterfaceType

0 commit comments

Comments
 (0)