UNPKG

2.61 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Resolver = void 0;
4const common_1 = require("@nestjs/common");
5const constants_1 = require("@nestjs/common/constants");
6const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
7require("reflect-metadata");
8const lazy_metadata_storage_1 = require("../schema-builder/storages/lazy-metadata.storage");
9const type_metadata_storage_1 = require("../schema-builder/storages/type-metadata.storage");
10const resolvers_utils_1 = require("./resolvers.utils");
11/**
12 * Extracts the name property set through the @ObjectType() decorator (if specified)
13 * @param nameOrType type reference
14 */
15function getObjectOrInterfaceTypeNameIfExists(nameOrType) {
16 const ctor = (0, resolvers_utils_1.getClassOrUndefined)(nameOrType);
17 const objectMetadata = type_metadata_storage_1.TypeMetadataStorage.getObjectTypeMetadataByTarget(ctor);
18 if (!objectMetadata) {
19 const interfaceMetadata = type_metadata_storage_1.TypeMetadataStorage.getInterfaceMetadataByTarget(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 if (typeof target === 'function') {
33 (0, common_1.SetMetadata)(constants_1.ENTRY_PROVIDER_WATERMARK, true)(target);
34 }
35 const [nameOrType, resolverOptions] = typeof nameOrTypeOrOptions === 'object' && nameOrTypeOrOptions !== null
36 ? [undefined, nameOrTypeOrOptions]
37 : [nameOrTypeOrOptions, options];
38 let name = nameOrType && (0, resolvers_utils_1.getClassName)(nameOrType);
39 if ((0, shared_utils_1.isFunction)(nameOrType)) {
40 const objectName = getObjectOrInterfaceTypeNameIfExists(nameOrType);
41 objectName && (name = objectName);
42 }
43 (0, resolvers_utils_1.addResolverMetadata)(undefined, name, target, key, descriptor);
44 if (!(0, shared_utils_1.isString)(nameOrType)) {
45 lazy_metadata_storage_1.LazyMetadataStorage.store(target, () => {
46 const typeFn = (0, resolvers_utils_1.getResolverTypeFn)(nameOrType, target);
47 type_metadata_storage_1.TypeMetadataStorage.addResolverMetadata({
48 target: target,
49 typeFn: typeFn,
50 isAbstract: (resolverOptions && resolverOptions.isAbstract) || false,
51 });
52 });
53 }
54 };
55}
56exports.Resolver = Resolver;