1
- import { DiscoveryService } from '@golevelup/nestjs-discovery' ;
2
- import { Injectable } from '@nestjs/common' ;
1
+ import { Injectable , type Type } from '@nestjs/common' ;
3
2
import { many , mapEntries } from '@seedcompany/common' ;
4
3
import { mapValues } from 'lodash' ;
5
- import { EnhancedResource } from '~/common' ;
4
+ import { EnhancedResource , type ResourceShape } from '~/common' ;
5
+ import { MetadataDiscovery } from '~/core/discovery' ;
6
6
import { ResourcesHost } from '~/core/resources' ;
7
- import { discover } from './builder/granter.decorator' ;
7
+ import { Granter } from './builder/granter.decorator' ;
8
8
import {
9
9
DefaultResourceGranter ,
10
10
ResourceGranter ,
@@ -14,21 +14,23 @@ import { type ResourcesGranter } from './granters';
14
14
@Injectable ( )
15
15
export class GrantersFactory {
16
16
constructor (
17
- private readonly discovery : DiscoveryService ,
17
+ private readonly discovery : MetadataDiscovery ,
18
18
private readonly resourcesHost : ResourcesHost ,
19
19
) { }
20
20
21
21
async makeGranters ( ) {
22
- const discoveredGranters = await discover ( this . discovery ) ;
22
+ const discoveredGranters = this . discovery
23
+ . discover ( Granter )
24
+ . classes < ResourceGranter < ResourceShape < any > > > ( ) ;
23
25
24
26
const custom = Object . assign (
25
27
{ } ,
26
28
...discoveredGranters . map (
27
- ( { meta : { resources, factory } , discoveredClass } ) =>
29
+ ( { meta : { resources, factory } , instance } ) =>
28
30
mapEntries ( many ( resources ) , ( raw ) => {
29
31
const res = EnhancedResource . of ( raw ) ;
30
- const granter =
31
- factory ?.( res ) ?? new discoveredClass . dependencyType ( res ) ;
32
+ const GranterImpl = instance . constructor as Type < ResourcesGranter > ;
33
+ const granter = factory ?.( res ) ?? new GranterImpl ( res ) ;
32
34
if ( ! ( granter instanceof ResourceGranter ) ) {
33
35
throw new Error (
34
36
`Granter for ${ res . name } must extend ResourceGranter class` ,
0 commit comments