@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.
Files changed (142) hide show
  1. package/coverage/clover.xml +1086 -0
  2. package/coverage/coverage-final.json +12 -0
  3. package/coverage/lcov-report/base.css +224 -0
  4. package/coverage/lcov-report/block-navigation.js +79 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +126 -0
  7. package/coverage/lcov-report/prettify.css +1 -0
  8. package/coverage/lcov-report/prettify.js +2 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +170 -0
  11. package/coverage/lcov-report/src/controllers.ts.html +113 -0
  12. package/coverage/lcov-report/src/decorator.ts.html +1280 -0
  13. package/coverage/lcov-report/src/filter.ts.html +734 -0
  14. package/coverage/lcov-report/src/http.ts.html +2192 -0
  15. package/coverage/lcov-report/src/index.html +246 -0
  16. package/coverage/lcov-report/src/kernel.ts.html +260 -0
  17. package/coverage/lcov-report/src/middleware.ts.html +428 -0
  18. package/coverage/lcov-report/src/model.ts.html +937 -0
  19. package/coverage/lcov-report/src/module.config.ts.html +89 -0
  20. package/coverage/lcov-report/src/module.ts.html +245 -0
  21. package/coverage/lcov-report/src/router.ts.html +2318 -0
  22. package/coverage/lcov-report/tests/index.html +111 -0
  23. package/coverage/lcov-report/tests/utils.ts.html +176 -0
  24. package/coverage/lcov.info +2225 -0
  25. package/dist/cjs/src/controllers.d.ts +4 -4
  26. package/dist/cjs/src/controllers.js +3 -0
  27. package/dist/cjs/src/controllers.js.map +1 -1
  28. package/dist/cjs/src/decorator.d.ts +29 -94
  29. package/dist/cjs/src/decorator.js +53 -118
  30. package/dist/cjs/src/decorator.js.map +1 -1
  31. package/dist/cjs/src/filter.d.ts +1 -0
  32. package/dist/cjs/src/filter.js +11 -17
  33. package/dist/cjs/src/filter.js.map +1 -1
  34. package/dist/cjs/src/http.d.ts +5 -3
  35. package/dist/cjs/src/http.js +91 -55
  36. package/dist/cjs/src/http.js.map +1 -1
  37. package/dist/cjs/src/kernel.d.ts +3 -3
  38. package/dist/cjs/src/kernel.js +5 -25
  39. package/dist/cjs/src/kernel.js.map +1 -1
  40. package/dist/cjs/src/logger.d.ts +2 -2
  41. package/dist/cjs/src/logger.js +4 -8
  42. package/dist/cjs/src/logger.js.map +1 -1
  43. package/dist/cjs/src/middleware.d.ts +5 -1
  44. package/dist/cjs/src/middleware.js +15 -3
  45. package/dist/cjs/src/middleware.js.map +1 -1
  46. package/dist/cjs/src/model.d.ts +69 -2
  47. package/dist/cjs/src/model.js +96 -25
  48. package/dist/cjs/src/model.js.map +1 -1
  49. package/dist/cjs/src/module.config.d.ts +3 -4
  50. package/dist/cjs/src/module.config.js +8 -6
  51. package/dist/cjs/src/module.config.js.map +1 -1
  52. package/dist/cjs/src/module.d.ts +2 -3
  53. package/dist/cjs/src/module.js +4 -2
  54. package/dist/cjs/src/module.js.map +1 -1
  55. package/dist/cjs/src/router.d.ts +25 -54
  56. package/dist/cjs/src/router.js +157 -175
  57. package/dist/cjs/src/router.js.map +1 -1
  58. package/dist/cjs/src/static-serving.d.ts +1 -0
  59. package/dist/cjs/src/static-serving.js +38 -34
  60. package/dist/cjs/src/static-serving.js.map +1 -1
  61. package/dist/cjs/src/utils.js +1 -0
  62. package/dist/cjs/tests/filter.spec.js +61 -47
  63. package/dist/cjs/tests/filter.spec.js.map +1 -1
  64. package/dist/cjs/tests/middleware.spec.d.ts +1 -1
  65. package/dist/cjs/tests/middleware.spec.js +157 -145
  66. package/dist/cjs/tests/middleware.spec.js.map +1 -1
  67. package/dist/cjs/tests/model.spec.js +4 -4
  68. package/dist/cjs/tests/model.spec.js.map +1 -1
  69. package/dist/cjs/tests/module.spec.js +4 -3
  70. package/dist/cjs/tests/module.spec.js.map +1 -1
  71. package/dist/cjs/tests/router.spec.d.ts +1 -1
  72. package/dist/cjs/tests/router.spec.js +311 -322
  73. package/dist/cjs/tests/router.spec.js.map +1 -1
  74. package/dist/cjs/tests/utils.js +5 -2
  75. package/dist/cjs/tests/utils.js.map +1 -1
  76. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  77. package/dist/esm/src/controllers.d.ts +4 -4
  78. package/dist/esm/src/controllers.js +3 -0
  79. package/dist/esm/src/controllers.js.map +1 -1
  80. package/dist/esm/src/decorator.d.ts +29 -94
  81. package/dist/esm/src/decorator.js +49 -114
  82. package/dist/esm/src/decorator.js.map +1 -1
  83. package/dist/esm/src/filter.d.ts +1 -0
  84. package/dist/esm/src/filter.js +11 -18
  85. package/dist/esm/src/filter.js.map +1 -1
  86. package/dist/esm/src/http.d.ts +5 -3
  87. package/dist/esm/src/http.js +89 -55
  88. package/dist/esm/src/http.js.map +1 -1
  89. package/dist/esm/src/kernel.d.ts +3 -3
  90. package/dist/esm/src/kernel.js +6 -27
  91. package/dist/esm/src/kernel.js.map +1 -1
  92. package/dist/esm/src/logger.d.ts +2 -2
  93. package/dist/esm/src/logger.js +4 -9
  94. package/dist/esm/src/logger.js.map +1 -1
  95. package/dist/esm/src/middleware.d.ts +5 -1
  96. package/dist/esm/src/middleware.js +12 -0
  97. package/dist/esm/src/middleware.js.map +1 -1
  98. package/dist/esm/src/model.d.ts +69 -2
  99. package/dist/esm/src/model.js +92 -24
  100. package/dist/esm/src/model.js.map +1 -1
  101. package/dist/esm/src/module.config.d.ts +3 -4
  102. package/dist/esm/src/module.config.js +6 -5
  103. package/dist/esm/src/module.config.js.map +1 -1
  104. package/dist/esm/src/module.d.ts +2 -3
  105. package/dist/esm/src/module.js +5 -3
  106. package/dist/esm/src/module.js.map +1 -1
  107. package/dist/esm/src/router.d.ts +25 -54
  108. package/dist/esm/src/router.js +154 -172
  109. package/dist/esm/src/router.js.map +1 -1
  110. package/dist/esm/src/static-serving.d.ts +1 -0
  111. package/dist/esm/src/static-serving.js +29 -25
  112. package/dist/esm/src/static-serving.js.map +1 -1
  113. package/dist/esm/src/utils.js +1 -0
  114. package/dist/esm/tests/filter.spec.js +14 -0
  115. package/dist/esm/tests/filter.spec.js.map +1 -1
  116. package/dist/esm/tests/middleware.spec.d.ts +1 -1
  117. package/dist/esm/tests/middleware.spec.js +60 -48
  118. package/dist/esm/tests/middleware.spec.js.map +1 -1
  119. package/dist/esm/tests/module.spec.js +1 -0
  120. package/dist/esm/tests/module.spec.js.map +1 -1
  121. package/dist/esm/tests/router.spec.d.ts +1 -1
  122. package/dist/esm/tests/router.spec.js +184 -195
  123. package/dist/esm/tests/router.spec.js.map +1 -1
  124. package/dist/esm/tests/utils.js +4 -1
  125. package/dist/esm/tests/utils.js.map +1 -1
  126. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  127. package/package.json +14 -15
  128. package/src/controllers.ts +3 -3
  129. package/src/decorator.ts +42 -131
  130. package/src/filter.ts +0 -2
  131. package/src/http.ts +35 -36
  132. package/src/kernel.ts +4 -5
  133. package/src/logger.ts +2 -4
  134. package/src/middleware.ts +2 -1
  135. package/src/model.ts +86 -8
  136. package/src/module.config.ts +3 -6
  137. package/src/module.ts +2 -2
  138. package/src/router.ts +143 -183
  139. package/src/static-serving.ts +2 -4
  140. package/tests/middleware.spec.ts +0 -1
  141. package/tests/router.spec.ts +152 -131
  142. package/tsconfig.json +2 -1
@@ -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.BodyValidation = exports.RouteConfig = exports.UploadedFile = void 0;
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
- __decorate([
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
- function parseBody(form, req, files) {
63
- return core_1.asyncOperation((resolve, reject) => {
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, config) {
149
- const parameter = new ParsedRouteParameter(property, config);
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(property, config) {
166
- this.property = property;
167
- this.config = config;
118
+ constructor(parameter) {
119
+ this.parameter = parameter;
168
120
  }
169
121
  get body() {
170
- return this.config ? this.config.type === 'body' : false;
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 this.config ? this.config.type === 'query' : false;
138
+ return type_1.metaAnnotation.getForName(this.parameter.type, 'httpQuery') !== undefined;
174
139
  }
175
140
  get queries() {
176
- return this.config ? this.config.type === 'queries' : false;
141
+ return type_1.metaAnnotation.getForName(this.parameter.type, 'httpQueries') !== undefined;
177
142
  }
178
143
  get typePath() {
179
- return this.config ? this.config.typePath : undefined;
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.property.name;
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
- return routeConfig.parameterRegularExpressions[name] ? '(' + routeConfig.parameterRegularExpressions[name] + ')' : String.raw `([^/]+)`;
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.getClassSchema(routeConfig.action.controller);
180
+ const schema = type_1.ReflectionClass.from(routeConfig.action.controller);
201
181
  const parsedRoute = new ParsedRoute(routeConfig);
202
- const methodArgumentProperties = schema.getMethodProperties(routeConfig.action.methodName);
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 decoratorData = routeConfig.parameters[property.name];
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
- let Router = class Router {
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
- //todo, move some settings to KernelConfig
303
- this.form = formidable_1.default({
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
- for (const controller of controllers.controllers) {
309
- this.addRouteForController(controller.controller, controller.module);
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 app_1.AppModule({})) {
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 ValidationFailed.from(bodyErrors);`;
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 (parsedRoute.customValidationErrorHandling === parameter) {
338
- compiler.context.set('BodyValidation', BodyValidation);
339
- bodyValidationErrorHandling = '';
340
- setParameters.push(`parameters.${parameter.property.name} = new BodyValidation(bodyErrors);`);
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.property.name} = ${converterVar}(bodyFields);`);
348
- parameterValidator.push(`${validatorVar}(parameters.${parameter.property.name}, ${JSON.stringify(parameter.typePath || '')}, bodyErrors);`);
349
- parameterNames.push(`parameters.${parameter.property.name}`);
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 = parameter.property.type === 'any' ? (v) => v : type_1.getPropertyXtoClassFunction(parameter.property, type_1.jsonSerializer);
353
- const validator = parameter.property.type === 'any' ? (v) => undefined : type_1.jitValidateProperty(parameter.property);
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.property.name : parameter.typePath;
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.property.name} = ${converterVar}(${queryAccessor});`);
360
- parameterNames.push(`parameters.${parameter.property.name}`);
361
- parameterValidator.push(`${validatorVar}(parameters.${parameter.property.name}, ${JSON.stringify(parameter.typePath)}, validationErrors);`);
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.property.name}`);
363
+ parameterNames.push(`parameters.${parameter.parameter.name}`);
365
364
  if (parameter.isPartOfPath()) {
366
- if (parameter.property.type !== 'class') {
367
- const converted = parameter.property.type === 'any' ? (v) => v : type_1.getPropertyXtoClassFunction(parameter.property, type_1.jsonSerializer);
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.property.name} = ${converterVar}(_match[${1 + (parameter.regexPosition || 0)}]);`);
370
- const validator = parameter.property.type === 'any' ? (v) => undefined : type_1.jitValidateProperty(parameter.property);
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.property.name}, ${JSON.stringify(parameter.getName())}, validationErrors);`);
371
+ parameterValidator.push(`${validatorVar}(parameters.${parameter.parameter.name}, {errors: validationErrors}, ${JSON.stringify(parameter.getName())});`);
373
372
  }
374
373
  else {
375
- setParameters.push(`parameters.${parameter.property.name} = _match[${1 + (parameter.regexPosition || 0)}];`);
374
+ setParameters.push(`parameters.${parameter.parameter.name} = _match[${1 + (parameter.regexPosition || 0)}];`);
376
375
  }
377
376
  }
378
- const injectorOptions = parameter.property.data['deepkit/inject'];
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.property.name} = await ${instance}.resolve({
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.property.name)},
406
- value: parameters.${parameter.property.name},
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.property.name} = ${injector}.get(${injectorTokenVar});`;
420
- if (injectorOptions && injectorOptions.optional) {
421
- injectorGet = `try {parameters.${parameter.property.name} = ${injector}.get(${injectorTokenVar}); } catch (e) {}`;
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 bodyParsed = (await ${parseBodyVar}(${formVar}, request, uploadedFiles));
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 ValidationFailed.from(validationErrors);
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.property.name : parameter.typePath;
499
- if (parameter.property.type === 'class') {
500
- for (const property of parameter.property.getResolvedClassSchema().getProperties()) {
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.getClassSchema(controller);
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.returnSchema = schema.getMethod(action.methodName);
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('ValidationFailed', type_1.ValidationFailed);
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