@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.
Files changed (146) hide show
  1. package/README.md +858 -0
  2. package/package.json +1 -1
  3. package/src/controllers/openapi.d.ts +67 -0
  4. package/src/controllers/openapi.d.ts.map +1 -0
  5. package/src/controllers/openapi.js +89 -0
  6. package/src/controllers/openapi.js.map +1 -0
  7. package/src/decorators/auth.d.ts +128 -0
  8. package/src/decorators/auth.d.ts.map +1 -0
  9. package/src/decorators/auth.js +230 -0
  10. package/src/decorators/auth.js.map +1 -0
  11. package/src/decorators/base-controller.d.ts +144 -6
  12. package/src/decorators/base-controller.d.ts.map +1 -1
  13. package/src/decorators/base-controller.js +487 -31
  14. package/src/decorators/base-controller.js.map +1 -1
  15. package/src/decorators/controller.d.ts +63 -7
  16. package/src/decorators/controller.d.ts.map +1 -1
  17. package/src/decorators/controller.js +70 -39
  18. package/src/decorators/controller.js.map +1 -1
  19. package/src/decorators/handler-args.d.ts +68 -0
  20. package/src/decorators/handler-args.d.ts.map +1 -0
  21. package/src/decorators/handler-args.js +83 -0
  22. package/src/decorators/handler-args.js.map +1 -0
  23. package/src/decorators/http-methods.d.ts +143 -0
  24. package/src/decorators/http-methods.d.ts.map +1 -0
  25. package/src/decorators/http-methods.js +265 -0
  26. package/src/decorators/http-methods.js.map +1 -0
  27. package/src/decorators/index.d.ts +22 -0
  28. package/src/decorators/index.d.ts.map +1 -1
  29. package/src/decorators/index.js +56 -0
  30. package/src/decorators/index.js.map +1 -1
  31. package/src/decorators/lifecycle.d.ts +248 -0
  32. package/src/decorators/lifecycle.d.ts.map +1 -0
  33. package/src/decorators/lifecycle.js +301 -0
  34. package/src/decorators/lifecycle.js.map +1 -0
  35. package/src/decorators/metadata-collector.d.ts +175 -0
  36. package/src/decorators/metadata-collector.d.ts.map +1 -0
  37. package/src/decorators/metadata-collector.js +272 -0
  38. package/src/decorators/metadata-collector.js.map +1 -0
  39. package/src/decorators/metadata-keys.d.ts +121 -0
  40. package/src/decorators/metadata-keys.d.ts.map +1 -0
  41. package/src/decorators/metadata-keys.js +116 -0
  42. package/src/decorators/metadata-keys.js.map +1 -0
  43. package/src/decorators/middleware.d.ts +181 -0
  44. package/src/decorators/middleware.d.ts.map +1 -0
  45. package/src/decorators/middleware.js +400 -0
  46. package/src/decorators/middleware.js.map +1 -0
  47. package/src/decorators/openapi-params.d.ts +192 -0
  48. package/src/decorators/openapi-params.d.ts.map +1 -0
  49. package/src/decorators/openapi-params.js +332 -0
  50. package/src/decorators/openapi-params.js.map +1 -0
  51. package/src/decorators/openapi.d.ts +201 -0
  52. package/src/decorators/openapi.d.ts.map +1 -0
  53. package/src/decorators/openapi.js +334 -0
  54. package/src/decorators/openapi.js.map +1 -0
  55. package/src/decorators/params.d.ts +217 -0
  56. package/src/decorators/params.d.ts.map +1 -0
  57. package/src/decorators/params.js +323 -0
  58. package/src/decorators/params.js.map +1 -0
  59. package/src/decorators/response.d.ts +200 -0
  60. package/src/decorators/response.d.ts.map +1 -0
  61. package/src/decorators/response.js +315 -0
  62. package/src/decorators/response.js.map +1 -0
  63. package/src/decorators/schema.d.ts +99 -0
  64. package/src/decorators/schema.d.ts.map +1 -0
  65. package/src/decorators/schema.js +329 -0
  66. package/src/decorators/schema.js.map +1 -0
  67. package/src/decorators/transaction.d.ts +69 -0
  68. package/src/decorators/transaction.d.ts.map +1 -0
  69. package/src/decorators/transaction.js +80 -0
  70. package/src/decorators/transaction.js.map +1 -0
  71. package/src/decorators/validation.d.ts +188 -0
  72. package/src/decorators/validation.d.ts.map +1 -0
  73. package/src/decorators/validation.js +269 -0
  74. package/src/decorators/validation.js.map +1 -0
  75. package/src/decorators/zod-validation.d.ts +164 -4
  76. package/src/decorators/zod-validation.d.ts.map +1 -1
  77. package/src/decorators/zod-validation.js +692 -13
  78. package/src/decorators/zod-validation.js.map +1 -1
  79. package/src/index.d.ts +1 -0
  80. package/src/index.d.ts.map +1 -1
  81. package/src/index.js +1 -0
  82. package/src/index.js.map +1 -1
  83. package/src/interfaces/openApi/decoratorOptions.d.ts +760 -0
  84. package/src/interfaces/openApi/decoratorOptions.d.ts.map +1 -0
  85. package/src/interfaces/openApi/decoratorOptions.js +734 -0
  86. package/src/interfaces/openApi/decoratorOptions.js.map +1 -0
  87. package/src/interfaces/openApi/index.d.ts +1 -0
  88. package/src/interfaces/openApi/index.d.ts.map +1 -1
  89. package/src/interfaces/openApi/index.js +23 -0
  90. package/src/interfaces/openApi/index.js.map +1 -1
  91. package/src/interfaces/openApi/parameter.d.ts +2 -0
  92. package/src/interfaces/openApi/parameter.d.ts.map +1 -1
  93. package/src/interfaces/openApi/parameter.js +3 -1
  94. package/src/interfaces/openApi/parameter.js.map +1 -1
  95. package/src/interfaces/openApi/parameterSchema.d.ts +2 -0
  96. package/src/interfaces/openApi/parameterSchema.d.ts.map +1 -1
  97. package/src/interfaces/openApi/parameterSchema.js +3 -0
  98. package/src/interfaces/openApi/parameterSchema.js.map +1 -1
  99. package/src/openapi/builder.d.ts +249 -0
  100. package/src/openapi/builder.d.ts.map +1 -0
  101. package/src/openapi/builder.js +352 -0
  102. package/src/openapi/builder.js.map +1 -0
  103. package/src/openapi/controller.d.ts +153 -0
  104. package/src/openapi/controller.d.ts.map +1 -0
  105. package/src/openapi/controller.js +331 -0
  106. package/src/openapi/controller.js.map +1 -0
  107. package/src/openapi/index.d.ts +12 -0
  108. package/src/openapi/index.d.ts.map +1 -0
  109. package/src/openapi/index.js +20 -0
  110. package/src/openapi/index.js.map +1 -0
  111. package/src/openapi/markdown-generator.d.ts +52 -0
  112. package/src/openapi/markdown-generator.d.ts.map +1 -0
  113. package/src/openapi/markdown-generator.js +569 -0
  114. package/src/openapi/markdown-generator.js.map +1 -0
  115. package/src/openapi/middleware/index.d.ts +9 -0
  116. package/src/openapi/middleware/index.d.ts.map +1 -0
  117. package/src/openapi/middleware/index.js +15 -0
  118. package/src/openapi/middleware/index.js.map +1 -0
  119. package/src/openapi/middleware/redoc.d.ts +314 -0
  120. package/src/openapi/middleware/redoc.d.ts.map +1 -0
  121. package/src/openapi/middleware/redoc.js +181 -0
  122. package/src/openapi/middleware/redoc.js.map +1 -0
  123. package/src/openapi/middleware/swagger-ui.d.ts +123 -0
  124. package/src/openapi/middleware/swagger-ui.d.ts.map +1 -0
  125. package/src/openapi/middleware/swagger-ui.js +227 -0
  126. package/src/openapi/middleware/swagger-ui.js.map +1 -0
  127. package/src/openapi/schemas.d.ts +170 -0
  128. package/src/openapi/schemas.d.ts.map +1 -0
  129. package/src/openapi/schemas.js +340 -0
  130. package/src/openapi/schemas.js.map +1 -0
  131. package/src/registry/controller-registry.d.ts +78 -0
  132. package/src/registry/controller-registry.d.ts.map +1 -0
  133. package/src/registry/controller-registry.js +86 -0
  134. package/src/registry/controller-registry.js.map +1 -0
  135. package/src/registry/index.d.ts +2 -0
  136. package/src/registry/index.d.ts.map +1 -1
  137. package/src/registry/index.js +3 -1
  138. package/src/registry/index.js.map +1 -1
  139. package/src/routers/api.d.ts +2 -1
  140. package/src/routers/api.d.ts.map +1 -1
  141. package/src/routers/api.js +7 -1
  142. package/src/routers/api.js.map +1 -1
  143. package/src/types.d.ts +1 -0
  144. package/src/types.d.ts.map +1 -1
  145. package/src/types.js +1 -0
  146. 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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"}