UNPKG

2.54 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Resolver = void 0;
4const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
5require("reflect-metadata");
6const lazy_metadata_storage_1 = require("../schema-builder/storages/lazy-metadata.storage");
7const type_metadata_storage_1 = require("../schema-builder/storages/type-metadata.storage");
8const resolvers_utils_1 = require("./resolvers.utils");
9/**
10 * Extracts the name property set through the @ObjectType() decorator (if specified)
11 * @param nameOrType type reference
12 */
13function getObjectOrInterfaceTypeNameIfExists(nameOrType) {
14 const ctor = (0, resolvers_utils_1.getClassOrUndefined)(nameOrType);
15 const objectTypesMetadata = type_metadata_storage_1.TypeMetadataStorage.getObjectTypesMetadata();
16 const objectMetadata = objectTypesMetadata.find((type) => type.target === ctor);
17 if (!objectMetadata) {
18 const interfaceTypesMetadata = type_metadata_storage_1.TypeMetadataStorage.getInterfacesMetadata();
19 const interfaceMetadata = interfaceTypesMetadata.find((type) => type.target === ctor);
20 if (!interfaceMetadata) {
21 return;
22 }
23 return interfaceMetadata.name;
24 }
25 return objectMetadata.name;
26}
27/**
28 * Object resolver decorator.
29 */
30function Resolver(nameOrTypeOrOptions, options) {
31 return (target, key, descriptor) => {
32 const [nameOrType, resolverOptions] = typeof nameOrTypeOrOptions === 'object' && nameOrTypeOrOptions !== null
33 ? [undefined, nameOrTypeOrOptions]
34 : [nameOrTypeOrOptions, options];
35 let name = nameOrType && (0, resolvers_utils_1.getClassName)(nameOrType);
36 if ((0, shared_utils_1.isFunction)(nameOrType)) {
37 const objectName = getObjectOrInterfaceTypeNameIfExists(nameOrType);
38 objectName && (name = objectName);
39 }
40 (0, resolvers_utils_1.addResolverMetadata)(undefined, name, target, key, descriptor);
41 if (!(0, shared_utils_1.isString)(nameOrType)) {
42 lazy_metadata_storage_1.LazyMetadataStorage.store(target, () => {
43 const typeFn = (0, resolvers_utils_1.getResolverTypeFn)(nameOrType, target);
44 type_metadata_storage_1.TypeMetadataStorage.addResolverMetadata({
45 target: target,
46 typeFn: typeFn,
47 isAbstract: (resolverOptions && resolverOptions.isAbstract) || false,
48 });
49 });
50 }
51 };
52}
53exports.Resolver = Resolver;