@deepkit/http 1.0.1-alpha.58 → 1.0.1-alpha.62
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/coverage/clover.xml +1086 -0
- package/coverage/coverage-final.json +12 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +79 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +126 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +170 -0
- package/coverage/lcov-report/src/controllers.ts.html +113 -0
- package/coverage/lcov-report/src/decorator.ts.html +1280 -0
- package/coverage/lcov-report/src/filter.ts.html +734 -0
- package/coverage/lcov-report/src/http.ts.html +2192 -0
- package/coverage/lcov-report/src/index.html +246 -0
- package/coverage/lcov-report/src/kernel.ts.html +260 -0
- package/coverage/lcov-report/src/middleware.ts.html +428 -0
- package/coverage/lcov-report/src/model.ts.html +937 -0
- package/coverage/lcov-report/src/module.config.ts.html +89 -0
- package/coverage/lcov-report/src/module.ts.html +245 -0
- package/coverage/lcov-report/src/router.ts.html +2318 -0
- package/coverage/lcov-report/tests/index.html +111 -0
- package/coverage/lcov-report/tests/utils.ts.html +176 -0
- package/coverage/lcov.info +2225 -0
- package/dist/cjs/src/controllers.d.ts +4 -4
- package/dist/cjs/src/controllers.js +3 -0
- package/dist/cjs/src/controllers.js.map +1 -1
- package/dist/cjs/src/decorator.d.ts +29 -94
- package/dist/cjs/src/decorator.js +53 -118
- package/dist/cjs/src/decorator.js.map +1 -1
- package/dist/cjs/src/filter.d.ts +1 -0
- package/dist/cjs/src/filter.js +11 -17
- package/dist/cjs/src/filter.js.map +1 -1
- package/dist/cjs/src/http.d.ts +5 -3
- package/dist/cjs/src/http.js +91 -55
- package/dist/cjs/src/http.js.map +1 -1
- package/dist/cjs/src/kernel.d.ts +3 -3
- package/dist/cjs/src/kernel.js +5 -25
- package/dist/cjs/src/kernel.js.map +1 -1
- package/dist/cjs/src/logger.d.ts +2 -2
- package/dist/cjs/src/logger.js +4 -8
- package/dist/cjs/src/logger.js.map +1 -1
- package/dist/cjs/src/middleware.d.ts +5 -1
- package/dist/cjs/src/middleware.js +15 -3
- package/dist/cjs/src/middleware.js.map +1 -1
- package/dist/cjs/src/model.d.ts +69 -2
- package/dist/cjs/src/model.js +96 -25
- package/dist/cjs/src/model.js.map +1 -1
- package/dist/cjs/src/module.config.d.ts +3 -4
- package/dist/cjs/src/module.config.js +8 -6
- package/dist/cjs/src/module.config.js.map +1 -1
- package/dist/cjs/src/module.d.ts +2 -3
- package/dist/cjs/src/module.js +4 -2
- package/dist/cjs/src/module.js.map +1 -1
- package/dist/cjs/src/router.d.ts +25 -54
- package/dist/cjs/src/router.js +157 -175
- package/dist/cjs/src/router.js.map +1 -1
- package/dist/cjs/src/static-serving.d.ts +1 -0
- package/dist/cjs/src/static-serving.js +38 -34
- package/dist/cjs/src/static-serving.js.map +1 -1
- package/dist/cjs/src/utils.js +1 -0
- package/dist/cjs/tests/filter.spec.js +61 -47
- package/dist/cjs/tests/filter.spec.js.map +1 -1
- package/dist/cjs/tests/middleware.spec.d.ts +1 -1
- package/dist/cjs/tests/middleware.spec.js +157 -145
- package/dist/cjs/tests/middleware.spec.js.map +1 -1
- package/dist/cjs/tests/model.spec.js +4 -4
- package/dist/cjs/tests/model.spec.js.map +1 -1
- package/dist/cjs/tests/module.spec.js +4 -3
- package/dist/cjs/tests/module.spec.js.map +1 -1
- package/dist/cjs/tests/router.spec.d.ts +1 -1
- package/dist/cjs/tests/router.spec.js +311 -322
- package/dist/cjs/tests/router.spec.js.map +1 -1
- package/dist/cjs/tests/utils.js +5 -2
- package/dist/cjs/tests/utils.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/controllers.d.ts +4 -4
- package/dist/esm/src/controllers.js +3 -0
- package/dist/esm/src/controllers.js.map +1 -1
- package/dist/esm/src/decorator.d.ts +29 -94
- package/dist/esm/src/decorator.js +49 -114
- package/dist/esm/src/decorator.js.map +1 -1
- package/dist/esm/src/filter.d.ts +1 -0
- package/dist/esm/src/filter.js +11 -18
- package/dist/esm/src/filter.js.map +1 -1
- package/dist/esm/src/http.d.ts +5 -3
- package/dist/esm/src/http.js +89 -55
- package/dist/esm/src/http.js.map +1 -1
- package/dist/esm/src/kernel.d.ts +3 -3
- package/dist/esm/src/kernel.js +6 -27
- package/dist/esm/src/kernel.js.map +1 -1
- package/dist/esm/src/logger.d.ts +2 -2
- package/dist/esm/src/logger.js +4 -9
- package/dist/esm/src/logger.js.map +1 -1
- package/dist/esm/src/middleware.d.ts +5 -1
- package/dist/esm/src/middleware.js +12 -0
- package/dist/esm/src/middleware.js.map +1 -1
- package/dist/esm/src/model.d.ts +69 -2
- package/dist/esm/src/model.js +92 -24
- package/dist/esm/src/model.js.map +1 -1
- package/dist/esm/src/module.config.d.ts +3 -4
- package/dist/esm/src/module.config.js +6 -5
- package/dist/esm/src/module.config.js.map +1 -1
- package/dist/esm/src/module.d.ts +2 -3
- package/dist/esm/src/module.js +5 -3
- package/dist/esm/src/module.js.map +1 -1
- package/dist/esm/src/router.d.ts +25 -54
- package/dist/esm/src/router.js +154 -172
- package/dist/esm/src/router.js.map +1 -1
- package/dist/esm/src/static-serving.d.ts +1 -0
- package/dist/esm/src/static-serving.js +29 -25
- package/dist/esm/src/static-serving.js.map +1 -1
- package/dist/esm/src/utils.js +1 -0
- package/dist/esm/tests/filter.spec.js +14 -0
- package/dist/esm/tests/filter.spec.js.map +1 -1
- package/dist/esm/tests/middleware.spec.d.ts +1 -1
- package/dist/esm/tests/middleware.spec.js +60 -48
- package/dist/esm/tests/middleware.spec.js.map +1 -1
- package/dist/esm/tests/module.spec.js +1 -0
- package/dist/esm/tests/module.spec.js.map +1 -1
- package/dist/esm/tests/router.spec.d.ts +1 -1
- package/dist/esm/tests/router.spec.js +184 -195
- package/dist/esm/tests/router.spec.js.map +1 -1
- package/dist/esm/tests/utils.js +4 -1
- package/dist/esm/tests/utils.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +14 -15
- package/src/controllers.ts +3 -3
- package/src/decorator.ts +42 -131
- package/src/filter.ts +0 -2
- package/src/http.ts +35 -36
- package/src/kernel.ts +4 -5
- package/src/logger.ts +2 -4
- package/src/middleware.ts +2 -1
- package/src/model.ts +86 -8
- package/src/module.config.ts +3 -6
- package/src/module.ts +2 -2
- package/src/router.ts +143 -183
- package/src/static-serving.ts +2 -4
- package/tests/middleware.spec.ts +0 -1
- package/tests/router.spec.ts +152 -131
- package/tsconfig.json +2 -1
package/dist/cjs/src/router.js
CHANGED
|
@@ -5,14 +5,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
10
|
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.Router = exports.dotToUrlPath = exports.parseRouteControllerAction = exports.
|
|
12
|
+
exports.Router = exports.__ΩRouteParameterResolverContext = exports.__ΩRouteParameterResolver = exports.dotToUrlPath = exports.parseRouteControllerAction = exports.RouteConfig = exports.__ΩRouteControllerAction = exports.UploadedFile = exports.__ΩRouteParameterResolverForInjector = void 0;
|
|
13
|
+
var { __ΩSerializationOptions } = require('@deepkit/type');
|
|
14
|
+
var { __ΩClassType } = require('@deepkit/core');
|
|
15
|
+
var { __ΩMiddlewareRegistryEntry } = require('@deepkit/app');
|
|
16
|
+
var { __ΩLoggerInterface } = require('@deepkit/logger');
|
|
17
|
+
var { __ΩHttpMiddlewareFn } = require('./middleware');
|
|
18
|
+
var { __ΩHttpRequestQuery } = require('./model');
|
|
19
|
+
var { __ΩHttpRequestResolvedParameters } = require('./model');
|
|
16
20
|
/*
|
|
17
21
|
* Deepkit Framework
|
|
18
22
|
* Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
|
|
@@ -22,58 +26,33 @@ exports.Router = exports.dotToUrlPath = exports.parseRouteControllerAction = exp
|
|
|
22
26
|
*
|
|
23
27
|
* You should have received a copy of the MIT License along with this program.
|
|
24
28
|
*/
|
|
25
|
-
require("reflect-metadata");
|
|
26
29
|
const core_1 = require("@deepkit/core");
|
|
27
30
|
const type_1 = require("@deepkit/type");
|
|
28
31
|
// @ts-ignore
|
|
29
32
|
const formidable_1 = __importDefault(require("formidable"));
|
|
30
33
|
const decorator_1 = require("./decorator");
|
|
34
|
+
const model_1 = require("./model");
|
|
31
35
|
const injector_1 = require("@deepkit/injector");
|
|
32
36
|
const logger_1 = require("@deepkit/logger");
|
|
33
37
|
const controllers_1 = require("./controllers");
|
|
34
38
|
const app_1 = require("@deepkit/app");
|
|
35
39
|
const middleware_1 = require("./middleware");
|
|
40
|
+
var __ΩRouteParameterResolverForInjector = [() => injector_1.InjectorContext, 'injector', '', 'PP7!2"P"F"F`J/#'];
|
|
41
|
+
exports.__ΩRouteParameterResolverForInjector = __ΩRouteParameterResolverForInjector;
|
|
42
|
+
var __ΩResolvedController = [() => __ΩRouteParameterResolverForInjector, 'parameters', () => RouteConfig, 'routeConfig', () => UploadedFile, 'uploadedFiles', () => injector_1.InjectorContext, 'injector', () => __ΩHttpMiddlewareFn, 'fn', 'timeout', '', 'middlewares', 'Pn!4"P7#4$P&P7%LM4&PP7\'2(Pn)4*\'4+MF/,4-8M'];
|
|
36
43
|
let UploadedFile = class UploadedFile {
|
|
37
44
|
};
|
|
38
|
-
|
|
39
|
-
type_1.t.required,
|
|
40
|
-
__metadata("design:type", Number)
|
|
41
|
-
], UploadedFile.prototype, "size", void 0);
|
|
42
|
-
__decorate([
|
|
43
|
-
type_1.t.required,
|
|
44
|
-
__metadata("design:type", String)
|
|
45
|
-
], UploadedFile.prototype, "path", void 0);
|
|
46
|
-
__decorate([
|
|
47
|
-
type_1.t.string.required.nullable,
|
|
48
|
-
__metadata("design:type", Object)
|
|
49
|
-
], UploadedFile.prototype, "name", void 0);
|
|
50
|
-
__decorate([
|
|
51
|
-
type_1.t.string.required.nullable,
|
|
52
|
-
__metadata("design:type", Object)
|
|
53
|
-
], UploadedFile.prototype, "type", void 0);
|
|
54
|
-
__decorate([
|
|
55
|
-
type_1.t.date.required.nullable,
|
|
56
|
-
__metadata("design:type", Object)
|
|
57
|
-
], UploadedFile.prototype, "lastModifiedDate", void 0);
|
|
45
|
+
UploadedFile.__type = ['size', 'path', 'name', 'type', 'lastModifiedDate', '\'3!&3"P&,J3#P&,J3$PT,J3%5'];
|
|
58
46
|
UploadedFile = __decorate([
|
|
59
47
|
type_1.entity.name('@deepkit/UploadedFile')
|
|
60
48
|
], UploadedFile);
|
|
61
49
|
exports.UploadedFile = UploadedFile;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
form.parse(req, (err, fields, files) => {
|
|
65
|
-
if (err) {
|
|
66
|
-
reject(err);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
resolve({ fields, files });
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
}
|
|
50
|
+
var __ΩRouteControllerAction = [() => injector_1.InjectorModule, 'module', () => __ΩClassType, 'controller', 'methodName', 'PP"7!4"8n#4$&4%M'];
|
|
51
|
+
exports.__ΩRouteControllerAction = __ΩRouteControllerAction;
|
|
74
52
|
function getRouterControllerActionName(action) {
|
|
75
|
-
return `${core_1.getClassName(action.controller)}.${action.methodName}`;
|
|
53
|
+
return `${(0, core_1.getClassName)(action.controller)}.${action.methodName}`;
|
|
76
54
|
}
|
|
55
|
+
getRouterControllerActionName.__type = [() => __ΩRouteControllerAction, 'action', 'getRouterControllerActionName', 'Pn!2"&/#'];
|
|
77
56
|
class RouteConfig {
|
|
78
57
|
constructor(name, httpMethods, path, action, internal = false) {
|
|
79
58
|
this.name = name;
|
|
@@ -82,7 +61,6 @@ class RouteConfig {
|
|
|
82
61
|
this.action = action;
|
|
83
62
|
this.internal = internal;
|
|
84
63
|
this.baseUrl = '';
|
|
85
|
-
this.parameterRegularExpressions = {};
|
|
86
64
|
this.responses = [];
|
|
87
65
|
this.description = '';
|
|
88
66
|
this.groups = [];
|
|
@@ -94,7 +72,6 @@ class RouteConfig {
|
|
|
94
72
|
* An arbitrary data container the user can use to store app specific settings/values.
|
|
95
73
|
*/
|
|
96
74
|
this.data = new Map();
|
|
97
|
-
this.parameters = {};
|
|
98
75
|
}
|
|
99
76
|
getSchemaForResponse(statusCode) {
|
|
100
77
|
if (!this.responses.length)
|
|
@@ -106,47 +83,22 @@ class RouteConfig {
|
|
|
106
83
|
return;
|
|
107
84
|
}
|
|
108
85
|
getFullPath() {
|
|
109
|
-
let path = this.baseUrl ? core_1.urlJoin(this.baseUrl, this.path) : this.path;
|
|
86
|
+
let path = this.baseUrl ? (0, core_1.urlJoin)(this.baseUrl, this.path) : this.path;
|
|
110
87
|
if (!path.startsWith('/'))
|
|
111
88
|
path = '/' + path;
|
|
112
89
|
return path;
|
|
113
90
|
}
|
|
114
91
|
}
|
|
115
92
|
exports.RouteConfig = RouteConfig;
|
|
116
|
-
|
|
117
|
-
* When this class is injected into a route, then validation errors are not automatically thrown (using onHttpControllerValidationError event),
|
|
118
|
-
* but injected to the route itself. The user is then responsible to handle the errors.
|
|
119
|
-
*
|
|
120
|
-
* Note: The body parameter is still passed, however it might contain now invalid data. The BodyValidation tells what data is invalid.
|
|
121
|
-
*/
|
|
122
|
-
class BodyValidation {
|
|
123
|
-
constructor(errors = []) {
|
|
124
|
-
this.errors = errors;
|
|
125
|
-
}
|
|
126
|
-
hasErrors(prefix) {
|
|
127
|
-
return this.getErrors(prefix).length > 0;
|
|
128
|
-
}
|
|
129
|
-
getErrors(prefix) {
|
|
130
|
-
if (prefix)
|
|
131
|
-
return this.errors.filter(v => v.path.startsWith(prefix));
|
|
132
|
-
return this.errors;
|
|
133
|
-
}
|
|
134
|
-
getErrorsForPath(path) {
|
|
135
|
-
return this.errors.filter(v => v.path === path);
|
|
136
|
-
}
|
|
137
|
-
getErrorMessageForPath(path) {
|
|
138
|
-
return this.getErrorsForPath(path).map(v => v.message).join(', ');
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
exports.BodyValidation = BodyValidation;
|
|
93
|
+
RouteConfig.__type = ['baseUrl', () => "", 'statusCode', 'description', 'type', 'responses', () => [], () => "", 'groups', () => [], 'category', () => "", 'returnType', () => __ΩSerializationOptions, 'serializationOptions', () => type_1.Serializer, 'serializer', () => injector_1.InjectorModule, 'module', () => __ΩClassType, 'resolverForToken', () => new Map(), () => middleware_1.HttpMiddlewareConfig, 'config', () => injector_1.InjectorModule, 'middlewares', () => [], () => __ΩClassType, 'resolverForParameterName', () => new Map(), 'name', 'httpMethods', 'path', () => __ΩRouteControllerAction, 'action', 'internal', () => false, 'constructor', 'getSchemaForResponse', 'getFullPath', '&3!>"P\'4#&4$"4%8MF3&>\'&3$>(&F3)>*&3+>,"3-8n.3/8P70318P"72338"n4E35>6PP7748P"7943MF3:>;&n<E3=>>P&2?:&F2@:&2A:nB2C:)2D:>E"0FP\'2#P"-J0GP&0H5'];
|
|
142
94
|
class ParsedRoute {
|
|
143
95
|
constructor(routeConfig) {
|
|
144
96
|
this.routeConfig = routeConfig;
|
|
145
97
|
this.pathParameterNames = {};
|
|
146
98
|
this.parameters = [];
|
|
147
99
|
}
|
|
148
|
-
addParameter(property
|
|
149
|
-
const parameter = new ParsedRouteParameter(property
|
|
100
|
+
addParameter(property) {
|
|
101
|
+
const parameter = new ParsedRouteParameter(property);
|
|
150
102
|
this.parameters.push(parameter);
|
|
151
103
|
return parameter;
|
|
152
104
|
}
|
|
@@ -161,71 +113,99 @@ class ParsedRoute {
|
|
|
161
113
|
throw new Error(`No route parameter with name ${name} defined.`);
|
|
162
114
|
}
|
|
163
115
|
}
|
|
116
|
+
ParsedRoute.__type = ['regex', 'pathParameterNames', () => ({}), () => ParsedRouteParameter, 'parameters', () => [], () => RouteConfig, 'routeConfig', 'constructor', () => type_1.ReflectionParameter, 'property', () => ParsedRouteParameter, 'addParameter', () => ParsedRouteParameter, 'getParameters', 'name', () => ParsedRouteParameter, 'getParameter', '&3!8P&\'LM3">#P7$F3%<>&PP7\'2(:"0)PP7*2+P7,0-PP7.F0/P&20P71025'];
|
|
164
117
|
class ParsedRouteParameter {
|
|
165
|
-
constructor(
|
|
166
|
-
this.
|
|
167
|
-
this.config = config;
|
|
118
|
+
constructor(parameter) {
|
|
119
|
+
this.parameter = parameter;
|
|
168
120
|
}
|
|
169
121
|
get body() {
|
|
170
|
-
return
|
|
122
|
+
return type_1.metaAnnotation.getForName(this.parameter.type, 'httpBody') !== undefined;
|
|
123
|
+
}
|
|
124
|
+
get bodyValidation() {
|
|
125
|
+
return type_1.metaAnnotation.getForName(this.parameter.type, 'httpBodyValidation') !== undefined;
|
|
126
|
+
}
|
|
127
|
+
getType() {
|
|
128
|
+
if (this.bodyValidation) {
|
|
129
|
+
(0, type_1.assertType)(this.parameter.type, 20 /* class */);
|
|
130
|
+
const valueType = (0, type_1.findMember)('value', this.parameter.type);
|
|
131
|
+
if (!valueType || valueType.kind !== 15 /* property */)
|
|
132
|
+
throw new Error(`No property value found at ${(0, type_1.stringifyType)(this.parameter.type)}`);
|
|
133
|
+
return valueType.type;
|
|
134
|
+
}
|
|
135
|
+
return this.parameter.type;
|
|
171
136
|
}
|
|
172
137
|
get query() {
|
|
173
|
-
return
|
|
138
|
+
return type_1.metaAnnotation.getForName(this.parameter.type, 'httpQuery') !== undefined;
|
|
174
139
|
}
|
|
175
140
|
get queries() {
|
|
176
|
-
return
|
|
141
|
+
return type_1.metaAnnotation.getForName(this.parameter.type, 'httpQueries') !== undefined;
|
|
177
142
|
}
|
|
178
143
|
get typePath() {
|
|
179
|
-
|
|
144
|
+
const typeOptions = type_1.metaAnnotation.getForName(this.parameter.type, 'httpQueries') || type_1.metaAnnotation.getForName(this.parameter.type, 'httpQuery');
|
|
145
|
+
if (!typeOptions)
|
|
146
|
+
return;
|
|
147
|
+
const options = (0, type_1.typeToObject)(typeOptions[0]);
|
|
148
|
+
if ((0, core_1.isObject)(options))
|
|
149
|
+
return options.name;
|
|
150
|
+
return;
|
|
180
151
|
}
|
|
181
152
|
getName() {
|
|
182
|
-
return this.
|
|
153
|
+
return this.parameter.name;
|
|
183
154
|
}
|
|
184
155
|
isPartOfPath() {
|
|
185
156
|
return this.regexPosition !== undefined;
|
|
186
157
|
}
|
|
187
158
|
}
|
|
159
|
+
ParsedRouteParameter.__type = ['regexPosition', () => type_1.ReflectionParameter, 'parameter', 'constructor', 'getType', 'getName', 'isPartOfPath', '\'3!8PP7"2#:"0$!!P"0%!!!P"0&P)0\'5'];
|
|
188
160
|
function parseRoutePathToRegex(routeConfig) {
|
|
189
161
|
const parameterNames = {};
|
|
190
162
|
let path = routeConfig.getFullPath();
|
|
163
|
+
const method = type_1.ReflectionClass.from(routeConfig.action.controller).getMethod(routeConfig.action.methodName);
|
|
191
164
|
let argumentIndex = 0;
|
|
192
|
-
path = path.replace(/:(\w+)/g, (a, name) => {
|
|
165
|
+
path = path.replace(/:(\w+)/g, Object.assign((a, name) => {
|
|
193
166
|
parameterNames[name] = argumentIndex;
|
|
194
167
|
argumentIndex++;
|
|
195
|
-
|
|
196
|
-
|
|
168
|
+
const parameter = method.getParameterOrUndefined(name);
|
|
169
|
+
if (parameter) {
|
|
170
|
+
const regExp = (0, model_1.getRegExp)(parameter.type);
|
|
171
|
+
if (regExp)
|
|
172
|
+
return '(' + regExp + ')';
|
|
173
|
+
}
|
|
174
|
+
return String.raw `([^/]+)`;
|
|
175
|
+
}, { __type: ['a', 'name', '', 'P"2!"2""/#'] }));
|
|
197
176
|
return { regex: path, parameterNames };
|
|
198
177
|
}
|
|
178
|
+
parseRoutePathToRegex.__type = [() => RouteConfig, 'routeConfig', 'regex', 'parameterNames', 'parseRoutePathToRegex', 'PP7!2"P&4#P&\'LM4$M/%'];
|
|
199
179
|
function parseRouteControllerAction(routeConfig) {
|
|
200
|
-
const schema = type_1.
|
|
180
|
+
const schema = type_1.ReflectionClass.from(routeConfig.action.controller);
|
|
201
181
|
const parsedRoute = new ParsedRoute(routeConfig);
|
|
202
|
-
const methodArgumentProperties = schema.
|
|
182
|
+
const methodArgumentProperties = schema.getMethodParameters(routeConfig.action.methodName);
|
|
203
183
|
const parsedPath = parseRoutePathToRegex(routeConfig);
|
|
204
184
|
parsedRoute.regex = parsedPath.regex;
|
|
205
185
|
parsedRoute.pathParameterNames = parsedPath.parameterNames;
|
|
206
186
|
for (const property of methodArgumentProperties) {
|
|
207
|
-
const
|
|
208
|
-
const parsedParameter = parsedRoute.addParameter(property, decoratorData);
|
|
209
|
-
if (decoratorData && decoratorData.optional)
|
|
210
|
-
property.isOptional = true;
|
|
211
|
-
if (property.type === 'class' && property.classType === BodyValidation) {
|
|
212
|
-
parsedRoute.customValidationErrorHandling = parsedParameter;
|
|
213
|
-
}
|
|
187
|
+
const parsedParameter = parsedRoute.addParameter(property);
|
|
214
188
|
parsedParameter.regexPosition = parsedPath.parameterNames[property.name];
|
|
215
189
|
}
|
|
216
190
|
return parsedRoute;
|
|
217
191
|
}
|
|
218
192
|
exports.parseRouteControllerAction = parseRouteControllerAction;
|
|
193
|
+
parseRouteControllerAction.__type = [() => RouteConfig, 'routeConfig', () => ParsedRoute, 'parseRouteControllerAction', 'PP7!2"P7#/$'];
|
|
219
194
|
function dotToUrlPath(dotPath) {
|
|
220
195
|
if (-1 === dotPath.indexOf('.'))
|
|
221
196
|
return dotPath;
|
|
222
197
|
return dotPath.replace(/\./g, '][').replace('][', '[') + ']';
|
|
223
198
|
}
|
|
224
199
|
exports.dotToUrlPath = dotToUrlPath;
|
|
200
|
+
dotToUrlPath.__type = ['dotPath', 'dotToUrlPath', 'P&2!&/"'];
|
|
201
|
+
var __ΩRouteParameterResolver = [() => __ΩRouteParameterResolverContext, 'context', 'resolve', 'PPn!2"P""`J1#M'];
|
|
202
|
+
exports.__ΩRouteParameterResolver = __ΩRouteParameterResolver;
|
|
203
|
+
var __ΩRouteParameterResolverContext = [() => __ΩClassType, 'token', () => RouteConfig, 'route', () => model_1.HttpRequest, 'request', 'name', 'value', () => __ΩHttpRequestQuery, 'query', () => __ΩHttpRequestResolvedParameters, 'parameters', 'PPn!&+"J4"P7#4$P7%4&"4\'"4(n)4*n+4,M'];
|
|
204
|
+
exports.__ΩRouteParameterResolverContext = __ΩRouteParameterResolverContext;
|
|
225
205
|
function filterMiddlewaresForRoute(middlewareRawConfigs, routeConfig, fullPath) {
|
|
226
206
|
const middlewares = middlewareRawConfigs.slice(0);
|
|
227
207
|
middlewares.push(...routeConfig.middlewares);
|
|
228
|
-
const middlewareConfigs = middlewares.filter((v) => {
|
|
208
|
+
const middlewareConfigs = middlewares.filter(Object.assign((v) => {
|
|
229
209
|
var _a;
|
|
230
210
|
if (!(v.config instanceof middleware_1.HttpMiddlewareConfig))
|
|
231
211
|
return false;
|
|
@@ -288,34 +268,50 @@ function filterMiddlewaresForRoute(middlewareRawConfigs, routeConfig, fullPath)
|
|
|
288
268
|
}
|
|
289
269
|
}
|
|
290
270
|
return true;
|
|
291
|
-
});
|
|
292
|
-
middlewareConfigs.sort((a, b) => {
|
|
271
|
+
}, { __type: ['v', '', 'P"2!"/"'] }));
|
|
272
|
+
middlewareConfigs.sort(Object.assign((a, b) => {
|
|
293
273
|
return a.config.order - b.config.order;
|
|
294
|
-
});
|
|
274
|
+
}, { __type: ['a', 'b', '', 'P"2!"2""/#'] }));
|
|
295
275
|
return middlewareConfigs;
|
|
296
276
|
}
|
|
297
|
-
|
|
277
|
+
filterMiddlewaresForRoute.__type = [() => __ΩMiddlewareRegistryEntry, 'middlewareRawConfigs', () => RouteConfig, 'routeConfig', 'fullPath', () => middleware_1.HttpMiddlewareConfig, 'config', () => injector_1.InjectorModule, 'module', 'filterMiddlewaresForRoute', 'Pn!F2"P7#2$&2%PP7&4\'P"7(4)MF/*'];
|
|
278
|
+
class Router {
|
|
298
279
|
constructor(controllers, logger, tagRegistry, middlewareRegistry = new app_1.MiddlewareRegistry) {
|
|
299
280
|
this.logger = logger;
|
|
300
281
|
this.middlewareRegistry = middlewareRegistry;
|
|
301
282
|
this.routes = [];
|
|
302
|
-
|
|
303
|
-
|
|
283
|
+
for (const controller of controllers.controllers) {
|
|
284
|
+
this.addRouteForController(controller.controller, controller.module);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
parseBody(req, files) {
|
|
288
|
+
const form = (0, formidable_1.default)({
|
|
304
289
|
multiples: true,
|
|
305
290
|
hash: 'sha1',
|
|
306
291
|
enabledPlugins: ['octetstream', 'querystring', 'json'],
|
|
307
292
|
});
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
293
|
+
return (0, core_1.asyncOperation)(Object.assign((resolve, reject) => {
|
|
294
|
+
if (req.body) {
|
|
295
|
+
return resolve(req.body);
|
|
296
|
+
}
|
|
297
|
+
form.parse(req, Object.assign((err, fields, files) => {
|
|
298
|
+
if (err) {
|
|
299
|
+
reject(err);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
const body = req.body = { ...fields, ...files };
|
|
303
|
+
resolve(body);
|
|
304
|
+
}
|
|
305
|
+
}, { __type: ['err', 'fields', 'files', '', 'P"2!"2""2#"/$'] }));
|
|
306
|
+
}, { __type: ['resolve', 'reject', '', 'P"2!"2""/#'] }));
|
|
311
307
|
}
|
|
312
308
|
getRoutes() {
|
|
313
309
|
return this.routes;
|
|
314
310
|
}
|
|
315
|
-
static forControllers(controllers, tagRegistry = new injector_1.TagRegistry(), middlewareRegistry = new app_1.MiddlewareRegistry(), module = new
|
|
316
|
-
return new this(new controllers_1.HttpControllers(controllers.map(v => {
|
|
317
|
-
return core_1.isClass(v) ? { controller: v, module } : v;
|
|
318
|
-
})), new logger_1.Logger([], []), tagRegistry, middlewareRegistry);
|
|
311
|
+
static forControllers(controllers, tagRegistry = new injector_1.TagRegistry(), middlewareRegistry = new app_1.MiddlewareRegistry(), module = new injector_1.InjectorModule()) {
|
|
312
|
+
return new this(new controllers_1.HttpControllers(controllers.map(Object.assign(v => {
|
|
313
|
+
return (0, core_1.isClass)(v) ? { controller: v, module } : v;
|
|
314
|
+
}, { __type: ['v', '', 'P"2!"/"'] }))), new logger_1.Logger([], []), tagRegistry, middlewareRegistry);
|
|
319
315
|
}
|
|
320
316
|
getRouteCode(compiler, routeConfig) {
|
|
321
317
|
const routeConfigVar = compiler.reserveVariable('routeConfigVar', routeConfig);
|
|
@@ -326,7 +322,7 @@ let Router = class Router {
|
|
|
326
322
|
const setParameters = [];
|
|
327
323
|
const parameterNames = [];
|
|
328
324
|
const parameterValidator = [];
|
|
329
|
-
let bodyValidationErrorHandling = `if (bodyErrors.length) throw
|
|
325
|
+
let bodyValidationErrorHandling = `if (bodyErrors.length) throw ValidationError.from(bodyErrors);`;
|
|
330
326
|
let enableParseBody = false;
|
|
331
327
|
const hasParameters = parsedRoute.getParameters().length > 0;
|
|
332
328
|
let requiresAsyncParameters = false;
|
|
@@ -334,49 +330,51 @@ let Router = class Router {
|
|
|
334
330
|
const fullPath = routeConfig.getFullPath();
|
|
335
331
|
const middlewareConfigs = filterMiddlewaresForRoute(this.middlewareRegistry.configs, routeConfig, fullPath);
|
|
336
332
|
for (const parameter of parsedRoute.getParameters()) {
|
|
337
|
-
if (
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
parameterNames.push(`parameters.${parameter.property.name}`);
|
|
342
|
-
}
|
|
343
|
-
else if (parameter.body) {
|
|
344
|
-
const validatorVar = compiler.reserveVariable('argumentValidator', type_1.jitValidateProperty(parameter.property));
|
|
345
|
-
const converterVar = compiler.reserveVariable('argumentConverter', type_1.getPropertyXtoClassFunction(parameter.property, type_1.jsonSerializer));
|
|
333
|
+
if (parameter.body || parameter.bodyValidation) {
|
|
334
|
+
const type = parameter.getType();
|
|
335
|
+
const validatorVar = compiler.reserveVariable('argumentValidator', (0, type_1.getValidatorFunction)(undefined, type));
|
|
336
|
+
const converterVar = compiler.reserveVariable('argumentConverter', (0, type_1.getSerializeFunction)(type, type_1.serializer.deserializeRegistry));
|
|
346
337
|
enableParseBody = true;
|
|
347
|
-
setParameters.push(`parameters.${parameter.
|
|
348
|
-
parameterValidator.push(`${validatorVar}(parameters.${parameter.
|
|
349
|
-
|
|
338
|
+
setParameters.push(`parameters.${parameter.parameter.name} = ${converterVar}(bodyFields, {loosely: true});`);
|
|
339
|
+
parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: bodyErrors});`);
|
|
340
|
+
if (parameter.bodyValidation) {
|
|
341
|
+
compiler.context.set('BodyValidation', model_1.ValidatedBody);
|
|
342
|
+
compiler.context.set('BodyValidationError', model_1.BodyValidationError);
|
|
343
|
+
parameterNames.push(`new BodyValidation(new BodyValidationError(bodyErrors), bodyErrors.length === 0 ? parameters.${parameter.parameter.name} : undefined)`);
|
|
344
|
+
bodyValidationErrorHandling = '';
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
parameterNames.push(`parameters.${parameter.parameter.name}`);
|
|
348
|
+
}
|
|
350
349
|
}
|
|
351
350
|
else if (parameter.query || parameter.queries) {
|
|
352
|
-
const converted =
|
|
353
|
-
const validator =
|
|
351
|
+
const converted = (0, type_1.getSerializeFunction)(parameter.parameter.parameter, type_1.serializer.deserializeRegistry, undefined, parameter.getName());
|
|
352
|
+
const validator = (0, type_1.getValidatorFunction)(undefined, parameter.parameter.parameter);
|
|
354
353
|
const converterVar = compiler.reserveVariable('argumentConverter', converted);
|
|
355
354
|
const validatorVar = compiler.reserveVariable('argumentValidator', validator);
|
|
356
|
-
const queryPath = parameter.typePath === undefined ? parameter.
|
|
355
|
+
const queryPath = parameter.typePath === undefined && parameter.query ? parameter.parameter.name : parameter.typePath;
|
|
357
356
|
const accessor = queryPath ? `['` + (queryPath.replace(/\./g, `']['`)) + `']` : '';
|
|
358
357
|
const queryAccessor = queryPath ? `_query${accessor}` : '_query';
|
|
359
|
-
setParameters.push(`parameters.${parameter.
|
|
360
|
-
parameterNames.push(`parameters.${parameter.
|
|
361
|
-
parameterValidator.push(`${validatorVar}(parameters.${parameter.
|
|
358
|
+
setParameters.push(`parameters.${parameter.parameter.name} = ${converterVar}(${queryAccessor}, {loosely: true});`);
|
|
359
|
+
parameterNames.push(`parameters.${parameter.parameter.name}`);
|
|
360
|
+
parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: validationErrors}, ${JSON.stringify(parameter.typePath || parameter.getName())});`);
|
|
362
361
|
}
|
|
363
362
|
else {
|
|
364
|
-
parameterNames.push(`parameters.${parameter.
|
|
363
|
+
parameterNames.push(`parameters.${parameter.parameter.name}`);
|
|
365
364
|
if (parameter.isPartOfPath()) {
|
|
366
|
-
if (parameter.
|
|
367
|
-
const converted =
|
|
365
|
+
if (parameter.parameter.type.kind !== 20 /* class */) {
|
|
366
|
+
const converted = (0, type_1.getSerializeFunction)(parameter.parameter.parameter, type_1.serializer.deserializeRegistry, undefined, parameter.getName());
|
|
368
367
|
const converterVar = compiler.reserveVariable('argumentConverter', converted);
|
|
369
|
-
setParameters.push(`parameters.${parameter.
|
|
370
|
-
const validator =
|
|
368
|
+
setParameters.push(`parameters.${parameter.parameter.name} = ${converterVar}(_match[${1 + (parameter.regexPosition || 0)}], {loosely: true});`);
|
|
369
|
+
const validator = (0, type_1.getValidatorFunction)(undefined, parameter.parameter.parameter);
|
|
371
370
|
const validatorVar = compiler.reserveVariable('argumentValidator', validator);
|
|
372
|
-
parameterValidator.push(`${validatorVar}(parameters.${parameter.
|
|
371
|
+
parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: validationErrors}, ${JSON.stringify(parameter.getName())});`);
|
|
373
372
|
}
|
|
374
373
|
else {
|
|
375
|
-
setParameters.push(`parameters.${parameter.
|
|
374
|
+
setParameters.push(`parameters.${parameter.parameter.name} = _match[${1 + (parameter.regexPosition || 0)}];`);
|
|
376
375
|
}
|
|
377
376
|
}
|
|
378
|
-
const
|
|
379
|
-
const injectorToken = injectorOptions && injectorOptions.token ? injectorOptions.token : (parameter.property.type === 'class' ? parameter.property.getResolvedClassType() : undefined);
|
|
377
|
+
const injectorToken = parameter.parameter.type.kind === 20 /* class */ ? parameter.parameter.type.classType : undefined;
|
|
380
378
|
const injectorTokenVar = compiler.reserveVariable('classType', injectorToken);
|
|
381
379
|
const parameterResolverFoundVar = compiler.reserveVariable('parameterResolverFound', false);
|
|
382
380
|
setParameters.push(`${parameterResolverFoundVar} = false;`);
|
|
@@ -394,31 +392,25 @@ let Router = class Router {
|
|
|
394
392
|
requiresAsyncParameters = true;
|
|
395
393
|
const instance = compiler.reserveVariable('resolverInstance');
|
|
396
394
|
setParameters.push(`
|
|
397
|
-
//resolver ${core_1.getClassName(resolver)} for ${parameter.getName()}
|
|
395
|
+
//resolver ${(0, core_1.getClassName)(resolver)} for ${parameter.getName()}
|
|
398
396
|
${instance} = ${injector}.get(${resolverProvideTokenVar}${moduleVar});
|
|
399
397
|
if (!${parameterResolverFoundVar}) {
|
|
400
398
|
${parameterResolverFoundVar} = true;
|
|
401
|
-
parameters.${parameter.
|
|
399
|
+
parameters.${parameter.parameter.name} = await ${instance}.resolve({
|
|
402
400
|
token: ${injectorTokenVar},
|
|
403
401
|
routeConfig: ${routeConfigVar},
|
|
404
402
|
request: request,
|
|
405
|
-
name: ${JSON.stringify(parameter.
|
|
406
|
-
value: parameters.${parameter.
|
|
403
|
+
name: ${JSON.stringify(parameter.parameter.name)},
|
|
404
|
+
value: parameters.${parameter.parameter.name},
|
|
407
405
|
query: _query,
|
|
408
406
|
parameters: parameters
|
|
409
407
|
});
|
|
410
408
|
}`);
|
|
411
409
|
}
|
|
412
|
-
else {
|
|
413
|
-
if (!parameter.isPartOfPath() && parameter.property.type !== 'class' && (!injectorOptions || !injectorOptions.token)) {
|
|
414
|
-
throw new Error(`Route parameter '${parameter.property.name}' of ${getRouterControllerActionName(routeConfig.action)} is not a ClassType nor is a @inject(T) set. It can not be requested from the DI container like that.` +
|
|
415
|
-
`If its a query parameter use '@http.query() ${parameter.property.name}' or if its a body '@http.body() ${parameter.property.name}'.`);
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
410
|
if (!parameter.isPartOfPath()) {
|
|
419
|
-
let injectorGet = `parameters.${parameter.
|
|
420
|
-
if (
|
|
421
|
-
injectorGet = `try {parameters.${parameter.
|
|
411
|
+
let injectorGet = `parameters.${parameter.parameter.name} = ${injector}.get(${injectorTokenVar});`;
|
|
412
|
+
if (parameter.parameter.isOptional()) {
|
|
413
|
+
injectorGet = `try {parameters.${parameter.parameter.name} = ${injector}.get(${injectorTokenVar}); } catch (e) {}`;
|
|
422
414
|
}
|
|
423
415
|
setParameters.push(`if (!${parameterResolverFoundVar}) ${injectorGet}`);
|
|
424
416
|
}
|
|
@@ -426,11 +418,9 @@ let Router = class Router {
|
|
|
426
418
|
}
|
|
427
419
|
let parseBodyLoading = '';
|
|
428
420
|
if (enableParseBody) {
|
|
429
|
-
const parseBodyVar = compiler.reserveVariable('parseBody', parseBody);
|
|
430
|
-
const formVar = compiler.reserveVariable('form', this.form);
|
|
421
|
+
const parseBodyVar = compiler.reserveVariable('parseBody', this.parseBody.bind(this));
|
|
431
422
|
parseBodyLoading = `
|
|
432
|
-
const
|
|
433
|
-
const bodyFields = {...bodyParsed.fields, ...bodyParsed.files};`;
|
|
423
|
+
const bodyFields = (await ${parseBodyVar}(request, uploadedFiles));`;
|
|
434
424
|
requiresAsyncParameters = true;
|
|
435
425
|
}
|
|
436
426
|
let matcher = `_path.startsWith(${JSON.stringify(prefix)}) && (_match = _path.match(${regexVar}))`;
|
|
@@ -443,7 +433,7 @@ let Router = class Router {
|
|
|
443
433
|
for (const middlewareConfig of middlewareConfigs) {
|
|
444
434
|
const moduleVar = middlewareConfig.module ? ', ' + compiler.reserveVariable('module', middlewareConfig.module) : '';
|
|
445
435
|
for (const middleware of middlewareConfig.config.middlewares) {
|
|
446
|
-
if (core_1.isClass(middleware)) {
|
|
436
|
+
if ((0, core_1.isClass)(middleware)) {
|
|
447
437
|
const classVar = compiler.reserveVariable('middlewareClassType', middleware);
|
|
448
438
|
middlewareItems.push(`{fn: function() {return _injector.get(${classVar}${moduleVar}).execute(...arguments) }, timeout: ${middlewareConfig.config.timeout}}`);
|
|
449
439
|
}
|
|
@@ -469,15 +459,15 @@ let Router = class Router {
|
|
|
469
459
|
${setParameters.join('\n')}
|
|
470
460
|
${parameterValidator.join('\n')}
|
|
471
461
|
${bodyValidationErrorHandling}
|
|
472
|
-
if (validationErrors.length) throw
|
|
462
|
+
if (validationErrors.length) throw new ValidationError(validationErrors);
|
|
473
463
|
return [${parameterNames.join(',')}];
|
|
474
464
|
}`;
|
|
475
465
|
}
|
|
476
466
|
let methodCheck = '';
|
|
477
467
|
if (routeConfig.httpMethods.length) {
|
|
478
|
-
methodCheck = '(' + routeConfig.httpMethods.map(v => {
|
|
468
|
+
methodCheck = '(' + routeConfig.httpMethods.map(Object.assign(v => {
|
|
479
469
|
return `_method === '${v.toUpperCase()}'`;
|
|
480
|
-
}).join(' || ') + ') && ';
|
|
470
|
+
}, { __type: ['v', '', 'P"2!"/"'] })).join(' || ') + ') && ';
|
|
481
471
|
}
|
|
482
472
|
return `
|
|
483
473
|
//=> ${routeConfig.httpMethods.join(',')} ${path}
|
|
@@ -489,15 +479,15 @@ let Router = class Router {
|
|
|
489
479
|
getRouteUrlResolveCode(compiler, routeConfig) {
|
|
490
480
|
const parsedRoute = parseRouteControllerAction(routeConfig);
|
|
491
481
|
let url = routeConfig.getFullPath();
|
|
492
|
-
url = url.replace(/:(\w+)/g, (a, name) => {
|
|
482
|
+
url = url.replace(/:(\w+)/g, Object.assign((a, name) => {
|
|
493
483
|
return `\${parameters.${name}}`;
|
|
494
|
-
});
|
|
484
|
+
}, { __type: ['a', 'name', '', 'P"2!"2""/#'] }));
|
|
495
485
|
const modify = [];
|
|
496
486
|
for (const parameter of parsedRoute.getParameters()) {
|
|
497
487
|
if (parameter.query || parameter.queries) {
|
|
498
|
-
const queryPath = parameter.typePath === undefined ? parameter.
|
|
499
|
-
if (parameter.
|
|
500
|
-
for (const property of parameter.
|
|
488
|
+
const queryPath = parameter.typePath === undefined && parameter.query ? parameter.parameter.name : parameter.typePath || '';
|
|
489
|
+
if (parameter.parameter.type.kind === 20 /* class */ || parameter.parameter.type.kind === 30 /* objectLiteral */) {
|
|
490
|
+
for (const property of type_1.ReflectionClass.from(parameter.parameter.type).getProperties()) {
|
|
501
491
|
const accessor = `parameters.${parameter.getName()}?.${property.name}`;
|
|
502
492
|
const thisPath = queryPath ? queryPath + '.' + property.name : property.name;
|
|
503
493
|
modify.push(`${accessor} !== undefined && query.push(${JSON.stringify(dotToUrlPath(thisPath))} + '=' + encodeURIComponent(${accessor}))`);
|
|
@@ -524,8 +514,8 @@ let Router = class Router {
|
|
|
524
514
|
addRouteForController(controller, module) {
|
|
525
515
|
const data = decorator_1.httpClass._fetch(controller);
|
|
526
516
|
if (!data)
|
|
527
|
-
throw new Error(`Http controller class ${core_1.getClassName(controller)} has no @http.controller decorator.`);
|
|
528
|
-
const schema = type_1.
|
|
517
|
+
throw new Error(`Http controller class ${(0, core_1.getClassName)(controller)} has no @http.controller decorator.`);
|
|
518
|
+
const schema = type_1.ReflectionClass.from(controller);
|
|
529
519
|
for (const action of data.getActions()) {
|
|
530
520
|
const routeConfig = new RouteConfig(action.name, action.httpMethods, action.path, {
|
|
531
521
|
controller,
|
|
@@ -533,19 +523,18 @@ let Router = class Router {
|
|
|
533
523
|
methodName: action.methodName
|
|
534
524
|
});
|
|
535
525
|
routeConfig.module = module;
|
|
536
|
-
routeConfig.parameterRegularExpressions = action.parameterRegularExpressions;
|
|
537
526
|
routeConfig.responses = action.responses;
|
|
538
527
|
routeConfig.description = action.description;
|
|
539
528
|
routeConfig.category = action.category;
|
|
540
529
|
routeConfig.groups = action.groups;
|
|
541
530
|
routeConfig.data = new Map(action.data);
|
|
542
531
|
routeConfig.baseUrl = data.baseUrl;
|
|
543
|
-
routeConfig.middlewares = data.middlewares.map(v => {
|
|
532
|
+
routeConfig.middlewares = data.middlewares.map(Object.assign(v => {
|
|
544
533
|
return { config: v(), module };
|
|
545
|
-
});
|
|
546
|
-
routeConfig.middlewares.push(...action.middlewares.map(v => {
|
|
534
|
+
}, { __type: ['v', '', 'P"2!"/"'] }));
|
|
535
|
+
routeConfig.middlewares.push(...action.middlewares.map(Object.assign(v => {
|
|
547
536
|
return { config: v(), module };
|
|
548
|
-
}));
|
|
537
|
+
}, { __type: ['v', '', 'P"2!"/"'] })));
|
|
549
538
|
for (const item of action.resolverForToken)
|
|
550
539
|
routeConfig.resolverForToken.set(...item);
|
|
551
540
|
routeConfig.resolverForToken = new Map(data.resolverForToken);
|
|
@@ -554,18 +543,17 @@ let Router = class Router {
|
|
|
554
543
|
routeConfig.resolverForParameterName = new Map(data.resolverForParameterName);
|
|
555
544
|
for (const item of action.resolverForParameterName)
|
|
556
545
|
routeConfig.resolverForParameterName.set(...item);
|
|
557
|
-
routeConfig.parameters = { ...action.parameters };
|
|
558
546
|
routeConfig.serializationOptions = action.serializationOptions;
|
|
559
547
|
routeConfig.serializer = action.serializer;
|
|
560
548
|
routeConfig.serializer = action.serializer;
|
|
561
549
|
if (schema.hasMethod(action.methodName))
|
|
562
|
-
routeConfig.
|
|
550
|
+
routeConfig.returnType = schema.getMethod(action.methodName).getReturnType();
|
|
563
551
|
this.addRoute(routeConfig);
|
|
564
552
|
}
|
|
565
553
|
}
|
|
566
554
|
build() {
|
|
567
555
|
const compiler = new core_1.CompilerContext;
|
|
568
|
-
compiler.context.set('
|
|
556
|
+
compiler.context.set('ValidationError', type_1.ValidationError);
|
|
569
557
|
compiler.context.set('qs', require('qs'));
|
|
570
558
|
const code = [];
|
|
571
559
|
for (const route of this.routes) {
|
|
@@ -611,13 +599,7 @@ let Router = class Router {
|
|
|
611
599
|
method = method.toUpperCase();
|
|
612
600
|
return this.resolveRequest({ url, method });
|
|
613
601
|
}
|
|
614
|
-
}
|
|
615
|
-
Router = __decorate([
|
|
616
|
-
injector_1.injectable,
|
|
617
|
-
__metadata("design:paramtypes", [controllers_1.HttpControllers,
|
|
618
|
-
logger_1.Logger,
|
|
619
|
-
injector_1.TagRegistry,
|
|
620
|
-
app_1.MiddlewareRegistry])
|
|
621
|
-
], Router);
|
|
602
|
+
}
|
|
622
603
|
exports.Router = Router;
|
|
604
|
+
Router.__type = [() => model_1.HttpRequest, 'request', () => __ΩResolvedController, '', 'fn', 'name', 'parameters', 'resolveFn', () => RouteConfig, 'routes', () => [], () => model_1.HttpRequest, 'req', () => UploadedFile, 'files', 'parseBody', () => controllers_1.HttpControllers, 'controllers', () => __ΩLoggerInterface, 'logger', () => injector_1.TagRegistry, 'tagRegistry', () => app_1.MiddlewareRegistry, 'middlewareRegistry', () => new app_1.MiddlewareRegistry, 'constructor', () => RouteConfig, 'getRoutes', () => __ΩClassType, () => injector_1.InjectorModule, 'module', () => __ΩClassType, 'controller', () => injector_1.TagRegistry, () => new injector_1.TagRegistry(), () => app_1.MiddlewareRegistry, () => new app_1.MiddlewareRegistry(), () => injector_1.InjectorModule, () => new injector_1.InjectorModule(), () => Router, 'forControllers', () => core_1.CompilerContext, 'compiler', () => RouteConfig, 'routeConfig', 'getRouteCode', () => core_1.CompilerContext, () => RouteConfig, 'getRouteUrlResolveCode', () => RouteConfig, 'addRoute', () => __ΩClassType, () => injector_1.InjectorModule, 'addRouteForController', () => model_1.HttpRequest, () => __ΩResolvedController, 'build', 'buildUrlResolver', 'routeName', () => ({}), 'resolveUrl', () => model_1.HttpRequest, () => __ΩResolvedController, 'resolveRequest', 'method', 'url', () => __ΩResolvedController, 'resolve', 'PP7!2"Pn#-J/$3%8<P&2&P&"LM2\'&/$3(8<P7)F3*<>+PP7,2-P&P7.LM2/"00;PP7122n324;P7526P7728;>9"0:PP7;F0<PPn=PP"7>4?n@4AMJF22P7B26>CP7D28>EP"7F2?>GP7H0IPP7J2KP7L2M&0N<PP7O2KP7P2M&0Q<PP7R2M"0SPnT2AP"7U2?"0VPPP7W2"PnX-J/$0Y<P"0Z<P&2[P&"LM2\'>\\&0]PP7^2"Pn_-J0`P&2a&2bPnc-J0d5'];
|
|
623
605
|
//# sourceMappingURL=router.js.map
|