Skip to content

Commit

Permalink
Remove uses of reduce/spread which causes significant latency to larg…
Browse files Browse the repository at this point in the history
…e middlewares (#567)
  • Loading branch information
ryanquinn3 committed Jul 7, 2023
1 parent 63d6879 commit e9eac82
Showing 1 changed file with 26 additions and 27 deletions.
53 changes: 26 additions & 27 deletions src/applicator.ts
Expand Up @@ -45,11 +45,10 @@ function parseField(
) {
const { isDeprecated, ...restData } = field
const argsMap = field.args.reduce(
(acc, cur) => ({
...acc,
[cur.name]: cur,
}),
{} as Record<string, GraphQLArgument>,
(acc, cur) => {
acc[cur.name] = cur;
return acc;
}, {} as Record<string, GraphQLArgument>,
)
return {
...restData,
Expand Down Expand Up @@ -138,28 +137,28 @@ function applyMiddlewareToType<TSource, TContext, TArgs>(

if (isMiddlewareFunction(middleware)) {
const resolvers = Object.keys(fieldMap).reduce(
(resolvers, fieldName) => ({
...resolvers,
[fieldName]: applyMiddlewareToField(
(resolvers, fieldName) => {
resolvers[fieldName] = applyMiddlewareToField(
fieldMap[fieldName],
options,
middleware as IMiddlewareFunction<TSource, TContext, TArgs>,
),
}),
);
return resolvers;
},
{},
)

return resolvers
} else {
const resolvers = Object.keys(middleware).reduce(
(resolvers, field) => ({
...resolvers,
[field]: applyMiddlewareToField(
fieldMap[field],
(resolvers, fieldName) => {
resolvers[fieldName] = applyMiddlewareToField(
fieldMap[fieldName],
options,
middleware[field],
),
}),
middleware[fieldName],
);
return resolvers;
},
{},
)

Expand All @@ -181,14 +180,14 @@ function applyMiddlewareToSchema<TSource, TContext, TArgs>(
!isIntrospectionType(typeMap[type]),
)
.reduce(
(resolvers, type) => ({
...resolvers,
[type]: applyMiddlewareToType(
(resolvers, type) => {
resolvers[type] = applyMiddlewareToType(
typeMap[type] as GraphQLObjectType,
options,
middleware,
),
}),
);
return resolvers;
},
{},
)

Expand Down Expand Up @@ -216,14 +215,14 @@ export function generateResolverFromSchemaAndMiddleware<
const typeMap = schema.getTypeMap()

const resolvers = Object.keys(middleware).reduce(
(resolvers, type) => ({
...resolvers,
[type]: applyMiddlewareToType(
(resolvers, type) => {
resolvers[type] = applyMiddlewareToType(
typeMap[type] as GraphQLObjectType,
options,
middleware[type],
),
}),
);
return resolvers;
},
{},
)

Expand Down

0 comments on commit e9eac82

Please sign in to comment.