Skip to content

Commit e9eac82

Browse files
authored
Remove uses of reduce/spread which causes significant latency to large middlewares (#567)
1 parent 63d6879 commit e9eac82

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

src/applicator.ts

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,10 @@ function parseField(
4545
) {
4646
const { isDeprecated, ...restData } = field
4747
const argsMap = field.args.reduce(
48-
(acc, cur) => ({
49-
...acc,
50-
[cur.name]: cur,
51-
}),
52-
{} as Record<string, GraphQLArgument>,
48+
(acc, cur) => {
49+
acc[cur.name] = cur;
50+
return acc;
51+
}, {} as Record<string, GraphQLArgument>,
5352
)
5453
return {
5554
...restData,
@@ -138,28 +137,28 @@ function applyMiddlewareToType<TSource, TContext, TArgs>(
138137

139138
if (isMiddlewareFunction(middleware)) {
140139
const resolvers = Object.keys(fieldMap).reduce(
141-
(resolvers, fieldName) => ({
142-
...resolvers,
143-
[fieldName]: applyMiddlewareToField(
140+
(resolvers, fieldName) => {
141+
resolvers[fieldName] = applyMiddlewareToField(
144142
fieldMap[fieldName],
145143
options,
146144
middleware as IMiddlewareFunction<TSource, TContext, TArgs>,
147-
),
148-
}),
145+
);
146+
return resolvers;
147+
},
149148
{},
150149
)
151150

152151
return resolvers
153152
} else {
154153
const resolvers = Object.keys(middleware).reduce(
155-
(resolvers, field) => ({
156-
...resolvers,
157-
[field]: applyMiddlewareToField(
158-
fieldMap[field],
154+
(resolvers, fieldName) => {
155+
resolvers[fieldName] = applyMiddlewareToField(
156+
fieldMap[fieldName],
159157
options,
160-
middleware[field],
161-
),
162-
}),
158+
middleware[fieldName],
159+
);
160+
return resolvers;
161+
},
163162
{},
164163
)
165164

@@ -181,14 +180,14 @@ function applyMiddlewareToSchema<TSource, TContext, TArgs>(
181180
!isIntrospectionType(typeMap[type]),
182181
)
183182
.reduce(
184-
(resolvers, type) => ({
185-
...resolvers,
186-
[type]: applyMiddlewareToType(
183+
(resolvers, type) => {
184+
resolvers[type] = applyMiddlewareToType(
187185
typeMap[type] as GraphQLObjectType,
188186
options,
189187
middleware,
190-
),
191-
}),
188+
);
189+
return resolvers;
190+
},
192191
{},
193192
)
194193

@@ -216,14 +215,14 @@ export function generateResolverFromSchemaAndMiddleware<
216215
const typeMap = schema.getTypeMap()
217216

218217
const resolvers = Object.keys(middleware).reduce(
219-
(resolvers, type) => ({
220-
...resolvers,
221-
[type]: applyMiddlewareToType(
218+
(resolvers, type) => {
219+
resolvers[type] = applyMiddlewareToType(
222220
typeMap[type] as GraphQLObjectType,
223221
options,
224222
middleware[type],
225-
),
226-
}),
223+
);
224+
return resolvers;
225+
},
227226
{},
228227
)
229228

0 commit comments

Comments
 (0)