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.
- package/LICENSE +1 -1
- package/README.md +19 -13
- package/build/cjs/decorators/Arg.js +1 -2
- package/build/cjs/decorators/Args.js +1 -2
- package/build/cjs/decorators/ArgsType.js +1 -2
- package/build/cjs/decorators/Authorized.js +10 -4
- package/build/cjs/decorators/Ctx.js +1 -2
- package/build/cjs/decorators/Directive.js +1 -2
- package/build/cjs/decorators/Extensions.js +1 -2
- package/build/cjs/decorators/Field.js +1 -2
- package/build/cjs/decorators/FieldResolver.js +1 -2
- package/build/cjs/decorators/Info.js +1 -2
- package/build/cjs/decorators/InputType.js +1 -2
- package/build/cjs/decorators/InterfaceType.js +1 -2
- package/build/cjs/decorators/Mutation.js +1 -2
- package/build/cjs/decorators/ObjectType.js +1 -2
- package/build/cjs/decorators/Query.js +1 -2
- package/build/cjs/decorators/Resolver.js +1 -2
- package/build/cjs/decorators/Root.js +1 -2
- package/build/cjs/decorators/Subscription.js +1 -2
- package/build/cjs/decorators/UseMiddleware.js +10 -4
- package/build/cjs/decorators/{createMethodDecorator.js → createMethodMiddlewareDecorator.js} +2 -3
- package/build/cjs/decorators/createParameterDecorator.js +38 -0
- package/build/cjs/decorators/createResolverClassMiddlewareDecorator.js +7 -0
- package/build/cjs/decorators/enums.js +1 -2
- package/build/cjs/decorators/index.js +7 -5
- package/build/cjs/decorators/unions.js +1 -2
- package/build/cjs/helpers/auth-middleware.js +1 -2
- package/build/cjs/helpers/decorators.js +3 -4
- package/build/cjs/helpers/filesystem.js +2 -3
- package/build/cjs/helpers/findType.js +1 -2
- package/build/cjs/helpers/isThrowing.js +1 -2
- package/build/cjs/helpers/params.js +1 -2
- package/build/cjs/helpers/resolver-metadata.js +1 -2
- package/build/cjs/helpers/types.js +11 -6
- package/build/cjs/metadata/getMetadataStorage.js +1 -2
- package/build/cjs/metadata/metadata-storage.js +176 -26
- package/build/cjs/metadata/utils.js +4 -5
- package/build/cjs/resolvers/convert-args.js +2 -3
- package/build/cjs/resolvers/create.js +4 -5
- package/build/cjs/resolvers/helpers.js +7 -4
- package/build/cjs/resolvers/validate-arg.js +1 -2
- package/build/cjs/schema/definition-node.js +6 -7
- package/build/cjs/schema/schema-generator.js +53 -37
- package/build/cjs/schema/utils.js +2 -3
- package/build/cjs/shim.js +6 -5
- package/build/cjs/utils/buildSchema.js +2 -3
- package/build/cjs/utils/buildTypeDefsAndResolvers.js +2 -3
- package/build/cjs/utils/createResolversMap.js +1 -2
- package/build/cjs/utils/emitSchemaDefinitionFile.js +3 -3
- package/build/cjs/utils/graphql-version.js +3 -3
- package/build/cjs/utils/isPromiseLike.js +1 -2
- package/build/esm/decorators/Authorized.js +9 -2
- package/build/esm/decorators/UseMiddleware.js +9 -2
- package/build/esm/decorators/{createMethodDecorator.js → createMethodMiddlewareDecorator.js} +1 -1
- package/build/esm/decorators/createParameterDecorator.js +35 -0
- package/build/esm/decorators/createResolverClassMiddlewareDecorator.js +4 -0
- package/build/esm/decorators/index.js +3 -2
- package/build/esm/helpers/types.js +7 -1
- package/build/esm/metadata/metadata-storage.js +176 -26
- package/build/esm/resolvers/helpers.js +4 -0
- package/build/esm/schema/schema-generator.js +53 -37
- package/build/esm/shim.js +3 -2
- package/build/esm/utils/graphql-version.js +1 -1
- package/build/typings/decorators/Authorized.d.ts +4 -4
- package/build/typings/decorators/UseMiddleware.d.ts +3 -3
- package/build/typings/decorators/createMethodMiddlewareDecorator.d.ts +2 -0
- package/build/typings/decorators/createParameterDecorator.d.ts +12 -0
- package/build/typings/decorators/createResolverClassMiddlewareDecorator.d.ts +2 -0
- package/build/typings/decorators/index.d.ts +3 -2
- package/build/typings/decorators/types.d.ts +1 -0
- package/build/typings/metadata/definitions/authorized-metadata.d.ts +1 -0
- package/build/typings/metadata/definitions/middleware-metadata.d.ts +1 -0
- package/build/typings/metadata/definitions/param-metadata.d.ts +4 -0
- package/build/typings/metadata/metadata-storage.d.ts +17 -1
- package/build/typings/metadata/utils.d.ts +2 -2
- package/build/typings/schema/schema-generator.d.ts +5 -0
- package/build/typings/shim.ts +5 -2
- package/build/typings/utils/graphql-version.d.ts +1 -1
- package/package.json +66 -65
- package/build/cjs/decorators/createParamDecorator.js +0 -20
- package/build/esm/decorators/createParamDecorator.js +0 -16
- package/build/typings/decorators/createMethodDecorator.d.ts +0 -2
- 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 =
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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.
|
|
139
|
-
field.middlewares =
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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.
|
|
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
|
-
|
|
160
|
-
def.
|
|
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 =
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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.
|
|
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.
|
|
331
|
+
? this.resolverClassesCache.get(def.target).getObjectType
|
|
181
332
|
: () => def.target;
|
|
182
333
|
if (def.kind === "external") {
|
|
183
|
-
const typeClass = this.
|
|
184
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 =
|
|
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.
|
|
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;
|