@deepkit/http 1.0.1-alpha.59 → 1.0.1-alpha.63
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/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- 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 +62 -2
- package/dist/cjs/src/model.js +101 -26
- 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 +24 -53
- package/dist/cjs/src/router.js +140 -159
- 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 +46 -39
- 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 +298 -333
- 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 +62 -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 +24 -53
- package/dist/esm/src/router.js +136 -155
- 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 +39 -32
- 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 +167 -202
- 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 +80 -8
- package/src/module.config.ts +3 -6
- package/src/module.ts +2 -2
- package/src/router.ts +121 -161
- package/src/static-serving.ts +14 -12
- package/tests/middleware.spec.ts +0 -1
- package/tests/router.spec.ts +131 -133
- package/tsconfig.json +2 -1
package/dist/esm/src/router.js
CHANGED
|
@@ -4,9 +4,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
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;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
7
|
+
import { __ΩSerializationOptions as __ΩSerializationOptions } from '@deepkit/type';
|
|
8
|
+
import { __ΩClassType as __ΩClassType } from '@deepkit/core';
|
|
9
|
+
import { __ΩMiddlewareRegistryEntry as __ΩMiddlewareRegistryEntry } from '@deepkit/app';
|
|
10
|
+
import { __ΩLoggerInterface as __ΩLoggerInterface } from '@deepkit/logger';
|
|
11
|
+
import { __ΩHttpMiddlewareFn as __ΩHttpMiddlewareFn } from './middleware';
|
|
12
|
+
import { __ΩHttpRequestQuery as __ΩHttpRequestQuery } from './model';
|
|
13
|
+
import { __ΩHttpRequestResolvedParameters as __ΩHttpRequestResolvedParameters } from './model';
|
|
10
14
|
/*
|
|
11
15
|
* Deepkit Framework
|
|
12
16
|
* Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
|
|
@@ -16,46 +20,33 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
16
20
|
*
|
|
17
21
|
* You should have received a copy of the MIT License along with this program.
|
|
18
22
|
*/
|
|
19
|
-
import '
|
|
20
|
-
import {
|
|
21
|
-
import { entity, getClassSchema, getPropertyXtoClassFunction, jitValidateProperty, jsonSerializer, t, ValidationFailed } from '@deepkit/type';
|
|
23
|
+
import { asyncOperation, CompilerContext, getClassName, isClass, isObject, urlJoin } from '@deepkit/core';
|
|
24
|
+
import { assertType, entity, findMember, getSerializeFunction, getValidatorFunction, metaAnnotation, ReflectionClass, ReflectionParameter, serializer, Serializer, stringifyType, typeToObject, ValidationError } from '@deepkit/type';
|
|
22
25
|
// @ts-ignore
|
|
23
26
|
import formidable from 'formidable';
|
|
24
27
|
import { httpClass } from './decorator';
|
|
25
|
-
import {
|
|
28
|
+
import { BodyValidationError, getRegExp, HttpRequest, ValidatedBody } from './model';
|
|
29
|
+
import { InjectorContext, InjectorModule, TagRegistry } from '@deepkit/injector';
|
|
26
30
|
import { Logger } from '@deepkit/logger';
|
|
27
31
|
import { HttpControllers } from './controllers';
|
|
28
|
-
import {
|
|
32
|
+
import { MiddlewareRegistry } from '@deepkit/app';
|
|
29
33
|
import { HttpMiddlewareConfig } from './middleware';
|
|
34
|
+
var __ΩRouteParameterResolverForInjector = [() => InjectorContext, 'injector', '', 'PP7!2"P"F"F`J/#'];
|
|
35
|
+
export { __ΩRouteParameterResolverForInjector as __ΩRouteParameterResolverForInjector };
|
|
36
|
+
var __ΩResolvedController = [() => __ΩRouteParameterResolverForInjector, 'parameters', () => RouteConfig, 'routeConfig', () => UploadedFile, 'uploadedFiles', () => InjectorContext, 'injector', () => __ΩHttpMiddlewareFn, 'fn', 'timeout', '', 'middlewares', 'Pn!4"P7#4$P&P7%LM4&PP7\'2(Pn)4*\'4+MF/,4-8M'];
|
|
30
37
|
let UploadedFile = class UploadedFile {
|
|
31
38
|
};
|
|
32
|
-
|
|
33
|
-
t.required,
|
|
34
|
-
__metadata("design:type", Number)
|
|
35
|
-
], UploadedFile.prototype, "size", void 0);
|
|
36
|
-
__decorate([
|
|
37
|
-
t.required,
|
|
38
|
-
__metadata("design:type", String)
|
|
39
|
-
], UploadedFile.prototype, "path", void 0);
|
|
40
|
-
__decorate([
|
|
41
|
-
t.string.required.nullable,
|
|
42
|
-
__metadata("design:type", Object)
|
|
43
|
-
], UploadedFile.prototype, "name", void 0);
|
|
44
|
-
__decorate([
|
|
45
|
-
t.string.required.nullable,
|
|
46
|
-
__metadata("design:type", Object)
|
|
47
|
-
], UploadedFile.prototype, "type", void 0);
|
|
48
|
-
__decorate([
|
|
49
|
-
t.date.required.nullable,
|
|
50
|
-
__metadata("design:type", Object)
|
|
51
|
-
], UploadedFile.prototype, "lastModifiedDate", void 0);
|
|
39
|
+
UploadedFile.__type = ['size', 'path', 'name', 'type', 'lastModifiedDate', '\'3!&3"P&,J3#P&,J3$PT,J3%5'];
|
|
52
40
|
UploadedFile = __decorate([
|
|
53
41
|
entity.name('@deepkit/UploadedFile')
|
|
54
42
|
], UploadedFile);
|
|
55
43
|
export { UploadedFile };
|
|
44
|
+
var __ΩRouteControllerAction = [() => InjectorModule, 'module', () => __ΩClassType, 'controller', 'methodName', 'PP"7!4"8n#4$&4%M'];
|
|
45
|
+
export { __ΩRouteControllerAction as __ΩRouteControllerAction };
|
|
56
46
|
function getRouterControllerActionName(action) {
|
|
57
47
|
return `${getClassName(action.controller)}.${action.methodName}`;
|
|
58
48
|
}
|
|
49
|
+
getRouterControllerActionName.__type = [() => __ΩRouteControllerAction, 'action', 'getRouterControllerActionName', 'Pn!2"&/#'];
|
|
59
50
|
export class RouteConfig {
|
|
60
51
|
constructor(name, httpMethods, path, action, internal = false) {
|
|
61
52
|
this.name = name;
|
|
@@ -64,7 +55,6 @@ export class RouteConfig {
|
|
|
64
55
|
this.action = action;
|
|
65
56
|
this.internal = internal;
|
|
66
57
|
this.baseUrl = '';
|
|
67
|
-
this.parameterRegularExpressions = {};
|
|
68
58
|
this.responses = [];
|
|
69
59
|
this.description = '';
|
|
70
60
|
this.groups = [];
|
|
@@ -76,7 +66,6 @@ export class RouteConfig {
|
|
|
76
66
|
* An arbitrary data container the user can use to store app specific settings/values.
|
|
77
67
|
*/
|
|
78
68
|
this.data = new Map();
|
|
79
|
-
this.parameters = {};
|
|
80
69
|
}
|
|
81
70
|
getSchemaForResponse(statusCode) {
|
|
82
71
|
if (!this.responses.length)
|
|
@@ -94,39 +83,15 @@ export class RouteConfig {
|
|
|
94
83
|
return path;
|
|
95
84
|
}
|
|
96
85
|
}
|
|
97
|
-
|
|
98
|
-
* When this class is injected into a route, then validation errors are not automatically thrown (using onHttpControllerValidationError event),
|
|
99
|
-
* but injected to the route itself. The user is then responsible to handle the errors.
|
|
100
|
-
*
|
|
101
|
-
* Note: The body parameter is still passed, however it might contain now invalid data. The BodyValidation tells what data is invalid.
|
|
102
|
-
*/
|
|
103
|
-
export class BodyValidation {
|
|
104
|
-
constructor(errors = []) {
|
|
105
|
-
this.errors = errors;
|
|
106
|
-
}
|
|
107
|
-
hasErrors(prefix) {
|
|
108
|
-
return this.getErrors(prefix).length > 0;
|
|
109
|
-
}
|
|
110
|
-
getErrors(prefix) {
|
|
111
|
-
if (prefix)
|
|
112
|
-
return this.errors.filter(v => v.path.startsWith(prefix));
|
|
113
|
-
return this.errors;
|
|
114
|
-
}
|
|
115
|
-
getErrorsForPath(path) {
|
|
116
|
-
return this.errors.filter(v => v.path === path);
|
|
117
|
-
}
|
|
118
|
-
getErrorMessageForPath(path) {
|
|
119
|
-
return this.getErrorsForPath(path).map(v => v.message).join(', ');
|
|
120
|
-
}
|
|
121
|
-
}
|
|
86
|
+
RouteConfig.__type = ['baseUrl', function () { return ''; }, 'statusCode', 'description', 'type', 'responses', function () { return []; }, function () { return ''; }, 'groups', function () { return []; }, 'category', function () { return ''; }, 'returnType', () => __ΩSerializationOptions, 'serializationOptions', () => Serializer, 'serializer', () => InjectorModule, 'module', () => __ΩClassType, 'resolverForToken', function () { return new Map(); }, () => HttpMiddlewareConfig, 'config', () => InjectorModule, 'middlewares', function () { return []; }, () => __ΩClassType, 'resolverForParameterName', function () { return 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'];
|
|
122
87
|
class ParsedRoute {
|
|
123
88
|
constructor(routeConfig) {
|
|
124
89
|
this.routeConfig = routeConfig;
|
|
125
90
|
this.pathParameterNames = {};
|
|
126
91
|
this.parameters = [];
|
|
127
92
|
}
|
|
128
|
-
addParameter(property
|
|
129
|
-
const parameter = new ParsedRouteParameter(property
|
|
93
|
+
addParameter(property) {
|
|
94
|
+
const parameter = new ParsedRouteParameter(property);
|
|
130
95
|
this.parameters.push(parameter);
|
|
131
96
|
return parameter;
|
|
132
97
|
}
|
|
@@ -141,69 +106,97 @@ class ParsedRoute {
|
|
|
141
106
|
throw new Error(`No route parameter with name ${name} defined.`);
|
|
142
107
|
}
|
|
143
108
|
}
|
|
109
|
+
ParsedRoute.__type = ['regex', 'pathParameterNames', function () { return {}; }, () => ParsedRouteParameter, 'parameters', function () { return []; }, () => RouteConfig, 'routeConfig', 'constructor', () => 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'];
|
|
144
110
|
class ParsedRouteParameter {
|
|
145
|
-
constructor(
|
|
146
|
-
this.
|
|
147
|
-
this.config = config;
|
|
111
|
+
constructor(parameter) {
|
|
112
|
+
this.parameter = parameter;
|
|
148
113
|
}
|
|
149
114
|
get body() {
|
|
150
|
-
return
|
|
115
|
+
return metaAnnotation.getForName(this.parameter.type, 'httpBody') !== undefined;
|
|
116
|
+
}
|
|
117
|
+
get bodyValidation() {
|
|
118
|
+
return metaAnnotation.getForName(this.parameter.type, 'httpBodyValidation') !== undefined;
|
|
119
|
+
}
|
|
120
|
+
getType() {
|
|
121
|
+
if (this.bodyValidation) {
|
|
122
|
+
assertType(this.parameter.type, 20 /* class */);
|
|
123
|
+
const valueType = findMember('value', this.parameter.type);
|
|
124
|
+
if (!valueType || valueType.kind !== 15 /* property */)
|
|
125
|
+
throw new Error(`No property value found at ${stringifyType(this.parameter.type)}`);
|
|
126
|
+
return valueType.type;
|
|
127
|
+
}
|
|
128
|
+
return this.parameter.type;
|
|
151
129
|
}
|
|
152
130
|
get query() {
|
|
153
|
-
return
|
|
131
|
+
return metaAnnotation.getForName(this.parameter.type, 'httpQuery') !== undefined;
|
|
154
132
|
}
|
|
155
133
|
get queries() {
|
|
156
|
-
return
|
|
134
|
+
return metaAnnotation.getForName(this.parameter.type, 'httpQueries') !== undefined;
|
|
157
135
|
}
|
|
158
136
|
get typePath() {
|
|
159
|
-
|
|
137
|
+
const typeOptions = metaAnnotation.getForName(this.parameter.type, 'httpQueries') || metaAnnotation.getForName(this.parameter.type, 'httpQuery');
|
|
138
|
+
if (!typeOptions)
|
|
139
|
+
return;
|
|
140
|
+
const options = typeToObject(typeOptions[0]);
|
|
141
|
+
if (isObject(options))
|
|
142
|
+
return options.name;
|
|
143
|
+
return;
|
|
160
144
|
}
|
|
161
145
|
getName() {
|
|
162
|
-
return this.
|
|
146
|
+
return this.parameter.name;
|
|
163
147
|
}
|
|
164
148
|
isPartOfPath() {
|
|
165
149
|
return this.regexPosition !== undefined;
|
|
166
150
|
}
|
|
167
151
|
}
|
|
152
|
+
ParsedRouteParameter.__type = ['regexPosition', () => ReflectionParameter, 'parameter', 'constructor', 'getType', 'getName', 'isPartOfPath', '\'3!8PP7"2#:"0$!!P"0%!!!P"0&P)0\'5'];
|
|
168
153
|
function parseRoutePathToRegex(routeConfig) {
|
|
169
154
|
const parameterNames = {};
|
|
170
155
|
let path = routeConfig.getFullPath();
|
|
156
|
+
const method = ReflectionClass.from(routeConfig.action.controller).getMethod(routeConfig.action.methodName);
|
|
171
157
|
let argumentIndex = 0;
|
|
172
|
-
path = path.replace(/:(\w+)/g, (a, name) => {
|
|
158
|
+
path = path.replace(/:(\w+)/g, Object.assign((a, name) => {
|
|
173
159
|
parameterNames[name] = argumentIndex;
|
|
174
160
|
argumentIndex++;
|
|
175
|
-
|
|
176
|
-
|
|
161
|
+
const parameter = method.getParameterOrUndefined(name);
|
|
162
|
+
if (parameter) {
|
|
163
|
+
const regExp = getRegExp(parameter.type);
|
|
164
|
+
if (regExp)
|
|
165
|
+
return '(' + regExp + ')';
|
|
166
|
+
}
|
|
167
|
+
return String.raw `([^/]+)`;
|
|
168
|
+
}, { __type: ['a', 'name', '', 'P"2!"2""/#'] }));
|
|
177
169
|
return { regex: path, parameterNames };
|
|
178
170
|
}
|
|
171
|
+
parseRoutePathToRegex.__type = [() => RouteConfig, 'routeConfig', 'regex', 'parameterNames', 'parseRoutePathToRegex', 'PP7!2"P&4#P&\'LM4$M/%'];
|
|
179
172
|
export function parseRouteControllerAction(routeConfig) {
|
|
180
|
-
const schema =
|
|
173
|
+
const schema = ReflectionClass.from(routeConfig.action.controller);
|
|
181
174
|
const parsedRoute = new ParsedRoute(routeConfig);
|
|
182
|
-
const methodArgumentProperties = schema.
|
|
175
|
+
const methodArgumentProperties = schema.getMethodParameters(routeConfig.action.methodName);
|
|
183
176
|
const parsedPath = parseRoutePathToRegex(routeConfig);
|
|
184
177
|
parsedRoute.regex = parsedPath.regex;
|
|
185
178
|
parsedRoute.pathParameterNames = parsedPath.parameterNames;
|
|
186
179
|
for (const property of methodArgumentProperties) {
|
|
187
|
-
const
|
|
188
|
-
const parsedParameter = parsedRoute.addParameter(property, decoratorData);
|
|
189
|
-
if (decoratorData && decoratorData.optional)
|
|
190
|
-
property.isOptional = true;
|
|
191
|
-
if (property.type === 'class' && property.classType === BodyValidation) {
|
|
192
|
-
parsedRoute.customValidationErrorHandling = parsedParameter;
|
|
193
|
-
}
|
|
180
|
+
const parsedParameter = parsedRoute.addParameter(property);
|
|
194
181
|
parsedParameter.regexPosition = parsedPath.parameterNames[property.name];
|
|
195
182
|
}
|
|
196
183
|
return parsedRoute;
|
|
197
184
|
}
|
|
185
|
+
parseRouteControllerAction.__type = [() => RouteConfig, 'routeConfig', () => ParsedRoute, 'parseRouteControllerAction', 'PP7!2"P7#/$'];
|
|
198
186
|
export function dotToUrlPath(dotPath) {
|
|
199
187
|
if (-1 === dotPath.indexOf('.'))
|
|
200
188
|
return dotPath;
|
|
201
189
|
return dotPath.replace(/\./g, '][').replace('][', '[') + ']';
|
|
202
190
|
}
|
|
191
|
+
dotToUrlPath.__type = ['dotPath', 'dotToUrlPath', 'P&2!&/"'];
|
|
192
|
+
var __ΩRouteParameterResolver = [() => __ΩRouteParameterResolverContext, 'context', 'resolve', 'PPn!2"P""`J1#M'];
|
|
193
|
+
export { __ΩRouteParameterResolver as __ΩRouteParameterResolver };
|
|
194
|
+
var __ΩRouteParameterResolverContext = [() => __ΩClassType, 'token', () => RouteConfig, 'route', () => HttpRequest, 'request', 'name', 'value', () => __ΩHttpRequestQuery, 'query', () => __ΩHttpRequestResolvedParameters, 'parameters', 'PPn!&+"J4"P7#4$P7%4&"4\'"4(n)4*n+4,M'];
|
|
195
|
+
export { __ΩRouteParameterResolverContext as __ΩRouteParameterResolverContext };
|
|
203
196
|
function filterMiddlewaresForRoute(middlewareRawConfigs, routeConfig, fullPath) {
|
|
204
197
|
const middlewares = middlewareRawConfigs.slice(0);
|
|
205
198
|
middlewares.push(...routeConfig.middlewares);
|
|
206
|
-
const middlewareConfigs = middlewares.filter((v) => {
|
|
199
|
+
const middlewareConfigs = middlewares.filter(Object.assign((v) => {
|
|
207
200
|
var _a;
|
|
208
201
|
if (!(v.config instanceof HttpMiddlewareConfig))
|
|
209
202
|
return false;
|
|
@@ -266,13 +259,14 @@ function filterMiddlewaresForRoute(middlewareRawConfigs, routeConfig, fullPath)
|
|
|
266
259
|
}
|
|
267
260
|
}
|
|
268
261
|
return true;
|
|
269
|
-
});
|
|
270
|
-
middlewareConfigs.sort((a, b) => {
|
|
262
|
+
}, { __type: ['v', '', 'P"2!"/"'] }));
|
|
263
|
+
middlewareConfigs.sort(Object.assign((a, b) => {
|
|
271
264
|
return a.config.order - b.config.order;
|
|
272
|
-
});
|
|
265
|
+
}, { __type: ['a', 'b', '', 'P"2!"2""/#'] }));
|
|
273
266
|
return middlewareConfigs;
|
|
274
267
|
}
|
|
275
|
-
|
|
268
|
+
filterMiddlewaresForRoute.__type = [() => __ΩMiddlewareRegistryEntry, 'middlewareRawConfigs', () => RouteConfig, 'routeConfig', 'fullPath', () => HttpMiddlewareConfig, 'config', () => InjectorModule, 'module', 'filterMiddlewaresForRoute', 'Pn!F2"P7#2$&2%PP7&4\'P"7(4)MF/*'];
|
|
269
|
+
export class Router {
|
|
276
270
|
constructor(controllers, logger, tagRegistry, middlewareRegistry = new MiddlewareRegistry) {
|
|
277
271
|
this.logger = logger;
|
|
278
272
|
this.middlewareRegistry = middlewareRegistry;
|
|
@@ -287,11 +281,11 @@ let Router = class Router {
|
|
|
287
281
|
hash: 'sha1',
|
|
288
282
|
enabledPlugins: ['octetstream', 'querystring', 'json'],
|
|
289
283
|
});
|
|
290
|
-
return asyncOperation((resolve, reject) => {
|
|
284
|
+
return asyncOperation(Object.assign((resolve, reject) => {
|
|
291
285
|
if (req.body) {
|
|
292
286
|
return resolve(req.body);
|
|
293
287
|
}
|
|
294
|
-
form.parse(req, (err, fields, files) => {
|
|
288
|
+
form.parse(req, Object.assign((err, fields, files) => {
|
|
295
289
|
if (err) {
|
|
296
290
|
reject(err);
|
|
297
291
|
}
|
|
@@ -299,16 +293,16 @@ let Router = class Router {
|
|
|
299
293
|
const body = req.body = { ...fields, ...files };
|
|
300
294
|
resolve(body);
|
|
301
295
|
}
|
|
302
|
-
});
|
|
303
|
-
});
|
|
296
|
+
}, { __type: ['err', 'fields', 'files', '', 'P"2!"2""2#"/$'] }));
|
|
297
|
+
}, { __type: ['resolve', 'reject', '', 'P"2!"2""/#'] }));
|
|
304
298
|
}
|
|
305
299
|
getRoutes() {
|
|
306
300
|
return this.routes;
|
|
307
301
|
}
|
|
308
|
-
static forControllers(controllers, tagRegistry = new TagRegistry(), middlewareRegistry = new MiddlewareRegistry(), module = new
|
|
309
|
-
return new this(new HttpControllers(controllers.map(v => {
|
|
302
|
+
static forControllers(controllers, tagRegistry = new TagRegistry(), middlewareRegistry = new MiddlewareRegistry(), module = new InjectorModule()) {
|
|
303
|
+
return new this(new HttpControllers(controllers.map(Object.assign(v => {
|
|
310
304
|
return isClass(v) ? { controller: v, module } : v;
|
|
311
|
-
})), new Logger([], []), tagRegistry, middlewareRegistry);
|
|
305
|
+
}, { __type: ['v', '', 'P"2!"/"'] }))), new Logger([], []), tagRegistry, middlewareRegistry);
|
|
312
306
|
}
|
|
313
307
|
getRouteCode(compiler, routeConfig) {
|
|
314
308
|
const routeConfigVar = compiler.reserveVariable('routeConfigVar', routeConfig);
|
|
@@ -319,7 +313,7 @@ let Router = class Router {
|
|
|
319
313
|
const setParameters = [];
|
|
320
314
|
const parameterNames = [];
|
|
321
315
|
const parameterValidator = [];
|
|
322
|
-
let bodyValidationErrorHandling = `if (bodyErrors.length) throw
|
|
316
|
+
let bodyValidationErrorHandling = `if (bodyErrors.length) throw ValidationError.from(bodyErrors);`;
|
|
323
317
|
let enableParseBody = false;
|
|
324
318
|
const hasParameters = parsedRoute.getParameters().length > 0;
|
|
325
319
|
let requiresAsyncParameters = false;
|
|
@@ -327,49 +321,51 @@ let Router = class Router {
|
|
|
327
321
|
const fullPath = routeConfig.getFullPath();
|
|
328
322
|
const middlewareConfigs = filterMiddlewaresForRoute(this.middlewareRegistry.configs, routeConfig, fullPath);
|
|
329
323
|
for (const parameter of parsedRoute.getParameters()) {
|
|
330
|
-
if (
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
parameterNames.push(`parameters.${parameter.property.name}`);
|
|
335
|
-
}
|
|
336
|
-
else if (parameter.body) {
|
|
337
|
-
const validatorVar = compiler.reserveVariable('argumentValidator', jitValidateProperty(parameter.property));
|
|
338
|
-
const converterVar = compiler.reserveVariable('argumentConverter', getPropertyXtoClassFunction(parameter.property, jsonSerializer));
|
|
324
|
+
if (parameter.body || parameter.bodyValidation) {
|
|
325
|
+
const type = parameter.getType();
|
|
326
|
+
const validatorVar = compiler.reserveVariable('argumentValidator', getValidatorFunction(undefined, type));
|
|
327
|
+
const converterVar = compiler.reserveVariable('argumentConverter', getSerializeFunction(type, serializer.deserializeRegistry));
|
|
339
328
|
enableParseBody = true;
|
|
340
|
-
setParameters.push(`parameters.${parameter.
|
|
341
|
-
parameterValidator.push(`${validatorVar}(parameters.${parameter.
|
|
342
|
-
|
|
329
|
+
setParameters.push(`parameters.${parameter.parameter.name} = ${converterVar}(bodyFields, {loosely: true});`);
|
|
330
|
+
parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: bodyErrors});`);
|
|
331
|
+
if (parameter.bodyValidation) {
|
|
332
|
+
compiler.context.set('BodyValidation', ValidatedBody);
|
|
333
|
+
compiler.context.set('BodyValidationError', BodyValidationError);
|
|
334
|
+
parameterNames.push(`new BodyValidation(new BodyValidationError(bodyErrors), bodyErrors.length === 0 ? parameters.${parameter.parameter.name} : undefined)`);
|
|
335
|
+
bodyValidationErrorHandling = '';
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
parameterNames.push(`parameters.${parameter.parameter.name}`);
|
|
339
|
+
}
|
|
343
340
|
}
|
|
344
341
|
else if (parameter.query || parameter.queries) {
|
|
345
|
-
const converted = parameter.
|
|
346
|
-
const validator =
|
|
342
|
+
const converted = getSerializeFunction(parameter.parameter.parameter, serializer.deserializeRegistry, undefined, parameter.getName());
|
|
343
|
+
const validator = getValidatorFunction(undefined, parameter.parameter.parameter);
|
|
347
344
|
const converterVar = compiler.reserveVariable('argumentConverter', converted);
|
|
348
345
|
const validatorVar = compiler.reserveVariable('argumentValidator', validator);
|
|
349
|
-
const queryPath = parameter.typePath === undefined ? parameter.
|
|
346
|
+
const queryPath = parameter.typePath === undefined && parameter.query ? parameter.parameter.name : parameter.typePath;
|
|
350
347
|
const accessor = queryPath ? `['` + (queryPath.replace(/\./g, `']['`)) + `']` : '';
|
|
351
348
|
const queryAccessor = queryPath ? `_query${accessor}` : '_query';
|
|
352
|
-
setParameters.push(`parameters.${parameter.
|
|
353
|
-
parameterNames.push(`parameters.${parameter.
|
|
354
|
-
parameterValidator.push(`${validatorVar}(parameters.${parameter.
|
|
349
|
+
setParameters.push(`parameters.${parameter.parameter.name} = ${converterVar}(${queryAccessor}, {loosely: true});`);
|
|
350
|
+
parameterNames.push(`parameters.${parameter.parameter.name}`);
|
|
351
|
+
parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: validationErrors}, ${JSON.stringify(parameter.typePath || parameter.getName())});`);
|
|
355
352
|
}
|
|
356
353
|
else {
|
|
357
|
-
parameterNames.push(`parameters.${parameter.
|
|
354
|
+
parameterNames.push(`parameters.${parameter.parameter.name}`);
|
|
358
355
|
if (parameter.isPartOfPath()) {
|
|
359
|
-
if (parameter.
|
|
360
|
-
const converted = parameter.
|
|
356
|
+
if (parameter.parameter.type.kind !== 20 /* class */) {
|
|
357
|
+
const converted = getSerializeFunction(parameter.parameter.parameter, serializer.deserializeRegistry, undefined, parameter.getName());
|
|
361
358
|
const converterVar = compiler.reserveVariable('argumentConverter', converted);
|
|
362
|
-
setParameters.push(`parameters.${parameter.
|
|
363
|
-
const validator =
|
|
359
|
+
setParameters.push(`parameters.${parameter.parameter.name} = ${converterVar}(_match[${1 + (parameter.regexPosition || 0)}], {loosely: true});`);
|
|
360
|
+
const validator = getValidatorFunction(undefined, parameter.parameter.parameter);
|
|
364
361
|
const validatorVar = compiler.reserveVariable('argumentValidator', validator);
|
|
365
|
-
parameterValidator.push(`${validatorVar}(parameters.${parameter.
|
|
362
|
+
parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: validationErrors}, ${JSON.stringify(parameter.getName())});`);
|
|
366
363
|
}
|
|
367
364
|
else {
|
|
368
|
-
setParameters.push(`parameters.${parameter.
|
|
365
|
+
setParameters.push(`parameters.${parameter.parameter.name} = _match[${1 + (parameter.regexPosition || 0)}];`);
|
|
369
366
|
}
|
|
370
367
|
}
|
|
371
|
-
const
|
|
372
|
-
const injectorToken = injectorOptions && injectorOptions.token ? injectorOptions.token : (parameter.property.type === 'class' ? parameter.property.getResolvedClassType() : undefined);
|
|
368
|
+
const injectorToken = parameter.parameter.type.kind === 20 /* class */ ? parameter.parameter.type.classType : undefined;
|
|
373
369
|
const injectorTokenVar = compiler.reserveVariable('classType', injectorToken);
|
|
374
370
|
const parameterResolverFoundVar = compiler.reserveVariable('parameterResolverFound', false);
|
|
375
371
|
setParameters.push(`${parameterResolverFoundVar} = false;`);
|
|
@@ -391,27 +387,21 @@ let Router = class Router {
|
|
|
391
387
|
${instance} = ${injector}.get(${resolverProvideTokenVar}${moduleVar});
|
|
392
388
|
if (!${parameterResolverFoundVar}) {
|
|
393
389
|
${parameterResolverFoundVar} = true;
|
|
394
|
-
parameters.${parameter.
|
|
390
|
+
parameters.${parameter.parameter.name} = await ${instance}.resolve({
|
|
395
391
|
token: ${injectorTokenVar},
|
|
396
392
|
routeConfig: ${routeConfigVar},
|
|
397
393
|
request: request,
|
|
398
|
-
name: ${JSON.stringify(parameter.
|
|
399
|
-
value: parameters.${parameter.
|
|
394
|
+
name: ${JSON.stringify(parameter.parameter.name)},
|
|
395
|
+
value: parameters.${parameter.parameter.name},
|
|
400
396
|
query: _query,
|
|
401
397
|
parameters: parameters
|
|
402
398
|
});
|
|
403
399
|
}`);
|
|
404
400
|
}
|
|
405
|
-
else {
|
|
406
|
-
if (!parameter.isPartOfPath() && parameter.property.type !== 'class' && (!injectorOptions || !injectorOptions.token)) {
|
|
407
|
-
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.` +
|
|
408
|
-
`If its a query parameter use '@http.query() ${parameter.property.name}' or if its a body '@http.body() ${parameter.property.name}'.`);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
401
|
if (!parameter.isPartOfPath()) {
|
|
412
|
-
let injectorGet = `parameters.${parameter.
|
|
413
|
-
if (
|
|
414
|
-
injectorGet = `try {parameters.${parameter.
|
|
402
|
+
let injectorGet = `parameters.${parameter.parameter.name} = ${injector}.get(${injectorTokenVar});`;
|
|
403
|
+
if (parameter.parameter.isOptional()) {
|
|
404
|
+
injectorGet = `try {parameters.${parameter.parameter.name} = ${injector}.get(${injectorTokenVar}); } catch (e) {}`;
|
|
415
405
|
}
|
|
416
406
|
setParameters.push(`if (!${parameterResolverFoundVar}) ${injectorGet}`);
|
|
417
407
|
}
|
|
@@ -460,15 +450,15 @@ let Router = class Router {
|
|
|
460
450
|
${setParameters.join('\n')}
|
|
461
451
|
${parameterValidator.join('\n')}
|
|
462
452
|
${bodyValidationErrorHandling}
|
|
463
|
-
if (validationErrors.length) throw
|
|
453
|
+
if (validationErrors.length) throw new ValidationError(validationErrors);
|
|
464
454
|
return [${parameterNames.join(',')}];
|
|
465
455
|
}`;
|
|
466
456
|
}
|
|
467
457
|
let methodCheck = '';
|
|
468
458
|
if (routeConfig.httpMethods.length) {
|
|
469
|
-
methodCheck = '(' + routeConfig.httpMethods.map(v => {
|
|
459
|
+
methodCheck = '(' + routeConfig.httpMethods.map(Object.assign(v => {
|
|
470
460
|
return `_method === '${v.toUpperCase()}'`;
|
|
471
|
-
}).join(' || ') + ') && ';
|
|
461
|
+
}, { __type: ['v', '', 'P"2!"/"'] })).join(' || ') + ') && ';
|
|
472
462
|
}
|
|
473
463
|
return `
|
|
474
464
|
//=> ${routeConfig.httpMethods.join(',')} ${path}
|
|
@@ -480,15 +470,15 @@ let Router = class Router {
|
|
|
480
470
|
getRouteUrlResolveCode(compiler, routeConfig) {
|
|
481
471
|
const parsedRoute = parseRouteControllerAction(routeConfig);
|
|
482
472
|
let url = routeConfig.getFullPath();
|
|
483
|
-
url = url.replace(/:(\w+)/g, (a, name) => {
|
|
473
|
+
url = url.replace(/:(\w+)/g, Object.assign((a, name) => {
|
|
484
474
|
return `\${parameters.${name}}`;
|
|
485
|
-
});
|
|
475
|
+
}, { __type: ['a', 'name', '', 'P"2!"2""/#'] }));
|
|
486
476
|
const modify = [];
|
|
487
477
|
for (const parameter of parsedRoute.getParameters()) {
|
|
488
478
|
if (parameter.query || parameter.queries) {
|
|
489
|
-
const queryPath = parameter.typePath === undefined ? parameter.
|
|
490
|
-
if (parameter.
|
|
491
|
-
for (const property of parameter.
|
|
479
|
+
const queryPath = parameter.typePath === undefined && parameter.query ? parameter.parameter.name : parameter.typePath || '';
|
|
480
|
+
if (parameter.parameter.type.kind === 20 /* class */ || parameter.parameter.type.kind === 30 /* objectLiteral */) {
|
|
481
|
+
for (const property of ReflectionClass.from(parameter.parameter.type).getProperties()) {
|
|
492
482
|
const accessor = `parameters.${parameter.getName()}?.${property.name}`;
|
|
493
483
|
const thisPath = queryPath ? queryPath + '.' + property.name : property.name;
|
|
494
484
|
modify.push(`${accessor} !== undefined && query.push(${JSON.stringify(dotToUrlPath(thisPath))} + '=' + encodeURIComponent(${accessor}))`);
|
|
@@ -516,7 +506,7 @@ let Router = class Router {
|
|
|
516
506
|
const data = httpClass._fetch(controller);
|
|
517
507
|
if (!data)
|
|
518
508
|
throw new Error(`Http controller class ${getClassName(controller)} has no @http.controller decorator.`);
|
|
519
|
-
const schema =
|
|
509
|
+
const schema = ReflectionClass.from(controller);
|
|
520
510
|
for (const action of data.getActions()) {
|
|
521
511
|
const routeConfig = new RouteConfig(action.name, action.httpMethods, action.path, {
|
|
522
512
|
controller,
|
|
@@ -524,19 +514,18 @@ let Router = class Router {
|
|
|
524
514
|
methodName: action.methodName
|
|
525
515
|
});
|
|
526
516
|
routeConfig.module = module;
|
|
527
|
-
routeConfig.parameterRegularExpressions = action.parameterRegularExpressions;
|
|
528
517
|
routeConfig.responses = action.responses;
|
|
529
518
|
routeConfig.description = action.description;
|
|
530
519
|
routeConfig.category = action.category;
|
|
531
520
|
routeConfig.groups = action.groups;
|
|
532
521
|
routeConfig.data = new Map(action.data);
|
|
533
522
|
routeConfig.baseUrl = data.baseUrl;
|
|
534
|
-
routeConfig.middlewares = data.middlewares.map(v => {
|
|
523
|
+
routeConfig.middlewares = data.middlewares.map(Object.assign(v => {
|
|
535
524
|
return { config: v(), module };
|
|
536
|
-
});
|
|
537
|
-
routeConfig.middlewares.push(...action.middlewares.map(v => {
|
|
525
|
+
}, { __type: ['v', '', 'P"2!"/"'] }));
|
|
526
|
+
routeConfig.middlewares.push(...action.middlewares.map(Object.assign(v => {
|
|
538
527
|
return { config: v(), module };
|
|
539
|
-
}));
|
|
528
|
+
}, { __type: ['v', '', 'P"2!"/"'] })));
|
|
540
529
|
for (const item of action.resolverForToken)
|
|
541
530
|
routeConfig.resolverForToken.set(...item);
|
|
542
531
|
routeConfig.resolverForToken = new Map(data.resolverForToken);
|
|
@@ -545,18 +534,17 @@ let Router = class Router {
|
|
|
545
534
|
routeConfig.resolverForParameterName = new Map(data.resolverForParameterName);
|
|
546
535
|
for (const item of action.resolverForParameterName)
|
|
547
536
|
routeConfig.resolverForParameterName.set(...item);
|
|
548
|
-
routeConfig.parameters = { ...action.parameters };
|
|
549
537
|
routeConfig.serializationOptions = action.serializationOptions;
|
|
550
538
|
routeConfig.serializer = action.serializer;
|
|
551
539
|
routeConfig.serializer = action.serializer;
|
|
552
540
|
if (schema.hasMethod(action.methodName))
|
|
553
|
-
routeConfig.
|
|
541
|
+
routeConfig.returnType = schema.getMethod(action.methodName).getReturnType();
|
|
554
542
|
this.addRoute(routeConfig);
|
|
555
543
|
}
|
|
556
544
|
}
|
|
557
545
|
build() {
|
|
558
546
|
const compiler = new CompilerContext;
|
|
559
|
-
compiler.context.set('
|
|
547
|
+
compiler.context.set('ValidationError', ValidationError);
|
|
560
548
|
compiler.context.set('qs', require('qs'));
|
|
561
549
|
const code = [];
|
|
562
550
|
for (const route of this.routes) {
|
|
@@ -602,13 +590,6 @@ let Router = class Router {
|
|
|
602
590
|
method = method.toUpperCase();
|
|
603
591
|
return this.resolveRequest({ url, method });
|
|
604
592
|
}
|
|
605
|
-
}
|
|
606
|
-
Router =
|
|
607
|
-
injectable,
|
|
608
|
-
__metadata("design:paramtypes", [HttpControllers,
|
|
609
|
-
Logger,
|
|
610
|
-
TagRegistry,
|
|
611
|
-
MiddlewareRegistry])
|
|
612
|
-
], Router);
|
|
613
|
-
export { Router };
|
|
593
|
+
}
|
|
594
|
+
Router.__type = [() => HttpRequest, 'request', () => __ΩResolvedController, '', 'fn', 'name', 'parameters', 'resolveFn', () => RouteConfig, 'routes', function () { return []; }, () => HttpRequest, 'req', () => UploadedFile, 'files', 'parseBody', () => HttpControllers, 'controllers', () => __ΩLoggerInterface, 'logger', () => TagRegistry, 'tagRegistry', () => MiddlewareRegistry, 'middlewareRegistry', () => new MiddlewareRegistry, 'constructor', () => RouteConfig, 'getRoutes', () => __ΩClassType, () => InjectorModule, 'module', () => __ΩClassType, 'controller', () => TagRegistry, () => new TagRegistry(), () => MiddlewareRegistry, () => new MiddlewareRegistry(), () => InjectorModule, () => new InjectorModule(), () => Router, 'forControllers', () => CompilerContext, 'compiler', () => RouteConfig, 'routeConfig', 'getRouteCode', () => CompilerContext, () => RouteConfig, 'getRouteUrlResolveCode', () => RouteConfig, 'addRoute', () => __ΩClassType, () => InjectorModule, 'addRouteForController', () => HttpRequest, () => __ΩResolvedController, 'build', 'buildUrlResolver', 'routeName', () => ({}), 'resolveUrl', () => 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'];
|
|
614
595
|
//# sourceMappingURL=router.js.map
|