1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Resolver = void 0;
|
4 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
5 | require("reflect-metadata");
|
6 | const lazy_metadata_storage_1 = require("../schema-builder/storages/lazy-metadata.storage");
|
7 | const type_metadata_storage_1 = require("../schema-builder/storages/type-metadata.storage");
|
8 | const resolvers_utils_1 = require("./resolvers.utils");
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function 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 |
|
29 |
|
30 | function 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 | }
|
53 | exports.Resolver = Resolver;
|