@digitaldefiance/node-express-suite 3.11.32 → 3.12.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/README.md +858 -0
- package/package.json +1 -1
- package/src/controllers/openapi.d.ts +67 -0
- package/src/controllers/openapi.d.ts.map +1 -0
- package/src/controllers/openapi.js +89 -0
- package/src/controllers/openapi.js.map +1 -0
- package/src/decorators/auth.d.ts +128 -0
- package/src/decorators/auth.d.ts.map +1 -0
- package/src/decorators/auth.js +230 -0
- package/src/decorators/auth.js.map +1 -0
- package/src/decorators/base-controller.d.ts +144 -6
- package/src/decorators/base-controller.d.ts.map +1 -1
- package/src/decorators/base-controller.js +487 -31
- package/src/decorators/base-controller.js.map +1 -1
- package/src/decorators/controller.d.ts +63 -7
- package/src/decorators/controller.d.ts.map +1 -1
- package/src/decorators/controller.js +70 -39
- package/src/decorators/controller.js.map +1 -1
- package/src/decorators/handler-args.d.ts +68 -0
- package/src/decorators/handler-args.d.ts.map +1 -0
- package/src/decorators/handler-args.js +83 -0
- package/src/decorators/handler-args.js.map +1 -0
- package/src/decorators/http-methods.d.ts +143 -0
- package/src/decorators/http-methods.d.ts.map +1 -0
- package/src/decorators/http-methods.js +265 -0
- package/src/decorators/http-methods.js.map +1 -0
- package/src/decorators/index.d.ts +22 -0
- package/src/decorators/index.d.ts.map +1 -1
- package/src/decorators/index.js +56 -0
- package/src/decorators/index.js.map +1 -1
- package/src/decorators/lifecycle.d.ts +248 -0
- package/src/decorators/lifecycle.d.ts.map +1 -0
- package/src/decorators/lifecycle.js +301 -0
- package/src/decorators/lifecycle.js.map +1 -0
- package/src/decorators/metadata-collector.d.ts +175 -0
- package/src/decorators/metadata-collector.d.ts.map +1 -0
- package/src/decorators/metadata-collector.js +272 -0
- package/src/decorators/metadata-collector.js.map +1 -0
- package/src/decorators/metadata-keys.d.ts +121 -0
- package/src/decorators/metadata-keys.d.ts.map +1 -0
- package/src/decorators/metadata-keys.js +116 -0
- package/src/decorators/metadata-keys.js.map +1 -0
- package/src/decorators/middleware.d.ts +181 -0
- package/src/decorators/middleware.d.ts.map +1 -0
- package/src/decorators/middleware.js +400 -0
- package/src/decorators/middleware.js.map +1 -0
- package/src/decorators/openapi-params.d.ts +192 -0
- package/src/decorators/openapi-params.d.ts.map +1 -0
- package/src/decorators/openapi-params.js +332 -0
- package/src/decorators/openapi-params.js.map +1 -0
- package/src/decorators/openapi.d.ts +201 -0
- package/src/decorators/openapi.d.ts.map +1 -0
- package/src/decorators/openapi.js +334 -0
- package/src/decorators/openapi.js.map +1 -0
- package/src/decorators/params.d.ts +217 -0
- package/src/decorators/params.d.ts.map +1 -0
- package/src/decorators/params.js +323 -0
- package/src/decorators/params.js.map +1 -0
- package/src/decorators/response.d.ts +200 -0
- package/src/decorators/response.d.ts.map +1 -0
- package/src/decorators/response.js +315 -0
- package/src/decorators/response.js.map +1 -0
- package/src/decorators/schema.d.ts +99 -0
- package/src/decorators/schema.d.ts.map +1 -0
- package/src/decorators/schema.js +329 -0
- package/src/decorators/schema.js.map +1 -0
- package/src/decorators/transaction.d.ts +69 -0
- package/src/decorators/transaction.d.ts.map +1 -0
- package/src/decorators/transaction.js +80 -0
- package/src/decorators/transaction.js.map +1 -0
- package/src/decorators/validation.d.ts +188 -0
- package/src/decorators/validation.d.ts.map +1 -0
- package/src/decorators/validation.js +269 -0
- package/src/decorators/validation.js.map +1 -0
- package/src/decorators/zod-validation.d.ts +164 -4
- package/src/decorators/zod-validation.d.ts.map +1 -1
- package/src/decorators/zod-validation.js +692 -13
- package/src/decorators/zod-validation.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/interfaces/openApi/decoratorOptions.d.ts +760 -0
- package/src/interfaces/openApi/decoratorOptions.d.ts.map +1 -0
- package/src/interfaces/openApi/decoratorOptions.js +734 -0
- package/src/interfaces/openApi/decoratorOptions.js.map +1 -0
- package/src/interfaces/openApi/index.d.ts +1 -0
- package/src/interfaces/openApi/index.d.ts.map +1 -1
- package/src/interfaces/openApi/index.js +23 -0
- package/src/interfaces/openApi/index.js.map +1 -1
- package/src/interfaces/openApi/parameter.d.ts +2 -0
- package/src/interfaces/openApi/parameter.d.ts.map +1 -1
- package/src/interfaces/openApi/parameter.js +3 -1
- package/src/interfaces/openApi/parameter.js.map +1 -1
- package/src/interfaces/openApi/parameterSchema.d.ts +2 -0
- package/src/interfaces/openApi/parameterSchema.d.ts.map +1 -1
- package/src/interfaces/openApi/parameterSchema.js +3 -0
- package/src/interfaces/openApi/parameterSchema.js.map +1 -1
- package/src/openapi/builder.d.ts +249 -0
- package/src/openapi/builder.d.ts.map +1 -0
- package/src/openapi/builder.js +352 -0
- package/src/openapi/builder.js.map +1 -0
- package/src/openapi/controller.d.ts +153 -0
- package/src/openapi/controller.d.ts.map +1 -0
- package/src/openapi/controller.js +331 -0
- package/src/openapi/controller.js.map +1 -0
- package/src/openapi/index.d.ts +12 -0
- package/src/openapi/index.d.ts.map +1 -0
- package/src/openapi/index.js +20 -0
- package/src/openapi/index.js.map +1 -0
- package/src/openapi/markdown-generator.d.ts +52 -0
- package/src/openapi/markdown-generator.d.ts.map +1 -0
- package/src/openapi/markdown-generator.js +569 -0
- package/src/openapi/markdown-generator.js.map +1 -0
- package/src/openapi/middleware/index.d.ts +9 -0
- package/src/openapi/middleware/index.d.ts.map +1 -0
- package/src/openapi/middleware/index.js +15 -0
- package/src/openapi/middleware/index.js.map +1 -0
- package/src/openapi/middleware/redoc.d.ts +314 -0
- package/src/openapi/middleware/redoc.d.ts.map +1 -0
- package/src/openapi/middleware/redoc.js +181 -0
- package/src/openapi/middleware/redoc.js.map +1 -0
- package/src/openapi/middleware/swagger-ui.d.ts +123 -0
- package/src/openapi/middleware/swagger-ui.d.ts.map +1 -0
- package/src/openapi/middleware/swagger-ui.js +227 -0
- package/src/openapi/middleware/swagger-ui.js.map +1 -0
- package/src/openapi/schemas.d.ts +170 -0
- package/src/openapi/schemas.d.ts.map +1 -0
- package/src/openapi/schemas.js +340 -0
- package/src/openapi/schemas.js.map +1 -0
- package/src/registry/controller-registry.d.ts +78 -0
- package/src/registry/controller-registry.d.ts.map +1 -0
- package/src/registry/controller-registry.js +86 -0
- package/src/registry/controller-registry.js.map +1 -0
- package/src/registry/index.d.ts +2 -0
- package/src/registry/index.d.ts.map +1 -1
- package/src/registry/index.js +3 -1
- package/src/registry/index.js.map +1 -1
- package/src/routers/api.d.ts +2 -1
- package/src/routers/api.d.ts.map +1 -1
- package/src/routers/api.js +7 -1
- package/src/routers/api.js.map +1 -1
- package/src/types.d.ts +1 -0
- package/src/types.d.ts.map +1 -1
- package/src/types.js +1 -0
- package/src/types.js.map +1 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Lifecycle decorators for Express Suite.
|
|
4
|
+
* Provides @OnSuccess, @OnError, @Before, and @After decorators
|
|
5
|
+
* for hooking into request lifecycle events.
|
|
6
|
+
* Supports both class-level and method-level application.
|
|
7
|
+
* @module decorators/lifecycle
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.OnSuccess = OnSuccess;
|
|
11
|
+
exports.OnError = OnError;
|
|
12
|
+
exports.Before = Before;
|
|
13
|
+
exports.After = After;
|
|
14
|
+
exports.getLifecycleMetadata = getLifecycleMetadata;
|
|
15
|
+
exports.getClassLifecycleMetadata = getClassLifecycleMetadata;
|
|
16
|
+
exports.getEffectiveLifecycleMetadata = getEffectiveLifecycleMetadata;
|
|
17
|
+
exports.hasLifecycleHooks = hasLifecycleHooks;
|
|
18
|
+
exports.executeBeforeHooks = executeBeforeHooks;
|
|
19
|
+
exports.executeAfterHooks = executeAfterHooks;
|
|
20
|
+
exports.executeOnSuccessHooks = executeOnSuccessHooks;
|
|
21
|
+
exports.executeOnErrorHooks = executeOnErrorHooks;
|
|
22
|
+
require("reflect-metadata");
|
|
23
|
+
const metadata_keys_1 = require("./metadata-keys");
|
|
24
|
+
const metadata_collector_1 = require("./metadata-collector");
|
|
25
|
+
/**
|
|
26
|
+
* Creates an empty lifecycle metadata object.
|
|
27
|
+
*/
|
|
28
|
+
function createEmptyLifecycleMetadata() {
|
|
29
|
+
return {
|
|
30
|
+
onSuccess: [],
|
|
31
|
+
onError: [],
|
|
32
|
+
before: [],
|
|
33
|
+
after: [],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates a lifecycle decorator that can be applied to both classes and methods.
|
|
38
|
+
* @param hookType - The type of lifecycle hook
|
|
39
|
+
* @param callback - The callback function to execute
|
|
40
|
+
* @returns A decorator function
|
|
41
|
+
*/
|
|
42
|
+
function createLifecycleDecorator(hookType, callback) {
|
|
43
|
+
function decorator(target, propertyKey, descriptor) {
|
|
44
|
+
if (propertyKey !== undefined && descriptor !== undefined) {
|
|
45
|
+
// Method decorator
|
|
46
|
+
const existing = (0, metadata_collector_1.getMetadataOrDefault)(metadata_keys_1.LIFECYCLE_METADATA, target.constructor, propertyKey, createEmptyLifecycleMetadata());
|
|
47
|
+
existing[hookType].push(callback);
|
|
48
|
+
(0, metadata_collector_1.setMetadata)(metadata_keys_1.LIFECYCLE_METADATA, existing, target.constructor, propertyKey);
|
|
49
|
+
return descriptor;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Class decorator
|
|
53
|
+
const existing = (0, metadata_collector_1.getMetadataOrDefault)(metadata_keys_1.LIFECYCLE_METADATA, target, undefined, createEmptyLifecycleMetadata());
|
|
54
|
+
existing[hookType].push(callback);
|
|
55
|
+
(0, metadata_collector_1.setMetadata)(metadata_keys_1.LIFECYCLE_METADATA, existing, target);
|
|
56
|
+
return target;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return decorator;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Decorator that registers a callback to execute after a successful response.
|
|
63
|
+
* Can be applied at class level (affects all methods) or method level.
|
|
64
|
+
*
|
|
65
|
+
* @param callback - Function to execute on success, receives context with req, res, and result
|
|
66
|
+
* @returns Class or method decorator
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* // Method-level usage
|
|
71
|
+
* @ApiController('/api/users')
|
|
72
|
+
* class UserController {
|
|
73
|
+
* @OnSuccess(({ req, result }) => {
|
|
74
|
+
* console.log(`User ${req.params.id} fetched successfully:`, result);
|
|
75
|
+
* })
|
|
76
|
+
* @Get('/:id')
|
|
77
|
+
* getUser() {}
|
|
78
|
+
* }
|
|
79
|
+
*
|
|
80
|
+
* // Class-level usage (applies to all methods)
|
|
81
|
+
* @OnSuccess(({ req }) => {
|
|
82
|
+
* console.log(`Request to ${req.path} completed successfully`);
|
|
83
|
+
* })
|
|
84
|
+
* @ApiController('/api/items')
|
|
85
|
+
* class ItemController {
|
|
86
|
+
* @Get('/')
|
|
87
|
+
* listItems() {}
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
function OnSuccess(callback) {
|
|
92
|
+
return createLifecycleDecorator('onSuccess', callback);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Decorator that registers a callback to execute when an error occurs.
|
|
96
|
+
* Can be applied at class level (affects all methods) or method level.
|
|
97
|
+
*
|
|
98
|
+
* @param callback - Function to execute on error, receives context with req, res, and error
|
|
99
|
+
* @returns Class or method decorator
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* // Method-level usage
|
|
104
|
+
* @ApiController('/api/users')
|
|
105
|
+
* class UserController {
|
|
106
|
+
* @OnError(({ req, error }) => {
|
|
107
|
+
* console.error(`Error fetching user ${req.params.id}:`, error);
|
|
108
|
+
* })
|
|
109
|
+
* @Get('/:id')
|
|
110
|
+
* getUser() {}
|
|
111
|
+
* }
|
|
112
|
+
*
|
|
113
|
+
* // Class-level usage for logging all errors
|
|
114
|
+
* @OnError(({ req, error }) => {
|
|
115
|
+
* logger.error(`Request to ${req.path} failed:`, error);
|
|
116
|
+
* })
|
|
117
|
+
* @ApiController('/api/items')
|
|
118
|
+
* class ItemController {
|
|
119
|
+
* @Get('/')
|
|
120
|
+
* listItems() {}
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
function OnError(callback) {
|
|
125
|
+
return createLifecycleDecorator('onError', callback);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Decorator that registers a callback to execute before the handler.
|
|
129
|
+
* Can be applied at class level (affects all methods) or method level.
|
|
130
|
+
* Useful for logging, auditing, or pre-processing.
|
|
131
|
+
*
|
|
132
|
+
* @param callback - Function to execute before handler, receives context with req and res
|
|
133
|
+
* @returns Class or method decorator
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* // Method-level usage
|
|
138
|
+
* @ApiController('/api/users')
|
|
139
|
+
* class UserController {
|
|
140
|
+
* @Before(({ req }) => {
|
|
141
|
+
* console.log(`Fetching user ${req.params.id}`);
|
|
142
|
+
* })
|
|
143
|
+
* @Get('/:id')
|
|
144
|
+
* getUser() {}
|
|
145
|
+
* }
|
|
146
|
+
*
|
|
147
|
+
* // Class-level usage for request logging
|
|
148
|
+
* @Before(({ req }) => {
|
|
149
|
+
* console.log(`Incoming ${req.method} request to ${req.path}`);
|
|
150
|
+
* })
|
|
151
|
+
* @ApiController('/api/items')
|
|
152
|
+
* class ItemController {
|
|
153
|
+
* @Get('/')
|
|
154
|
+
* listItems() {}
|
|
155
|
+
* }
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
function Before(callback) {
|
|
159
|
+
return createLifecycleDecorator('before', callback);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Decorator that registers a callback to execute after the handler completes.
|
|
163
|
+
* Executes regardless of success or error.
|
|
164
|
+
* Can be applied at class level (affects all methods) or method level.
|
|
165
|
+
* Useful for cleanup, metrics, or finalization.
|
|
166
|
+
*
|
|
167
|
+
* @param callback - Function to execute after handler, receives context with req, res, result, and error
|
|
168
|
+
* @returns Class or method decorator
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* // Method-level usage
|
|
173
|
+
* @ApiController('/api/users')
|
|
174
|
+
* class UserController {
|
|
175
|
+
* @After(({ req, result, error }) => {
|
|
176
|
+
* const status = error ? 'failed' : 'succeeded';
|
|
177
|
+
* console.log(`Request to ${req.path} ${status}`);
|
|
178
|
+
* })
|
|
179
|
+
* @Get('/:id')
|
|
180
|
+
* getUser() {}
|
|
181
|
+
* }
|
|
182
|
+
*
|
|
183
|
+
* // Class-level usage for metrics
|
|
184
|
+
* @After(({ req }) => {
|
|
185
|
+
* metrics.recordRequest(req.path);
|
|
186
|
+
* })
|
|
187
|
+
* @ApiController('/api/items')
|
|
188
|
+
* class ItemController {
|
|
189
|
+
* @Get('/')
|
|
190
|
+
* listItems() {}
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
function After(callback) {
|
|
195
|
+
return createLifecycleDecorator('after', callback);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Gets lifecycle metadata for a specific method.
|
|
199
|
+
*
|
|
200
|
+
* @param target - The class constructor
|
|
201
|
+
* @param propertyKey - The method name
|
|
202
|
+
* @returns Lifecycle metadata or undefined if not set
|
|
203
|
+
*/
|
|
204
|
+
function getLifecycleMetadata(target, propertyKey) {
|
|
205
|
+
return (0, metadata_collector_1.getMetadata)(metadata_keys_1.LIFECYCLE_METADATA, target, propertyKey);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Gets class-level lifecycle metadata.
|
|
209
|
+
*
|
|
210
|
+
* @param target - The class constructor
|
|
211
|
+
* @returns Lifecycle metadata or undefined if not set
|
|
212
|
+
*/
|
|
213
|
+
function getClassLifecycleMetadata(target) {
|
|
214
|
+
return (0, metadata_collector_1.getMetadata)(metadata_keys_1.LIFECYCLE_METADATA, target);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Gets the effective lifecycle metadata for a method, merging class-level and method-level hooks.
|
|
218
|
+
* Class-level hooks run first, then method-level hooks.
|
|
219
|
+
*
|
|
220
|
+
* @param target - The class constructor
|
|
221
|
+
* @param propertyKey - The method name
|
|
222
|
+
* @returns Merged lifecycle metadata
|
|
223
|
+
*/
|
|
224
|
+
function getEffectiveLifecycleMetadata(target, propertyKey) {
|
|
225
|
+
const classMetadata = (0, metadata_collector_1.getMetadataOrDefault)(metadata_keys_1.LIFECYCLE_METADATA, target, undefined, createEmptyLifecycleMetadata());
|
|
226
|
+
const methodMetadata = (0, metadata_collector_1.getMetadataOrDefault)(metadata_keys_1.LIFECYCLE_METADATA, target, propertyKey, createEmptyLifecycleMetadata());
|
|
227
|
+
// Merge: class-level hooks run first, then method-level
|
|
228
|
+
return {
|
|
229
|
+
onSuccess: [...classMetadata.onSuccess, ...methodMetadata.onSuccess],
|
|
230
|
+
onError: [...classMetadata.onError, ...methodMetadata.onError],
|
|
231
|
+
before: [...classMetadata.before, ...methodMetadata.before],
|
|
232
|
+
after: [...classMetadata.after, ...methodMetadata.after],
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Checks if a method has any lifecycle hooks defined.
|
|
237
|
+
*
|
|
238
|
+
* @param target - The class constructor
|
|
239
|
+
* @param propertyKey - The method name
|
|
240
|
+
* @returns True if any lifecycle hooks are defined
|
|
241
|
+
*/
|
|
242
|
+
function hasLifecycleHooks(target, propertyKey) {
|
|
243
|
+
const metadata = getEffectiveLifecycleMetadata(target, propertyKey);
|
|
244
|
+
return (metadata.onSuccess.length > 0 ||
|
|
245
|
+
metadata.onError.length > 0 ||
|
|
246
|
+
metadata.before.length > 0 ||
|
|
247
|
+
metadata.after.length > 0);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Executes all before hooks for a method.
|
|
251
|
+
*
|
|
252
|
+
* @param target - The class constructor
|
|
253
|
+
* @param propertyKey - The method name
|
|
254
|
+
* @param context - The lifecycle context
|
|
255
|
+
*/
|
|
256
|
+
async function executeBeforeHooks(target, propertyKey, context) {
|
|
257
|
+
const metadata = getEffectiveLifecycleMetadata(target, propertyKey);
|
|
258
|
+
for (const callback of metadata.before) {
|
|
259
|
+
await callback(context);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Executes all after hooks for a method.
|
|
264
|
+
*
|
|
265
|
+
* @param target - The class constructor
|
|
266
|
+
* @param propertyKey - The method name
|
|
267
|
+
* @param context - The lifecycle context
|
|
268
|
+
*/
|
|
269
|
+
async function executeAfterHooks(target, propertyKey, context) {
|
|
270
|
+
const metadata = getEffectiveLifecycleMetadata(target, propertyKey);
|
|
271
|
+
for (const callback of metadata.after) {
|
|
272
|
+
await callback(context);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Executes all onSuccess hooks for a method.
|
|
277
|
+
*
|
|
278
|
+
* @param target - The class constructor
|
|
279
|
+
* @param propertyKey - The method name
|
|
280
|
+
* @param context - The lifecycle context with result
|
|
281
|
+
*/
|
|
282
|
+
async function executeOnSuccessHooks(target, propertyKey, context) {
|
|
283
|
+
const metadata = getEffectiveLifecycleMetadata(target, propertyKey);
|
|
284
|
+
for (const callback of metadata.onSuccess) {
|
|
285
|
+
await callback(context);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Executes all onError hooks for a method.
|
|
290
|
+
*
|
|
291
|
+
* @param target - The class constructor
|
|
292
|
+
* @param propertyKey - The method name
|
|
293
|
+
* @param context - The lifecycle context with error
|
|
294
|
+
*/
|
|
295
|
+
async function executeOnErrorHooks(target, propertyKey, context) {
|
|
296
|
+
const metadata = getEffectiveLifecycleMetadata(target, propertyKey);
|
|
297
|
+
for (const callback of metadata.onError) {
|
|
298
|
+
await callback(context);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/decorators/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Metadata collector utilities for decorator system.
|
|
3
|
+
* Provides helper functions for getting, setting, and merging decorator metadata.
|
|
4
|
+
* @module decorators/metadata-collector
|
|
5
|
+
*/
|
|
6
|
+
import 'reflect-metadata';
|
|
7
|
+
import { MetadataKey, SCHEMA_METADATA } from './metadata-keys';
|
|
8
|
+
export { SCHEMA_METADATA };
|
|
9
|
+
/**
|
|
10
|
+
* Gets metadata from a target (class or method).
|
|
11
|
+
* @param key - The metadata key symbol
|
|
12
|
+
* @param target - The target object (class constructor or prototype)
|
|
13
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
14
|
+
* @returns The metadata value or undefined
|
|
15
|
+
*/
|
|
16
|
+
export declare function getMetadata<T>(key: MetadataKey, target: object, propertyKey?: string | symbol): T | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Sets metadata on a target (class or method).
|
|
19
|
+
* @param key - The metadata key symbol
|
|
20
|
+
* @param value - The metadata value to set
|
|
21
|
+
* @param target - The target object (class constructor or prototype)
|
|
22
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
23
|
+
*/
|
|
24
|
+
export declare function setMetadata<T>(key: MetadataKey, value: T, target: object, propertyKey?: string | symbol): void;
|
|
25
|
+
/**
|
|
26
|
+
* Gets metadata or returns a default value if not found.
|
|
27
|
+
* @param key - The metadata key symbol
|
|
28
|
+
* @param target - The target object
|
|
29
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
30
|
+
* @param defaultValue - Default value to return if metadata not found
|
|
31
|
+
* @returns The metadata value or the default value
|
|
32
|
+
*/
|
|
33
|
+
export declare function getMetadataOrDefault<T>(key: MetadataKey, target: object, propertyKey: string | symbol | undefined, defaultValue: T): T;
|
|
34
|
+
/**
|
|
35
|
+
* Appends a value to an array stored in metadata.
|
|
36
|
+
* Creates the array if it doesn't exist.
|
|
37
|
+
* @param key - The metadata key symbol
|
|
38
|
+
* @param value - The value to append
|
|
39
|
+
* @param target - The target object
|
|
40
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
41
|
+
*/
|
|
42
|
+
export declare function appendToMetadataArray<T>(key: MetadataKey, value: T, target: object, propertyKey?: string | symbol): void;
|
|
43
|
+
/**
|
|
44
|
+
* Merges an object into existing metadata.
|
|
45
|
+
* Creates the object if it doesn't exist.
|
|
46
|
+
* @param key - The metadata key symbol
|
|
47
|
+
* @param value - The object to merge
|
|
48
|
+
* @param target - The target object
|
|
49
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
50
|
+
*/
|
|
51
|
+
export declare function mergeMetadata<T extends object>(key: MetadataKey, value: Partial<T>, target: object, propertyKey?: string | symbol): void;
|
|
52
|
+
/**
|
|
53
|
+
* Deep merges an object into existing metadata.
|
|
54
|
+
* Handles nested objects and arrays.
|
|
55
|
+
* @param key - The metadata key symbol
|
|
56
|
+
* @param value - The object to deep merge
|
|
57
|
+
* @param target - The target object
|
|
58
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
59
|
+
*/
|
|
60
|
+
export declare function deepMergeMetadata<T extends object>(key: MetadataKey, value: Partial<T>, target: object, propertyKey?: string | symbol): void;
|
|
61
|
+
/**
|
|
62
|
+
* Checks if metadata exists on a target.
|
|
63
|
+
* @param key - The metadata key symbol
|
|
64
|
+
* @param target - The target object
|
|
65
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
66
|
+
* @returns True if metadata exists
|
|
67
|
+
*/
|
|
68
|
+
export declare function hasMetadata(key: MetadataKey, target: object, propertyKey?: string | symbol): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Deletes metadata from a target.
|
|
71
|
+
* @param key - The metadata key symbol
|
|
72
|
+
* @param target - The target object
|
|
73
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
74
|
+
* @returns True if metadata was deleted
|
|
75
|
+
*/
|
|
76
|
+
export declare function deleteMetadata(key: MetadataKey, target: object, propertyKey?: string | symbol): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Gets all metadata keys defined on a target.
|
|
79
|
+
* @param target - The target object
|
|
80
|
+
* @param propertyKey - Optional property key for method-level metadata
|
|
81
|
+
* @returns Array of metadata keys
|
|
82
|
+
*/
|
|
83
|
+
export declare function getMetadataKeys(target: object, propertyKey?: string | symbol): MetadataKey[];
|
|
84
|
+
/**
|
|
85
|
+
* Collects all decorator metadata from a class and its methods.
|
|
86
|
+
* @param target - The class constructor
|
|
87
|
+
* @returns Object containing all collected metadata
|
|
88
|
+
*/
|
|
89
|
+
export declare function collectAllMetadata(target: new (...args: unknown[]) => unknown): CollectedMetadata;
|
|
90
|
+
/**
|
|
91
|
+
* Collects method-level metadata for a specific method.
|
|
92
|
+
* @param target - The class prototype
|
|
93
|
+
* @param propertyKey - The method name
|
|
94
|
+
* @returns Object containing all method metadata
|
|
95
|
+
*/
|
|
96
|
+
export declare function collectMethodMetadata(target: object, propertyKey: string | symbol): MethodMetadata;
|
|
97
|
+
/**
|
|
98
|
+
* Controller metadata value type.
|
|
99
|
+
*/
|
|
100
|
+
export interface ControllerMetadataValue {
|
|
101
|
+
basePath: string;
|
|
102
|
+
name?: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Route metadata value type.
|
|
106
|
+
*/
|
|
107
|
+
export interface RouteMetadataValue {
|
|
108
|
+
method: 'get' | 'post' | 'put' | 'delete' | 'patch';
|
|
109
|
+
path: string;
|
|
110
|
+
handlerName: string;
|
|
111
|
+
options: Record<string, unknown>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* OpenAPI controller metadata value type.
|
|
115
|
+
*/
|
|
116
|
+
export interface OpenApiControllerMetadataValue {
|
|
117
|
+
tags?: string[];
|
|
118
|
+
description?: string;
|
|
119
|
+
deprecated?: boolean;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Collected metadata from a class.
|
|
123
|
+
*/
|
|
124
|
+
export interface CollectedMetadata {
|
|
125
|
+
controller?: ControllerMetadataValue;
|
|
126
|
+
routes: RouteMetadataValue[];
|
|
127
|
+
openApiController?: OpenApiControllerMetadataValue;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Method-level metadata collection.
|
|
131
|
+
*/
|
|
132
|
+
export interface MethodMetadata {
|
|
133
|
+
openApi?: unknown;
|
|
134
|
+
auth?: unknown;
|
|
135
|
+
validation?: unknown;
|
|
136
|
+
middleware?: unknown;
|
|
137
|
+
params?: unknown;
|
|
138
|
+
lifecycle?: unknown;
|
|
139
|
+
response?: unknown;
|
|
140
|
+
handlerArgs?: unknown;
|
|
141
|
+
transaction?: unknown;
|
|
142
|
+
rateLimit?: unknown;
|
|
143
|
+
cache?: unknown;
|
|
144
|
+
openApiParams?: unknown;
|
|
145
|
+
openApiRequestBody?: unknown;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Creates a class decorator that sets metadata.
|
|
149
|
+
* @param key - The metadata key symbol
|
|
150
|
+
* @param value - The metadata value
|
|
151
|
+
* @returns A class decorator function
|
|
152
|
+
*/
|
|
153
|
+
export declare function createClassDecorator<T>(key: MetadataKey, value: T): ClassDecorator;
|
|
154
|
+
/**
|
|
155
|
+
* Creates a method decorator that sets metadata.
|
|
156
|
+
* @param key - The metadata key symbol
|
|
157
|
+
* @param value - The metadata value
|
|
158
|
+
* @returns A method decorator function
|
|
159
|
+
*/
|
|
160
|
+
export declare function createMethodDecorator<T>(key: MetadataKey, value: T): MethodDecorator;
|
|
161
|
+
/**
|
|
162
|
+
* Creates a method decorator that appends to an array in metadata.
|
|
163
|
+
* @param key - The metadata key symbol
|
|
164
|
+
* @param value - The value to append
|
|
165
|
+
* @returns A method decorator function
|
|
166
|
+
*/
|
|
167
|
+
export declare function createAppendingMethodDecorator<T>(key: MetadataKey, value: T): MethodDecorator;
|
|
168
|
+
/**
|
|
169
|
+
* Creates a method decorator that merges into metadata.
|
|
170
|
+
* @param key - The metadata key symbol
|
|
171
|
+
* @param value - The value to merge
|
|
172
|
+
* @returns A method decorator function
|
|
173
|
+
*/
|
|
174
|
+
export declare function createMergingMethodDecorator<T extends object>(key: MetadataKey, value: Partial<T>): MethodDecorator;
|
|
175
|
+
//# sourceMappingURL=metadata-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-collector.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/decorators/metadata-collector.ts"],"names":[],"mappings":"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"}
|