Skip to content

Commit 0df83fa

Browse files
committed
Migrate policy Optimizer
1 parent ef01df7 commit 0df83fa

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

src/components/authorization/policy/conditions/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ export * from './missing-context.exception';
33
export * from './aggregate.condition';
44
export * from './calculated.condition';
55
export * from './eql.util';
6-
export * from './optimizer.interface';
6+
export { Optimizer } from './optimizer.interface';
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import {
2-
applyDecorators,
3-
Injectable,
4-
SetMetadata,
5-
type Type,
6-
} from '@nestjs/common';
1+
import { Injectable, type Type } from '@nestjs/common';
2+
import { createMetadataDecorator } from '@seedcompany/nest';
73
import { type Condition } from './condition.interface';
84

5+
export const OptimizerWatermark = createMetadataDecorator({
6+
types: ['class'],
7+
additionalDecorators: [Injectable()],
8+
});
9+
910
export abstract class Optimizer {
10-
static register = () => (cls: Type<Optimizer>) =>
11-
applyDecorators(Injectable(), SetMetadata(Optimizer, true))(cls);
11+
static register = () => (cls: Type<Optimizer>) => OptimizerWatermark()(cls);
1212

1313
abstract optimize(condition: Condition): Condition;
1414
}

src/components/authorization/policy/executor/condition-optimizer.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
1-
import { DiscoveryService } from '@golevelup/nestjs-discovery';
21
import { Injectable, type OnModuleInit } from '@nestjs/common';
2+
import { MetadataDiscovery } from '~/core/discovery';
33
import {
44
AggregateConditions,
55
AndConditions,
66
type Condition,
7-
Optimizer,
7+
type Optimizer,
88
OrConditions,
99
} from '../conditions';
10+
import { OptimizerWatermark } from '../conditions/optimizer.interface';
1011

1112
@Injectable()
1213
export class ConditionOptimizer implements OnModuleInit {
1314
private optimizers: Optimizer[];
1415

15-
constructor(private readonly discovery: DiscoveryService) {}
16+
constructor(private readonly discovery: MetadataDiscovery) {}
1617

1718
async onModuleInit() {
18-
const found = await this.discovery.providersWithMetaAtKey(Optimizer as any);
19-
this.optimizers = found.map((p) => p.discoveredClass.instance as Optimizer);
19+
this.optimizers = this.discovery
20+
.discover(OptimizerWatermark)
21+
.classes<Optimizer>()
22+
.map((discovery) => discovery.instance);
2023
}
2124

2225
optimize(condition: Condition) {

0 commit comments

Comments
 (0)