@e22m4u/ts-rest-router 0.0.6 → 0.1.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-ru.md +227 -0
- package/README.md +227 -0
- package/dist/cjs/index.cjs +448 -153
- package/dist/esm/controller-registry.d.ts +53 -11
- package/dist/esm/controller-registry.js +242 -104
- package/dist/esm/debuggable-service.js +1 -1
- package/dist/esm/decorators/action/action-decorator.d.ts +7 -8
- package/dist/esm/decorators/action/action-decorator.js +1 -5
- package/dist/esm/decorators/action/action-decorator.spec.js +16 -16
- package/dist/esm/decorators/action/action-metadata.d.ts +0 -1
- package/dist/esm/decorators/after/after-decorator.d.ts +9 -0
- package/dist/esm/decorators/after/after-decorator.js +22 -0
- package/dist/esm/decorators/after/after-decorator.spec.d.ts +1 -0
- package/dist/esm/decorators/after/after-decorator.spec.js +115 -0
- package/dist/esm/decorators/after/after-metadata.d.ts +13 -0
- package/dist/esm/decorators/after/after-metadata.js +5 -0
- package/dist/esm/decorators/after/after-reflector.d.ts +22 -0
- package/dist/esm/decorators/after/after-reflector.js +29 -0
- package/dist/esm/decorators/after/after-reflector.spec.d.ts +1 -0
- package/dist/esm/decorators/after/after-reflector.spec.js +102 -0
- package/dist/esm/decorators/after/index.d.ts +3 -0
- package/dist/esm/decorators/after/index.js +3 -0
- package/dist/esm/decorators/before/before-decorator.d.ts +9 -0
- package/dist/esm/decorators/before/before-decorator.js +22 -0
- package/dist/esm/decorators/before/before-decorator.spec.d.ts +1 -0
- package/dist/esm/decorators/before/before-decorator.spec.js +115 -0
- package/dist/esm/decorators/before/before-metadata.d.ts +13 -0
- package/dist/esm/decorators/before/before-metadata.js +5 -0
- package/dist/esm/decorators/before/before-reflector.d.ts +22 -0
- package/dist/esm/decorators/before/before-reflector.js +29 -0
- package/dist/esm/decorators/before/before-reflector.spec.d.ts +1 -0
- package/dist/esm/decorators/before/before-reflector.spec.js +102 -0
- package/dist/esm/decorators/before/index.d.ts +3 -0
- package/dist/esm/decorators/before/index.js +3 -0
- package/dist/esm/decorators/controller/controller-decorator.d.ts +2 -1
- package/dist/esm/decorators/controller/controller-decorator.js +27 -6
- package/dist/esm/decorators/controller/controller-decorator.spec.js +37 -15
- package/dist/esm/decorators/controller/controller-metadata.d.ts +0 -1
- package/dist/esm/decorators/index.d.ts +2 -0
- package/dist/esm/decorators/index.js +2 -0
- package/dist/esm/decorators/request-context/request-context-decorator.d.ts +2 -3
- package/dist/esm/decorators/request-context/request-context-decorator.js +3 -6
- package/dist/esm/decorators/request-context/request-context-decorator.spec.js +2 -17
- package/dist/esm/decorators/request-context/request-context-metadata.d.ts +0 -1
- package/dist/esm/decorators/request-data/request-data-decorator.d.ts +7 -3
- package/dist/esm/decorators/request-data/request-data-decorator.js +16 -16
- package/dist/esm/decorators/request-data/request-data-decorator.spec.js +12 -10
- package/dist/esm/decorators/request-data/request-data-metadata.d.ts +0 -1
- package/dist/esm/utils/create-debugger.d.ts +35 -2
- package/dist/esm/utils/create-debugger.js +71 -5
- package/package.json +17 -17
- package/src/controller-registry.spec.ts +601 -275
- package/src/controller-registry.ts +263 -128
- package/src/debuggable-service.ts +1 -1
- package/src/decorators/action/action-decorator.spec.ts +16 -16
- package/src/decorators/action/action-decorator.ts +10 -12
- package/src/decorators/action/action-metadata.ts +0 -1
- package/src/decorators/after/after-decorator.spec.ts +92 -0
- package/src/decorators/after/after-decorator.ts +40 -0
- package/src/decorators/after/after-metadata.ts +17 -0
- package/src/decorators/after/after-reflector.spec.ts +107 -0
- package/src/decorators/after/after-reflector.ts +45 -0
- package/src/decorators/after/index.ts +3 -0
- package/src/decorators/before/before-decorator.spec.ts +92 -0
- package/src/decorators/before/before-decorator.ts +40 -0
- package/src/decorators/before/before-metadata.ts +17 -0
- package/src/decorators/before/before-reflector.spec.ts +111 -0
- package/src/decorators/before/before-reflector.ts +50 -0
- package/src/decorators/before/index.ts +3 -0
- package/src/decorators/controller/controller-decorator.spec.ts +33 -16
- package/src/decorators/controller/controller-decorator.ts +33 -6
- package/src/decorators/controller/controller-metadata.ts +0 -1
- package/src/decorators/index.ts +2 -0
- package/src/decorators/request-context/request-context-decorator.spec.ts +2 -15
- package/src/decorators/request-context/request-context-decorator.ts +3 -8
- package/src/decorators/request-context/request-context-metadata.ts +0 -1
- package/src/decorators/request-data/request-data-decorator.spec.ts +12 -11
- package/src/decorators/request-data/request-data-decorator.ts +41 -16
- package/src/decorators/request-data/request-data-metadata.ts +0 -1
- package/src/utils/create-debugger.ts +84 -7
package/dist/cjs/index.cjs
CHANGED
@@ -29,10 +29,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
30
30
|
|
31
31
|
// dist/esm/index.js
|
32
|
-
var
|
33
|
-
__export(
|
32
|
+
var index_exports = {};
|
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,10 @@ __export(esm_exports, {
|
|
44
48
|
RequestDataSource: () => RequestDataSource,
|
45
49
|
RestRouter: () => RestRouter,
|
46
50
|
action: () => action,
|
51
|
+
after: () => after,
|
52
|
+
before: () => before,
|
47
53
|
body: () => body,
|
48
|
-
|
54
|
+
bodyProp: () => bodyProp,
|
49
55
|
capitalize: () => capitalize,
|
50
56
|
controller: () => controller,
|
51
57
|
cookie: () => cookie,
|
@@ -69,7 +75,7 @@ __export(esm_exports, {
|
|
69
75
|
response: () => response,
|
70
76
|
toCamelCase: () => toCamelCase
|
71
77
|
});
|
72
|
-
module.exports = __toCommonJS(
|
78
|
+
module.exports = __toCommonJS(index_exports);
|
73
79
|
|
74
80
|
// dist/esm/utils/capitalize.js
|
75
81
|
function capitalize(input) {
|
@@ -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
|
99
|
-
|
100
|
-
|
101
|
-
|
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("
|
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/
|
167
|
+
// dist/esm/decorators/after/after-metadata.js
|
138
168
|
var import_ts_reflector = require("@e22m4u/ts-reflector");
|
139
|
-
var
|
169
|
+
var AFTER_METADATA_KEY = new import_ts_reflector.MetadataKey("afterMetadataKey");
|
140
170
|
|
141
|
-
// dist/esm/decorators/
|
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 =
|
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
|
-
|
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 =
|
293
|
+
const metadata = import_ts_reflector10.Reflector.getOwnMetadata(ACTIONS_METADATA_KEY, target);
|
164
294
|
return metadata ?? /* @__PURE__ */ new Map();
|
165
295
|
}
|
166
296
|
};
|
@@ -169,18 +299,14 @@ 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
|
173
|
-
var
|
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,
|
177
|
-
if (decoratorType !==
|
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
|
-
|
180
|
-
...options,
|
181
|
-
propertyKey
|
182
|
-
};
|
183
|
-
ActionReflector.setMetadata(metadata, target.constructor, propertyKey);
|
309
|
+
ActionReflector.setMetadata({ ...options, propertyKey }, target.constructor, propertyKey);
|
184
310
|
};
|
185
311
|
}
|
186
312
|
__name(action, "action");
|
@@ -201,15 +327,15 @@ var del = /* @__PURE__ */ __name((path, options) => {
|
|
201
327
|
}, "del");
|
202
328
|
|
203
329
|
// dist/esm/decorators/controller/controller-metadata.js
|
204
|
-
var
|
205
|
-
var CONTROLLER_METADATA_KEY = new
|
330
|
+
var import_ts_reflector13 = require("@e22m4u/ts-reflector");
|
331
|
+
var CONTROLLER_METADATA_KEY = new import_ts_reflector13.MetadataKey("controllerMetadataKey");
|
206
332
|
|
207
333
|
// dist/esm/decorators/controller/controller-decorator.js
|
208
|
-
var
|
209
|
-
var
|
334
|
+
var import_ts_reflector15 = require("@e22m4u/ts-reflector");
|
335
|
+
var import_ts_reflector16 = require("@e22m4u/ts-reflector");
|
210
336
|
|
211
337
|
// dist/esm/decorators/controller/controller-reflector.js
|
212
|
-
var
|
338
|
+
var import_ts_reflector14 = require("@e22m4u/ts-reflector");
|
213
339
|
var _ControllerReflector = class _ControllerReflector {
|
214
340
|
/**
|
215
341
|
* Set metadata.
|
@@ -218,7 +344,7 @@ var _ControllerReflector = class _ControllerReflector {
|
|
218
344
|
* @param target
|
219
345
|
*/
|
220
346
|
static setMetadata(metadata, target) {
|
221
|
-
return
|
347
|
+
return import_ts_reflector14.Reflector.defineMetadata(CONTROLLER_METADATA_KEY, metadata, target);
|
222
348
|
}
|
223
349
|
/**
|
224
350
|
* Get metadata.
|
@@ -226,29 +352,34 @@ var _ControllerReflector = class _ControllerReflector {
|
|
226
352
|
* @param target
|
227
353
|
*/
|
228
354
|
static getMetadata(target) {
|
229
|
-
return
|
355
|
+
return import_ts_reflector14.Reflector.getOwnMetadata(CONTROLLER_METADATA_KEY, target);
|
230
356
|
}
|
231
357
|
};
|
232
358
|
__name(_ControllerReflector, "ControllerReflector");
|
233
359
|
var ControllerReflector = _ControllerReflector;
|
234
360
|
|
235
361
|
// dist/esm/decorators/controller/controller-decorator.js
|
236
|
-
function controller(options) {
|
362
|
+
function controller(pathOrOptions, options) {
|
237
363
|
return function(target) {
|
238
|
-
const decoratorType = (0,
|
239
|
-
if (decoratorType !==
|
364
|
+
const decoratorType = (0, import_ts_reflector16.getDecoratorTargetType)(target);
|
365
|
+
if (decoratorType !== import_ts_reflector15.DecoratorTargetType.CONSTRUCTOR)
|
240
366
|
throw new Error("@controller decorator is only supported on a class.");
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
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
|
+
}
|
376
|
+
ControllerReflector.setMetadata({ ...options, className: target.name }, target);
|
246
377
|
};
|
247
378
|
}
|
248
379
|
__name(controller, "controller");
|
249
380
|
|
250
381
|
// dist/esm/decorators/request-data/request-data-metadata.js
|
251
|
-
var
|
382
|
+
var import_ts_reflector17 = require("@e22m4u/ts-reflector");
|
252
383
|
var RequestDataSource;
|
253
384
|
(function(RequestDataSource2) {
|
254
385
|
RequestDataSource2["PARAMS"] = "params";
|
@@ -257,15 +388,15 @@ var RequestDataSource;
|
|
257
388
|
RequestDataSource2["COOKIE"] = "cookie";
|
258
389
|
RequestDataSource2["BODY"] = "body";
|
259
390
|
})(RequestDataSource || (RequestDataSource = {}));
|
260
|
-
var REQUEST_DATA_METADATA_KEY = new
|
391
|
+
var REQUEST_DATA_METADATA_KEY = new import_ts_reflector17.MetadataKey("requestDataMetadataKey");
|
261
392
|
|
262
393
|
// dist/esm/decorators/request-data/request-data-decorator.js
|
263
394
|
var import_ts_data_schema = require("@e22m4u/ts-data-schema");
|
264
|
-
var
|
265
|
-
var
|
395
|
+
var import_ts_reflector19 = require("@e22m4u/ts-reflector");
|
396
|
+
var import_ts_reflector20 = require("@e22m4u/ts-reflector");
|
266
397
|
|
267
398
|
// dist/esm/decorators/request-data/request-data-reflector.js
|
268
|
-
var
|
399
|
+
var import_ts_reflector18 = require("@e22m4u/ts-reflector");
|
269
400
|
var _RequestDataReflector = class _RequestDataReflector {
|
270
401
|
/**
|
271
402
|
* Set metadata.
|
@@ -276,10 +407,10 @@ var _RequestDataReflector = class _RequestDataReflector {
|
|
276
407
|
* @param propertyKey
|
277
408
|
*/
|
278
409
|
static setMetadata(metadata, target, index, propertyKey) {
|
279
|
-
const oldMap =
|
410
|
+
const oldMap = import_ts_reflector18.Reflector.getOwnMetadata(REQUEST_DATA_METADATA_KEY, target, propertyKey);
|
280
411
|
const newMap = new Map(oldMap);
|
281
412
|
newMap.set(index, metadata);
|
282
|
-
|
413
|
+
import_ts_reflector18.Reflector.defineMetadata(REQUEST_DATA_METADATA_KEY, newMap, target, propertyKey);
|
283
414
|
}
|
284
415
|
/**
|
285
416
|
* Get metadata.
|
@@ -288,7 +419,7 @@ var _RequestDataReflector = class _RequestDataReflector {
|
|
288
419
|
* @param propertyKey
|
289
420
|
*/
|
290
421
|
static getMetadata(target, propertyKey) {
|
291
|
-
const metadata =
|
422
|
+
const metadata = import_ts_reflector18.Reflector.getOwnMetadata(REQUEST_DATA_METADATA_KEY, target, propertyKey);
|
292
423
|
return metadata ?? /* @__PURE__ */ new Map();
|
293
424
|
}
|
294
425
|
};
|
@@ -296,23 +427,23 @@ __name(_RequestDataReflector, "RequestDataReflector");
|
|
296
427
|
var RequestDataReflector = _RequestDataReflector;
|
297
428
|
|
298
429
|
// dist/esm/decorators/request-data/request-data-decorator.js
|
299
|
-
function requestData(
|
430
|
+
function requestData(options) {
|
300
431
|
return function(target, propertyKey, indexOrDescriptor) {
|
301
|
-
const decoratorType = (0,
|
302
|
-
if (decoratorType !==
|
432
|
+
const decoratorType = (0, import_ts_reflector20.getDecoratorTargetType)(target, propertyKey, indexOrDescriptor);
|
433
|
+
if (decoratorType !== import_ts_reflector19.DecoratorTargetType.INSTANCE_METHOD_PARAMETER)
|
303
434
|
throw new Error("@requestData decorator is only supported on an instance method parameter.");
|
304
|
-
RequestDataReflector.setMetadata(
|
435
|
+
RequestDataReflector.setMetadata(options, target.constructor, indexOrDescriptor, propertyKey);
|
305
436
|
};
|
306
437
|
}
|
307
438
|
__name(requestData, "requestData");
|
308
|
-
function
|
439
|
+
function createRequestDataDecoratorWithSource(source) {
|
309
440
|
return function() {
|
310
441
|
const schema = { type: import_ts_data_schema.DataType.OBJECT };
|
311
442
|
return requestData({ schema, source });
|
312
443
|
};
|
313
444
|
}
|
314
|
-
__name(
|
315
|
-
function
|
445
|
+
__name(createRequestDataDecoratorWithSource, "createRequestDataDecoratorWithSource");
|
446
|
+
function createRequestDataPropertyDecoratorWithSource(source) {
|
316
447
|
return function(propertyKey, schemaOrType) {
|
317
448
|
const properties = {};
|
318
449
|
const rootSchema = { type: import_ts_data_schema.DataType.OBJECT };
|
@@ -330,16 +461,16 @@ function createPropertyDecorator(source) {
|
|
330
461
|
});
|
331
462
|
};
|
332
463
|
}
|
333
|
-
__name(
|
334
|
-
var params =
|
335
|
-
var param =
|
336
|
-
var queries =
|
337
|
-
var query =
|
338
|
-
var headers =
|
339
|
-
var header =
|
340
|
-
var cookies =
|
341
|
-
var cookie =
|
342
|
-
var
|
464
|
+
__name(createRequestDataPropertyDecoratorWithSource, "createRequestDataPropertyDecoratorWithSource");
|
465
|
+
var params = createRequestDataDecoratorWithSource(RequestDataSource.PARAMS);
|
466
|
+
var param = createRequestDataPropertyDecoratorWithSource(RequestDataSource.PARAMS);
|
467
|
+
var queries = createRequestDataDecoratorWithSource(RequestDataSource.QUERY);
|
468
|
+
var query = createRequestDataPropertyDecoratorWithSource(RequestDataSource.QUERY);
|
469
|
+
var headers = createRequestDataDecoratorWithSource(RequestDataSource.HEADERS);
|
470
|
+
var header = createRequestDataPropertyDecoratorWithSource(RequestDataSource.HEADERS);
|
471
|
+
var cookies = createRequestDataDecoratorWithSource(RequestDataSource.COOKIE);
|
472
|
+
var cookie = createRequestDataPropertyDecoratorWithSource(RequestDataSource.COOKIE);
|
473
|
+
var bodyProp = createRequestDataPropertyDecoratorWithSource(RequestDataSource.BODY);
|
343
474
|
function body(schemaOrType) {
|
344
475
|
let schema;
|
345
476
|
if (typeof schemaOrType === "object") {
|
@@ -354,15 +485,15 @@ function body(schemaOrType) {
|
|
354
485
|
__name(body, "body");
|
355
486
|
|
356
487
|
// dist/esm/decorators/request-context/request-context-metadata.js
|
357
|
-
var
|
358
|
-
var REQUEST_CONTEXT_METADATA_KEY = new
|
488
|
+
var import_ts_reflector21 = require("@e22m4u/ts-reflector");
|
489
|
+
var REQUEST_CONTEXT_METADATA_KEY = new import_ts_reflector21.MetadataKey("requestContextMetadataKey");
|
359
490
|
|
360
491
|
// dist/esm/decorators/request-context/request-context-decorator.js
|
361
|
-
var
|
362
|
-
var
|
492
|
+
var import_ts_reflector23 = require("@e22m4u/ts-reflector");
|
493
|
+
var import_ts_reflector24 = require("@e22m4u/ts-reflector");
|
363
494
|
|
364
495
|
// dist/esm/decorators/request-context/request-context-reflector.js
|
365
|
-
var
|
496
|
+
var import_ts_reflector22 = require("@e22m4u/ts-reflector");
|
366
497
|
var _RequestContextReflector = class _RequestContextReflector {
|
367
498
|
/**
|
368
499
|
* Set metadata.
|
@@ -373,10 +504,10 @@ var _RequestContextReflector = class _RequestContextReflector {
|
|
373
504
|
* @param propertyKey
|
374
505
|
*/
|
375
506
|
static setMetadata(metadata, target, index, propertyKey) {
|
376
|
-
const oldMap =
|
507
|
+
const oldMap = import_ts_reflector22.Reflector.getOwnMetadata(REQUEST_CONTEXT_METADATA_KEY, target, propertyKey);
|
377
508
|
const newMap = new Map(oldMap);
|
378
509
|
newMap.set(index, metadata);
|
379
|
-
|
510
|
+
import_ts_reflector22.Reflector.defineMetadata(REQUEST_CONTEXT_METADATA_KEY, newMap, target, propertyKey);
|
380
511
|
}
|
381
512
|
/**
|
382
513
|
* Get metadata.
|
@@ -385,7 +516,7 @@ var _RequestContextReflector = class _RequestContextReflector {
|
|
385
516
|
* @param propertyKey
|
386
517
|
*/
|
387
518
|
static getMetadata(target, propertyKey) {
|
388
|
-
const metadata =
|
519
|
+
const metadata = import_ts_reflector22.Reflector.getOwnMetadata(REQUEST_CONTEXT_METADATA_KEY, target, propertyKey);
|
389
520
|
return metadata ?? /* @__PURE__ */ new Map();
|
390
521
|
}
|
391
522
|
};
|
@@ -393,13 +524,12 @@ __name(_RequestContextReflector, "RequestContextReflector");
|
|
393
524
|
var RequestContextReflector = _RequestContextReflector;
|
394
525
|
|
395
526
|
// dist/esm/decorators/request-context/request-context-decorator.js
|
396
|
-
function requestContext(
|
527
|
+
function requestContext(propertyName) {
|
397
528
|
return function(target, propertyKey, indexOrDescriptor) {
|
398
|
-
const decoratorType = (0,
|
399
|
-
if (decoratorType !==
|
529
|
+
const decoratorType = (0, import_ts_reflector24.getDecoratorTargetType)(target, propertyKey, indexOrDescriptor);
|
530
|
+
if (decoratorType !== import_ts_reflector23.DecoratorTargetType.INSTANCE_METHOD_PARAMETER)
|
400
531
|
throw new Error("@requestContext decorator is only supported on an instance method parameter.");
|
401
|
-
|
402
|
-
RequestContextReflector.setMetadata(metadata, target.constructor, indexOrDescriptor, propertyKey);
|
532
|
+
RequestContextReflector.setMetadata({ property: propertyName }, target.constructor, indexOrDescriptor, propertyKey);
|
403
533
|
};
|
404
534
|
}
|
405
535
|
__name(requestContext, "requestContext");
|
@@ -412,6 +542,9 @@ function response() {
|
|
412
542
|
}
|
413
543
|
__name(response, "response");
|
414
544
|
|
545
|
+
// dist/esm/controller-registry.js
|
546
|
+
var import_ts_data_schema3 = require("@e22m4u/ts-data-schema");
|
547
|
+
|
415
548
|
// dist/esm/errors/not-a-controller-error.js
|
416
549
|
var import_js_format3 = require("@e22m4u/js-format");
|
417
550
|
var _NotAControllerError = class _NotAControllerError extends import_js_format3.Errorf {
|
@@ -440,41 +573,60 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
440
573
|
* @param options
|
441
574
|
*/
|
442
575
|
addController(ctor, options) {
|
576
|
+
const debug = this.debug.bind(this.addController.name);
|
443
577
|
if (this.hasController(ctor))
|
444
578
|
throw new import_js_format4.Errorf("The controller %v is already registered.");
|
445
579
|
const controllerMd = ControllerReflector.getMetadata(ctor);
|
446
580
|
if (!controllerMd)
|
447
581
|
throw new NotAControllerError(ctor);
|
448
|
-
|
449
|
-
|
450
|
-
this.
|
451
|
-
|
452
|
-
this.
|
453
|
-
|
454
|
-
|
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);
|
455
601
|
const actionsMd = ActionReflector.getMetadata(ctor);
|
456
|
-
|
602
|
+
debug("%v actions found.", actionsMd.size);
|
457
603
|
const router = this.getService(import_js_trie_router2.TrieRouter);
|
458
604
|
actionsMd.forEach((actionMd, actionName) => {
|
459
|
-
|
460
|
-
|
461
|
-
const prefixedRoutePath = `${pathPrefix}/${actionMd.path}`.replace(
|
462
|
-
|
463
|
-
const actionPreHandlers =
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
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);
|
469
621
|
const routeHandler = this.createRouteHandler(ctor, actionName);
|
470
622
|
router.defineRoute({
|
471
623
|
method: actionMd.method,
|
472
624
|
path: prefixedRoutePath,
|
473
|
-
preHandler:
|
625
|
+
preHandler: actionPreHandlers,
|
474
626
|
handler: routeHandler,
|
475
|
-
postHandler:
|
627
|
+
postHandler: actionPostHandlers
|
476
628
|
});
|
477
|
-
|
629
|
+
debug("Route %s %v is added.", actionMd.method.toUpperCase(), prefixedRoutePath);
|
478
630
|
});
|
479
631
|
this.controllers.add(ctor);
|
480
632
|
return this;
|
@@ -488,57 +640,193 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
488
640
|
return this.controllers.has(ctor);
|
489
641
|
}
|
490
642
|
/**
|
491
|
-
* Get path prefix
|
643
|
+
* Get path prefix from controller root options.
|
492
644
|
*
|
493
|
-
* @param controllerMd
|
494
645
|
* @param options
|
495
646
|
*/
|
496
|
-
|
497
|
-
const
|
498
|
-
|
499
|
-
const
|
500
|
-
|
501
|
-
|
502
|
-
this.debug("Merged path prefix is %v.", mergedPathPrefix);
|
503
|
-
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;
|
504
653
|
}
|
505
654
|
/**
|
506
|
-
* Get
|
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 || "";
|
669
|
+
}
|
670
|
+
/**
|
671
|
+
* Getting pre-handlers from controller root options.
|
507
672
|
*
|
508
|
-
* @param controllerMd
|
509
673
|
* @param options
|
510
674
|
*/
|
511
|
-
|
512
|
-
|
675
|
+
getPreHandlersFromControllerRootOptions(options) {
|
676
|
+
const debug = this.debug.bind(this.getPreHandlersFromControllerRootOptions.name);
|
677
|
+
debug("Getting pre-handlers from controller root options.");
|
678
|
+
let res = [];
|
513
679
|
if (options == null ? void 0 : options.before)
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
if (controllerMd.before)
|
518
|
-
ctlPreHandlers = Array.isArray(controllerMd.before) ? controllerMd.before : [controllerMd.before];
|
519
|
-
this.debug("%v controller pre-handlers found.", ctlPreHandlers.length);
|
520
|
-
const mergedPreHandlers = [...rootPreHandlers, ...ctlPreHandlers];
|
521
|
-
this.debug("%v merged pre-handlers.", mergedPreHandlers.length);
|
522
|
-
return mergedPreHandlers;
|
680
|
+
res = Array.isArray(options.before) ? options.before : [options.before];
|
681
|
+
debug("%v pre-handlers found.", res.length);
|
682
|
+
return res;
|
523
683
|
}
|
524
684
|
/**
|
525
|
-
*
|
685
|
+
* Getting post-handlers from controller root options.
|
526
686
|
*
|
527
|
-
* @param controllerMd
|
528
687
|
* @param options
|
529
688
|
*/
|
530
|
-
|
531
|
-
|
689
|
+
getPostHandlersFromControllerRootOptions(options) {
|
690
|
+
const debug = this.debug.bind(this.getPostHandlersFromControllerRootOptions.name);
|
691
|
+
debug("Getting post-handlers from controller root options.");
|
692
|
+
let res = [];
|
532
693
|
if (options == null ? void 0 : options.after)
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
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;
|
542
830
|
}
|
543
831
|
/**
|
544
832
|
* Create route handler.
|
@@ -548,34 +836,35 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
548
836
|
* @protected
|
549
837
|
*/
|
550
838
|
createRouteHandler(controllerCtor, actionName) {
|
551
|
-
this.debug(
|
839
|
+
const debug = this.debug.bind(this.createRouteHandler.name);
|
840
|
+
debug("Creating route handler for %s.%s.", controllerCtor.name, actionName);
|
552
841
|
const requestContextMetadataMap = RequestContextReflector.getMetadata(controllerCtor, actionName);
|
553
842
|
const requestDataMetadataMap = RequestDataReflector.getMetadata(controllerCtor, actionName);
|
554
843
|
const argsNumber = controllerCtor.prototype[actionName].length;
|
555
844
|
const dataTypeCaster = this.getService(import_ts_data_schema3.DataTypeCaster);
|
556
845
|
const dataValidator = this.getService(import_ts_data_schema2.DataValidator);
|
557
846
|
return (requestContext2) => {
|
558
|
-
|
847
|
+
debug("Executing route handler for %s.%s.", controllerCtor.name, actionName);
|
559
848
|
const args = Array(argsNumber).fill(void 0).map((_, index) => {
|
560
849
|
const requestContextMd = requestContextMetadataMap.get(index);
|
561
850
|
if (requestContextMd != null) {
|
562
|
-
|
851
|
+
debug("Argument %v has request context metadata.", index);
|
563
852
|
if (requestContextMd.property == null) {
|
564
|
-
|
565
|
-
|
853
|
+
debug("Request context property is not specified.");
|
854
|
+
debug("Argument %v is set to %v.", index, requestContext2);
|
566
855
|
return requestContext2;
|
567
856
|
}
|
568
857
|
const propName = requestContextMd.property;
|
569
858
|
const propValue = requestContext2[propName];
|
570
|
-
|
571
|
-
|
859
|
+
debug("Request context property is %v.", propName);
|
860
|
+
debug("Argument %v is set to %v.", index, propValue);
|
572
861
|
return propValue;
|
573
862
|
} else {
|
574
|
-
|
863
|
+
debug("No RequestContextMetadata specified for %v argument.", index);
|
575
864
|
}
|
576
865
|
const requestDataMd = requestDataMetadataMap.get(index);
|
577
866
|
if (requestDataMd != null) {
|
578
|
-
|
867
|
+
debug("Argument %v has request data metadata.", index);
|
579
868
|
let data;
|
580
869
|
switch (requestDataMd.source) {
|
581
870
|
case RequestDataSource.PARAMS:
|
@@ -594,29 +883,29 @@ var _ControllerRegistry = class _ControllerRegistry extends DebuggableService {
|
|
594
883
|
data = requestContext2.body;
|
595
884
|
break;
|
596
885
|
}
|
597
|
-
|
886
|
+
debug("Request data source is %v.", requestDataMd.source);
|
598
887
|
if (requestDataMd.schema) {
|
599
888
|
data = dataTypeCaster.cast(data, requestDataMd.schema, {
|
600
889
|
noTypeCastError: true,
|
601
890
|
sourcePath: requestDataMd.source
|
602
891
|
});
|
603
|
-
|
892
|
+
debug("Data type casting is passed.");
|
604
893
|
dataValidator.validate(data, requestDataMd.schema, requestDataMd.source);
|
605
|
-
|
894
|
+
debug("Data validation is passed.");
|
606
895
|
}
|
607
896
|
if (requestDataMd.property == null) {
|
608
|
-
|
609
|
-
|
897
|
+
debug("Request data property is not specified.");
|
898
|
+
debug("Argument %v is set to %v.", index, data);
|
610
899
|
return data;
|
611
900
|
}
|
612
901
|
const dataAsObject = data;
|
613
902
|
const propName = requestDataMd.property;
|
614
903
|
const propValue = dataAsObject[propName];
|
615
|
-
|
616
|
-
|
904
|
+
debug("Request data property is %v.", propName);
|
905
|
+
debug("Argument %v is set to %v.", index, propValue);
|
617
906
|
return propValue;
|
618
907
|
} else {
|
619
|
-
|
908
|
+
debug("No RequestDataMetadata specified for %v argument.", index);
|
620
909
|
}
|
621
910
|
});
|
622
911
|
const controller2 = this.getService(controllerCtor);
|
@@ -651,7 +940,11 @@ var RestRouter = _RestRouter;
|
|
651
940
|
// Annotate the CommonJS export names for ESM import in node:
|
652
941
|
0 && (module.exports = {
|
653
942
|
ACTIONS_METADATA_KEY,
|
943
|
+
AFTER_METADATA_KEY,
|
654
944
|
ActionReflector,
|
945
|
+
AfterReflector,
|
946
|
+
BEFORE_METADATA_KEY,
|
947
|
+
BeforeReflector,
|
655
948
|
CONTROLLER_METADATA_KEY,
|
656
949
|
ControllerReflector,
|
657
950
|
ControllerRegistry,
|
@@ -663,8 +956,10 @@ var RestRouter = _RestRouter;
|
|
663
956
|
RequestDataSource,
|
664
957
|
RestRouter,
|
665
958
|
action,
|
959
|
+
after,
|
960
|
+
before,
|
666
961
|
body,
|
667
|
-
|
962
|
+
bodyProp,
|
668
963
|
capitalize,
|
669
964
|
controller,
|
670
965
|
cookie,
|