@@ -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 ) { }
@@ -65,7 +70,14 @@ export class ResourcesHost {
65
70
return this . getByName ( name as any ) ;
66
71
}
67
72
68
- 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 ) {
69
81
const fqnMap = this . edgeDBFQNMap ( ) ;
70
82
const resByFQN = fqnMap . get (
71
83
name . includes ( '::' ) ? name : `default::${ name } ` ,
0 commit comments