Skip to content

Commit

Permalink
Update other duplicated callsites in extendSchema and lexicographicSo…
Browse files Browse the repository at this point in the history
…rtSchema
  • Loading branch information
leebyron committed May 12, 2021
1 parent 452e3e0 commit 9830fda
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 72 deletions.
2 changes: 0 additions & 2 deletions src/index.d.ts
Expand Up @@ -160,14 +160,12 @@ export {
GraphQLField,
GraphQLFieldConfig,
GraphQLFieldExtensions,
GraphQLFieldConfigArgumentMap,
GraphQLFieldConfigMap,
GraphQLFieldMap,
GraphQLFieldResolver,
GraphQLInputField,
GraphQLInputFieldConfig,
GraphQLInputFieldExtensions,
GraphQLInputFieldConfigMap,
GraphQLInputFieldMap,
GraphQLInputObjectTypeConfig,
GraphQLInputObjectTypeExtensions,
Expand Down
2 changes: 0 additions & 2 deletions src/index.js
Expand Up @@ -153,13 +153,11 @@ export type {
GraphQLEnumValueConfigMap,
GraphQLField,
GraphQLFieldConfig,
GraphQLFieldConfigArgumentMap,
GraphQLFieldConfigMap,
GraphQLFieldMap,
GraphQLFieldResolver,
GraphQLInputField,
GraphQLInputFieldConfig,
GraphQLInputFieldConfigMap,
GraphQLInputFieldMap,
GraphQLInputObjectTypeConfig,
GraphQLInterfaceTypeConfig,
Expand Down
8 changes: 2 additions & 6 deletions src/type/definition.d.ts
Expand Up @@ -516,7 +516,7 @@ export interface GraphQLFieldConfig<
> {
description?: Maybe<string>;
type: GraphQLOutputType;
args?: GraphQLFieldConfigArgumentMap;
args?: ObjMap<GraphQLArgumentConfig>;
resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>;
subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>;
deprecationReason?: Maybe<string>;
Expand All @@ -526,8 +526,6 @@ export interface GraphQLFieldConfig<
astNode?: Maybe<FieldDefinitionNode>;
}

export type GraphQLFieldConfigArgumentMap = ObjMap<GraphQLArgumentConfig>;

/**
* Custom extensions
*
Expand Down Expand Up @@ -885,7 +883,7 @@ export class GraphQLInputObjectType {
getFields(): GraphQLInputFieldMap;

toConfig(): GraphQLInputObjectTypeConfig & {
fields: GraphQLInputFieldConfigMap;
fields: ObjMap<GraphQLInputFieldConfig>;
extensions: Maybe<Readonly<GraphQLInputObjectTypeExtensions>>;
extensionASTNodes: ReadonlyArray<InputObjectTypeExtensionNode>;
};
Expand Down Expand Up @@ -920,8 +918,6 @@ export interface GraphQLInputFieldExtensions {

export type GraphQLInputFieldConfig = GraphQLInputValueConfig<GraphQLInputFieldExtensions>;

export type GraphQLInputFieldConfigMap = ObjMap<GraphQLInputFieldConfig>;

export type GraphQLInputField = GraphQLInputValue<GraphQLInputFieldExtensions>;

export function isRequiredInputField(field: GraphQLInputField): boolean;
Expand Down
8 changes: 2 additions & 6 deletions src/type/definition.js
Expand Up @@ -918,16 +918,14 @@ export type GraphQLFieldConfig<
> = {|
description?: ?string,
type: GraphQLOutputType,
args?: GraphQLFieldConfigArgumentMap,
args?: ObjMap<GraphQLArgumentConfig>,
resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>,
subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>,
deprecationReason?: ?string,
extensions?: ?ReadOnlyObjMapLike<mixed>,
astNode?: ?FieldDefinitionNode,
|};

export type GraphQLFieldConfigArgumentMap = ObjMap<GraphQLArgumentConfig>;

export type GraphQLArgumentConfig = GraphQLInputValueConfig;

export type GraphQLFieldConfigMap<TSource, TContext> = ObjMap<
Expand Down Expand Up @@ -1561,15 +1559,13 @@ export type GraphQLInputObjectTypeConfig = {|

type GraphQLInputObjectTypeNormalizedConfig = {|
...GraphQLInputObjectTypeConfig,
fields: GraphQLInputFieldConfigMap,
fields: ObjMap<GraphQLInputFieldConfig>,
extensions: ?ReadOnlyObjMap<mixed>,
extensionASTNodes: $ReadOnlyArray<InputObjectTypeExtensionNode>,
|};

export type GraphQLInputFieldConfig = GraphQLInputValueConfig;

export type GraphQLInputFieldConfigMap = ObjMap<GraphQLInputFieldConfig>;

export type GraphQLInputField = GraphQLInputValue;

export const isRequiredInputField = isRequiredInput;
Expand Down
2 changes: 0 additions & 2 deletions src/type/index.d.ts
Expand Up @@ -91,14 +91,12 @@ export {
GraphQLEnumValueExtensions,
GraphQLField,
GraphQLFieldConfig,
GraphQLFieldConfigArgumentMap,
GraphQLFieldConfigMap,
GraphQLFieldExtensions,
GraphQLFieldMap,
GraphQLFieldResolver,
GraphQLInputField,
GraphQLInputFieldConfig,
GraphQLInputFieldConfigMap,
GraphQLInputFieldExtensions,
GraphQLInputFieldMap,
GraphQLInputObjectTypeConfig,
Expand Down
2 changes: 0 additions & 2 deletions src/type/index.js
Expand Up @@ -143,13 +143,11 @@ export type {
GraphQLEnumValueConfigMap,
GraphQLField,
GraphQLFieldConfig,
GraphQLFieldConfigArgumentMap,
GraphQLFieldConfigMap,
GraphQLFieldMap,
GraphQLFieldResolver,
GraphQLInputField,
GraphQLInputFieldConfig,
GraphQLInputFieldConfigMap,
GraphQLInputFieldMap,
GraphQLInputObjectTypeConfig,
GraphQLInterfaceTypeConfig,
Expand Down
56 changes: 20 additions & 36 deletions src/utilities/extendSchema.js
@@ -1,3 +1,4 @@
import type { ObjMap } from '../jsutils/ObjMap';
import { keyMap } from '../jsutils/keyMap';
import { inspect } from '../jsutils/inspect';
import { mapValue } from '../jsutils/mapValue';
Expand Down Expand Up @@ -47,10 +48,9 @@ import type {
GraphQLNamedType,
GraphQLFieldConfig,
GraphQLFieldConfigMap,
GraphQLInputValueConfig,
GraphQLArgumentConfig,
GraphQLFieldConfigArgumentMap,
GraphQLEnumValueConfigMap,
GraphQLInputFieldConfigMap,
} from '../type/definition';
import { assertSchema, GraphQLSchema } from '../type/schema';
import { specifiedScalarTypes, isSpecifiedScalarType } from '../type/scalars';
Expand Down Expand Up @@ -444,7 +444,7 @@ export function extendSchemaImpl(
// $FlowFixMe[incompatible-call]
locations: node.locations.map(({ value }) => value),
isRepeatable: node.repeatable,
args: buildArgumentMap(node.arguments),
args: buildInputValueMap(node.arguments),
astNode: node,
});
}
Expand All @@ -469,7 +469,7 @@ export function extendSchemaImpl(
// with validateSchema() will produce more actionable results.
type: getWrappedType(field.type),
description: field.description?.value,
args: buildArgumentMap(field.arguments),
args: buildInputValueMap(field.arguments),
deprecationReason: getDeprecationReason(field),
astNode: field,
};
Expand All @@ -478,54 +478,38 @@ export function extendSchemaImpl(
return fieldConfigMap;
}

function buildArgumentMap(
args: ?$ReadOnlyArray<InputValueDefinitionNode>,
): GraphQLFieldConfigArgumentMap {
function buildInputValueMap(
nodes: ?$ReadOnlyArray<InputValueDefinitionNode>,
configMap: ObjMap<GraphQLInputValueConfig> = Object.create(null),
): ObjMap<GraphQLInputValueConfig> {
// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')
const argsNodes = args ?? [];
const inputNodes = nodes ?? [];

const argConfigMap = Object.create(null);
for (const arg of argsNodes) {
for (const node of inputNodes) {
// Note: While this could make assertions to get the correctly typed
// value, that would throw immediately while type system validation
// with validateSchema() will produce more actionable results.
const type: any = getWrappedType(arg.type);
const type: any = getWrappedType(node.type);

argConfigMap[arg.name.value] = {
configMap[node.name.value] = {
type,
description: arg.description?.value,
defaultValue: valueFromAST(arg.defaultValue, type),
deprecationReason: getDeprecationReason(arg),
astNode: arg,
description: node.description?.value,
defaultValue: valueFromAST(node.defaultValue, type),
deprecationReason: getDeprecationReason(node),
astNode: node,
};
}
return argConfigMap;
return configMap;
}

function buildInputFieldMap(
nodes: $ReadOnlyArray<
InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode,
>,
): GraphQLInputFieldConfigMap {
const inputFieldMap = Object.create(null);
): ObjMap<GraphQLInputValueConfig> {
let inputFieldMap = Object.create(null);
for (const node of nodes) {
// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')
const fieldsNodes = node.fields ?? [];

for (const field of fieldsNodes) {
// Note: While this could make assertions to get the correctly typed
// value, that would throw immediately while type system validation
// with validateSchema() will produce more actionable results.
const type: any = getWrappedType(field.type);

inputFieldMap[field.name.value] = {
type,
description: field.description?.value,
defaultValue: valueFromAST(field.defaultValue, type),
deprecationReason: getDeprecationReason(field),
astNode: field,
};
}
inputFieldMap = buildInputValueMap(node.fields, inputFieldMap);
}
return inputFieldMap;
}
Expand Down
24 changes: 8 additions & 16 deletions src/utilities/lexicographicSortSchema.js
Expand Up @@ -8,8 +8,7 @@ import type {
GraphQLType,
GraphQLNamedType,
GraphQLFieldConfigMap,
GraphQLFieldConfigArgumentMap,
GraphQLInputFieldConfigMap,
GraphQLInputValueConfig,
} from '../type/definition';
import { GraphQLSchema } from '../type/schema';
import { GraphQLDirective } from '../type/directives';
Expand Down Expand Up @@ -79,29 +78,22 @@ export function lexicographicSortSchema(schema: GraphQLSchema): GraphQLSchema {
return new GraphQLDirective({
...config,
locations: sortBy(config.locations, (x) => x),
args: sortArgs(config.args),
args: sortInputs(config.args),
});
}

function sortArgs(args: GraphQLFieldConfigArgumentMap) {
return sortObjMap(args, (arg) => ({
...arg,
type: replaceType(arg.type),
function sortInputs(inputs: ObjMap<GraphQLInputValueConfig>) {
return sortObjMap(inputs, (input) => ({
...input,
type: replaceType(input.type),
}));
}

function sortFields(fieldsMap: GraphQLFieldConfigMap<mixed, mixed>) {
return sortObjMap(fieldsMap, (field) => ({
...field,
type: replaceType(field.type),
args: sortArgs(field.args),
}));
}

function sortInputFields(fieldsMap: GraphQLInputFieldConfigMap) {
return sortObjMap(fieldsMap, (field) => ({
...field,
type: replaceType(field.type),
args: sortInputs(field.args),
}));
}

Expand Down Expand Up @@ -148,7 +140,7 @@ export function lexicographicSortSchema(schema: GraphQLSchema): GraphQLSchema {
const config = type.toConfig();
return new GraphQLInputObjectType({
...config,
fields: () => sortInputFields(config.fields),
fields: () => sortInputs(config.fields),
});
}

Expand Down

0 comments on commit 9830fda

Please sign in to comment.