1
- import {
2
- type DiscoveredClassWithMeta ,
3
- DiscoveryService ,
4
- } from '@golevelup/nestjs-discovery' ;
5
1
import { Injectable , type OnModuleInit } from '@nestjs/common' ;
6
2
import { entries , mapEntries , mapValues , setOf } from '@seedcompany/common' ;
7
3
import { pick , startCase } from 'lodash' ;
8
4
import { type DeepWritable , type Writable } from 'ts-essentials' ;
9
5
import { type EnhancedResource , many , type Role } from '~/common' ;
6
+ import { type DiscoveredClass , MetadataDiscovery } from '~/core/discovery' ;
10
7
import { ResourcesHost } from '~/core/resources' ;
11
8
import { Power } from '../dto' ;
12
9
import { ChildListAction , ChildSingleAction } from './actions' ;
@@ -15,10 +12,7 @@ import {
15
12
type Permission ,
16
13
type Permissions ,
17
14
} from './builder/perm-granter' ;
18
- import {
19
- POLICY_METADATA_KEY ,
20
- type PolicyMetadata ,
21
- } from './builder/policy.decorator' ;
15
+ import { Policy as PolicyMetadata } from './builder/policy.decorator' ;
22
16
import { all , any , Condition } from './conditions' ;
23
17
import { type ResourcesGranter } from './granters' ;
24
18
import { GrantersFactory } from './granters.factory' ;
@@ -53,7 +47,7 @@ export class PolicyFactory implements OnModuleInit {
53
47
54
48
constructor (
55
49
private readonly grantersFactory : GrantersFactory ,
56
- private readonly discovery : DiscoveryService ,
50
+ private readonly discovery : MetadataDiscovery ,
57
51
private readonly resourcesHost : ResourcesHost ,
58
52
) { }
59
53
@@ -72,10 +66,9 @@ export class PolicyFactory implements OnModuleInit {
72
66
}
73
67
74
68
async onModuleInit ( ) {
75
- const discoveredPolicies =
76
- await this . discovery . providersWithMetaAtKey < PolicyMetadata > (
77
- POLICY_METADATA_KEY ,
78
- ) ;
69
+ const discoveredPolicies = this . discovery
70
+ . discover ( PolicyMetadata )
71
+ . classes ( ) ;
79
72
80
73
const resGranter = await this . grantersFactory . makeGranters ( ) ;
81
74
@@ -99,9 +92,9 @@ export class PolicyFactory implements OnModuleInit {
99
92
100
93
private buildPlainPolicy (
101
94
resGranter : ResourcesGranter ,
102
- { meta, discoveredClass } : DiscoveredClassWithMeta < PolicyMetadata > ,
95
+ { meta, instance } : DiscoveredClass < ( typeof PolicyMetadata ) [ '$value' ] > ,
103
96
) : PlainPolicy {
104
- const name = startCase ( discoveredClass . name . replace ( / P o l i c y $ / , '' ) ) ;
97
+ const name = startCase ( instance . constructor . name . replace ( / P o l i c y $ / , '' ) ) ;
105
98
106
99
const roles = meta . role === 'all' ? undefined : setOf ( many ( meta . role ) ) ;
107
100
0 commit comments