@dismissible/nestjs-dismissible 0.1.0-canary.4b708a5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +64 -0
- package/src/api/dismissible-item-response.dto.d.ts +10 -0
- package/src/api/dismissible-item-response.dto.js +49 -0
- package/src/api/dismissible-item-response.dto.js.map +1 -0
- package/src/api/dismissible-item.mapper.d.ts +12 -0
- package/src/api/dismissible-item.mapper.js +33 -0
- package/src/api/dismissible-item.mapper.js.map +1 -0
- package/src/api/dismissible-item.mapper.spec.d.ts +1 -0
- package/src/api/dismissible-item.mapper.spec.js +52 -0
- package/src/api/dismissible-item.mapper.spec.js.map +1 -0
- package/src/api/index.d.ts +4 -0
- package/src/api/index.js +10 -0
- package/src/api/index.js.map +1 -0
- package/src/api/use-cases/api-tags.constants.d.ts +4 -0
- package/src/api/use-cases/api-tags.constants.js +8 -0
- package/src/api/use-cases/api-tags.constants.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.d.ts +16 -0
- package/src/api/use-cases/dismiss/dismiss.controller.js +73 -0
- package/src/api/use-cases/dismiss/dismiss.controller.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.d.ts +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.js +37 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.d.ts +12 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.js +12 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.js.map +1 -0
- package/src/api/use-cases/dismiss/index.d.ts +2 -0
- package/src/api/use-cases/dismiss/index.js +6 -0
- package/src/api/use-cases/dismiss/index.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +21 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.js +104 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +53 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.request.dto.d.ts +6 -0
- package/src/api/use-cases/get-or-create/get-or-create.request.dto.js +24 -0
- package/src/api/use-cases/get-or-create/get-or-create.request.dto.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
- package/src/api/use-cases/get-or-create/index.d.ts +3 -0
- package/src/api/use-cases/get-or-create/index.js +7 -0
- package/src/api/use-cases/get-or-create/index.js.map +1 -0
- package/src/api/use-cases/index.d.ts +3 -0
- package/src/api/use-cases/index.js +7 -0
- package/src/api/use-cases/index.js.map +1 -0
- package/src/api/use-cases/restore/index.d.ts +2 -0
- package/src/api/use-cases/restore/index.js +6 -0
- package/src/api/use-cases/restore/index.js.map +1 -0
- package/src/api/use-cases/restore/restore.controller.d.ts +16 -0
- package/src/api/use-cases/restore/restore.controller.js +73 -0
- package/src/api/use-cases/restore/restore.controller.js.map +1 -0
- package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
- package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
- package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
- package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
- package/src/api/use-cases/restore/restore.response.dto.js +12 -0
- package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
- package/src/core/create-options.d.ts +8 -0
- package/src/core/create-options.js +3 -0
- package/src/core/create-options.js.map +1 -0
- package/src/core/dismissible-core.service.d.ts +44 -0
- package/src/core/dismissible-core.service.js +132 -0
- package/src/core/dismissible-core.service.js.map +1 -0
- package/src/core/dismissible-core.service.spec.d.ts +1 -0
- package/src/core/dismissible-core.service.spec.js +277 -0
- package/src/core/dismissible-core.service.spec.js.map +1 -0
- package/src/core/dismissible.service.d.ts +41 -0
- package/src/core/dismissible.service.js +114 -0
- package/src/core/dismissible.service.js.map +1 -0
- package/src/core/dismissible.service.spec.d.ts +1 -0
- package/src/core/dismissible.service.spec.js +98 -0
- package/src/core/dismissible.service.spec.js.map +1 -0
- package/src/core/hook-runner.service.d.ts +72 -0
- package/src/core/hook-runner.service.js +160 -0
- package/src/core/hook-runner.service.js.map +1 -0
- package/src/core/hook-runner.service.spec.d.ts +1 -0
- package/src/core/hook-runner.service.spec.js +214 -0
- package/src/core/hook-runner.service.spec.js.map +1 -0
- package/src/core/index.d.ts +6 -0
- package/src/core/index.js +10 -0
- package/src/core/index.js.map +1 -0
- package/src/core/lifecycle-hook.interface.d.ts +70 -0
- package/src/core/lifecycle-hook.interface.js +8 -0
- package/src/core/lifecycle-hook.interface.js.map +1 -0
- package/src/core/service-responses.interface.d.ts +28 -0
- package/src/core/service-responses.interface.js +3 -0
- package/src/core/service-responses.interface.js.map +1 -0
- package/src/dismissible.module.d.ts +14 -0
- package/src/dismissible.module.js +77 -0
- package/src/dismissible.module.js.map +1 -0
- package/src/events/dismissible.events.d.ts +45 -0
- package/src/events/dismissible.events.js +53 -0
- package/src/events/dismissible.events.js.map +1 -0
- package/src/events/events.constants.d.ts +17 -0
- package/src/events/events.constants.js +17 -0
- package/src/events/events.constants.js.map +1 -0
- package/src/events/index.d.ts +2 -0
- package/src/events/index.js +6 -0
- package/src/events/index.js.map +1 -0
- package/src/exceptions/dismissible.exceptions.d.ts +26 -0
- package/src/exceptions/dismissible.exceptions.js +49 -0
- package/src/exceptions/dismissible.exceptions.js.map +1 -0
- package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
- package/src/exceptions/dismissible.exceptions.spec.js +40 -0
- package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
- package/src/exceptions/index.d.ts +1 -0
- package/src/exceptions/index.js +5 -0
- package/src/exceptions/index.js.map +1 -0
- package/src/index.d.ts +8 -0
- package/src/index.js +12 -0
- package/src/index.js.map +1 -0
- package/src/request/index.d.ts +2 -0
- package/src/request/index.js +6 -0
- package/src/request/index.js.map +1 -0
- package/src/request/request-context.decorator.d.ts +1 -0
- package/src/request/request-context.decorator.js +13 -0
- package/src/request/request-context.decorator.js.map +1 -0
- package/src/request/request-context.interface.d.ts +6 -0
- package/src/request/request-context.interface.js +3 -0
- package/src/request/request-context.interface.js.map +1 -0
- package/src/response/dtos/base-response.dto.d.ts +6 -0
- package/src/response/dtos/base-response.dto.js +18 -0
- package/src/response/dtos/base-response.dto.js.map +1 -0
- package/src/response/dtos/error-response.dto.d.ts +19 -0
- package/src/response/dtos/error-response.dto.js +39 -0
- package/src/response/dtos/error-response.dto.js.map +1 -0
- package/src/response/dtos/index.d.ts +3 -0
- package/src/response/dtos/index.js +7 -0
- package/src/response/dtos/index.js.map +1 -0
- package/src/response/dtos/success-response.dto.d.ts +28 -0
- package/src/response/dtos/success-response.dto.js +34 -0
- package/src/response/dtos/success-response.dto.js.map +1 -0
- package/src/response/http-exception-filter.d.ts +4 -0
- package/src/response/http-exception-filter.js +24 -0
- package/src/response/http-exception-filter.js.map +1 -0
- package/src/response/index.d.ts +4 -0
- package/src/response/index.js +8 -0
- package/src/response/index.js.map +1 -0
- package/src/response/response.module.d.ts +2 -0
- package/src/response/response.module.js +17 -0
- package/src/response/response.module.js.map +1 -0
- package/src/response/response.service.d.ts +6 -0
- package/src/response/response.service.js +25 -0
- package/src/response/response.service.js.map +1 -0
- package/src/response/response.service.spec.d.ts +1 -0
- package/src/response/response.service.spec.js +72 -0
- package/src/response/response.service.spec.js.map +1 -0
- package/src/testing/factories.d.ts +14 -0
- package/src/testing/factories.js +41 -0
- package/src/testing/factories.js.map +1 -0
- package/src/testing/index.d.ts +1 -0
- package/src/testing/index.js +5 -0
- package/src/testing/index.js.map +1 -0
- package/src/utils/date/date.service.d.ts +8 -0
- package/src/utils/date/date.service.js +24 -0
- package/src/utils/date/date.service.js.map +1 -0
- package/src/utils/date/date.service.spec.d.ts +1 -0
- package/src/utils/date/date.service.spec.js +83 -0
- package/src/utils/date/date.service.spec.js.map +1 -0
- package/src/utils/date/index.d.ts +1 -0
- package/src/utils/date/index.js +5 -0
- package/src/utils/date/index.js.map +1 -0
- package/src/utils/dismissible.helper.d.ts +4 -0
- package/src/utils/dismissible.helper.js +15 -0
- package/src/utils/dismissible.helper.js.map +1 -0
- package/src/utils/index.d.ts +3 -0
- package/src/utils/index.js +7 -0
- package/src/utils/index.js.map +1 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { IDismissibleLifecycleHook } from './lifecycle-hook.interface';
|
|
2
|
+
import { IDismissibleLogger } from '@dismissible/nestjs-logger';
|
|
3
|
+
import { BaseMetadata, DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
|
|
4
|
+
import { IRequestContext } from '../request/request-context.interface';
|
|
5
|
+
/**
|
|
6
|
+
* Result from running pre-hooks.
|
|
7
|
+
*/
|
|
8
|
+
export interface IHookRunResult {
|
|
9
|
+
/** Whether the operation should proceed */
|
|
10
|
+
proceed: boolean;
|
|
11
|
+
/** The (potentially mutated) item ID */
|
|
12
|
+
id: string;
|
|
13
|
+
/** The (potentially mutated) user ID */
|
|
14
|
+
userId: string;
|
|
15
|
+
/** The (potentially mutated) request context */
|
|
16
|
+
context?: IRequestContext;
|
|
17
|
+
/** Reason for blocking (if proceed is false) */
|
|
18
|
+
reason?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Service responsible for running lifecycle hooks.
|
|
22
|
+
*/
|
|
23
|
+
export declare class HookRunner<TMetadata extends BaseMetadata = BaseMetadata> {
|
|
24
|
+
private readonly logger;
|
|
25
|
+
private readonly sortedHooks;
|
|
26
|
+
constructor(hooks: IDismissibleLifecycleHook<TMetadata>[], logger: IDismissibleLogger);
|
|
27
|
+
/**
|
|
28
|
+
* Run pre-getOrCreate hooks.
|
|
29
|
+
*/
|
|
30
|
+
runPreGetOrCreate(itemId: string, userId: string, context?: IRequestContext): Promise<IHookRunResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Run post-getOrCreate hooks.
|
|
33
|
+
*/
|
|
34
|
+
runPostGetOrCreate(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Run pre-create hooks.
|
|
37
|
+
*/
|
|
38
|
+
runPreCreate(itemId: string, userId: string, context?: IRequestContext): Promise<IHookRunResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Run post-create hooks.
|
|
41
|
+
*/
|
|
42
|
+
runPostCreate(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Run pre-dismiss hooks.
|
|
45
|
+
*/
|
|
46
|
+
runPreDismiss(itemId: string, userId: string, context?: IRequestContext): Promise<IHookRunResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Run post-dismiss hooks.
|
|
49
|
+
*/
|
|
50
|
+
runPostDismiss(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Run pre-restore hooks.
|
|
53
|
+
*/
|
|
54
|
+
runPreRestore(itemId: string, userId: string, context?: IRequestContext): Promise<IHookRunResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Run post-restore hooks.
|
|
57
|
+
*/
|
|
58
|
+
runPostRestore(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Internal method to run pre-hooks.
|
|
61
|
+
*/
|
|
62
|
+
private runPreHooks;
|
|
63
|
+
/**
|
|
64
|
+
* Internal method to run post-hooks.
|
|
65
|
+
* Post-hooks run in reverse priority order.
|
|
66
|
+
*/
|
|
67
|
+
private runPostHooks;
|
|
68
|
+
/**
|
|
69
|
+
* Throw ForbiddenException if the hook result indicates the operation was blocked.
|
|
70
|
+
*/
|
|
71
|
+
static throwIfBlocked(result: IHookRunResult): void;
|
|
72
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HookRunner = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const lifecycle_hook_interface_1 = require("./lifecycle-hook.interface");
|
|
7
|
+
const nestjs_logger_1 = require("@dismissible/nestjs-logger");
|
|
8
|
+
/**
|
|
9
|
+
* Service responsible for running lifecycle hooks.
|
|
10
|
+
*/
|
|
11
|
+
let HookRunner = class HookRunner {
|
|
12
|
+
constructor(hooks = [], logger) {
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
// Sort hooks by priority (lower numbers first)
|
|
15
|
+
this.sortedHooks = [...hooks].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Run pre-getOrCreate hooks.
|
|
19
|
+
*/
|
|
20
|
+
async runPreGetOrCreate(itemId, userId, context) {
|
|
21
|
+
return this.runPreHooks('onBeforeGetOrCreate', itemId, userId, context);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Run post-getOrCreate hooks.
|
|
25
|
+
*/
|
|
26
|
+
async runPostGetOrCreate(itemId, item, userId, context) {
|
|
27
|
+
await this.runPostHooks('onAfterGetOrCreate', itemId, item, userId, context);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run pre-create hooks.
|
|
31
|
+
*/
|
|
32
|
+
async runPreCreate(itemId, userId, context) {
|
|
33
|
+
return this.runPreHooks('onBeforeCreate', itemId, userId, context);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Run post-create hooks.
|
|
37
|
+
*/
|
|
38
|
+
async runPostCreate(itemId, item, userId, context) {
|
|
39
|
+
await this.runPostHooks('onAfterCreate', itemId, item, userId, context);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Run pre-dismiss hooks.
|
|
43
|
+
*/
|
|
44
|
+
async runPreDismiss(itemId, userId, context) {
|
|
45
|
+
return this.runPreHooks('onBeforeDismiss', itemId, userId, context);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Run post-dismiss hooks.
|
|
49
|
+
*/
|
|
50
|
+
async runPostDismiss(itemId, item, userId, context) {
|
|
51
|
+
await this.runPostHooks('onAfterDismiss', itemId, item, userId, context);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Run pre-restore hooks.
|
|
55
|
+
*/
|
|
56
|
+
async runPreRestore(itemId, userId, context) {
|
|
57
|
+
return this.runPreHooks('onBeforeRestore', itemId, userId, context);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Run post-restore hooks.
|
|
61
|
+
*/
|
|
62
|
+
async runPostRestore(itemId, item, userId, context) {
|
|
63
|
+
await this.runPostHooks('onAfterRestore', itemId, item, userId, context);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Internal method to run pre-hooks.
|
|
67
|
+
*/
|
|
68
|
+
async runPreHooks(hookName, itemId, userId, context) {
|
|
69
|
+
let currentId = itemId;
|
|
70
|
+
let currentUserId = userId;
|
|
71
|
+
let currentContext = context ? { ...context } : undefined;
|
|
72
|
+
for (const hook of this.sortedHooks) {
|
|
73
|
+
const hookFn = hook[hookName];
|
|
74
|
+
if (hookFn) {
|
|
75
|
+
try {
|
|
76
|
+
const result = await hookFn.call(hook, currentId, currentUserId, currentContext);
|
|
77
|
+
if (!result.proceed) {
|
|
78
|
+
this.logger.debug(`Hook ${hook.constructor.name}.${hookName} blocked operation`, {
|
|
79
|
+
itemId: currentId,
|
|
80
|
+
userId: currentUserId,
|
|
81
|
+
reason: result.reason,
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
proceed: false,
|
|
85
|
+
id: currentId,
|
|
86
|
+
userId: currentUserId,
|
|
87
|
+
context: currentContext,
|
|
88
|
+
reason: result.reason,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Apply mutations if present
|
|
92
|
+
if (result.mutations) {
|
|
93
|
+
if (result.mutations.id !== undefined) {
|
|
94
|
+
currentId = result.mutations.id;
|
|
95
|
+
}
|
|
96
|
+
if (result.mutations.userId !== undefined) {
|
|
97
|
+
currentUserId = result.mutations.userId;
|
|
98
|
+
}
|
|
99
|
+
if (result.mutations.context && currentContext) {
|
|
100
|
+
currentContext = { ...currentContext, ...result.mutations.context };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
this.logger.error(`Error in hook ${hook.constructor.name}.${hookName}`, error instanceof Error ? error : new Error(String(error)), {
|
|
106
|
+
itemId: currentId,
|
|
107
|
+
userId: currentUserId,
|
|
108
|
+
});
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
proceed: true,
|
|
115
|
+
id: currentId,
|
|
116
|
+
userId: currentUserId,
|
|
117
|
+
context: currentContext,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Internal method to run post-hooks.
|
|
122
|
+
* Post-hooks run in reverse priority order.
|
|
123
|
+
*/
|
|
124
|
+
async runPostHooks(hookName, itemId, item, userId, context) {
|
|
125
|
+
// Run in reverse order for post-hooks
|
|
126
|
+
const reversedHooks = [...this.sortedHooks].reverse();
|
|
127
|
+
for (const hook of reversedHooks) {
|
|
128
|
+
const hookFn = hook[hookName];
|
|
129
|
+
if (hookFn) {
|
|
130
|
+
try {
|
|
131
|
+
await hookFn.call(hook, itemId, item, userId, context);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
this.logger.error(`Error in hook ${hook.constructor.name}.${hookName}`, error instanceof Error ? error : new Error(String(error)), {
|
|
135
|
+
itemId,
|
|
136
|
+
userId,
|
|
137
|
+
});
|
|
138
|
+
// Post-hooks errors are logged but don't block the operation
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Throw ForbiddenException if the hook result indicates the operation was blocked.
|
|
145
|
+
*/
|
|
146
|
+
static throwIfBlocked(result) {
|
|
147
|
+
if (!result.proceed) {
|
|
148
|
+
throw new common_1.ForbiddenException(result.reason ?? 'Operation blocked by lifecycle hook');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
exports.HookRunner = HookRunner;
|
|
153
|
+
exports.HookRunner = HookRunner = tslib_1.__decorate([
|
|
154
|
+
(0, common_1.Injectable)(),
|
|
155
|
+
tslib_1.__param(0, (0, common_1.Optional)()),
|
|
156
|
+
tslib_1.__param(0, (0, common_1.Inject)(lifecycle_hook_interface_1.DISMISSIBLE_HOOKS)),
|
|
157
|
+
tslib_1.__param(1, (0, common_1.Inject)(nestjs_logger_1.DISMISSIBLE_LOGGER)),
|
|
158
|
+
tslib_1.__metadata("design:paramtypes", [Array, Object])
|
|
159
|
+
], HookRunner);
|
|
160
|
+
//# sourceMappingURL=hook-runner.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-runner.service.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/hook-runner.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_jest_mocker_1 = require("ts-jest-mocker");
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const hook_runner_service_1 = require("./hook-runner.service");
|
|
6
|
+
const factories_1 = require("../testing/factories");
|
|
7
|
+
describe('HookRunner', () => {
|
|
8
|
+
let hookRunner;
|
|
9
|
+
let mockLogger;
|
|
10
|
+
const testUserId = 'test-user-id';
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
mockLogger = (0, ts_jest_mocker_1.mock)({ failIfMockNotProvided: false });
|
|
13
|
+
});
|
|
14
|
+
describe('with no hooks', () => {
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
hookRunner = new hook_runner_service_1.HookRunner([], mockLogger);
|
|
17
|
+
});
|
|
18
|
+
it('should return proceed: true for pre-getOrCreate', async () => {
|
|
19
|
+
const context = (0, factories_1.createTestContext)();
|
|
20
|
+
const result = await hookRunner.runPreGetOrCreate('test-id', testUserId, context);
|
|
21
|
+
expect(result.proceed).toBe(true);
|
|
22
|
+
expect(result.id).toBe('test-id');
|
|
23
|
+
expect(result.userId).toBe(testUserId);
|
|
24
|
+
expect(result.context).toEqual(context);
|
|
25
|
+
});
|
|
26
|
+
it('should complete post-getOrCreate without error', async () => {
|
|
27
|
+
const item = (0, factories_1.createTestItem)();
|
|
28
|
+
const context = (0, factories_1.createTestContext)();
|
|
29
|
+
await expect(hookRunner.runPostGetOrCreate('test-id', item, testUserId, context)).resolves.not.toThrow();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('with hooks', () => {
|
|
33
|
+
it('should execute hooks in priority order (low to high) for pre-hooks', async () => {
|
|
34
|
+
const executionOrder = [];
|
|
35
|
+
const hook1 = {
|
|
36
|
+
priority: 10,
|
|
37
|
+
onBeforeGetOrCreate: jest.fn(async () => {
|
|
38
|
+
executionOrder.push(10);
|
|
39
|
+
return { proceed: true };
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
const hook2 = {
|
|
43
|
+
priority: 5,
|
|
44
|
+
onBeforeGetOrCreate: jest.fn(async () => {
|
|
45
|
+
executionOrder.push(5);
|
|
46
|
+
return { proceed: true };
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
const hook3 = {
|
|
50
|
+
priority: 15,
|
|
51
|
+
onBeforeGetOrCreate: jest.fn(async () => {
|
|
52
|
+
executionOrder.push(15);
|
|
53
|
+
return { proceed: true };
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2, hook3], mockLogger);
|
|
57
|
+
await hookRunner.runPreGetOrCreate('test-id', testUserId, (0, factories_1.createTestContext)());
|
|
58
|
+
expect(executionOrder).toEqual([5, 10, 15]);
|
|
59
|
+
});
|
|
60
|
+
it('should execute hooks in reverse priority order for post-hooks', async () => {
|
|
61
|
+
const executionOrder = [];
|
|
62
|
+
const hook1 = {
|
|
63
|
+
priority: 10,
|
|
64
|
+
onAfterGetOrCreate: jest.fn(async () => {
|
|
65
|
+
executionOrder.push(10);
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
const hook2 = {
|
|
69
|
+
priority: 5,
|
|
70
|
+
onAfterGetOrCreate: jest.fn(async () => {
|
|
71
|
+
executionOrder.push(5);
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
const hook3 = {
|
|
75
|
+
priority: 15,
|
|
76
|
+
onAfterGetOrCreate: jest.fn(async () => {
|
|
77
|
+
executionOrder.push(15);
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2, hook3], mockLogger);
|
|
81
|
+
await hookRunner.runPostGetOrCreate('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)());
|
|
82
|
+
expect(executionOrder).toEqual([15, 10, 5]);
|
|
83
|
+
});
|
|
84
|
+
it('should block operation when pre-hook returns proceed: false', async () => {
|
|
85
|
+
const blockingHook = {
|
|
86
|
+
onBeforeGetOrCreate: jest.fn(async () => ({
|
|
87
|
+
proceed: false,
|
|
88
|
+
reason: 'Rate limit exceeded',
|
|
89
|
+
})),
|
|
90
|
+
};
|
|
91
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
92
|
+
const result = await hookRunner.runPreGetOrCreate('test-id', testUserId, (0, factories_1.createTestContext)());
|
|
93
|
+
expect(result.proceed).toBe(false);
|
|
94
|
+
expect(result.reason).toBe('Rate limit exceeded');
|
|
95
|
+
});
|
|
96
|
+
it('should apply mutations from pre-hooks', async () => {
|
|
97
|
+
const mutatingHook = {
|
|
98
|
+
onBeforeGetOrCreate: jest.fn(async () => ({
|
|
99
|
+
proceed: true,
|
|
100
|
+
mutations: {
|
|
101
|
+
id: 'mutated-id',
|
|
102
|
+
userId: 'mutated-user',
|
|
103
|
+
},
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
107
|
+
const result = await hookRunner.runPreGetOrCreate('original-id', testUserId, (0, factories_1.createTestContext)());
|
|
108
|
+
expect(result.id).toBe('mutated-id');
|
|
109
|
+
expect(result.userId).toBe('mutated-user');
|
|
110
|
+
});
|
|
111
|
+
it('should pass mutations through multiple hooks', async () => {
|
|
112
|
+
const hook1 = {
|
|
113
|
+
priority: 1,
|
|
114
|
+
onBeforeGetOrCreate: jest.fn(async (itemId) => ({
|
|
115
|
+
proceed: true,
|
|
116
|
+
mutations: { id: `${itemId}-hook1` },
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
const hook2 = {
|
|
120
|
+
priority: 2,
|
|
121
|
+
onBeforeGetOrCreate: jest.fn(async (itemId) => ({
|
|
122
|
+
proceed: true,
|
|
123
|
+
mutations: { id: `${itemId}-hook2` },
|
|
124
|
+
})),
|
|
125
|
+
};
|
|
126
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2], mockLogger);
|
|
127
|
+
const result = await hookRunner.runPreGetOrCreate('original', testUserId, (0, factories_1.createTestContext)());
|
|
128
|
+
expect(result.id).toBe('original-hook1-hook2');
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('error handling', () => {
|
|
132
|
+
it('should throw error from pre-hook', async () => {
|
|
133
|
+
const errorHook = {
|
|
134
|
+
onBeforeGetOrCreate: jest.fn(async () => {
|
|
135
|
+
throw new Error('Hook error');
|
|
136
|
+
}),
|
|
137
|
+
};
|
|
138
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
139
|
+
await expect(hookRunner.runPreGetOrCreate('test-id', testUserId, (0, factories_1.createTestContext)())).rejects.toThrow('Hook error');
|
|
140
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
141
|
+
});
|
|
142
|
+
it('should log but not throw errors from post-hooks', async () => {
|
|
143
|
+
const errorHook = {
|
|
144
|
+
onAfterGetOrCreate: jest.fn(async () => {
|
|
145
|
+
throw new Error('Post-hook error');
|
|
146
|
+
}),
|
|
147
|
+
};
|
|
148
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
149
|
+
await expect(hookRunner.runPostGetOrCreate('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
150
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('throwIfBlocked', () => {
|
|
154
|
+
it('should throw ForbiddenException when blocked', () => {
|
|
155
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
156
|
+
proceed: false,
|
|
157
|
+
id: 'test',
|
|
158
|
+
userId: testUserId,
|
|
159
|
+
context: (0, factories_1.createTestContext)(),
|
|
160
|
+
reason: 'Not allowed',
|
|
161
|
+
})).toThrow(common_1.ForbiddenException);
|
|
162
|
+
});
|
|
163
|
+
it('should not throw when not blocked', () => {
|
|
164
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
165
|
+
proceed: true,
|
|
166
|
+
id: 'test',
|
|
167
|
+
userId: testUserId,
|
|
168
|
+
context: (0, factories_1.createTestContext)(),
|
|
169
|
+
})).not.toThrow();
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('all hook methods', () => {
|
|
173
|
+
let allMethodsHook;
|
|
174
|
+
beforeEach(() => {
|
|
175
|
+
allMethodsHook = {
|
|
176
|
+
priority: 0,
|
|
177
|
+
onBeforeGetOrCreate: jest.fn().mockResolvedValue({ proceed: true }),
|
|
178
|
+
onAfterGetOrCreate: jest.fn(),
|
|
179
|
+
onBeforeCreate: jest.fn().mockResolvedValue({ proceed: true }),
|
|
180
|
+
onAfterCreate: jest.fn(),
|
|
181
|
+
onBeforeDismiss: jest.fn().mockResolvedValue({ proceed: true }),
|
|
182
|
+
onAfterDismiss: jest.fn(),
|
|
183
|
+
onBeforeRestore: jest.fn().mockResolvedValue({ proceed: true }),
|
|
184
|
+
onAfterRestore: jest.fn(),
|
|
185
|
+
};
|
|
186
|
+
hookRunner = new hook_runner_service_1.HookRunner([allMethodsHook], mockLogger);
|
|
187
|
+
});
|
|
188
|
+
it('should run pre and post create hooks', async () => {
|
|
189
|
+
const context = (0, factories_1.createTestContext)();
|
|
190
|
+
const item = (0, factories_1.createTestItem)();
|
|
191
|
+
await hookRunner.runPreCreate('test-id', testUserId, context);
|
|
192
|
+
await hookRunner.runPostCreate('test-id', item, testUserId, context);
|
|
193
|
+
expect(allMethodsHook.onBeforeCreate).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
194
|
+
expect(allMethodsHook.onAfterCreate).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
195
|
+
});
|
|
196
|
+
it('should run pre and post dismiss hooks', async () => {
|
|
197
|
+
const context = (0, factories_1.createTestContext)();
|
|
198
|
+
const item = (0, factories_1.createTestItem)();
|
|
199
|
+
await hookRunner.runPreDismiss('test-id', testUserId, context);
|
|
200
|
+
await hookRunner.runPostDismiss('test-id', item, testUserId, context);
|
|
201
|
+
expect(allMethodsHook.onBeforeDismiss).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
202
|
+
expect(allMethodsHook.onAfterDismiss).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
203
|
+
});
|
|
204
|
+
it('should run pre and post restore hooks', async () => {
|
|
205
|
+
const context = (0, factories_1.createTestContext)();
|
|
206
|
+
const item = (0, factories_1.createTestItem)();
|
|
207
|
+
await hookRunner.runPreRestore('test-id', testUserId, context);
|
|
208
|
+
await hookRunner.runPostRestore('test-id', item, testUserId, context);
|
|
209
|
+
expect(allMethodsHook.onBeforeRestore).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
210
|
+
expect(allMethodsHook.onAfterRestore).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
//# sourceMappingURL=hook-runner.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-runner.service.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/hook-runner.service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./lifecycle-hook.interface"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./service-responses.interface"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./dismissible-core.service"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./hook-runner.service"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./dismissible.service"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./create-options"), exports);
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,wEAA8C;AAC9C,qEAA2C;AAC3C,gEAAsC;AACtC,gEAAsC;AACtC,2DAAiC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { BaseMetadata, DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
|
|
2
|
+
import { IRequestContext } from '../request/request-context.interface';
|
|
3
|
+
/**
|
|
4
|
+
* Injection token for lifecycle hooks.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DISMISSIBLE_HOOKS: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Mutations that can be applied by pre-hooks.
|
|
9
|
+
*/
|
|
10
|
+
export interface IHookMutations {
|
|
11
|
+
/** Mutated item ID */
|
|
12
|
+
id?: string;
|
|
13
|
+
/** Mutated user ID */
|
|
14
|
+
userId?: string;
|
|
15
|
+
/** Mutated request context */
|
|
16
|
+
context?: Partial<IRequestContext>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Result returned by pre-hooks.
|
|
20
|
+
*/
|
|
21
|
+
export interface IHookResult {
|
|
22
|
+
/** Whether the operation should proceed */
|
|
23
|
+
proceed: boolean;
|
|
24
|
+
/** Optional reason if the operation is blocked */
|
|
25
|
+
reason?: string;
|
|
26
|
+
/** Optional mutations to apply */
|
|
27
|
+
mutations?: IHookMutations;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Interface for lifecycle hooks that can intercept dismissible operations.
|
|
31
|
+
*/
|
|
32
|
+
export interface IDismissibleLifecycleHook<TMetadata extends BaseMetadata = BaseMetadata> {
|
|
33
|
+
/**
|
|
34
|
+
* Priority for hook execution (lower numbers run first).
|
|
35
|
+
* Default is 0.
|
|
36
|
+
*/
|
|
37
|
+
readonly priority?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Called before getOrCreate operation.
|
|
40
|
+
*/
|
|
41
|
+
onBeforeGetOrCreate?(itemId: string, userId: string, context?: IRequestContext): Promise<IHookResult> | IHookResult;
|
|
42
|
+
/**
|
|
43
|
+
* Called after getOrCreate operation.
|
|
44
|
+
*/
|
|
45
|
+
onAfterGetOrCreate?(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void> | void;
|
|
46
|
+
/**
|
|
47
|
+
* Called before creating a new item.
|
|
48
|
+
*/
|
|
49
|
+
onBeforeCreate?(itemId: string, userId: string, context?: IRequestContext): Promise<IHookResult> | IHookResult;
|
|
50
|
+
/**
|
|
51
|
+
* Called after creating a new item.
|
|
52
|
+
*/
|
|
53
|
+
onAfterCreate?(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void> | void;
|
|
54
|
+
/**
|
|
55
|
+
* Called before dismissing an item.
|
|
56
|
+
*/
|
|
57
|
+
onBeforeDismiss?(itemId: string, userId: string, context?: IRequestContext): Promise<IHookResult> | IHookResult;
|
|
58
|
+
/**
|
|
59
|
+
* Called after dismissing an item.
|
|
60
|
+
*/
|
|
61
|
+
onAfterDismiss?(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void> | void;
|
|
62
|
+
/**
|
|
63
|
+
* Called before restoring an item.
|
|
64
|
+
*/
|
|
65
|
+
onBeforeRestore?(itemId: string, userId: string, context?: IRequestContext): Promise<IHookResult> | IHookResult;
|
|
66
|
+
/**
|
|
67
|
+
* Called after restoring an item.
|
|
68
|
+
*/
|
|
69
|
+
onAfterRestore?(itemId: string, item: DismissibleItemDto<TMetadata>, userId: string, context?: IRequestContext): Promise<void> | void;
|
|
70
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DISMISSIBLE_HOOKS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Injection token for lifecycle hooks.
|
|
6
|
+
*/
|
|
7
|
+
exports.DISMISSIBLE_HOOKS = Symbol('DISMISSIBLE_HOOKS');
|
|
8
|
+
//# sourceMappingURL=lifecycle-hook.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-hook.interface.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/lifecycle-hook.interface.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACU,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseMetadata, DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
|
|
2
|
+
/**
|
|
3
|
+
* Response from getOrCreate operation.
|
|
4
|
+
*/
|
|
5
|
+
export interface IGetOrCreateServiceResponse<TMetadata extends BaseMetadata = BaseMetadata> {
|
|
6
|
+
/** The item (either retrieved or created) */
|
|
7
|
+
item: DismissibleItemDto<TMetadata>;
|
|
8
|
+
/** Whether the item was newly created */
|
|
9
|
+
created: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Response from dismiss operation.
|
|
13
|
+
*/
|
|
14
|
+
export interface IDismissServiceResponse<TMetadata extends BaseMetadata = BaseMetadata> {
|
|
15
|
+
/** The dismissed item */
|
|
16
|
+
item: DismissibleItemDto<TMetadata>;
|
|
17
|
+
/** The item state before dismissal */
|
|
18
|
+
previousItem: DismissibleItemDto<TMetadata>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Response from restore operation.
|
|
22
|
+
*/
|
|
23
|
+
export interface IRestoreServiceResponse<TMetadata extends BaseMetadata = BaseMetadata> {
|
|
24
|
+
/** The restored item */
|
|
25
|
+
item: DismissibleItemDto<TMetadata>;
|
|
26
|
+
/** The item state before restoration */
|
|
27
|
+
previousItem: DismissibleItemDto<TMetadata>;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-responses.interface.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/service-responses.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DynamicModule, Type } from '@nestjs/common';
|
|
2
|
+
import { IDismissibleLifecycleHook } from './core/lifecycle-hook.interface';
|
|
3
|
+
import { IDismissibleLoggerModuleOptions } from '@dismissible/nestjs-logger';
|
|
4
|
+
import { BaseMetadata } from '@dismissible/nestjs-dismissible-item';
|
|
5
|
+
import { IDismissibleStorageModuleOptions } from '@dismissible/nestjs-storage';
|
|
6
|
+
/**
|
|
7
|
+
* Module configuration options.
|
|
8
|
+
*/
|
|
9
|
+
export type IDismissibleModuleOptions<TMetadata extends BaseMetadata = BaseMetadata> = IDismissibleLoggerModuleOptions & IDismissibleStorageModuleOptions & {
|
|
10
|
+
hooks?: Type<IDismissibleLifecycleHook<TMetadata>>[];
|
|
11
|
+
};
|
|
12
|
+
export declare class DismissibleModule {
|
|
13
|
+
static forRoot<TMetadata extends BaseMetadata = BaseMetadata>(options: IDismissibleModuleOptions<TMetadata>): DynamicModule;
|
|
14
|
+
}
|