@@ -3,14 +3,15 @@ import { GraphQLSchemaHost } from '@nestjs/graphql';
3
3
import { CachedByArg , mapKeys } from '@seedcompany/common' ;
4
4
import { isObjectType } from 'graphql' ;
5
5
import { mapValues } from 'lodash' ;
6
- import { LiteralUnion , ValueOf } from 'type-fest' ;
6
+ import { ConditionalKeys , LiteralUnion , ValueOf } from 'type-fest' ;
7
7
import {
8
+ DBName ,
8
9
EnhancedResource ,
9
10
InvalidIdForTypeException ,
10
11
ResourceShape ,
11
12
ServerException ,
12
13
} from '~/common' ;
13
- import { ResourceMap } from './map' ;
14
+ import { ResourceDBMap , ResourceMap } from './map' ;
14
15
import { __privateDontUseThis } from './resource-map-holder' ;
15
16
16
17
export type EnhancedResourceMap = {
@@ -24,6 +25,10 @@ export type ResourceLike =
24
25
| EnhancedResource < any >
25
26
| LooseResourceName ;
26
27
28
+ type ResourceNameFromDBName < K extends DBName < ValueOf < ResourceDBMap > > > =
29
+ // eslint-disable-next-line @typescript-eslint/naming-convention
30
+ ConditionalKeys < ResourceDBMap , { __element__ : { __name__ : K } } > ;
31
+
27
32
@Injectable ( )
28
33
export class ResourcesHost {
29
34
constructor ( private readonly gqlSchema : GraphQLSchemaHost ) { }
@@ -61,13 +66,18 @@ export class ResourcesHost {
61
66
return resource ;
62
67
}
63
68
64
- getByDynamicName (
65
- name : LooseResourceName ,
66
- ) : EnhancedResource < ValueOf < ResourceMap > > {
69
+ getByDynamicName ( name : LooseResourceName ) : EnhancedResource < any > {
67
70
return this . getByName ( name as any ) ;
68
71
}
69
72
70
- getByEdgeDB ( name : string ) : EnhancedResource < ValueOf < ResourceMap > > {
73
+ getByEdgeDB < K extends keyof ResourceMap > (
74
+ name : K ,
75
+ ) : EnhancedResource < ValueOf < Pick < ResourceMap , K > > > ;
76
+ getByEdgeDB < K extends DBName < ValueOf < ResourceDBMap > > > (
77
+ name : K ,
78
+ ) : EnhancedResource < ValueOf < Pick < ResourceMap , ResourceNameFromDBName < K > > > > ;
79
+ getByEdgeDB ( name : string ) : EnhancedResource < any > ;
80
+ getByEdgeDB ( name : string ) {
71
81
const fqnMap = this . edgeDBFQNMap ( ) ;
72
82
const resByFQN = fqnMap . get (
73
83
name . includes ( '::' ) ? name : `default::${ name } ` ,
@@ -92,7 +102,7 @@ export class ResourcesHost {
92
102
map as Record < string , EnhancedResource < any > > ,
93
103
( _ , r , { SKIP } ) => {
94
104
try {
95
- return r . dbFQN as string ;
105
+ return r . dbFQN ;
96
106
} catch ( e ) {
97
107
return SKIP ;
98
108
}
0 commit comments