@e22m4u/ts-rest-router 0.0.7 → 0.1.1

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 (62) hide show
  1. package/README-ru.md +114 -91
  2. package/README.md +106 -85
  3. package/dist/cjs/index.cjs +427 -123
  4. package/dist/esm/controller-registry.d.ts +53 -11
  5. package/dist/esm/controller-registry.js +242 -104
  6. package/dist/esm/debuggable-service.js +1 -1
  7. package/dist/esm/decorators/after/after-decorator.d.ts +9 -0
  8. package/dist/esm/decorators/after/after-decorator.js +22 -0
  9. package/dist/esm/decorators/after/after-decorator.spec.d.ts +1 -0
  10. package/dist/esm/decorators/after/after-decorator.spec.js +115 -0
  11. package/dist/esm/decorators/after/after-metadata.d.ts +13 -0
  12. package/dist/esm/decorators/after/after-metadata.js +5 -0
  13. package/dist/esm/decorators/after/after-reflector.d.ts +22 -0
  14. package/dist/esm/decorators/after/after-reflector.js +29 -0
  15. package/dist/esm/decorators/after/after-reflector.spec.d.ts +1 -0
  16. package/dist/esm/decorators/after/after-reflector.spec.js +102 -0
  17. package/dist/esm/decorators/after/index.d.ts +3 -0
  18. package/dist/esm/decorators/after/index.js +3 -0
  19. package/dist/esm/decorators/before/before-decorator.d.ts +9 -0
  20. package/dist/esm/decorators/before/before-decorator.js +22 -0
  21. package/dist/esm/decorators/before/before-decorator.spec.d.ts +1 -0
  22. package/dist/esm/decorators/before/before-decorator.spec.js +115 -0
  23. package/dist/esm/decorators/before/before-metadata.d.ts +13 -0
  24. package/dist/esm/decorators/before/before-metadata.js +5 -0
  25. package/dist/esm/decorators/before/before-reflector.d.ts +22 -0
  26. package/dist/esm/decorators/before/before-reflector.js +29 -0
  27. package/dist/esm/decorators/before/before-reflector.spec.d.ts +1 -0
  28. package/dist/esm/decorators/before/before-reflector.spec.js +102 -0
  29. package/dist/esm/decorators/before/index.d.ts +3 -0
  30. package/dist/esm/decorators/before/index.js +3 -0
  31. package/dist/esm/decorators/controller/controller-decorator.d.ts +2 -1
  32. package/dist/esm/decorators/controller/controller-decorator.js +26 -1
  33. package/dist/esm/decorators/controller/controller-decorator.spec.js +28 -0
  34. package/dist/esm/decorators/index.d.ts +2 -0
  35. package/dist/esm/decorators/index.js +2 -0
  36. package/dist/esm/decorators/request-data/request-data-decorator.d.ts +1 -1
  37. package/dist/esm/decorators/request-data/request-data-decorator.js +1 -1
  38. package/dist/esm/decorators/request-data/request-data-decorator.spec.js +5 -5
  39. package/dist/esm/utils/create-debugger.d.ts +35 -2
  40. package/dist/esm/utils/create-debugger.js +71 -5
  41. package/package.json +1 -1
  42. package/src/controller-registry.spec.ts +597 -275
  43. package/src/controller-registry.ts +263 -128
  44. package/src/debuggable-service.ts +1 -1
  45. package/src/decorators/after/after-decorator.spec.ts +92 -0
  46. package/src/decorators/after/after-decorator.ts +40 -0
  47. package/src/decorators/after/after-metadata.ts +17 -0
  48. package/src/decorators/after/after-reflector.spec.ts +107 -0
  49. package/src/decorators/after/after-reflector.ts +45 -0
  50. package/src/decorators/after/index.ts +3 -0
  51. package/src/decorators/before/before-decorator.spec.ts +92 -0
  52. package/src/decorators/before/before-decorator.ts +40 -0
  53. package/src/decorators/before/before-metadata.ts +17 -0
  54. package/src/decorators/before/before-reflector.spec.ts +111 -0
  55. package/src/decorators/before/before-reflector.ts +50 -0
  56. package/src/decorators/before/index.ts +3 -0
  57. package/src/decorators/controller/controller-decorator.spec.ts +22 -0
  58. package/src/decorators/controller/controller-decorator.ts +29 -1
  59. package/src/decorators/index.ts +2 -0
  60. package/src/decorators/request-data/request-data-decorator.spec.ts +5 -5
  61. package/src/decorators/request-data/request-data-decorator.ts +1 -1
  62. package/src/utils/create-debugger.ts +84 -7
@@ -32,7 +32,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
32
32
  var index_exports = {};
33
33
  __export(index_exports, {
34
34
  ACTIONS_METADATA_KEY: () => ACTIONS_METADATA_KEY,
35
+ AFTER_METADATA_KEY: () => AFTER_METADATA_KEY,
35
36
  ActionReflector: () => ActionReflector,
37
+ AfterReflector: () => AfterReflector,
38
+ BEFORE_METADATA_KEY: () => BEFORE_METADATA_KEY,
39
+ BeforeReflector: () => BeforeReflector,
36
40
  CONTROLLER_METADATA_KEY: () => CONTROLLER_METADATA_KEY,
37
41
  ControllerReflector: () => ControllerReflector,
38
42
  ControllerRegistry: () => ControllerRegistry,
@@ -44,8 +48,9 @@ __export(index_exports, {
44
48
  RequestDataSource: () => RequestDataSource,
45
49
  RestRouter: () => RestRouter,
46
50
  action: () => action,
51
+ after: () => after,
52
+ before: () => before,
47
53
  body: () => body,
48
- bodyParam: () => bodyParam,
49
54
  capitalize: () => capitalize,
50
55
  controller: () => controller,
51
56
  cookie: () => cookie,
@@ -53,6 +58,7 @@ __export(index_exports, {
53
58
  createDebugger: () => createDebugger,
54
59
  createError: () => createError,
55
60
  del: () => del,
61
+ field: () => field,
56
62
  get: () => get,
57
63
  header: () => header,
58
64
  headers: () => headers,
@@ -92,13 +98,38 @@ function toCamelCase(input) {
92
98
  __name(toCamelCase, "toCamelCase");
93
99
 
94
100
  // dist/esm/utils/create-debugger.js
101
+ var import_util = require("util");
95
102
  var import_debug = __toESM(require("debug"), 1);
96
103
  var import_js_format2 = require("@e22m4u/js-format");
104
+ function colorizeString(input) {
105
+ const c = Number(import_debug.default["selectColor"](input));
106
+ const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
107
+ return `${colorCode};1m${input}\x1B[0m`;
108
+ }
109
+ __name(colorizeString, "colorizeString");
97
110
  function createDebugger(name) {
98
- const debug = (0, import_debug.default)(`tsRestRouter:${name}`);
99
- return function(message, ...args) {
100
- const interpolatedMessage = (0, import_js_format2.format)(message, ...args);
101
- return debug(interpolatedMessage);
111
+ const debuggerName = `tsRestRouter:${name}`;
112
+ const debug = (0, import_debug.default)(debuggerName);
113
+ return function(messageOrData, ...args) {
114
+ let prefix = "";
115
+ if (typeof this === "string") {
116
+ const isDebugUsesColors = debug.useColors;
117
+ prefix = isDebugUsesColors ? colorizeString(`[${this}] `) : `[${this}] `;
118
+ }
119
+ if (typeof messageOrData === "string") {
120
+ const interpolatedMessage = (0, import_js_format2.format)(messageOrData, ...args);
121
+ return debug(prefix + interpolatedMessage);
122
+ }
123
+ const inspectOptions = {
124
+ showHidden: false,
125
+ depth: null,
126
+ colors: true,
127
+ compact: false
128
+ };
129
+ const multiString = (0, import_util.inspect)(messageOrData, inspectOptions);
130
+ const rows = multiString.split("\n");
131
+ const colorizedDebuggerName = colorizeString(debuggerName);
132
+ [...args, ...rows].forEach((v) => console.log(` ${colorizedDebuggerName} ${prefix}${v}`));
102
133
  };
103
134
  }
104
135
  __name(createDebugger, "createDebugger");
@@ -122,7 +153,7 @@ var _DebuggableService = class _DebuggableService extends import_js_service.Serv
122
153
  super(container);
123
154
  const serviceName = toCamelCase(this.constructor.name);
124
155
  this.debug = createDebugger(serviceName);
125
- this.debug("%v is created.", this.constructor);
156
+ this.debug.bind("constructor")("Service created.");
126
157
  }
127
158
  };
128
159
  __name(_DebuggableService, "DebuggableService");
@@ -132,14 +163,113 @@ var DebuggableService = _DebuggableService;
132
163
  var import_js_format4 = require("@e22m4u/js-format");
133
164
  var import_js_trie_router2 = require("@e22m4u/js-trie-router");
134
165
  var import_ts_data_schema2 = require("@e22m4u/ts-data-schema");
135
- var import_ts_data_schema3 = require("@e22m4u/ts-data-schema");
136
166
 
137
- // dist/esm/decorators/action/action-metadata.js
167
+ // dist/esm/decorators/after/after-metadata.js
138
168
  var import_ts_reflector = require("@e22m4u/ts-reflector");
139
- var ACTIONS_METADATA_KEY = new import_ts_reflector.MetadataKey("actionsMetadataKey");
169
+ var AFTER_METADATA_KEY = new import_ts_reflector.MetadataKey("afterMetadataKey");
140
170
 
141
- // dist/esm/decorators/action/action-reflector.js
171
+ // dist/esm/decorators/after/after-reflector.js
142
172
  var import_ts_reflector2 = require("@e22m4u/ts-reflector");
173
+ var _AfterReflector = class _AfterReflector {
174
+ /**
175
+ * Set metadata.
176
+ *
177
+ * @param metadata
178
+ * @param target
179
+ * @param propertyKey
180
+ */
181
+ static addMetadata(metadata, target, propertyKey) {
182
+ const oldArray = import_ts_reflector2.Reflector.getOwnMetadata(AFTER_METADATA_KEY, target, propertyKey) ?? [];
183
+ const newArray = [metadata, ...oldArray];
184
+ import_ts_reflector2.Reflector.defineMetadata(AFTER_METADATA_KEY, newArray, target, propertyKey);
185
+ }
186
+ /**
187
+ * Get metadata.
188
+ *
189
+ * @param target
190
+ * @param propertyKey
191
+ */
192
+ static getMetadata(target, propertyKey) {
193
+ const metadata = import_ts_reflector2.Reflector.getOwnMetadata(AFTER_METADATA_KEY, target, propertyKey);
194
+ return metadata ?? [];
195
+ }
196
+ };
197
+ __name(_AfterReflector, "AfterReflector");
198
+ var AfterReflector = _AfterReflector;
199
+
200
+ // dist/esm/decorators/after/after-decorator.js
201
+ var import_ts_reflector3 = require("@e22m4u/ts-reflector");
202
+ var import_ts_reflector4 = require("@e22m4u/ts-reflector");
203
+ function after(middleware) {
204
+ return function(target, propertyKey, descriptor) {
205
+ const decoratorType = (0, import_ts_reflector4.getDecoratorTargetType)(target, propertyKey, descriptor);
206
+ if (decoratorType === import_ts_reflector3.DecoratorTargetType.CONSTRUCTOR) {
207
+ AfterReflector.addMetadata({ middleware }, target);
208
+ } else if (decoratorType === import_ts_reflector3.DecoratorTargetType.INSTANCE_METHOD) {
209
+ AfterReflector.addMetadata({ propertyKey, middleware }, target.constructor, propertyKey);
210
+ } else {
211
+ throw new Error("@after decorator is only supported on a class or an instance method.");
212
+ }
213
+ };
214
+ }
215
+ __name(after, "after");
216
+
217
+ // dist/esm/decorators/before/before-metadata.js
218
+ var import_ts_reflector5 = require("@e22m4u/ts-reflector");
219
+ var BEFORE_METADATA_KEY = new import_ts_reflector5.MetadataKey("beforeMetadataKey");
220
+
221
+ // dist/esm/decorators/before/before-reflector.js
222
+ var import_ts_reflector6 = require("@e22m4u/ts-reflector");
223
+ var _BeforeReflector = class _BeforeReflector {
224
+ /**
225
+ * Set metadata.
226
+ *
227
+ * @param metadata
228
+ * @param target
229
+ * @param propertyKey
230
+ */
231
+ static addMetadata(metadata, target, propertyKey) {
232
+ const oldArray = import_ts_reflector6.Reflector.getOwnMetadata(BEFORE_METADATA_KEY, target, propertyKey) ?? [];
233
+ const newArray = [metadata, ...oldArray];
234
+ import_ts_reflector6.Reflector.defineMetadata(BEFORE_METADATA_KEY, newArray, target, propertyKey);
235
+ }
236
+ /**
237
+ * Get metadata.
238
+ *
239
+ * @param target
240
+ * @param propertyKey
241
+ */
242
+ static getMetadata(target, propertyKey) {
243
+ const metadata = import_ts_reflector6.Reflector.getOwnMetadata(BEFORE_METADATA_KEY, target, propertyKey);
244
+ return metadata ?? [];
245
+ }
246
+ };
247
+ __name(_BeforeReflector, "BeforeReflector");
248
+ var BeforeReflector = _BeforeReflector;
249
+
250
+ // dist/esm/decorators/before/before-decorator.js
251
+ var import_ts_reflector7 = require("@e22m4u/ts-reflector");
252
+ var import_ts_reflector8 = require("@e22m4u/ts-reflector");
253
+ function before(middleware) {
254
+ return function(target, propertyKey, descriptor) {
255
+ const decoratorType = (0, import_ts_reflector8.getDecoratorTargetType)(target, propertyKey, descriptor);
256
+ if (decoratorType === import_ts_reflector7.DecoratorTargetType.CONSTRUCTOR) {
257
+ BeforeReflector.addMetadata({ middleware }, target);
258
+ } else if (decoratorType === import_ts_reflector7.DecoratorTargetType.INSTANCE_METHOD) {
259
+ BeforeReflector.addMetadata({ propertyKey, middleware }, target.constructor, propertyKey);
260
+ } else {
261
+ throw new Error("@before decorator is only supported on a class or an instance method.");
262
+ }
263
+ };
264
+ }
265
+ __name(before, "before");
266
+
267
+ // dist/esm/decorators/action/action-metadata.js
268
+ var import_ts_reflector9 = require("@e22m4u/ts-reflector");
269
+ var ACTIONS_METADATA_KEY = new import_ts_reflector9.MetadataKey("actionsMetadataKey");
270
+
271
+ // dist/esm/decorators/action/action-reflector.js
272
+ var import_ts_reflector10 = require("@e22m4u/ts-reflector");
143
273
  var _ActionReflector = class _ActionReflector {
144
274
  /**
145
275
  * Set metadata.
@@ -149,10 +279,10 @@ var _ActionReflector = class _ActionReflector {
149
279
  * @param propertyKey
150
280
  */
151
281
  static setMetadata(metadata, target, propertyKey) {
152
- const oldMap = import_ts_reflector2.Reflector.getOwnMetadata(ACTIONS_METADATA_KEY, target);
282
+ const oldMap = import_ts_reflector10.Reflector.getOwnMetadata(ACTIONS_METADATA_KEY, target);
153
283
  const newMap = new Map(oldMap);
154
284
  newMap.set(propertyKey, metadata);
155
- import_ts_reflector2.Reflector.defineMetadata(ACTIONS_METADATA_KEY, newMap, target);
285
+ import_ts_reflector10.Reflector.defineMetadata(ACTIONS_METADATA_KEY, newMap, target);
156
286
  }
157
287
  /**
158
288
  * Get metadata.
@@ -160,7 +290,7 @@ var _ActionReflector = class _ActionReflector {
160
290
  * @param target
161
291
  */
162
292
  static getMetadata(target) {
163
- const metadata = import_ts_reflector2.Reflector.getOwnMetadata(ACTIONS_METADATA_KEY, target);
293
+ const metadata = import_ts_reflector10.Reflector.getOwnMetadata(ACTIONS_METADATA_KEY, target);
164
294
  return metadata ?? /* @__PURE__ */ new Map();
165
295
  }
166
296
  };
@@ -169,12 +299,12 @@ var ActionReflector = _ActionReflector;
169
299
 
170
300
  // dist/esm/decorators/action/action-decorator.js
171
301
  var import_js_trie_router = require("@e22m4u/js-trie-router");
172
- var import_ts_reflector3 = require("@e22m4u/ts-reflector");
173
- var import_ts_reflector4 = require("@e22m4u/ts-reflector");
302
+ var import_ts_reflector11 = require("@e22m4u/ts-reflector");
303
+ var import_ts_reflector12 = require("@e22m4u/ts-reflector");
174
304
  function action(options) {
175
305
  return function(target, propertyKey, descriptor) {
176
- const decoratorType = (0, import_ts_reflector4.getDecoratorTargetType)(target, propertyKey, descriptor);
177
- if (decoratorType !== import_ts_reflector3.DecoratorTargetType.INSTANCE_METHOD)
306
+ const decoratorType = (0, import_ts_reflector12.getDecoratorTargetType)(target, propertyKey, descriptor);
307
+ if (decoratorType !== import_ts_reflector11.DecoratorTargetType.INSTANCE_METHOD)
178
308
  throw new Error("@action decorator is only supported on an instance method.");
179
309
  ActionReflector.setMetadata({ ...options, propertyKey }, target.constructor, propertyKey);
180
310
  };
@@ -197,15 +327,15 @@ var del = /* @__PURE__ */ __name((path, options) => {
197
327
  }, "del");
198
328
 
199
329
  // dist/esm/decorators/controller/controller-metadata.js
200
- var import_ts_reflector5 = require("@e22m4u/ts-reflector");
201
- var CONTROLLER_METADATA_KEY = new import_ts_reflector5.MetadataKey("controllerMetadataKey");
330
+ var import_ts_reflector13 = require("@e22m4u/ts-reflector");
331
+ var CONTROLLER_METADATA_KEY = new import_ts_reflector13.MetadataKey("controllerMetadataKey");
202
332
 
203
333
  // dist/esm/decorators/controller/controller-decorator.js
204
- var import_ts_reflector7 = require("@e22m4u/ts-reflector");
205
- var import_ts_reflector8 = require("@e22m4u/ts-reflector");
334
+ var import_ts_reflector15 = require("@e22m4u/ts-reflector");
335
+ var import_ts_reflector16 = require("@e22m4u/ts-reflector");
206
336
 
207
337
  // dist/esm/decorators/controller/controller-reflector.js
208
- var import_ts_reflector6 = require("@e22m4u/ts-reflector");
338
+ var import_ts_reflector14 = require("@e22m4u/ts-reflector");
209
339
  var _ControllerReflector = class _ControllerReflector {
210
340
  /**
211
341
  * Set metadata.
@@ -214,7 +344,7 @@ var _ControllerReflector = class _ControllerReflector {
214
344
  * @param target
215
345
  */
216
346
  static setMetadata(metadata, target) {
217
- return import_ts_reflector6.Reflector.defineMetadata(CONTROLLER_METADATA_KEY, metadata, target);
347
+ return import_ts_reflector14.Reflector.defineMetadata(CONTROLLER_METADATA_KEY, metadata, target);
218
348
  }
219
349
  /**
220
350
  * Get metadata.
@@ -222,25 +352,34 @@ var _ControllerReflector = class _ControllerReflector {
222
352
  * @param target
223
353
  */
224
354
  static getMetadata(target) {
225
- return import_ts_reflector6.Reflector.getOwnMetadata(CONTROLLER_METADATA_KEY, target);
355
+ return import_ts_reflector14.Reflector.getOwnMetadata(CONTROLLER_METADATA_KEY, target);
226
356
  }
227
357
  };
228
358
  __name(_ControllerReflector, "ControllerReflector");
229
359
  var ControllerReflector = _ControllerReflector;
230
360
 
231
361
  // dist/esm/decorators/controller/controller-decorator.js
232
- function controller(options) {
362
+ function controller(pathOrOptions, options) {
233
363
  return function(target) {
234
- const decoratorType = (0, import_ts_reflector8.getDecoratorTargetType)(target);
235
- if (decoratorType !== import_ts_reflector7.DecoratorTargetType.CONSTRUCTOR)
364
+ const decoratorType = (0, import_ts_reflector16.getDecoratorTargetType)(target);
365
+ if (decoratorType !== import_ts_reflector15.DecoratorTargetType.CONSTRUCTOR)
236
366
  throw new Error("@controller decorator is only supported on a class.");
367
+ if (typeof pathOrOptions === "string") {
368
+ if (!options) {
369
+ options = { path: pathOrOptions };
370
+ } else {
371
+ options.path = pathOrOptions;
372
+ }
373
+ } else if (typeof pathOrOptions === "object") {
374
+ options = pathOrOptions;
375
+ }
237
376
  ControllerReflector.setMetadata({ ...options, className: target.name }, target);
238
377
  };
239
378
  }
240
379
  __name(controller, "controller");
241
380
 
242
381
  // dist/esm/decorators/request-data/request-data-metadata.js
243
- var import_ts_reflector9 = require("@e22m4u/ts-reflector");
382
+ var import_ts_reflector17 = require("@e22m4u/ts-reflector");
244
383
  var RequestDataSource;
245
384
  (function(RequestDataSource2) {
246
385
  RequestDataSource2["PARAMS"] = "params";
@@ -249,15 +388,15 @@ var RequestDataSource;
249
388
  RequestDataSource2["COOKIE"] = "cookie";
250
389
  RequestDataSource2["BODY"] = "body";
251
390
  })(RequestDataSource || (RequestDataSource = {}));
252
- var REQUEST_DATA_METADATA_KEY = new import_ts_reflector9.MetadataKey("requestDataMetadataKey");
391
+ var REQUEST_DATA_METADATA_KEY = new import_ts_reflector17.MetadataKey("requestDataMetadataKey");
253
392
 
254
393
  // dist/esm/decorators/request-data/request-data-decorator.js
255
394
  var import_ts_data_schema = require("@e22m4u/ts-data-schema");
256
- var import_ts_reflector11 = require("@e22m4u/ts-reflector");
257
- var import_ts_reflector12 = require("@e22m4u/ts-reflector");
395
+ var import_ts_reflector19 = require("@e22m4u/ts-reflector");
396
+ var import_ts_reflector20 = require("@e22m4u/ts-reflector");
258
397
 
259
398
  // dist/esm/decorators/request-data/request-data-reflector.js
260
- var import_ts_reflector10 = require("@e22m4u/ts-reflector");
399
+ var import_ts_reflector18 = require("@e22m4u/ts-reflector");
261
400
  var _RequestDataReflector = class _RequestDataReflector {
262
401
  /**
263
402
  * Set metadata.
@@ -268,10 +407,10 @@ var _RequestDataReflector = class _RequestDataReflector {
268
407
  * @param propertyKey
269
408
  */
270
409
  static setMetadata(metadata, target, index, propertyKey) {
271
- const oldMap = import_ts_reflector10.Reflector.getOwnMetadata(REQUEST_DATA_METADATA_KEY, target, propertyKey);
410
+ const oldMap = import_ts_reflector18.Reflector.getOwnMetadata(REQUEST_DATA_METADATA_KEY, target, propertyKey);
272
411
  const newMap = new Map(oldMap);
273
412
  newMap.set(index, metadata);
274
- import_ts_reflector10.Reflector.defineMetadata(REQUEST_DATA_METADATA_KEY, newMap, target, propertyKey);
413
+ import_ts_reflector18.Reflector.defineMetadata(REQUEST_DATA_METADATA_KEY, newMap, target, propertyKey);
275
414
  }
276
415
  /**
277
416
  * Get metadata.
@@ -280,7 +419,7 @@ var _RequestDataReflector = class _RequestDataReflector {
280
419
  * @param propertyKey
281
420
  */
282
421
  static getMetadata(target, propertyKey) {
283
- const metadata = import_ts_reflector10.Reflector.getOwnMetadata(REQUEST_DATA_METADATA_KEY, target, propertyKey);
422
+ const metadata = import_ts_reflector18.Reflector.getOwnMetadata(REQUEST_DATA_METADATA_KEY, target, propertyKey);
284
423
  return metadata ?? /* @__PURE__ */ new Map();
285
424
  }
286
425
  };
@@ -290,8 +429,8 @@ var RequestDataReflector = _RequestDataReflector;
290
429
  // dist/esm/decorators/request-data/request-data-decorator.js
291
430
  function requestData(options) {
292
431
  return function(target, propertyKey, indexOrDescriptor) {
293
- const decoratorType = (0, import_ts_reflector12.getDecoratorTargetType)(target, propertyKey, indexOrDescriptor);
294
- if (decoratorType !== import_ts_reflector11.DecoratorTargetType.INSTANCE_METHOD_PARAMETER)
432
+ const decoratorType = (0, import_ts_reflector20.getDecoratorTargetType)(target, propertyKey, indexOrDescriptor);
433
+ if (decoratorType !== import_ts_reflector19.DecoratorTargetType.INSTANCE_METHOD_PARAMETER)
295
434
  throw new Error("@requestData decorator is only supported on an instance method parameter.");
296
435
  RequestDataReflector.setMetadata(options, target.constructor, indexOrDescriptor, propertyKey);
297
436
  };
@@ -331,7 +470,7 @@ var headers = createRequestDataDecoratorWithSource(RequestDataSource.HEADERS);
331
470
  var header = createRequestDataPropertyDecoratorWithSource(RequestDataSource.HEADERS);
332
471
  var cookies = createRequestDataDecoratorWithSource(RequestDataSource.COOKIE);
333
472
  var cookie = createRequestDataPropertyDecoratorWithSource(RequestDataSource.COOKIE);
334
- var bodyParam = createRequestDataPropertyDecoratorWithSource(RequestDataSource.BODY);
473
+ var field = createRequestDataPropertyDecoratorWithSource(RequestDataSource.BODY);
335
474
  function body(schemaOrType) {
336
475
  let schema;
337
476
  if (typeof schemaOrType === "object") {
@@ -346,15 +485,15 @@ function body(schemaOrType) {
346
485
  __name(body, "body");
347
486
 
348
487
  // dist/esm/decorators/request-context/request-context-metadata.js
349
- var import_ts_reflector13 = require("@e22m4u/ts-reflector");
350
- var REQUEST_CONTEXT_METADATA_KEY = new import_ts_reflector13.MetadataKey("requestContextMetadataKey");
488
+ var import_ts_reflector21 = require("@e22m4u/ts-reflector");
489
+ var REQUEST_CONTEXT_METADATA_KEY = new import_ts_reflector21.MetadataKey("requestContextMetadataKey");
351
490
 
352
491
  // dist/esm/decorators/request-context/request-context-decorator.js
353
- var import_ts_reflector15 = require("@e22m4u/ts-reflector");
354
- var import_ts_reflector16 = require("@e22m4u/ts-reflector");
492
+ var import_ts_reflector23 = require("@e22m4u/ts-reflector");
493
+ var import_ts_reflector24 = require("@e22m4u/ts-reflector");
355
494
 
356
495
  // dist/esm/decorators/request-context/request-context-reflector.js
357
- var import_ts_reflector14 = require("@e22m4u/ts-reflector");
496
+ var import_ts_reflector22 = require("@e22m4u/ts-reflector");
358
497
  var _RequestContextReflector = class _RequestContextReflector {
359
498
  /**
360
499
  * Set metadata.
@@ -365,10 +504,10 @@ var _RequestContextReflector = class _RequestContextReflector {
365
504
  * @param propertyKey
366
505
  */
367
506
  static setMetadata(metadata, target, index, propertyKey) {
368
- const oldMap = import_ts_reflector14.Reflector.getOwnMetadata(REQUEST_CONTEXT_METADATA_KEY, target, propertyKey);
507
+ const oldMap = import_ts_reflector22.Reflector.getOwnMetadata(REQUEST_CONTEXT_METADATA_KEY, target, propertyKey);
369
508
  const newMap = new Map(oldMap);
370
509
  newMap.set(index, metadata);
371
- import_ts_reflector14.Reflector.defineMetadata(REQUEST_CONTEXT_METADATA_KEY, newMap, target, propertyKey);
510
+ import_ts_reflector22.Reflector.defineMetadata(REQUEST_CONTEXT_METADATA_KEY, newMap, target, propertyKey);
372
511
  }
373
512
  /**
374
513
  * Get metadata.
@@ -377,7 +516,7 @@ var _RequestContextReflector = class _RequestContextReflector {
377
516
  * @param propertyKey
378
517
  */
379
518
  static getMetadata(target, propertyKey) {
380
- const metadata = import_ts_reflector14.Reflector.getOwnMetadata(REQUEST_CONTEXT_METADATA_KEY, target, propertyKey);
519
+ const metadata = import_ts_reflector22.Reflector.getOwnMetadata(REQUEST_CONTEXT_METADATA_KEY, target, propertyKey);
381
520
  return metadata ?? /* @__PURE__ */ new Map();
382
521
  }
383
522
  };
@@ -387,8 +526,8 @@ var RequestContextReflector = _RequestContextReflector;
387
526
  // dist/esm/decorators/request-context/request-context-decorator.js
388
527
  function requestContext(propertyName) {
389
528
  return function(target, propertyKey, indexOrDescriptor) {
390
- const decoratorType = (0, import_ts_reflector16.getDecoratorTargetType)(target, propertyKey, indexOrDescriptor);
391
- if (decoratorType !== import_ts_reflector15.DecoratorTargetType.INSTANCE_METHOD_PARAMETER)
529
+ const decoratorType = (0, import_ts_reflector24.getDecoratorTargetType)(target, propertyKey, indexOrDescriptor);
530
+ if (decoratorType !== import_ts_reflector23.DecoratorTargetType.INSTANCE_METHOD_PARAMETER)
392
531
  throw new Error("@requestContext decorator is only supported on an instance method parameter.");
393
532
  RequestContextReflector.setMetadata({ property: propertyName }, target.constructor, indexOrDescriptor, propertyKey);
394
533
  };
@@ -403,6 +542,9 @@ function response() {
403
542
  }
404
543
  __name(response, "response");
405
544
 
545
+ // dist/esm/controller-registry.js
546
+ var import_ts_data_schema3 = require("@e22m4u/ts-data-schema");
547
+
406
548
  // dist/esm/errors/not-a-controller-error.js
407
549
  var import_js_format3 = require("@e22m4u/js-format");
408
550
  var _NotAControllerError = class _NotAControllerError extends import_js_format3.Errorf {
@@ -431,41 +573,60 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
431
573
  * @param options
432
574
  */
433
575
  addController(ctor, options) {
576
+ const debug = this.debug.bind(this.addController.name);
434
577
  if (this.hasController(ctor))
435
578
  throw new import_js_format4.Errorf("The controller %v is already registered.");
436
579
  const controllerMd = ControllerReflector.getMetadata(ctor);
437
580
  if (!controllerMd)
438
581
  throw new NotAControllerError(ctor);
439
- this.debug("Adding controller %s.", ctor.name);
440
- const pathPrefix = this.getPathPrefixByControllerMetadata(controllerMd, options);
441
- this.debug("Path prefix is %v.", pathPrefix);
442
- const preHandlers = this.getPreHandlersByControllerMetadata(controllerMd, options);
443
- this.debug("%v total pre-handlers found.", preHandlers.length);
444
- const postHandlers = this.getPostHandlersByControllerMetadata(controllerMd, options);
445
- this.debug("%v total post-handlers found.", postHandlers.length);
582
+ debug("Adding controller %s.", ctor.name);
583
+ let pathPrefix = "";
584
+ pathPrefix += this.getPathPrefixFromControllerRootOptions(options);
585
+ pathPrefix += "/";
586
+ pathPrefix += this.getPathPrefixFromControllerMetadata(ctor);
587
+ pathPrefix = pathPrefix.replace(/\/{2,}/g, "/").replace(/\/$/, "");
588
+ debug("Controller path prefix is %v.", pathPrefix);
589
+ const preHandlers = [
590
+ ...this.getPreHandlersFromControllerRootOptions(options),
591
+ ...this.getPreHandlersFromBeforeMetadata(ctor),
592
+ ...this.getPreHandlersFromControllerMetadata(ctor)
593
+ ];
594
+ debug("Controller has %v pre-handlers.", preHandlers.length);
595
+ const postHandlers = [
596
+ ...this.getPostHandlersFromControllerRootOptions(options),
597
+ ...this.getPostHandlersFromAfterMetadata(ctor),
598
+ ...this.getPostHandlersFromControllerMetadata(ctor)
599
+ ];
600
+ debug("Controller has %v post-handlers.", postHandlers.length);
446
601
  const actionsMd = ActionReflector.getMetadata(ctor);
447
- this.debug("%v actions found.", actionsMd.size);
602
+ debug("%v actions found.", actionsMd.size);
448
603
  const router = this.getService(import_js_trie_router2.TrieRouter);
449
604
  actionsMd.forEach((actionMd, actionName) => {
450
- this.debug("Adding route for %s.%s.", ctor.name, actionName);
451
- this.debug("Route path is %v.", actionMd.path);
452
- const prefixedRoutePath = `${pathPrefix}/${actionMd.path}`.replace(/\/\//g, "/");
453
- this.debug("Prefixed route path is %v.", prefixedRoutePath);
454
- const actionPreHandlers = Array.isArray(actionMd.before) ? actionMd.before : actionMd.before ? [actionMd.before] : [];
455
- this.debug("%v action pre-handlers found.", actionPreHandlers.length);
456
- const mergedPreHandlers = [...preHandlers, ...actionPreHandlers];
457
- const actionPostHandlers = Array.isArray(actionMd.after) ? actionMd.after : actionMd.after ? [actionMd.after] : [];
458
- this.debug("%v action post-handlers found.", actionPostHandlers.length);
459
- const mergedPostHandlers = [...postHandlers, ...actionPostHandlers];
605
+ debug("Adding route for %s.%s.", ctor.name, actionName);
606
+ debug("Route path is %v.", actionMd.path);
607
+ const prefixedRoutePath = `${pathPrefix}/${actionMd.path}`.replace(/\/{2,}/g, "/").replace(/\/$/, "");
608
+ debug("Prefixed route path is %v.", prefixedRoutePath);
609
+ const actionPreHandlers = [
610
+ ...preHandlers,
611
+ ...this.getPreHandlersFromBeforeMetadata(ctor, actionName),
612
+ ...this.getPreHandlersFromActionMetadata(ctor, actionName)
613
+ ];
614
+ debug("%v action pre-handlers in total.", actionPreHandlers.length);
615
+ const actionPostHandlers = [
616
+ ...postHandlers,
617
+ ...this.getPostHandlersFromAfterMetadata(ctor, actionName),
618
+ ...this.getPostHandlersFromActionMetadata(ctor, actionName)
619
+ ];
620
+ debug("%v action post-handlers in total.", actionPostHandlers.length);
460
621
  const routeHandler = this.createRouteHandler(ctor, actionName);
461
622
  router.defineRoute({
462
623
  method: actionMd.method,
463
624
  path: prefixedRoutePath,
464
- preHandler: mergedPreHandlers,
625
+ preHandler: actionPreHandlers,
465
626
  handler: routeHandler,
466
- postHandler: mergedPostHandlers
627
+ postHandler: actionPostHandlers
467
628
  });
468
- this.debug("Route %s %v is added.", actionMd.method.toUpperCase(), prefixedRoutePath);
629
+ debug("Route %s %v is added.", actionMd.method.toUpperCase(), prefixedRoutePath);
469
630
  });
470
631
  this.controllers.add(ctor);
471
632
  return this;
@@ -479,57 +640,193 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
479
640
  return this.controllers.has(ctor);
480
641
  }
481
642
  /**
482
- * Get path prefix by controller metadata.
643
+ * Get path prefix from controller root options.
483
644
  *
484
- * @param controllerMd
485
645
  * @param options
486
646
  */
487
- getPathPrefixByControllerMetadata(controllerMd, options) {
488
- const rootPathPrefix = (options == null ? void 0 : options.pathPrefix) || "";
489
- this.debug("Root path prefix is %v.", rootPathPrefix);
490
- const controllerPathPrefix = controllerMd.path || "";
491
- this.debug("Controller path prefix is %v.", controllerPathPrefix);
492
- const mergedPathPrefix = `/${rootPathPrefix}/${controllerPathPrefix}`.replace(/\/\//g, "/").replace(/\/$/, "");
493
- this.debug("Merged path prefix is %v.", mergedPathPrefix);
494
- return mergedPathPrefix;
647
+ getPathPrefixFromControllerRootOptions(options) {
648
+ const debug = this.debug.bind(this.getPathPrefixFromControllerRootOptions.name);
649
+ debug("Getting path prefix from controller root options.");
650
+ const res = (options == null ? void 0 : options.pathPrefix) || "";
651
+ debug("Controller path prefix is %v.", res);
652
+ return res;
653
+ }
654
+ /**
655
+ * Get path prefix from controller metadata.
656
+ *
657
+ * @param ctor
658
+ */
659
+ getPathPrefixFromControllerMetadata(ctor) {
660
+ const debug = this.debug.bind(this.getPathPrefixFromControllerMetadata.name);
661
+ debug("Getting path prefix from @controller metadata.");
662
+ debug("Metadata target is %s.", ctor.name);
663
+ const md = ControllerReflector.getMetadata(ctor);
664
+ if (!md)
665
+ throw new import_js_format4.Errorf("Controller %v has no metadata.", ctor);
666
+ const res = md.path || "";
667
+ debug("Controller path prefix is %v.", res);
668
+ return md.path || "";
495
669
  }
496
670
  /**
497
- * Get pre-handlers by controller metadata.
671
+ * Getting pre-handlers from controller root options.
498
672
  *
499
- * @param controllerMd
500
673
  * @param options
501
674
  */
502
- getPreHandlersByControllerMetadata(controllerMd, options) {
503
- let rootPreHandlers = [];
675
+ getPreHandlersFromControllerRootOptions(options) {
676
+ const debug = this.debug.bind(this.getPreHandlersFromControllerRootOptions.name);
677
+ debug("Getting pre-handlers from controller root options.");
678
+ let res = [];
504
679
  if (options == null ? void 0 : options.before)
505
- rootPreHandlers = Array.isArray(options == null ? void 0 : options.before) ? options.before : [options.before];
506
- this.debug("%v root pre-handlers found.", rootPreHandlers.length);
507
- let ctlPreHandlers = [];
508
- if (controllerMd.before)
509
- ctlPreHandlers = Array.isArray(controllerMd.before) ? controllerMd.before : [controllerMd.before];
510
- this.debug("%v controller pre-handlers found.", ctlPreHandlers.length);
511
- const mergedPreHandlers = [...rootPreHandlers, ...ctlPreHandlers];
512
- this.debug("%v merged pre-handlers.", mergedPreHandlers.length);
513
- return mergedPreHandlers;
680
+ res = Array.isArray(options.before) ? options.before : [options.before];
681
+ debug("%v pre-handlers found.", res.length);
682
+ return res;
514
683
  }
515
684
  /**
516
- * Get post-handlers by controller metadata.
685
+ * Getting post-handlers from controller root options.
517
686
  *
518
- * @param controllerMd
519
687
  * @param options
520
688
  */
521
- getPostHandlersByControllerMetadata(controllerMd, options) {
522
- let rootPostHandlers = [];
689
+ getPostHandlersFromControllerRootOptions(options) {
690
+ const debug = this.debug.bind(this.getPostHandlersFromControllerRootOptions.name);
691
+ debug("Getting post-handlers from controller root options.");
692
+ let res = [];
523
693
  if (options == null ? void 0 : options.after)
524
- rootPostHandlers = Array.isArray(options.after) ? options.after : [options.after];
525
- this.debug("%v root post-handlers found.", rootPostHandlers.length);
526
- let ctlPostHandlers = [];
527
- if (controllerMd.after)
528
- ctlPostHandlers = Array.isArray(controllerMd.after) ? controllerMd.after : [controllerMd.after];
529
- this.debug("%v controller post-handlers found.", ctlPostHandlers.length);
530
- const mergedPostHandlers = [...rootPostHandlers, ...ctlPostHandlers];
531
- this.debug("%v merged post-handlers.", mergedPostHandlers.length);
532
- return mergedPostHandlers;
694
+ res = Array.isArray(options.after) ? options.after : [options.after];
695
+ debug("%v post-handlers found.", res.length);
696
+ return res;
697
+ }
698
+ /**
699
+ * Get pre-handlers from before metadata.
700
+ *
701
+ * @param ctor
702
+ * @param actionName
703
+ */
704
+ getPreHandlersFromBeforeMetadata(ctor, actionName) {
705
+ const debug = this.debug.bind(this.getPreHandlersFromBeforeMetadata.name);
706
+ debug("Getting pre-handlers from @before metadata.");
707
+ if (actionName) {
708
+ debug("Target is %s.%s.", ctor.name, actionName);
709
+ } else {
710
+ debug("Target is %s.", ctor.name);
711
+ }
712
+ let preHandlers = [];
713
+ const mdArray = BeforeReflector.getMetadata(ctor, actionName);
714
+ mdArray.forEach((md) => {
715
+ if (Array.isArray(md.middleware)) {
716
+ preHandlers = [...preHandlers, ...md.middleware];
717
+ } else {
718
+ preHandlers.push(md.middleware);
719
+ }
720
+ });
721
+ if (mdArray.length) {
722
+ debug("%v pre-handlers found.", mdArray.length);
723
+ } else {
724
+ debug("No pre-handlers found.");
725
+ }
726
+ return preHandlers;
727
+ }
728
+ /**
729
+ * Get post-handlers from after metadata.
730
+ *
731
+ * @param ctor
732
+ * @param actionName
733
+ */
734
+ getPostHandlersFromAfterMetadata(ctor, actionName) {
735
+ const debug = this.debug.bind(this.getPostHandlersFromAfterMetadata.name);
736
+ debug("Getting post-handlers from @after metadata.");
737
+ if (actionName) {
738
+ debug("Target is %s.%s.", ctor.name, actionName);
739
+ } else {
740
+ debug("Target is %s.", ctor.name);
741
+ }
742
+ let res = [];
743
+ const mdArray = AfterReflector.getMetadata(ctor, actionName);
744
+ mdArray.forEach((md) => {
745
+ if (Array.isArray(md.middleware)) {
746
+ res = [...res, ...md.middleware];
747
+ } else {
748
+ res.push(md.middleware);
749
+ }
750
+ });
751
+ if (mdArray.length) {
752
+ debug("%v post-handlers found.", mdArray.length);
753
+ } else {
754
+ debug("No post-handlers found.");
755
+ }
756
+ return res;
757
+ }
758
+ /**
759
+ * Get pre-handlers from controller metadata.
760
+ *
761
+ * @param ctor
762
+ */
763
+ getPreHandlersFromControllerMetadata(ctor) {
764
+ const debug = this.debug.bind(this.getPreHandlersFromControllerMetadata.name);
765
+ debug("Getting pre-handlers from @controller metadata.");
766
+ debug("Target is %s.", ctor.name);
767
+ const md = ControllerReflector.getMetadata(ctor);
768
+ if (!md)
769
+ throw new import_js_format4.Errorf("Controller %v has no metadata.", ctor);
770
+ let res = [];
771
+ if (md.before)
772
+ res = Array.isArray(md.before) ? md.before : [md.before];
773
+ debug("%v pre-handlers found.", res.length);
774
+ return res;
775
+ }
776
+ /**
777
+ * Get post-handlers from controller metadata.
778
+ *
779
+ * @param ctor
780
+ */
781
+ getPostHandlersFromControllerMetadata(ctor) {
782
+ const debug = this.debug.bind(this.getPostHandlersFromControllerMetadata.name);
783
+ debug("Getting post-handlers from @controller metadata.");
784
+ const md = ControllerReflector.getMetadata(ctor);
785
+ if (!md)
786
+ throw new import_js_format4.Errorf("Controller %v has no metadata.", ctor);
787
+ let res = [];
788
+ if (md.after)
789
+ res = Array.isArray(md.after) ? md.after : [md.after];
790
+ debug("%v post-handlers found.", res.length);
791
+ return res;
792
+ }
793
+ /**
794
+ * Get pre-handlers from action metadata.
795
+ *
796
+ * @param ctor
797
+ * @param actionName
798
+ */
799
+ getPreHandlersFromActionMetadata(ctor, actionName) {
800
+ const debug = this.debug.bind(this.getPreHandlersFromActionMetadata.name);
801
+ debug("Getting pre-handlers from @action metadata.");
802
+ const actionsMd = ActionReflector.getMetadata(ctor);
803
+ const actionMd = actionsMd.get(actionName);
804
+ if (!actionMd)
805
+ throw new import_js_format4.Errorf("Action %s.%s has no metadata.", ctor.name, actionName);
806
+ let res = [];
807
+ if (actionMd.before)
808
+ res = Array.isArray(actionMd.before) ? actionMd.before : [actionMd.before];
809
+ debug("%v pre-handlers found.", res.length);
810
+ return res;
811
+ }
812
+ /**
813
+ * Get post-handlers from action metadata.
814
+ *
815
+ * @param ctor
816
+ * @param actionName
817
+ */
818
+ getPostHandlersFromActionMetadata(ctor, actionName) {
819
+ const debug = this.debug.bind(this.getPreHandlersFromActionMetadata.name);
820
+ debug("Getting post-handlers from @action metadata.");
821
+ const actionsMd = ActionReflector.getMetadata(ctor);
822
+ const actionMd = actionsMd.get(actionName);
823
+ if (!actionMd)
824
+ throw new import_js_format4.Errorf("Action %s.%s has no metadata.", ctor.name, actionName);
825
+ let res = [];
826
+ if (actionMd.after)
827
+ res = Array.isArray(actionMd.after) ? actionMd.after : [actionMd.after];
828
+ debug("%v pre-handlers found.", res.length);
829
+ return res;
533
830
  }
534
831
  /**
535
832
  * Create route handler.
@@ -539,34 +836,35 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
539
836
  * @protected
540
837
  */
541
838
  createRouteHandler(controllerCtor, actionName) {
542
- this.debug("Creating route handler for %s.%s.", controllerCtor.name, actionName);
839
+ const debug = this.debug.bind(this.createRouteHandler.name);
840
+ debug("Creating route handler for %s.%s.", controllerCtor.name, actionName);
543
841
  const requestContextMetadataMap = RequestContextReflector.getMetadata(controllerCtor, actionName);
544
842
  const requestDataMetadataMap = RequestDataReflector.getMetadata(controllerCtor, actionName);
545
843
  const argsNumber = controllerCtor.prototype[actionName].length;
546
844
  const dataTypeCaster = this.getService(import_ts_data_schema3.DataTypeCaster);
547
845
  const dataValidator = this.getService(import_ts_data_schema2.DataValidator);
548
846
  return (requestContext2) => {
549
- this.debug("Executing route handler for %s.%s.", controllerCtor.name, actionName);
847
+ debug("Executing route handler for %s.%s.", controllerCtor.name, actionName);
550
848
  const args = Array(argsNumber).fill(void 0).map((_, index) => {
551
849
  const requestContextMd = requestContextMetadataMap.get(index);
552
850
  if (requestContextMd != null) {
553
- this.debug("Argument %v has request context metadata.", index);
851
+ debug("Argument %v has request context metadata.", index);
554
852
  if (requestContextMd.property == null) {
555
- this.debug("Request context property is not specified.");
556
- this.debug("Argument %v is set to %v.", index, requestContext2);
853
+ debug("Request context property is not specified.");
854
+ debug("Argument %v is set to %v.", index, requestContext2);
557
855
  return requestContext2;
558
856
  }
559
857
  const propName = requestContextMd.property;
560
858
  const propValue = requestContext2[propName];
561
- this.debug("Request context property is %v.", propName);
562
- this.debug("Argument %v is set to %v.", index, propValue);
859
+ debug("Request context property is %v.", propName);
860
+ debug("Argument %v is set to %v.", index, propValue);
563
861
  return propValue;
564
862
  } else {
565
- this.debug("No RequestContextMetadata specified for %v argument.", index);
863
+ debug("No RequestContextMetadata specified for %v argument.", index);
566
864
  }
567
865
  const requestDataMd = requestDataMetadataMap.get(index);
568
866
  if (requestDataMd != null) {
569
- this.debug("Argument %v has request data metadata.", index);
867
+ debug("Argument %v has request data metadata.", index);
570
868
  let data;
571
869
  switch (requestDataMd.source) {
572
870
  case RequestDataSource.PARAMS:
@@ -585,29 +883,29 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
585
883
  data = requestContext2.body;
586
884
  break;
587
885
  }
588
- this.debug("Request data source is %v.", requestDataMd.source);
886
+ debug("Request data source is %v.", requestDataMd.source);
589
887
  if (requestDataMd.schema) {
590
888
  data = dataTypeCaster.cast(data, requestDataMd.schema, {
591
889
  noTypeCastError: true,
592
890
  sourcePath: requestDataMd.source
593
891
  });
594
- this.debug("Data type casting is passed.");
892
+ debug("Data type casting is passed.");
595
893
  dataValidator.validate(data, requestDataMd.schema, requestDataMd.source);
596
- this.debug("Data validation is passed.");
894
+ debug("Data validation is passed.");
597
895
  }
598
896
  if (requestDataMd.property == null) {
599
- this.debug("Request data property is not specified.");
600
- this.debug("Argument %v is set to %v.", index, data);
897
+ debug("Request data property is not specified.");
898
+ debug("Argument %v is set to %v.", index, data);
601
899
  return data;
602
900
  }
603
901
  const dataAsObject = data;
604
902
  const propName = requestDataMd.property;
605
903
  const propValue = dataAsObject[propName];
606
- this.debug("Request data property is %v.", propName);
607
- this.debug("Argument %v is set to %v.", index, propValue);
904
+ debug("Request data property is %v.", propName);
905
+ debug("Argument %v is set to %v.", index, propValue);
608
906
  return propValue;
609
907
  } else {
610
- this.debug("No RequestDataMetadata specified for %v argument.", index);
908
+ debug("No RequestDataMetadata specified for %v argument.", index);
611
909
  }
612
910
  });
613
911
  const controller2 = this.getService(controllerCtor);
@@ -642,7 +940,11 @@ var RestRouter = _RestRouter;
642
940
  // Annotate the CommonJS export names for ESM import in node:
643
941
  0 && (module.exports = {
644
942
  ACTIONS_METADATA_KEY,
943
+ AFTER_METADATA_KEY,
645
944
  ActionReflector,
945
+ AfterReflector,
946
+ BEFORE_METADATA_KEY,
947
+ BeforeReflector,
646
948
  CONTROLLER_METADATA_KEY,
647
949
  ControllerReflector,
648
950
  ControllerRegistry,
@@ -654,8 +956,9 @@ var RestRouter = _RestRouter;
654
956
  RequestDataSource,
655
957
  RestRouter,
656
958
  action,
959
+ after,
960
+ before,
657
961
  body,
658
- bodyParam,
659
962
  capitalize,
660
963
  controller,
661
964
  cookie,
@@ -663,6 +966,7 @@ var RestRouter = _RestRouter;
663
966
  createDebugger,
664
967
  createError,
665
968
  del,
969
+ field,
666
970
  get,
667
971
  header,
668
972
  headers,