type-graphql 2.0.0-rc.1 → 2.0.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +19 -13
  3. package/build/cjs/decorators/Arg.js +1 -2
  4. package/build/cjs/decorators/Args.js +1 -2
  5. package/build/cjs/decorators/ArgsType.js +1 -2
  6. package/build/cjs/decorators/Authorized.js +10 -4
  7. package/build/cjs/decorators/Ctx.js +1 -2
  8. package/build/cjs/decorators/Directive.js +1 -2
  9. package/build/cjs/decorators/Extensions.js +1 -2
  10. package/build/cjs/decorators/Field.js +1 -2
  11. package/build/cjs/decorators/FieldResolver.js +1 -2
  12. package/build/cjs/decorators/Info.js +1 -2
  13. package/build/cjs/decorators/InputType.js +1 -2
  14. package/build/cjs/decorators/InterfaceType.js +1 -2
  15. package/build/cjs/decorators/Mutation.js +1 -2
  16. package/build/cjs/decorators/ObjectType.js +1 -2
  17. package/build/cjs/decorators/Query.js +1 -2
  18. package/build/cjs/decorators/Resolver.js +1 -2
  19. package/build/cjs/decorators/Root.js +1 -2
  20. package/build/cjs/decorators/Subscription.js +1 -2
  21. package/build/cjs/decorators/UseMiddleware.js +10 -4
  22. package/build/cjs/decorators/{createMethodDecorator.js → createMethodMiddlewareDecorator.js} +2 -3
  23. package/build/cjs/decorators/createParameterDecorator.js +38 -0
  24. package/build/cjs/decorators/createResolverClassMiddlewareDecorator.js +7 -0
  25. package/build/cjs/decorators/enums.js +1 -2
  26. package/build/cjs/decorators/index.js +7 -5
  27. package/build/cjs/decorators/unions.js +1 -2
  28. package/build/cjs/helpers/auth-middleware.js +1 -2
  29. package/build/cjs/helpers/decorators.js +3 -4
  30. package/build/cjs/helpers/filesystem.js +2 -3
  31. package/build/cjs/helpers/findType.js +1 -2
  32. package/build/cjs/helpers/isThrowing.js +1 -2
  33. package/build/cjs/helpers/params.js +1 -2
  34. package/build/cjs/helpers/resolver-metadata.js +1 -2
  35. package/build/cjs/helpers/types.js +11 -6
  36. package/build/cjs/metadata/getMetadataStorage.js +1 -2
  37. package/build/cjs/metadata/metadata-storage.js +176 -26
  38. package/build/cjs/metadata/utils.js +4 -5
  39. package/build/cjs/resolvers/convert-args.js +2 -3
  40. package/build/cjs/resolvers/create.js +4 -5
  41. package/build/cjs/resolvers/helpers.js +7 -4
  42. package/build/cjs/resolvers/validate-arg.js +1 -2
  43. package/build/cjs/schema/definition-node.js +6 -7
  44. package/build/cjs/schema/schema-generator.js +53 -37
  45. package/build/cjs/schema/utils.js +2 -3
  46. package/build/cjs/shim.js +6 -5
  47. package/build/cjs/utils/buildSchema.js +2 -3
  48. package/build/cjs/utils/buildTypeDefsAndResolvers.js +2 -3
  49. package/build/cjs/utils/createResolversMap.js +1 -2
  50. package/build/cjs/utils/emitSchemaDefinitionFile.js +3 -3
  51. package/build/cjs/utils/graphql-version.js +3 -3
  52. package/build/cjs/utils/isPromiseLike.js +1 -2
  53. package/build/esm/decorators/Authorized.js +9 -2
  54. package/build/esm/decorators/UseMiddleware.js +9 -2
  55. package/build/esm/decorators/{createMethodDecorator.js → createMethodMiddlewareDecorator.js} +1 -1
  56. package/build/esm/decorators/createParameterDecorator.js +35 -0
  57. package/build/esm/decorators/createResolverClassMiddlewareDecorator.js +4 -0
  58. package/build/esm/decorators/index.js +3 -2
  59. package/build/esm/helpers/types.js +7 -1
  60. package/build/esm/metadata/metadata-storage.js +176 -26
  61. package/build/esm/resolvers/helpers.js +4 -0
  62. package/build/esm/schema/schema-generator.js +53 -37
  63. package/build/esm/shim.js +3 -2
  64. package/build/esm/utils/graphql-version.js +1 -1
  65. package/build/typings/decorators/Authorized.d.ts +4 -4
  66. package/build/typings/decorators/UseMiddleware.d.ts +3 -3
  67. package/build/typings/decorators/createMethodMiddlewareDecorator.d.ts +2 -0
  68. package/build/typings/decorators/createParameterDecorator.d.ts +12 -0
  69. package/build/typings/decorators/createResolverClassMiddlewareDecorator.d.ts +2 -0
  70. package/build/typings/decorators/index.d.ts +3 -2
  71. package/build/typings/decorators/types.d.ts +1 -0
  72. package/build/typings/metadata/definitions/authorized-metadata.d.ts +1 -0
  73. package/build/typings/metadata/definitions/middleware-metadata.d.ts +1 -0
  74. package/build/typings/metadata/definitions/param-metadata.d.ts +4 -0
  75. package/build/typings/metadata/metadata-storage.d.ts +17 -1
  76. package/build/typings/metadata/utils.d.ts +2 -2
  77. package/build/typings/schema/schema-generator.d.ts +5 -0
  78. package/build/typings/shim.ts +5 -2
  79. package/build/typings/utils/graphql-version.d.ts +1 -1
  80. package/package.json +66 -65
  81. package/build/cjs/decorators/createParamDecorator.js +0 -20
  82. package/build/esm/decorators/createParamDecorator.js +0 -16
  83. package/build/typings/decorators/createMethodDecorator.d.ts +0 -2
  84. package/build/typings/decorators/createParamDecorator.d.ts +0 -2
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getResolverMetadata = void 0;
3
+ exports.getResolverMetadata = getResolverMetadata;
4
4
  const errors_1 = require("../errors");
5
5
  const findType_1 = require("./findType");
6
6
  function getResolverMetadata(prototype, propertyKey, returnTypeFunc, options = {}) {
@@ -26,4 +26,3 @@ function getResolverMetadata(prototype, propertyKey, returnTypeFunc, options = {
26
26
  complexity: options.complexity,
27
27
  };
28
28
  }
29
- exports.getResolverMetadata = getResolverMetadata;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEnumValuesMap = exports.convertToType = exports.wrapWithTypeOptions = exports.convertTypeIfScalar = void 0;
3
+ exports.convertTypeIfScalar = convertTypeIfScalar;
4
+ exports.wrapWithTypeOptions = wrapWithTypeOptions;
5
+ exports.convertToType = convertToType;
6
+ exports.getEnumValuesMap = getEnumValuesMap;
4
7
  const graphql_1 = require("graphql");
5
8
  const errors_1 = require("../errors");
6
9
  const scalars_1 = require("../scalars");
@@ -33,7 +36,6 @@ function convertTypeIfScalar(type) {
33
36
  return undefined;
34
37
  }
35
38
  }
36
- exports.convertTypeIfScalar = convertTypeIfScalar;
37
39
  function wrapWithTypeOptions(target, propertyName, type, typeOptions, nullableByDefault) {
38
40
  if (!typeOptions.array &&
39
41
  (typeOptions.nullable === "items" || typeOptions.nullable === "itemsAndList")) {
@@ -53,7 +55,6 @@ function wrapWithTypeOptions(target, propertyName, type, typeOptions, nullableBy
53
55
  }
54
56
  return gqlType;
55
57
  }
56
- exports.wrapWithTypeOptions = wrapWithTypeOptions;
57
58
  const simpleTypes = [String, Boolean, Number, Date, Array, Promise];
58
59
  function convertToType(Target, data) {
59
60
  if (data == null) {
@@ -71,9 +72,14 @@ function convertToType(Target, data) {
71
72
  if (Array.isArray(data)) {
72
73
  return data.map(item => convertToType(Target, item));
73
74
  }
74
- return Object.assign(new Target(), data);
75
+ const instance = new Target();
76
+ for (const key of Object.keys(instance)) {
77
+ if (instance[key] === undefined && !(key in data)) {
78
+ delete instance[key];
79
+ }
80
+ }
81
+ return Object.assign(instance, data);
75
82
  }
76
- exports.convertToType = convertToType;
77
83
  function getEnumValuesMap(enumObject) {
78
84
  const enumKeys = Object.keys(enumObject).filter(key => Number.isNaN(parseInt(key, 10)));
79
85
  const enumMap = enumKeys.reduce((map, key) => {
@@ -82,4 +88,3 @@ function getEnumValuesMap(enumObject) {
82
88
  }, {});
83
89
  return enumMap;
84
90
  }
85
- exports.getEnumValuesMap = getEnumValuesMap;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMetadataStorage = void 0;
3
+ exports.getMetadataStorage = getMetadataStorage;
4
4
  const metadata_storage_1 = require("./metadata-storage");
5
5
  function getMetadataStorage() {
6
6
  if (!global.TypeGraphQLMetadataStorage) {
@@ -8,4 +8,3 @@ function getMetadataStorage() {
8
8
  }
9
9
  return global.TypeGraphQLMetadataStorage;
10
10
  }
11
- exports.getMetadataStorage = getMetadataStorage;
@@ -10,21 +10,34 @@ class MetadataStorage {
10
10
  this.subscriptions = [];
11
11
  this.fieldResolvers = [];
12
12
  this.objectTypes = [];
13
+ this.objectTypesCache = new Map();
13
14
  this.inputTypes = [];
14
15
  this.argumentTypes = [];
15
16
  this.interfaceTypes = [];
17
+ this.interfaceTypesCache = new Map();
16
18
  this.authorizedFields = [];
19
+ this.authorizedFieldsByTargetAndFieldCache = new Map();
20
+ this.authorizedResolver = [];
21
+ this.authorizedResolverByTargetCache = new Map();
17
22
  this.enums = [];
18
23
  this.unions = [];
19
24
  this.middlewares = [];
25
+ this.middlewaresByTargetAndFieldCache = new Map();
26
+ this.resolverMiddlewares = [];
27
+ this.resolverMiddlewaresByTargetCache = new Map();
20
28
  this.classDirectives = [];
29
+ this.classDirectivesByTargetCache = new Map();
21
30
  this.fieldDirectives = [];
31
+ this.fieldDirectivesByTargetAndFieldCache = new Map();
22
32
  this.argumentDirectives = [];
23
33
  this.classExtensions = [];
24
34
  this.fieldExtensions = [];
25
35
  this.resolverClasses = [];
36
+ this.resolverClassesCache = new Map();
26
37
  this.fields = [];
38
+ this.fieldsCache = new Map();
27
39
  this.params = [];
40
+ this.paramsCache = new Map();
28
41
  }
29
42
  collectQueryHandlerMetadata(definition) {
30
43
  this.queries.push(definition);
@@ -53,6 +66,9 @@ class MetadataStorage {
53
66
  collectAuthorizedFieldMetadata(definition) {
54
67
  this.authorizedFields.push(definition);
55
68
  }
69
+ collectAuthorizedResolverMetadata(definition) {
70
+ this.authorizedResolver.push(definition);
71
+ }
56
72
  collectEnumMetadata(definition) {
57
73
  this.enums.push(definition);
58
74
  }
@@ -67,6 +83,9 @@ class MetadataStorage {
67
83
  collectMiddlewareMetadata(definition) {
68
84
  this.middlewares.push(definition);
69
85
  }
86
+ collectResolverMiddlewareMetadata(definition) {
87
+ this.resolverMiddlewares.push(definition);
88
+ }
70
89
  collectResolverClassMetadata(definition) {
71
90
  this.resolverClasses.push(definition);
72
91
  }
@@ -91,12 +110,126 @@ class MetadataStorage {
91
110
  collectExtensionsFieldMetadata(definition) {
92
111
  this.fieldExtensions.push(definition);
93
112
  }
113
+ initCache() {
114
+ if (this.resolverClasses?.length) {
115
+ this.resolverClasses.forEach(resolverClass => {
116
+ if (!this.resolverClassesCache.has(resolverClass.target)) {
117
+ this.resolverClassesCache.set(resolverClass.target, resolverClass);
118
+ }
119
+ });
120
+ }
121
+ if (this.params?.length) {
122
+ this.params.forEach(param => {
123
+ if (!this.paramsCache.has(param.target)) {
124
+ this.paramsCache.set(param.target, new Map());
125
+ }
126
+ if (!this.paramsCache.get(param.target).has(param.methodName)) {
127
+ this.paramsCache.get(param.target).set(param.methodName, []);
128
+ }
129
+ this.paramsCache.get(param.target).get(param.methodName).push(param);
130
+ });
131
+ }
132
+ if (this.middlewares?.length) {
133
+ this.middlewares.forEach(middleware => {
134
+ if (!this.middlewaresByTargetAndFieldCache.has(middleware.target)) {
135
+ this.middlewaresByTargetAndFieldCache.set(middleware.target, new Map());
136
+ }
137
+ if (!this.middlewaresByTargetAndFieldCache.get(middleware.target).has(middleware.fieldName)) {
138
+ this.middlewaresByTargetAndFieldCache
139
+ .get(middleware.target)
140
+ .set(middleware.fieldName, new Set());
141
+ }
142
+ if (!this.middlewaresByTargetAndFieldCache
143
+ .get(middleware.target)
144
+ .get(middleware.fieldName)
145
+ .has(middleware)) {
146
+ this.middlewaresByTargetAndFieldCache
147
+ .get(middleware.target)
148
+ .get(middleware.fieldName)
149
+ .add(middleware);
150
+ }
151
+ });
152
+ }
153
+ if (this.resolverMiddlewares?.length) {
154
+ this.resolverMiddlewares.forEach(middleware => {
155
+ const key = middleware.target;
156
+ if (!this.resolverMiddlewaresByTargetCache.has(key)) {
157
+ this.resolverMiddlewaresByTargetCache.set(key, new Set());
158
+ }
159
+ if (!this.resolverMiddlewaresByTargetCache.get(key).has(middleware)) {
160
+ this.resolverMiddlewaresByTargetCache.get(key).add(middleware);
161
+ }
162
+ });
163
+ }
164
+ if (this.fieldDirectives?.length) {
165
+ this.fieldDirectives.forEach(directive => {
166
+ if (!this.fieldDirectivesByTargetAndFieldCache.has(directive.target)) {
167
+ this.fieldDirectivesByTargetAndFieldCache.set(directive.target, new Map());
168
+ }
169
+ if (!this.fieldDirectivesByTargetAndFieldCache.get(directive.target).has(directive.fieldName)) {
170
+ this.fieldDirectivesByTargetAndFieldCache
171
+ .get(directive.target)
172
+ .set(directive.fieldName, []);
173
+ }
174
+ this.fieldDirectivesByTargetAndFieldCache
175
+ .get(directive.target)
176
+ .get(directive.fieldName)
177
+ .push(directive);
178
+ });
179
+ }
180
+ if (this.classDirectives?.length) {
181
+ this.classDirectives.forEach(directive => {
182
+ const key = directive.target;
183
+ if (!this.classDirectivesByTargetCache.has(key)) {
184
+ this.classDirectivesByTargetCache.set(key, []);
185
+ }
186
+ this.classDirectivesByTargetCache.get(key).push(directive);
187
+ });
188
+ }
189
+ if (this.authorizedFields?.length) {
190
+ this.authorizedFields.forEach(field => {
191
+ if (!this.authorizedFieldsByTargetAndFieldCache.has(field.target)) {
192
+ this.authorizedFieldsByTargetAndFieldCache.set(field.target, new Map());
193
+ }
194
+ if (!this.authorizedFieldsByTargetAndFieldCache.get(field.target).has(field.fieldName)) {
195
+ this.authorizedFieldsByTargetAndFieldCache.get(field.target).set(field.fieldName, field);
196
+ }
197
+ });
198
+ }
199
+ if (this.authorizedResolver?.length) {
200
+ this.authorizedResolver.forEach(resolver => {
201
+ const key = resolver.target;
202
+ if (!this.authorizedResolverByTargetCache.has(key)) {
203
+ this.authorizedResolverByTargetCache.set(key, resolver);
204
+ }
205
+ });
206
+ }
207
+ if (this.fields?.length) {
208
+ this.fields.forEach(field => {
209
+ if (!this.fieldsCache.has(field.target)) {
210
+ this.fieldsCache.set(field.target, []);
211
+ }
212
+ this.fieldsCache.get(field.target).push(field);
213
+ });
214
+ }
215
+ if (this.objectTypes?.length) {
216
+ this.objectTypes.forEach(objType => {
217
+ this.objectTypesCache.set(objType.target, objType);
218
+ });
219
+ }
220
+ if (this.interfaceTypes?.length) {
221
+ this.interfaceTypes.forEach(interfaceType => {
222
+ this.interfaceTypesCache.set(interfaceType.target, interfaceType);
223
+ });
224
+ }
225
+ }
94
226
  build(options) {
95
227
  this.classDirectives.reverse();
96
228
  this.fieldDirectives.reverse();
97
229
  this.argumentDirectives.reverse();
98
230
  this.classExtensions.reverse();
99
231
  this.fieldExtensions.reverse();
232
+ this.initCache();
100
233
  this.buildClassMetadata(this.objectTypes);
101
234
  this.buildClassMetadata(this.inputTypes);
102
235
  this.buildClassMetadata(this.argumentTypes);
@@ -117,14 +250,27 @@ class MetadataStorage {
117
250
  this.argumentTypes = [];
118
251
  this.interfaceTypes = [];
119
252
  this.authorizedFields = [];
253
+ this.authorizedResolver = [];
120
254
  this.enums = [];
121
255
  this.unions = [];
122
256
  this.middlewares = [];
257
+ this.resolverMiddlewares = [];
123
258
  this.classDirectives = [];
124
259
  this.fieldDirectives = [];
125
260
  this.argumentDirectives = [];
126
261
  this.classExtensions = [];
127
262
  this.fieldExtensions = [];
263
+ this.fieldsCache = new Map();
264
+ this.objectTypesCache = new Map();
265
+ this.interfaceTypesCache = new Map();
266
+ this.middlewaresByTargetAndFieldCache = new Map();
267
+ this.resolverMiddlewaresByTargetCache = new Map();
268
+ this.paramsCache = new Map();
269
+ this.fieldDirectivesByTargetAndFieldCache = new Map();
270
+ this.classDirectivesByTargetCache = new Map();
271
+ this.authorizedFieldsByTargetAndFieldCache = new Map();
272
+ this.authorizedResolverByTargetCache = new Map();
273
+ this.resolverClassesCache = new Map();
128
274
  this.resolverClasses = [];
129
275
  this.fields = [];
130
276
  this.params = [];
@@ -132,22 +278,25 @@ class MetadataStorage {
132
278
  buildClassMetadata(definitions) {
133
279
  definitions.forEach(def => {
134
280
  if (!def.fields) {
135
- const fields = this.fields.filter(field => field.target === def.target);
281
+ const fields = this.fieldsCache.get(def.target) || [];
136
282
  fields.forEach(field => {
137
283
  field.roles = this.findFieldRoles(field.target, field.name);
138
- field.params = this.params.filter(param => param.target === field.target && field.name === param.methodName);
139
- field.middlewares = (0, utils_1.mapMiddlewareMetadataToArray)(this.middlewares.filter(middleware => middleware.target === field.target && middleware.fieldName === field.name));
140
- field.directives = this.fieldDirectives
141
- .filter(it => it.target === field.target && it.fieldName === field.name)
142
- .map(it => it.directive);
284
+ field.params = this.paramsCache.get(field.target)?.get(field.name) || [];
285
+ field.middlewares = [
286
+ ...(0, utils_1.mapMiddlewareMetadataToArray)([
287
+ ...(this.resolverMiddlewaresByTargetCache.get(field.target) || []),
288
+ ]),
289
+ ...(0, utils_1.mapMiddlewareMetadataToArray)([
290
+ ...(this.middlewaresByTargetAndFieldCache.get(field.target)?.get(field.name) || []),
291
+ ]),
292
+ ];
293
+ field.directives = (this.fieldDirectivesByTargetAndFieldCache.get(field.target)?.get(field.name) || []).map(it => it.directive);
143
294
  field.extensions = this.findExtensions(field.target, field.name);
144
295
  });
145
296
  def.fields = fields;
146
297
  }
147
298
  if (!def.directives) {
148
- def.directives = this.classDirectives
149
- .filter(it => it.target === def.target)
150
- .map(it => it.directive);
299
+ def.directives = (this.classDirectivesByTargetCache.get(def.target) || []).map(it => it.directive);
151
300
  }
152
301
  if (!def.extensions) {
153
302
  def.extensions = this.findExtensions(def.target);
@@ -156,14 +305,18 @@ class MetadataStorage {
156
305
  }
157
306
  buildResolversMetadata(definitions) {
158
307
  definitions.forEach(def => {
159
- const resolverClassMetadata = this.resolverClasses.find(resolver => resolver.target === def.target);
160
- def.resolverClassMetadata = resolverClassMetadata;
161
- def.params = this.params.filter(param => param.target === def.target && def.methodName === param.methodName);
308
+ def.resolverClassMetadata = this.resolverClassesCache.get(def.target);
309
+ def.params = this.paramsCache.get(def.target)?.get(def.methodName) || [];
162
310
  def.roles = this.findFieldRoles(def.target, def.methodName);
163
- def.middlewares = (0, utils_1.mapMiddlewareMetadataToArray)(this.middlewares.filter(middleware => middleware.target === def.target && def.methodName === middleware.fieldName));
164
- def.directives = this.fieldDirectives
165
- .filter(it => it.target === def.target && it.fieldName === def.methodName)
166
- .map(it => it.directive);
311
+ def.middlewares = [
312
+ ...(0, utils_1.mapMiddlewareMetadataToArray)([
313
+ ...(this.resolverMiddlewaresByTargetCache.get(def.target) || []),
314
+ ]),
315
+ ...(0, utils_1.mapMiddlewareMetadataToArray)([
316
+ ...(this.middlewaresByTargetAndFieldCache.get(def.target)?.get(def.methodName) || []),
317
+ ]),
318
+ ];
319
+ def.directives = (this.fieldDirectivesByTargetAndFieldCache.get(def.target)?.get(def.methodName) || []).map(it => it.directive);
167
320
  def.extensions = this.findExtensions(def.target, def.methodName);
168
321
  });
169
322
  }
@@ -171,19 +324,15 @@ class MetadataStorage {
171
324
  this.buildResolversMetadata(definitions);
172
325
  definitions.forEach(def => {
173
326
  def.roles = this.findFieldRoles(def.target, def.methodName);
174
- def.directives = this.fieldDirectives
175
- .filter(it => it.target === def.target && it.fieldName === def.methodName)
176
- .map(it => it.directive);
327
+ def.directives = (this.fieldDirectivesByTargetAndFieldCache.get(def.target)?.get(def.methodName) || []).map(it => it.directive);
177
328
  def.extensions = this.findExtensions(def.target, def.methodName);
178
329
  def.getObjectType =
179
330
  def.kind === "external"
180
- ? this.resolverClasses.find(resolver => resolver.target === def.target).getObjectType
331
+ ? this.resolverClassesCache.get(def.target).getObjectType
181
332
  : () => def.target;
182
333
  if (def.kind === "external") {
183
- const typeClass = this.resolverClasses.find(resolver => resolver.target === def.target)
184
- .getObjectType();
185
- const typeMetadata = this.objectTypes.find(objTypeDef => objTypeDef.target === typeClass) ||
186
- this.interfaceTypes.find(interfaceTypeDef => interfaceTypeDef.target === typeClass);
334
+ const typeClass = this.resolverClassesCache.get(def.target).getObjectType();
335
+ const typeMetadata = this.objectTypesCache.get(typeClass) || this.interfaceTypesCache.get(typeClass);
187
336
  if (!typeMetadata) {
188
337
  throw new Error(`Unable to find type metadata for input type or object type named '${typeClass.name}'`);
189
338
  }
@@ -234,7 +383,7 @@ class MetadataStorage {
234
383
  this.resolverClasses.forEach(def => {
235
384
  let superResolver = Object.getPrototypeOf(def.target);
236
385
  while (superResolver.prototype) {
237
- const superResolverMetadata = this.resolverClasses.find(it => it.target === superResolver);
386
+ const superResolverMetadata = this.resolverClassesCache.get(superResolver);
238
387
  if (superResolverMetadata) {
239
388
  this.queries = (0, utils_1.mapSuperResolverHandlers)(this.queries, superResolver, def);
240
389
  this.mutations = (0, utils_1.mapSuperResolverHandlers)(this.mutations, superResolver, def);
@@ -246,7 +395,8 @@ class MetadataStorage {
246
395
  });
247
396
  }
248
397
  findFieldRoles(target, fieldName) {
249
- const authorizedField = this.authorizedFields.find(authField => authField.target === target && authField.fieldName === fieldName);
398
+ const authorizedField = this.authorizedFieldsByTargetAndFieldCache.get(target)?.get(fieldName) ||
399
+ this.authorizedResolverByTargetCache.get(target);
250
400
  if (!authorizedField) {
251
401
  return undefined;
252
402
  }
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureReflectMetadataExists = exports.mapMiddlewareMetadataToArray = exports.mapSuperFieldResolverHandlers = exports.mapSuperResolverHandlers = void 0;
3
+ exports.mapSuperResolverHandlers = mapSuperResolverHandlers;
4
+ exports.mapSuperFieldResolverHandlers = mapSuperFieldResolverHandlers;
5
+ exports.mapMiddlewareMetadataToArray = mapMiddlewareMetadataToArray;
6
+ exports.ensureReflectMetadataExists = ensureReflectMetadataExists;
4
7
  const errors_1 = require("../errors");
5
8
  const isThrowing_1 = require("../helpers/isThrowing");
6
9
  function mapSuperResolverHandlers(definitions, superResolver, resolverMetadata) {
@@ -12,7 +15,6 @@ function mapSuperResolverHandlers(definitions, superResolver, resolverMetadata)
12
15
  }
13
16
  : metadata);
14
17
  }
15
- exports.mapSuperResolverHandlers = mapSuperResolverHandlers;
16
18
  function mapSuperFieldResolverHandlers(definitions, superResolver, resolverMetadata) {
17
19
  const superMetadata = mapSuperResolverHandlers(definitions, superResolver, resolverMetadata);
18
20
  return superMetadata.map(metadata => metadata.target === superResolver
@@ -24,16 +26,13 @@ function mapSuperFieldResolverHandlers(definitions, superResolver, resolverMetad
24
26
  }
25
27
  : metadata);
26
28
  }
27
- exports.mapSuperFieldResolverHandlers = mapSuperFieldResolverHandlers;
28
29
  function mapMiddlewareMetadataToArray(metadata) {
29
30
  return metadata
30
31
  .map(m => m.middlewares)
31
32
  .reduce((middlewares, resultArray) => resultArray.concat(middlewares), []);
32
33
  }
33
- exports.mapMiddlewareMetadataToArray = mapMiddlewareMetadataToArray;
34
34
  function ensureReflectMetadataExists() {
35
35
  if (typeof Reflect !== "object" || typeof Reflect.getMetadata !== "function") {
36
36
  throw new errors_1.ReflectMetadataMissingError();
37
37
  }
38
38
  }
39
- exports.ensureReflectMetadataExists = ensureReflectMetadataExists;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertArgToInstance = exports.convertArgsToInstance = void 0;
3
+ exports.convertArgsToInstance = convertArgsToInstance;
4
+ exports.convertArgToInstance = convertArgToInstance;
4
5
  const types_1 = require("../helpers/types");
5
6
  const getMetadataStorage_1 = require("../metadata/getMetadataStorage");
6
7
  const generatedTrees = new Map();
@@ -113,10 +114,8 @@ function convertArgsToInstance(argsMetadata, args) {
113
114
  }, {});
114
115
  return (0, types_1.convertToType)(ArgsClass, transformedFields);
115
116
  }
116
- exports.convertArgsToInstance = convertArgsToInstance;
117
117
  function convertArgToInstance(argMetadata, args) {
118
118
  const argValue = args[argMetadata.name];
119
119
  const argTarget = argMetadata.getType();
120
120
  return convertValuesToInstances(argTarget, argValue);
121
121
  }
122
- exports.convertArgToInstance = convertArgToInstance;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.wrapResolverWithAuthChecker = exports.createBasicFieldResolver = exports.createAdvancedFieldResolver = exports.createHandlerResolver = void 0;
3
+ exports.createHandlerResolver = createHandlerResolver;
4
+ exports.createAdvancedFieldResolver = createAdvancedFieldResolver;
5
+ exports.createBasicFieldResolver = createBasicFieldResolver;
6
+ exports.wrapResolverWithAuthChecker = wrapResolverWithAuthChecker;
4
7
  const auth_middleware_1 = require("../helpers/auth-middleware");
5
8
  const types_1 = require("../helpers/types");
6
9
  const build_context_1 = require("../schema/build-context");
@@ -32,7 +35,6 @@ function createHandlerResolver(resolverMetadata) {
32
35
  });
33
36
  };
34
37
  }
35
- exports.createHandlerResolver = createHandlerResolver;
36
38
  function createAdvancedFieldResolver(fieldResolverMetadata) {
37
39
  if (fieldResolverMetadata.kind === "external") {
38
40
  return createHandlerResolver(fieldResolverMetadata);
@@ -57,7 +59,6 @@ function createAdvancedFieldResolver(fieldResolverMetadata) {
57
59
  });
58
60
  };
59
61
  }
60
- exports.createAdvancedFieldResolver = createAdvancedFieldResolver;
61
62
  function createBasicFieldResolver(fieldMetadata) {
62
63
  const { authChecker, authMode, globalMiddlewares, container } = build_context_1.BuildContext;
63
64
  const middlewares = globalMiddlewares.concat(fieldMetadata.middlewares);
@@ -67,7 +68,6 @@ function createBasicFieldResolver(fieldMetadata) {
67
68
  return (0, helpers_1.applyMiddlewares)(container, resolverData, middlewares, () => root[fieldMetadata.name]);
68
69
  };
69
70
  }
70
- exports.createBasicFieldResolver = createBasicFieldResolver;
71
71
  function wrapResolverWithAuthChecker(resolver, container, roles) {
72
72
  const { authChecker, authMode } = build_context_1.BuildContext;
73
73
  if (!authChecker || !roles) {
@@ -78,4 +78,3 @@ function wrapResolverWithAuthChecker(resolver, container, roles) {
78
78
  return (0, auth_middleware_1.AuthMiddleware)(authChecker, container, authMode, roles)(resolverData, async () => resolver(root, args, context, info));
79
79
  };
80
80
  }
81
- exports.wrapResolverWithAuthChecker = wrapResolverWithAuthChecker;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyMiddlewares = exports.applyAuthChecker = exports.getParams = void 0;
3
+ exports.getParams = getParams;
4
+ exports.applyAuthChecker = applyAuthChecker;
5
+ exports.applyMiddlewares = applyMiddlewares;
4
6
  const auth_middleware_1 = require("../helpers/auth-middleware");
5
7
  const types_1 = require("../helpers/types");
6
8
  const isPromiseLike_1 = require("../utils/isPromiseLike");
@@ -32,6 +34,10 @@ function getParams(params, resolverData, globalValidate, globalValidateFn) {
32
34
  case "info":
33
35
  return resolverData.info;
34
36
  case "custom":
37
+ if (paramInfo.options.arg) {
38
+ const arg = paramInfo.options.arg;
39
+ return (0, validate_arg_1.validateArg)((0, convert_args_1.convertArgToInstance)(arg, resolverData.args), arg.getType(), resolverData, globalValidate, arg.validateSettings, globalValidateFn, arg.validateFn).then(() => paramInfo.resolver(resolverData));
40
+ }
35
41
  return paramInfo.resolver(resolverData);
36
42
  }
37
43
  });
@@ -40,13 +46,11 @@ function getParams(params, resolverData, globalValidate, globalValidateFn) {
40
46
  }
41
47
  return paramValues;
42
48
  }
43
- exports.getParams = getParams;
44
49
  function applyAuthChecker(middlewares, authChecker, container, authMode, roles) {
45
50
  if (authChecker && roles) {
46
51
  middlewares.unshift((0, auth_middleware_1.AuthMiddleware)(authChecker, container, authMode, roles));
47
52
  }
48
53
  }
49
- exports.applyAuthChecker = applyAuthChecker;
50
54
  function applyMiddlewares(container, resolverData, middlewares, resolverHandlerFunction) {
51
55
  if (middlewares.length === 0) {
52
56
  return resolverHandlerFunction();
@@ -80,4 +84,3 @@ function applyMiddlewares(container, resolverData, middlewares, resolverHandlerF
80
84
  }
81
85
  return dispatchHandler(0);
82
86
  }
83
- exports.applyMiddlewares = applyMiddlewares;
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.validateArg = void 0;
26
+ exports.validateArg = validateArg;
27
27
  const errors_1 = require("../errors");
28
28
  const shouldArgBeValidated = (argValue) => argValue !== null && typeof argValue === "object";
29
29
  async function validateArg(argValue, argType, resolverData, globalValidateSettings, argValidateSettings, globalValidateFn, argValidateFn) {
@@ -62,4 +62,3 @@ async function validateArg(argValue, argType, resolverData, globalValidateSettin
62
62
  throw new errors_1.ArgumentValidationError(err);
63
63
  }
64
64
  }
65
- exports.validateArg = validateArg;
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getInterfaceTypeDefinitionNode = exports.getInputValueDefinitionNode = exports.getFieldDefinitionNode = exports.getInputObjectTypeDefinitionNode = exports.getObjectTypeDefinitionNode = exports.getDirectiveNode = void 0;
3
+ exports.getDirectiveNode = getDirectiveNode;
4
+ exports.getObjectTypeDefinitionNode = getObjectTypeDefinitionNode;
5
+ exports.getInputObjectTypeDefinitionNode = getInputObjectTypeDefinitionNode;
6
+ exports.getFieldDefinitionNode = getFieldDefinitionNode;
7
+ exports.getInputValueDefinitionNode = getInputValueDefinitionNode;
8
+ exports.getInterfaceTypeDefinitionNode = getInterfaceTypeDefinitionNode;
4
9
  const graphql_1 = require("graphql");
5
10
  const errors_1 = require("../errors");
6
11
  function getDirectiveNode(directive) {
@@ -43,7 +48,6 @@ function getDirectiveNode(directive) {
43
48
  }
44
49
  return directives[0];
45
50
  }
46
- exports.getDirectiveNode = getDirectiveNode;
47
51
  function getObjectTypeDefinitionNode(name, directiveMetadata) {
48
52
  if (!directiveMetadata || !directiveMetadata.length) {
49
53
  return undefined;
@@ -57,7 +61,6 @@ function getObjectTypeDefinitionNode(name, directiveMetadata) {
57
61
  directives: directiveMetadata.map(getDirectiveNode),
58
62
  };
59
63
  }
60
- exports.getObjectTypeDefinitionNode = getObjectTypeDefinitionNode;
61
64
  function getInputObjectTypeDefinitionNode(name, directiveMetadata) {
62
65
  if (!directiveMetadata || !directiveMetadata.length) {
63
66
  return undefined;
@@ -71,7 +74,6 @@ function getInputObjectTypeDefinitionNode(name, directiveMetadata) {
71
74
  directives: directiveMetadata.map(getDirectiveNode),
72
75
  };
73
76
  }
74
- exports.getInputObjectTypeDefinitionNode = getInputObjectTypeDefinitionNode;
75
77
  function getFieldDefinitionNode(name, type, directiveMetadata) {
76
78
  if (!directiveMetadata || !directiveMetadata.length) {
77
79
  return undefined;
@@ -92,7 +94,6 @@ function getFieldDefinitionNode(name, type, directiveMetadata) {
92
94
  directives: directiveMetadata.map(getDirectiveNode),
93
95
  };
94
96
  }
95
- exports.getFieldDefinitionNode = getFieldDefinitionNode;
96
97
  function getInputValueDefinitionNode(name, type, directiveMetadata) {
97
98
  if (!directiveMetadata || !directiveMetadata.length) {
98
99
  return undefined;
@@ -113,7 +114,6 @@ function getInputValueDefinitionNode(name, type, directiveMetadata) {
113
114
  directives: directiveMetadata.map(getDirectiveNode),
114
115
  };
115
116
  }
116
- exports.getInputValueDefinitionNode = getInputValueDefinitionNode;
117
117
  function getInterfaceTypeDefinitionNode(name, directiveMetadata) {
118
118
  if (!directiveMetadata || !directiveMetadata.length) {
119
119
  return undefined;
@@ -127,4 +127,3 @@ function getInterfaceTypeDefinitionNode(name, directiveMetadata) {
127
127
  directives: directiveMetadata.map(getDirectiveNode),
128
128
  };
129
129
  }
130
- exports.getInterfaceTypeDefinitionNode = getInterfaceTypeDefinitionNode;