UNPKG

2.91 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ResolveField = void 0;
4const common_1 = require("@nestjs/common");
5const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
6const graphql_constants_1 = require("../graphql.constants");
7const lazy_metadata_storage_1 = require("../schema-builder/storages/lazy-metadata.storage");
8const type_metadata_storage_1 = require("../schema-builder/storages/type-metadata.storage");
9const reflection_utilts_1 = require("../utils/reflection.utilts");
10/**
11 * Property resolver (method) Decorator.
12 */
13function ResolveField(propertyNameOrFunc, typeFuncOrOptions, resolveFieldOptions) {
14 return (target, key, descriptor) => {
15 // eslint-disable-next-line prefer-const
16 let [propertyName, typeFunc, options] = (0, shared_utils_1.isFunction)(propertyNameOrFunc)
17 ? typeFuncOrOptions && typeFuncOrOptions.name
18 ? [typeFuncOrOptions.name, propertyNameOrFunc, typeFuncOrOptions]
19 : [undefined, propertyNameOrFunc, typeFuncOrOptions]
20 : [propertyNameOrFunc, typeFuncOrOptions, resolveFieldOptions];
21 (0, common_1.SetMetadata)(graphql_constants_1.RESOLVER_NAME_METADATA, propertyName)(target, key, descriptor);
22 (0, common_1.SetMetadata)(graphql_constants_1.RESOLVER_PROPERTY_METADATA, true)(target, key, descriptor);
23 (0, common_1.SetMetadata)(graphql_constants_1.FIELD_RESOLVER_MIDDLEWARE_METADATA, options?.middleware)(target, key, descriptor);
24 options = (0, shared_utils_1.isObject)(options)
25 ? {
26 name: propertyName,
27 ...options,
28 }
29 : propertyName
30 ? { name: propertyName }
31 : {};
32 lazy_metadata_storage_1.LazyMetadataStorage.store(target.constructor, () => {
33 let typeOptions, typeFn;
34 try {
35 const implicitTypeMetadata = (0, reflection_utilts_1.reflectTypeFromMetadata)({
36 metadataKey: 'design:returntype',
37 prototype: target,
38 propertyKey: key,
39 explicitTypeFn: typeFunc,
40 typeOptions: options,
41 });
42 typeOptions = implicitTypeMetadata.options;
43 typeFn = implicitTypeMetadata.typeFn;
44 }
45 catch { }
46 type_metadata_storage_1.TypeMetadataStorage.addResolverPropertyMetadata({
47 kind: 'external',
48 methodName: key,
49 schemaName: options.name || key,
50 target: target.constructor,
51 typeFn,
52 typeOptions,
53 description: options.description,
54 deprecationReason: options.deprecationReason,
55 complexity: options.complexity,
56 });
57 });
58 };
59}
60exports.ResolveField = ResolveField;