@deepkit/http 1.0.1-alpha.100
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/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/.gitkeep +0 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/src/controllers.d.ts +13 -0
- package/dist/cjs/src/controllers.js +17 -0
- package/dist/cjs/src/controllers.js.map +1 -0
- package/dist/cjs/src/decorator.d.ts +241 -0
- package/dist/cjs/src/decorator.js +422 -0
- package/dist/cjs/src/decorator.js.map +1 -0
- package/dist/cjs/src/filter.d.ts +49 -0
- package/dist/cjs/src/filter.js +215 -0
- package/dist/cjs/src/filter.js.map +1 -0
- package/dist/cjs/src/http-app.d.ts +8 -0
- package/dist/cjs/src/http-app.js +16 -0
- package/dist/cjs/src/http-app.js.map +1 -0
- package/dist/cjs/src/http.d.ts +278 -0
- package/dist/cjs/src/http.js +878 -0
- package/dist/cjs/src/http.js.map +1 -0
- package/dist/cjs/src/kernel.d.ts +16 -0
- package/dist/cjs/src/kernel.js +79 -0
- package/dist/cjs/src/kernel.js.map +1 -0
- package/dist/cjs/src/logger.d.ts +7 -0
- package/dist/cjs/src/logger.js +34 -0
- package/dist/cjs/src/logger.js.map +1 -0
- package/dist/cjs/src/middleware.d.ts +61 -0
- package/dist/cjs/src/middleware.js +95 -0
- package/dist/cjs/src/middleware.js.map +1 -0
- package/dist/cjs/src/model.d.ts +165 -0
- package/dist/cjs/src/model.js +398 -0
- package/dist/cjs/src/model.js.map +1 -0
- package/dist/cjs/src/module.config.d.ts +84 -0
- package/dist/cjs/src/module.config.js +14 -0
- package/dist/cjs/src/module.config.js.map +1 -0
- package/dist/cjs/src/module.d.ts +14 -0
- package/dist/cjs/src/module.js +124 -0
- package/dist/cjs/src/module.js.map +1 -0
- package/dist/cjs/src/request-parser.d.ts +36 -0
- package/dist/cjs/src/request-parser.js +305 -0
- package/dist/cjs/src/request-parser.js.map +1 -0
- package/dist/cjs/src/router.d.ts +230 -0
- package/dist/cjs/src/router.js +617 -0
- package/dist/cjs/src/router.js.map +1 -0
- package/dist/cjs/src/static-serving.d.ts +32 -0
- package/dist/cjs/src/static-serving.js +157 -0
- package/dist/cjs/src/static-serving.js.map +1 -0
- package/dist/cjs/src/utils.d.ts +1 -0
- package/dist/cjs/src/utils.js +13 -0
- package/dist/cjs/src/utils.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/src/controllers.d.ts +13 -0
- package/dist/esm/src/controllers.js +13 -0
- package/dist/esm/src/controllers.js.map +1 -0
- package/dist/esm/src/decorator.d.ts +241 -0
- package/dist/esm/src/decorator.js +414 -0
- package/dist/esm/src/decorator.js.map +1 -0
- package/dist/esm/src/filter.d.ts +49 -0
- package/dist/esm/src/filter.js +209 -0
- package/dist/esm/src/filter.js.map +1 -0
- package/dist/esm/src/http-app.d.ts +8 -0
- package/dist/esm/src/http-app.js +12 -0
- package/dist/esm/src/http-app.js.map +1 -0
- package/dist/esm/src/http.d.ts +278 -0
- package/dist/esm/src/http.js +841 -0
- package/dist/esm/src/http.js.map +1 -0
- package/dist/esm/src/kernel.d.ts +16 -0
- package/dist/esm/src/kernel.js +75 -0
- package/dist/esm/src/kernel.js.map +1 -0
- package/dist/esm/src/logger.d.ts +7 -0
- package/dist/esm/src/logger.js +30 -0
- package/dist/esm/src/logger.js.map +1 -0
- package/dist/esm/src/middleware.d.ts +61 -0
- package/dist/esm/src/middleware.js +90 -0
- package/dist/esm/src/middleware.js.map +1 -0
- package/dist/esm/src/model.d.ts +165 -0
- package/dist/esm/src/model.js +363 -0
- package/dist/esm/src/model.js.map +1 -0
- package/dist/esm/src/module.config.d.ts +84 -0
- package/dist/esm/src/module.config.js +10 -0
- package/dist/esm/src/module.config.js.map +1 -0
- package/dist/esm/src/module.d.ts +14 -0
- package/dist/esm/src/module.js +120 -0
- package/dist/esm/src/module.js.map +1 -0
- package/dist/esm/src/request-parser.d.ts +36 -0
- package/dist/esm/src/request-parser.js +295 -0
- package/dist/esm/src/request-parser.js.map +1 -0
- package/dist/esm/src/router.d.ts +230 -0
- package/dist/esm/src/router.js +605 -0
- package/dist/esm/src/router.js.map +1 -0
- package/dist/esm/src/static-serving.d.ts +32 -0
- package/dist/esm/src/static-serving.js +149 -0
- package/dist/esm/src/static-serving.js.map +1 -0
- package/dist/esm/src/utils.d.ts +1 -0
- package/dist/esm/src/utils.js +9 -0
- package/dist/esm/src/utils.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/index.ts +14 -0
- package/package.json +67 -0
- package/src/controllers.ts +11 -0
- package/src/decorator.ts +411 -0
- package/src/filter.ts +224 -0
- package/src/http-app.ts +11 -0
- package/src/http.ts +828 -0
- package/src/kernel.ts +79 -0
- package/src/logger.ts +20 -0
- package/src/middleware.ts +116 -0
- package/src/model.ts +392 -0
- package/src/module.config.ts +95 -0
- package/src/module.ts +116 -0
- package/src/request-parser.ts +346 -0
- package/src/router.ts +747 -0
- package/src/static-serving.ts +153 -0
- package/src/utils.ts +5 -0
- package/tsconfig.esm.json +36 -0
- package/tsconfig.json +53 -0
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
/*@ts-ignore*/
|
|
8
|
+
import { __ΩSerializationOptions as __ΩSerializationOptions } from '@deepkit/type';
|
|
9
|
+
/*@ts-ignore*/
|
|
10
|
+
import { __ΩClassType as __ΩClassType } from '@deepkit/core';
|
|
11
|
+
/*@ts-ignore*/
|
|
12
|
+
import { __ΩMiddlewareRegistryEntry as __ΩMiddlewareRegistryEntry } from '@deepkit/app';
|
|
13
|
+
/*@ts-ignore*/
|
|
14
|
+
import { __ΩHttpDecorator as __ΩHttpDecorator } from './decorator.js';
|
|
15
|
+
/*@ts-ignore*/
|
|
16
|
+
import { __ΩLoggerInterface as __ΩLoggerInterface } from '@deepkit/logger';
|
|
17
|
+
/*@ts-ignore*/
|
|
18
|
+
import { __ΩHttpRequestPositionedParameters as __ΩHttpRequestPositionedParameters } from './model.js';
|
|
19
|
+
/*@ts-ignore*/
|
|
20
|
+
import { __ΩHttpMiddlewareFn as __ΩHttpMiddlewareFn } from './middleware.js';
|
|
21
|
+
/*@ts-ignore*/
|
|
22
|
+
import { __ΩHttpRequestQuery as __ΩHttpRequestQuery } from './model.js';
|
|
23
|
+
/*@ts-ignore*/
|
|
24
|
+
import { __ΩHttpRequestResolvedParameters as __ΩHttpRequestResolvedParameters } from './model.js';
|
|
25
|
+
function __assignType(fn, args) {
|
|
26
|
+
fn.__type = args;
|
|
27
|
+
return fn;
|
|
28
|
+
}
|
|
29
|
+
const __ΩPartial = ['T', 'l+e#!e"!fRb!Pde"!gN#"'];
|
|
30
|
+
const __ΩRecord = ['K', 'T', 'l\'e#"Rb!b"Pde"!N#!'];
|
|
31
|
+
/*
|
|
32
|
+
* Deepkit Framework
|
|
33
|
+
* Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
|
|
34
|
+
*
|
|
35
|
+
* This program is free software: you can redistribute it and/or modify
|
|
36
|
+
* it under the terms of the MIT License.
|
|
37
|
+
*
|
|
38
|
+
* You should have received a copy of the MIT License along with this program.
|
|
39
|
+
*/
|
|
40
|
+
import { CompilerContext, getClassName, isArray, isClass, urlJoin } from '@deepkit/core';
|
|
41
|
+
import { entity, ReflectionClass, ReflectionFunction, ReflectionKind, ReflectionParameter, serializer, Serializer, ValidationError } from '@deepkit/type';
|
|
42
|
+
import { HttpAction, httpClass, HttpController } from './decorator.js';
|
|
43
|
+
import { HttpRequest } from './model.js';
|
|
44
|
+
import { InjectorContext, InjectorModule } from '@deepkit/injector';
|
|
45
|
+
import { Logger } from '@deepkit/logger';
|
|
46
|
+
import { HttpControllers } from './controllers.js';
|
|
47
|
+
import { MiddlewareRegistry } from '@deepkit/app';
|
|
48
|
+
import { HttpMiddlewareConfig } from './middleware.js';
|
|
49
|
+
//@ts-ignore
|
|
50
|
+
import qs from 'qs';
|
|
51
|
+
import { HtmlResponse, JSONResponse, Response } from './http.js';
|
|
52
|
+
import { getRequestParserCodeForParameters, ParameterForRequestParser, parseRoutePathToRegex } from './request-parser.js';
|
|
53
|
+
import { HttpConfig } from './module.config.js';
|
|
54
|
+
const __ΩRouteParameterResolverForInjector = [() => InjectorContext, 'injector', () => __ΩHttpRequestPositionedParameters, () => __ΩHttpRequestPositionedParameters, '', 'PP7!2"Pn#n$`J/%'];
|
|
55
|
+
export { __ΩRouteParameterResolverForInjector as __ΩRouteParameterResolverForInjector };
|
|
56
|
+
const __Ω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+8MF/,4-8M'];
|
|
57
|
+
export const UploadedFileSymbol = Symbol('UploadedFile');
|
|
58
|
+
let UploadedFile = class UploadedFile {
|
|
59
|
+
};
|
|
60
|
+
UploadedFile.__type = [() => UploadedFileSymbol, 'validator', 'size', 'path', 'name', 'type', 'lastModifiedDate', 'Pi!,J3"\'3#&3$P&,J3%P&,J3&PT,J3\'5'];
|
|
61
|
+
UploadedFile = __decorate([
|
|
62
|
+
entity.name('@deepkit/UploadedFile')
|
|
63
|
+
], UploadedFile);
|
|
64
|
+
export { UploadedFile };
|
|
65
|
+
serializer.typeGuards.getRegistry(1).registerClass(UploadedFile, __assignType((type, state) => {
|
|
66
|
+
state.setContext({ UploadedFileSymbol });
|
|
67
|
+
state.addSetterAndReportErrorIfInvalid('uploadSecurity', 'Not an uploaded file', `typeof ${state.accessor} === 'object' && ${state.accessor} !== null && ${state.accessor}.validator === UploadedFileSymbol`);
|
|
68
|
+
}, ['type', 'state', '', 'P"2!"2""/#']));
|
|
69
|
+
const __ΩRouteFunctionControllerAction = ["function", 'type', () => InjectorModule, 'module', 'args', '', 'fn', 'P.!4"P"7#4$8P"@2%"/&4\'M'];
|
|
70
|
+
export { __ΩRouteFunctionControllerAction as __ΩRouteFunctionControllerAction };
|
|
71
|
+
const __ΩRouteClassControllerAction = ["controller", 'type', () => InjectorModule, 'module', () => __ΩClassType, 'controller', 'methodName', 'P.!4"P"7#4$8n%4&&4\'M'];
|
|
72
|
+
export { __ΩRouteClassControllerAction as __ΩRouteClassControllerAction };
|
|
73
|
+
export class RouteConfig {
|
|
74
|
+
constructor(name, httpMethods, path, action, internal = false) {
|
|
75
|
+
this.name = name;
|
|
76
|
+
this.httpMethods = httpMethods;
|
|
77
|
+
this.path = path;
|
|
78
|
+
this.action = action;
|
|
79
|
+
this.internal = internal;
|
|
80
|
+
this.baseUrl = '';
|
|
81
|
+
this.responses = [];
|
|
82
|
+
this.description = '';
|
|
83
|
+
this.groups = [];
|
|
84
|
+
this.category = '';
|
|
85
|
+
this.resolverForToken = new Map();
|
|
86
|
+
this.middlewares = [];
|
|
87
|
+
this.resolverForParameterName = new Map();
|
|
88
|
+
/**
|
|
89
|
+
* An arbitrary data container the user can use to store app specific settings/values.
|
|
90
|
+
*/
|
|
91
|
+
this.data = (Map.Ω = [['"'], ['"']], new Map());
|
|
92
|
+
}
|
|
93
|
+
getReflectionFunction() {
|
|
94
|
+
return this.action.type === 'controller' ?
|
|
95
|
+
ReflectionClass.from(this.action.controller).getMethod(this.action.methodName)
|
|
96
|
+
: ReflectionFunction.from(this.action.fn);
|
|
97
|
+
}
|
|
98
|
+
getSchemaForResponse(statusCode) {
|
|
99
|
+
if (!this.responses.length)
|
|
100
|
+
return;
|
|
101
|
+
for (const response of this.responses) {
|
|
102
|
+
if (response.statusCode === statusCode)
|
|
103
|
+
return response.type;
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
getFullPath() {
|
|
108
|
+
let path = this.baseUrl ? urlJoin(this.baseUrl, this.path) : this.path;
|
|
109
|
+
if (!path.startsWith('/'))
|
|
110
|
+
path = '/' + path;
|
|
111
|
+
return path;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
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', () => __ΩRouteClassControllerAction, () => __ΩRouteFunctionControllerAction, 'action', 'internal', () => false, 'constructor', () => ReflectionFunction, 'getReflectionFunction', 'getSchemaForResponse', 'getFullPath', '&3!>"P\'4#&4$"4%8MF3&>\'&3$>(&F3)>*&3+>,"3-8n.3/8P70318P"72338"n4E35>6PP7748P"79438MF3:>;&n<E3=>>P&2?:9&F2@:9&2A:9PnBnCJ2D:9)2E:>F"0GPP7H0IP\'2#P"-J0JP&0K5'];
|
|
115
|
+
class ParsedRoute {
|
|
116
|
+
constructor(routeConfig) {
|
|
117
|
+
this.routeConfig = routeConfig;
|
|
118
|
+
this.pathParameterNames = {};
|
|
119
|
+
this.parameters = [];
|
|
120
|
+
}
|
|
121
|
+
addParameter(property) {
|
|
122
|
+
const parameter = new ParameterForRequestParser(property);
|
|
123
|
+
this.parameters.push(parameter);
|
|
124
|
+
return parameter;
|
|
125
|
+
}
|
|
126
|
+
getParameters() {
|
|
127
|
+
return this.parameters;
|
|
128
|
+
}
|
|
129
|
+
getParameter(name) {
|
|
130
|
+
for (const parameter of this.parameters) {
|
|
131
|
+
if (parameter.getName() === name)
|
|
132
|
+
return parameter;
|
|
133
|
+
}
|
|
134
|
+
throw new Error(`No route parameter with name ${name} defined.`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
ParsedRoute.__type = ['regex', 'pathParameterNames', function () { return {}; }, () => ParameterForRequestParser, 'parameters', function () { return []; }, () => RouteConfig, 'routeConfig', 'constructor', () => ReflectionParameter, 'property', () => ParameterForRequestParser, 'addParameter', () => ParameterForRequestParser, 'getParameters', 'name', () => ParameterForRequestParser, 'getParameter', '&3!8P&\'LM3">#P7$F3%<>&PP7\'2(:"0)PP7*2+P7,0-PP7.F0/P&20P71025'];
|
|
138
|
+
export function parseRouteControllerAction(routeConfig) {
|
|
139
|
+
const parsedRoute = new ParsedRoute(routeConfig);
|
|
140
|
+
const parameters = routeConfig.getReflectionFunction().getParameters();
|
|
141
|
+
const parsedPath = parseRoutePathToRegex(routeConfig.getFullPath(), parameters);
|
|
142
|
+
parsedRoute.regex = parsedPath.regex;
|
|
143
|
+
parsedRoute.pathParameterNames = parsedPath.parameterNames;
|
|
144
|
+
for (const property of parameters) {
|
|
145
|
+
const parsedParameter = parsedRoute.addParameter(property);
|
|
146
|
+
parsedParameter.regexPosition = parsedPath.parameterNames[property.name];
|
|
147
|
+
}
|
|
148
|
+
return parsedRoute;
|
|
149
|
+
}
|
|
150
|
+
parseRouteControllerAction.__type = [() => RouteConfig, 'routeConfig', () => ParsedRoute, 'parseRouteControllerAction', 'PP7!2"P7#/$'];
|
|
151
|
+
export function dotToUrlPath(dotPath) {
|
|
152
|
+
if (-1 === dotPath.indexOf('.'))
|
|
153
|
+
return dotPath;
|
|
154
|
+
return dotPath.replace(/\./g, '][').replace('][', '[') + ']';
|
|
155
|
+
}
|
|
156
|
+
dotToUrlPath.__type = ['dotPath', 'dotToUrlPath', 'P&2!&/"'];
|
|
157
|
+
const __ΩRouteParameterResolver = [() => __ΩRouteParameterResolverContext, 'context', 'resolve', 'PPn!2"P""`J1#M'];
|
|
158
|
+
export { __ΩRouteParameterResolver as __ΩRouteParameterResolver };
|
|
159
|
+
const __ΩRouteParameterResolverContext = [() => __ΩClassType, 'token', () => RouteConfig, 'route', () => HttpRequest, 'request', 'name', 'value', () => __ΩHttpRequestQuery, 'query', () => __ΩHttpRequestResolvedParameters, 'parameters', () => ReflectionParameter, 'type', 'PPn!&+"J4"P7#4$P7%4&"4\'"4(n)4*n+4,P7-4.M'];
|
|
160
|
+
export { __ΩRouteParameterResolverContext as __ΩRouteParameterResolverContext };
|
|
161
|
+
function filterMiddlewaresForRoute(middlewareRawConfigs, routeConfig, fullPath) {
|
|
162
|
+
const middlewares = middlewareRawConfigs.slice(0);
|
|
163
|
+
middlewares.push(...routeConfig.middlewares);
|
|
164
|
+
const middlewareConfigs = middlewares.filter(__assignType((v) => {
|
|
165
|
+
var _a;
|
|
166
|
+
if (!(v.config instanceof HttpMiddlewareConfig))
|
|
167
|
+
return false;
|
|
168
|
+
if (v.config.controllers.length && routeConfig.action.type === 'controller' && !v.config.controllers.includes(routeConfig.action.controller)) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (v.config.excludeControllers.length && routeConfig.action.type === 'controller' && v.config.excludeControllers.includes(routeConfig.action.controller)) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
if (v.config.modules.length && (!routeConfig.module || !v.config.modules.includes(routeConfig.module))) {
|
|
175
|
+
if (!routeConfig.module)
|
|
176
|
+
return false;
|
|
177
|
+
for (const module of v.config.modules) {
|
|
178
|
+
if (routeConfig.module.id !== module.id)
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (v.config.selfModule && v.module.id !== ((_a = routeConfig.module) === null || _a === void 0 ? void 0 : _a.id))
|
|
183
|
+
return false;
|
|
184
|
+
if (v.config.routeNames.length) {
|
|
185
|
+
let found = false;
|
|
186
|
+
for (const name of v.config.routeNames) {
|
|
187
|
+
if (name.includes('*')) {
|
|
188
|
+
const regex = new RegExp('^' + name.replace(/\*/g, '.*') + '$');
|
|
189
|
+
if (regex.test(routeConfig.name)) {
|
|
190
|
+
found = true;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (name === routeConfig.name) {
|
|
195
|
+
found = true;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (!found)
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
if (v.config.excludeRouteNames.length) {
|
|
203
|
+
for (const name of v.config.excludeRouteNames) {
|
|
204
|
+
if (name.includes('*')) {
|
|
205
|
+
const regex = new RegExp('^' + name.replace(/\*/g, '.*') + '$');
|
|
206
|
+
if (regex.test(routeConfig.name))
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
else if (name == routeConfig.name) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
for (const route of v.config.routes) {
|
|
215
|
+
if (route.httpMethod && !routeConfig.httpMethods.includes(route.httpMethod))
|
|
216
|
+
return false;
|
|
217
|
+
if (route.category && route.category !== routeConfig.category)
|
|
218
|
+
return false;
|
|
219
|
+
if (route.excludeCategory && route.excludeCategory === routeConfig.category)
|
|
220
|
+
return false;
|
|
221
|
+
if (route.group && !routeConfig.groups.includes(route.group))
|
|
222
|
+
return false;
|
|
223
|
+
if (route.excludeGroup && routeConfig.groups.includes(route.excludeGroup))
|
|
224
|
+
return false;
|
|
225
|
+
if (route.path || route.pathRegExp) {
|
|
226
|
+
if (!route.pathRegExp && route.path)
|
|
227
|
+
route.pathRegExp = new RegExp('^' + route.path.replace(/\*/g, '.*') + '$');
|
|
228
|
+
if (route.pathRegExp && !route.pathRegExp.test(fullPath))
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}, ['v', '', 'P"2!"/"']));
|
|
234
|
+
middlewareConfigs.sort(__assignType((a, b) => {
|
|
235
|
+
return a.config.order - b.config.order;
|
|
236
|
+
}, ['a', 'b', '', 'P"2!"2""/#']));
|
|
237
|
+
return middlewareConfigs;
|
|
238
|
+
}
|
|
239
|
+
filterMiddlewaresForRoute.__type = [() => __ΩMiddlewareRegistryEntry, 'middlewareRawConfigs', () => RouteConfig, 'routeConfig', 'fullPath', () => HttpMiddlewareConfig, 'config', () => InjectorModule, 'module', 'filterMiddlewaresForRoute', 'Pn!F2"P7#2$&2%PP7&4\'P"7(4)MF/*'];
|
|
240
|
+
const __ΩHttpRouterFunctionOptions = ['path', 'name', 'methods', 'description', 'category', 'groups', () => __ΩRecord, 'data', 'baseUrl', () => HttpMiddlewareConfig, '', 'middlewares', () => Serializer, 'serializer', () => __ΩSerializationOptions, 'serializationOptions', () => __ΩClassType, 'resolverForToken', () => __ΩClassType, 'resolverForParameterName', 'statusCode', 'type', 'responses', 'P&4!&4"8&F4#8&4$8&4%8&F4&8""o\'#4(8&4)8PP7*/+F4,8P7-4.8n/408"n1E428&n3E448P\'45&4$"468MF478M'];
|
|
241
|
+
export { __ΩHttpRouterFunctionOptions as __ΩHttpRouterFunctionOptions };
|
|
242
|
+
function convertOptions(methods, pathOrOptions, defaultOptions) {
|
|
243
|
+
const options = 'string' === typeof pathOrOptions ? { path: pathOrOptions } : pathOrOptions;
|
|
244
|
+
if (options.methods)
|
|
245
|
+
return options;
|
|
246
|
+
return { ...options, methods };
|
|
247
|
+
}
|
|
248
|
+
convertOptions.__type = ['methods', () => __ΩHttpRouterFunctionOptions, 'pathOrOptions', () => __ΩPartial, () => __ΩHttpRouterFunctionOptions, 'defaultOptions', () => __ΩHttpRouterFunctionOptions, 'convertOptions', 'P&F2!P&n"J2#n%o$"2&n\'/('];
|
|
249
|
+
/**
|
|
250
|
+
* Annotated types like HTMLResponse/JSONResponse are not used for serialization.
|
|
251
|
+
*/
|
|
252
|
+
function filterValidReturnType(type) {
|
|
253
|
+
if (type.kind === ReflectionKind.class && (type.classType === HtmlResponse || type.classType === JSONResponse || type.classType === Response))
|
|
254
|
+
return;
|
|
255
|
+
return type;
|
|
256
|
+
}
|
|
257
|
+
filterValidReturnType.__type = ['type', 'filterValidReturnType', 'P"2!P"-J/"'];
|
|
258
|
+
export class HttpRouterRegistryFunctionRegistrar {
|
|
259
|
+
constructor() {
|
|
260
|
+
this.defaultOptions = {};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Returns a new registrar object with default options that apply to each registered route through this registrar.
|
|
264
|
+
*
|
|
265
|
+
* ```typescript
|
|
266
|
+
* const registry: HttpRouterRegistry = ...;
|
|
267
|
+
*
|
|
268
|
+
* const secretRegistry = registry.forOptions({groups: ['secret']});
|
|
269
|
+
*
|
|
270
|
+
* secretRegistry.get('/admin/groups', () => {
|
|
271
|
+
* });
|
|
272
|
+
*
|
|
273
|
+
* secretRegistry.get('/admin/users', () => {
|
|
274
|
+
* });
|
|
275
|
+
* ```
|
|
276
|
+
*/
|
|
277
|
+
forOptions(options) {
|
|
278
|
+
var _a;
|
|
279
|
+
const that = this;
|
|
280
|
+
return new (_a = class extends HttpRouterRegistryFunctionRegistrar {
|
|
281
|
+
constructor() {
|
|
282
|
+
super(...arguments);
|
|
283
|
+
this.defaultOptions = options;
|
|
284
|
+
}
|
|
285
|
+
addRoute(routeConfig) {
|
|
286
|
+
that.addRoute(routeConfig);
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
_a.__type = [() => HttpRouterRegistryFunctionRegistrar, () => RouteConfig, 'routeConfig', 'addRoute', 'P7!PP7"2#"0$5'],
|
|
290
|
+
_a);
|
|
291
|
+
}
|
|
292
|
+
any(pathOrOptions, callback) {
|
|
293
|
+
this.register(convertOptions([], pathOrOptions, this.defaultOptions), callback);
|
|
294
|
+
}
|
|
295
|
+
add(decorator, callback) {
|
|
296
|
+
const data = decorator(Object, '_');
|
|
297
|
+
const action = isArray(data) ? data.find(__assignType(v => v instanceof HttpAction, ['v', '', 'P"2!"/"'])) : undefined;
|
|
298
|
+
if (!action)
|
|
299
|
+
throw new Error('No HttpAction available');
|
|
300
|
+
const fn = ReflectionFunction.from(callback);
|
|
301
|
+
const routeConfig = createRouteConfigFromHttpAction({
|
|
302
|
+
type: 'function',
|
|
303
|
+
fn: callback,
|
|
304
|
+
}, action);
|
|
305
|
+
routeConfig.returnType = filterValidReturnType(fn.getReturnType());
|
|
306
|
+
this.addRoute(routeConfig);
|
|
307
|
+
}
|
|
308
|
+
get(pathOrOptions, callback) {
|
|
309
|
+
this.register(convertOptions(['GET'], pathOrOptions, this.defaultOptions), callback);
|
|
310
|
+
}
|
|
311
|
+
post(pathOrOptions, callback) {
|
|
312
|
+
this.register(convertOptions(['POST'], pathOrOptions, this.defaultOptions), callback);
|
|
313
|
+
}
|
|
314
|
+
put(pathOrOptions, callback) {
|
|
315
|
+
this.register(convertOptions(['PUT'], pathOrOptions, this.defaultOptions), callback);
|
|
316
|
+
}
|
|
317
|
+
patch(pathOrOptions, callback) {
|
|
318
|
+
this.register(convertOptions(['PATCH'], pathOrOptions, this.defaultOptions), callback);
|
|
319
|
+
}
|
|
320
|
+
delete(pathOrOptions, callback) {
|
|
321
|
+
this.register(convertOptions(['DELETE'], pathOrOptions, this.defaultOptions), callback);
|
|
322
|
+
}
|
|
323
|
+
options(pathOrOptions, callback) {
|
|
324
|
+
this.register(convertOptions(['OPTIONS'], pathOrOptions, this.defaultOptions), callback);
|
|
325
|
+
}
|
|
326
|
+
trace(pathOrOptions, callback) {
|
|
327
|
+
this.register(convertOptions(['TRACE'], pathOrOptions, this.defaultOptions), callback);
|
|
328
|
+
}
|
|
329
|
+
head(pathOrOptions, callback) {
|
|
330
|
+
this.register(convertOptions(['HEAD'], pathOrOptions, this.defaultOptions), callback);
|
|
331
|
+
}
|
|
332
|
+
register(options, callback, module) {
|
|
333
|
+
const fn = ReflectionFunction.from(callback);
|
|
334
|
+
const routeConfig = new RouteConfig(options.name || '', options.methods || [], options.path, {
|
|
335
|
+
type: 'function',
|
|
336
|
+
fn: callback,
|
|
337
|
+
});
|
|
338
|
+
routeConfig.module = module;
|
|
339
|
+
if (options.responses)
|
|
340
|
+
routeConfig.responses = options.responses;
|
|
341
|
+
if (options.description)
|
|
342
|
+
routeConfig.description = options.description;
|
|
343
|
+
if (options.category)
|
|
344
|
+
routeConfig.category = options.category;
|
|
345
|
+
if (options.groups)
|
|
346
|
+
routeConfig.groups = options.groups;
|
|
347
|
+
if (options.data)
|
|
348
|
+
routeConfig.data = new Map(Object.entries(options.data));
|
|
349
|
+
if (options.baseUrl)
|
|
350
|
+
routeConfig.baseUrl = options.baseUrl;
|
|
351
|
+
if (options.middlewares) {
|
|
352
|
+
routeConfig.middlewares = options.middlewares.map(__assignType(v => {
|
|
353
|
+
return { config: v(), module };
|
|
354
|
+
}, ['v', '', 'P"2!"/"']));
|
|
355
|
+
}
|
|
356
|
+
if (options.resolverForToken) {
|
|
357
|
+
for (const item of options.resolverForToken)
|
|
358
|
+
routeConfig.resolverForToken.set(...item);
|
|
359
|
+
}
|
|
360
|
+
if (options.resolverForToken) {
|
|
361
|
+
for (const item of options.resolverForToken)
|
|
362
|
+
routeConfig.resolverForToken.set(...item);
|
|
363
|
+
}
|
|
364
|
+
if (options.resolverForParameterName) {
|
|
365
|
+
for (const item of options.resolverForParameterName)
|
|
366
|
+
routeConfig.resolverForParameterName.set(...item);
|
|
367
|
+
}
|
|
368
|
+
routeConfig.serializer = options.serializer;
|
|
369
|
+
routeConfig.serializationOptions = options.serializationOptions;
|
|
370
|
+
routeConfig.returnType = filterValidReturnType(fn.getReturnType());
|
|
371
|
+
this.addRoute(routeConfig);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
HttpRouterRegistryFunctionRegistrar.__type = [() => __ΩPartial, () => __ΩHttpRouterFunctionOptions, 'defaultOptions', function () { return {}; }, () => RouteConfig, 'routeConfig', 'addRoute', () => __ΩPartial, () => __ΩHttpRouterFunctionOptions, 'options', () => HttpRouterRegistryFunctionRegistrar, 'forOptions', () => __ΩHttpRouterFunctionOptions, 'pathOrOptions', 'args', '', 'callback', 'any', () => __ΩHttpDecorator, 'decorator', 'add', () => __ΩHttpRouterFunctionOptions, 'get', () => __ΩHttpRouterFunctionOptions, 'post', () => __ΩHttpRouterFunctionOptions, 'put', () => __ΩHttpRouterFunctionOptions, 'patch', () => __ΩHttpRouterFunctionOptions, 'delete', () => __ΩHttpRouterFunctionOptions, () => __ΩHttpRouterFunctionOptions, 'trace', () => __ΩHttpRouterFunctionOptions, 'head', () => __ΩHttpRouterFunctionOptions, () => InjectorModule, 'module', 'register', 'n"o!"3#<>$PP7%2&$0\'=Pn)o("2*P7+0,PP&n-J2.P"@2/"/021"02Pn324P"@2/"/021"05PP&n6J2.P"@2/"/021"07PP&n8J2.P"@2/"/021"09PP&n:J2.P"@2/"/021"0;PP&n<J2.P"@2/"/021"0=PP&n>J2.P"@2/"/021"0?PP&n@J2.P"@2/"/021"0*PP&nAJ2.P"@2/"/021"0BPP&nCJ2.P"@2/"/021"0DPnE2*P"@2/"/021P"7F2G8"0H;5'];
|
|
375
|
+
function createRouteConfigFromHttpAction(routeAction, action, module, controller) {
|
|
376
|
+
const routeConfig = new RouteConfig(action.name, action.httpMethods, action.path, routeAction);
|
|
377
|
+
routeConfig.responses = action.responses;
|
|
378
|
+
routeConfig.description = action.description;
|
|
379
|
+
routeConfig.category = action.category;
|
|
380
|
+
routeConfig.groups = action.groups;
|
|
381
|
+
routeConfig.data = new Map(action.data);
|
|
382
|
+
if (controller) {
|
|
383
|
+
routeConfig.baseUrl = controller.baseUrl;
|
|
384
|
+
routeConfig.middlewares = controller.middlewares.map(__assignType(v => {
|
|
385
|
+
return { config: v(), module };
|
|
386
|
+
}, ['v', '', 'P"2!"/"']));
|
|
387
|
+
routeConfig.resolverForToken = new Map(controller.resolverForToken);
|
|
388
|
+
routeConfig.resolverForParameterName = new Map(controller.resolverForParameterName);
|
|
389
|
+
}
|
|
390
|
+
routeConfig.middlewares.push(...action.middlewares.map(__assignType(v => {
|
|
391
|
+
return { config: v(), module };
|
|
392
|
+
}, ['v', '', 'P"2!"/"'])));
|
|
393
|
+
for (const item of action.resolverForToken)
|
|
394
|
+
routeConfig.resolverForToken.set(...item);
|
|
395
|
+
for (const item of action.resolverForParameterName)
|
|
396
|
+
routeConfig.resolverForParameterName.set(...item);
|
|
397
|
+
routeConfig.serializer = action.serializer;
|
|
398
|
+
routeConfig.serializationOptions = action.serializationOptions;
|
|
399
|
+
return routeConfig;
|
|
400
|
+
}
|
|
401
|
+
createRouteConfigFromHttpAction.__type = [() => __ΩRouteClassControllerAction, () => __ΩRouteFunctionControllerAction, 'routeAction', () => HttpAction, 'action', () => InjectorModule, 'module', () => HttpController, 'controller', 'createRouteConfigFromHttpAction', 'PPn!n"J2#P7$2%P"7&2\'8P7(2)8"/*'];
|
|
402
|
+
export class HttpRouterRegistry extends HttpRouterRegistryFunctionRegistrar {
|
|
403
|
+
constructor() {
|
|
404
|
+
super(...arguments);
|
|
405
|
+
this.routes = [];
|
|
406
|
+
this.buildId = 1;
|
|
407
|
+
}
|
|
408
|
+
getBuildId() {
|
|
409
|
+
return this.buildId;
|
|
410
|
+
}
|
|
411
|
+
getRoutes() {
|
|
412
|
+
return this.routes;
|
|
413
|
+
}
|
|
414
|
+
addRouteForController(controller, module) {
|
|
415
|
+
const controllerData = httpClass._fetch(controller);
|
|
416
|
+
if (!controllerData)
|
|
417
|
+
throw new Error(`Http controller class ${getClassName(controller)} has no @http.controller decorator.`);
|
|
418
|
+
const schema = ReflectionClass.from(controller);
|
|
419
|
+
for (const action of controllerData.getActions()) {
|
|
420
|
+
const routeAction = {
|
|
421
|
+
type: 'controller',
|
|
422
|
+
controller,
|
|
423
|
+
module,
|
|
424
|
+
methodName: action.methodName
|
|
425
|
+
};
|
|
426
|
+
const routeConfig = createRouteConfigFromHttpAction(routeAction, action, module, controllerData);
|
|
427
|
+
routeConfig.module = module;
|
|
428
|
+
if (schema.hasMethod(action.methodName))
|
|
429
|
+
routeConfig.returnType = filterValidReturnType(schema.getMethod(action.methodName).getReturnType());
|
|
430
|
+
this.addRoute(routeConfig);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
addRoute(routeConfig) {
|
|
434
|
+
this.routes.push(routeConfig);
|
|
435
|
+
this.buildId++;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
HttpRouterRegistry.__type = [() => HttpRouterRegistryFunctionRegistrar, () => RouteConfig, 'routes', function () { return []; }, 'buildId', function () { return 1; }, 'getBuildId', () => RouteConfig, 'getRoutes', () => __ΩClassType, 'controller', () => InjectorModule, 'module', 'addRouteForController', () => RouteConfig, 'routeConfig', 'addRoute', 'P7!P7"F3#<>$\'3%;>&P\'0\'PP7(F0)Pn*2+P"7,2-"0.PP7/20"015'];
|
|
439
|
+
export class HttpRouter {
|
|
440
|
+
constructor(controllers, logger, config, middlewareRegistry = new MiddlewareRegistry, registry = new HttpRouterRegistry) {
|
|
441
|
+
this.logger = logger;
|
|
442
|
+
this.config = config;
|
|
443
|
+
this.middlewareRegistry = middlewareRegistry;
|
|
444
|
+
this.registry = registry;
|
|
445
|
+
this.buildId = 0;
|
|
446
|
+
for (const controller of controllers.controllers) {
|
|
447
|
+
this.addRouteForController(controller.controller, controller.module);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
getRoutes() {
|
|
451
|
+
return this.registry.getRoutes();
|
|
452
|
+
}
|
|
453
|
+
static forControllers(controllers, middlewareRegistry = new MiddlewareRegistry(), module = new InjectorModule(), config = new HttpConfig()) {
|
|
454
|
+
return new this(new HttpControllers(controllers.map(__assignType(v => {
|
|
455
|
+
return isClass(v) ? { controller: v, module } : v;
|
|
456
|
+
}, ['v', '', 'P"2!"/"']))), new Logger([], []), config, middlewareRegistry);
|
|
457
|
+
}
|
|
458
|
+
getRouteCode(compiler, routeConfig) {
|
|
459
|
+
const parsedRoute = parseRouteControllerAction(routeConfig);
|
|
460
|
+
const path = routeConfig.getFullPath();
|
|
461
|
+
const pathParamStarter = path.indexOf(':');
|
|
462
|
+
const prefix = path.substr(0, pathParamStarter);
|
|
463
|
+
const regexVar = compiler.reserveVariable('regex', new RegExp('^' + parsedRoute.regex + '$'));
|
|
464
|
+
const hasParameters = pathParamStarter !== -1 || parsedRoute.getParameters().length > 0;
|
|
465
|
+
const fullPath = routeConfig.getFullPath();
|
|
466
|
+
const middlewareConfigs = filterMiddlewaresForRoute(this.middlewareRegistry.configs, routeConfig, fullPath);
|
|
467
|
+
const parameters = [...parsedRoute.getParameters()];
|
|
468
|
+
//look through all http listeners and check if they need any http parameters.
|
|
469
|
+
//the router then parses
|
|
470
|
+
let matcher = `_path.startsWith(${JSON.stringify(prefix)}) && (_match = _path.match(${regexVar}))`;
|
|
471
|
+
if (!hasParameters) {
|
|
472
|
+
matcher = `_path === ${JSON.stringify(path)}`;
|
|
473
|
+
}
|
|
474
|
+
let middlewares = 'undefined';
|
|
475
|
+
if (middlewareConfigs.length) {
|
|
476
|
+
const middlewareItems = [];
|
|
477
|
+
for (const middlewareConfig of middlewareConfigs) {
|
|
478
|
+
const moduleVar = middlewareConfig.module ? ', ' + compiler.reserveVariable('module', middlewareConfig.module) : '';
|
|
479
|
+
for (const middleware of middlewareConfig.config.middlewares) {
|
|
480
|
+
if (isClass(middleware)) {
|
|
481
|
+
const classVar = compiler.reserveVariable('middlewareClassType', middleware);
|
|
482
|
+
middlewareItems.push(`{fn: function() {return _injector.get(${classVar}${moduleVar}).execute(...arguments) }, timeout: ${middlewareConfig.config.timeout}}`);
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
middlewareItems.push(`{fn: ${compiler.reserveVariable('middlewareFn', middleware)}, timeout: ${middlewareConfig.config.timeout}}`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
middlewares = `
|
|
490
|
+
function(_injector) {
|
|
491
|
+
return [${middlewareItems.join(', ')}];
|
|
492
|
+
}
|
|
493
|
+
`;
|
|
494
|
+
}
|
|
495
|
+
const parametersLoader = getRequestParserCodeForParameters(compiler, this.config.parser, parameters, {
|
|
496
|
+
module: routeConfig.module,
|
|
497
|
+
resolverForToken: routeConfig.resolverForToken,
|
|
498
|
+
resolverForParameterName: routeConfig.resolverForParameterName,
|
|
499
|
+
pathParameterNames: parsedRoute.pathParameterNames,
|
|
500
|
+
routeConfig
|
|
501
|
+
});
|
|
502
|
+
let methodCheck = '';
|
|
503
|
+
if (routeConfig.httpMethods.length) {
|
|
504
|
+
methodCheck = '(' + routeConfig.httpMethods.map(__assignType(v => {
|
|
505
|
+
return `_method === '${v.toUpperCase()}'`;
|
|
506
|
+
}, ['v', '', 'P"2!"/"'])).join(' || ') + ') && ';
|
|
507
|
+
}
|
|
508
|
+
const routeConfigVar = compiler.reserveVariable('routeConfigVar', routeConfig);
|
|
509
|
+
return `
|
|
510
|
+
//=> ${routeConfig.httpMethods.join(',')} ${path}
|
|
511
|
+
if (${methodCheck}${matcher}) {
|
|
512
|
+
return {routeConfig: ${routeConfigVar}, parameters: ${parametersLoader}, uploadedFiles: uploadedFiles, middlewares: ${middlewares}};
|
|
513
|
+
}
|
|
514
|
+
`;
|
|
515
|
+
}
|
|
516
|
+
getRouteUrlResolveCode(compiler, routeConfig) {
|
|
517
|
+
const parsedRoute = parseRouteControllerAction(routeConfig);
|
|
518
|
+
let url = routeConfig.getFullPath();
|
|
519
|
+
url = url.replace(/:(\w+)/g, __assignType((a, name) => {
|
|
520
|
+
return `\${parameters.${name}}`;
|
|
521
|
+
}, ['a', 'name', '', 'P"2!"2""/#']));
|
|
522
|
+
const modify = [];
|
|
523
|
+
for (const parameter of parsedRoute.getParameters()) {
|
|
524
|
+
if (parameter.query || parameter.queries) {
|
|
525
|
+
const queryPath = parameter.typePath === undefined && parameter.query ? parameter.parameter.name : parameter.typePath || '';
|
|
526
|
+
if (parameter.parameter.type.kind === ReflectionKind.class || parameter.parameter.type.kind === ReflectionKind.objectLiteral) {
|
|
527
|
+
for (const property of ReflectionClass.from(parameter.parameter.type).getProperties()) {
|
|
528
|
+
const accessor = `parameters.${parameter.getName()}?.${property.name}`;
|
|
529
|
+
const thisPath = queryPath ? queryPath + '.' + property.name : property.name;
|
|
530
|
+
modify.push(`${accessor} !== undefined && query.push(${JSON.stringify(dotToUrlPath(thisPath))} + '=' + encodeURIComponent(${accessor}))`);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
else {
|
|
534
|
+
modify.push(`parameters.${parameter.getName()} !== undefined && query.push(${JSON.stringify(dotToUrlPath(queryPath))} + '=' + encodeURIComponent(parameters.${parameter.getName()}))`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return `
|
|
539
|
+
case ${JSON.stringify(routeConfig.name)}: {
|
|
540
|
+
let url = \`${url}\`;
|
|
541
|
+
let query = [];
|
|
542
|
+
${modify.join('\n')}
|
|
543
|
+
return url + (query.length ? '?'+query.join('&') : '');
|
|
544
|
+
}
|
|
545
|
+
`;
|
|
546
|
+
}
|
|
547
|
+
addRoute(routeConfig) {
|
|
548
|
+
this.registry.addRoute(routeConfig);
|
|
549
|
+
}
|
|
550
|
+
addRouteForController(controller, module) {
|
|
551
|
+
this.registry.addRouteForController(controller, module);
|
|
552
|
+
}
|
|
553
|
+
build() {
|
|
554
|
+
this.buildId = this.registry.getBuildId();
|
|
555
|
+
const compiler = new CompilerContext;
|
|
556
|
+
compiler.context.set('ValidationError', ValidationError);
|
|
557
|
+
compiler.context.set('qs', qs);
|
|
558
|
+
const code = [];
|
|
559
|
+
for (const route of this.getRoutes()) {
|
|
560
|
+
code.push(this.getRouteCode(compiler, route));
|
|
561
|
+
}
|
|
562
|
+
return compiler.build(`
|
|
563
|
+
let _match;
|
|
564
|
+
const _method = request.method || 'GET';
|
|
565
|
+
const _url = request.url || '/';
|
|
566
|
+
const _headers = request.headers || {};
|
|
567
|
+
const _qPosition = _url.indexOf('?');
|
|
568
|
+
let uploadedFiles = {};
|
|
569
|
+
const _path = _qPosition === -1 ? _url : _url.substr(0, _qPosition);
|
|
570
|
+
const _query = _qPosition === -1 ? {} : qs.parse(_url.substr(_qPosition + 1));
|
|
571
|
+
${code.join('\n')}
|
|
572
|
+
`, 'request');
|
|
573
|
+
}
|
|
574
|
+
buildUrlResolver() {
|
|
575
|
+
const compiler = new CompilerContext;
|
|
576
|
+
const code = [];
|
|
577
|
+
for (const route of this.getRoutes()) {
|
|
578
|
+
code.push(this.getRouteUrlResolveCode(compiler, route));
|
|
579
|
+
}
|
|
580
|
+
return compiler.build(`
|
|
581
|
+
switch (name) {
|
|
582
|
+
${code.join('\n')}
|
|
583
|
+
}
|
|
584
|
+
throw new Error('No route for name ' + name + ' found');
|
|
585
|
+
`, 'name', 'parameters');
|
|
586
|
+
}
|
|
587
|
+
resolveUrl(routeName, parameters = {}) {
|
|
588
|
+
if (!this.resolveFn) {
|
|
589
|
+
this.resolveFn = this.buildUrlResolver();
|
|
590
|
+
}
|
|
591
|
+
return this.resolveFn(routeName, parameters);
|
|
592
|
+
}
|
|
593
|
+
resolveRequest(request) {
|
|
594
|
+
if (!this.fn || this.buildId !== this.registry.getBuildId()) {
|
|
595
|
+
this.fn = this.build();
|
|
596
|
+
}
|
|
597
|
+
return this.fn(request);
|
|
598
|
+
}
|
|
599
|
+
resolve(method, url) {
|
|
600
|
+
method = method.toUpperCase();
|
|
601
|
+
return this.resolveRequest({ url, method });
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
HttpRouter.__type = [() => HttpRequest, 'request', () => __ΩResolvedController, '', 'fn', 'buildId', function () { return 0; }, 'name', 'parameters', 'resolveFn', () => HttpControllers, 'controllers', () => __ΩLoggerInterface, 'logger', () => HttpConfig, 'config', () => MiddlewareRegistry, 'middlewareRegistry', () => new MiddlewareRegistry, () => HttpRouterRegistry, 'registry', () => new HttpRouterRegistry, 'constructor', () => RouteConfig, 'getRoutes', () => __ΩClassType, () => InjectorModule, 'module', () => __ΩClassType, 'controller', () => MiddlewareRegistry, () => new MiddlewareRegistry(), () => InjectorModule, () => new InjectorModule(), () => HttpConfig, () => new HttpConfig(), () => HttpRouter, '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<\'3&<>\'P&2(P&"LM2)&/$3*8<PP7+2,n-2.;P7/20;P7122;>3P7425;>6"07PP78F09PPn:PP"7;4<n=4>MJF2,P7?22>@P"7A2<>BP7C20>DP7E0FsPP7G2HP7I2J&0K<PP7L2HP7M2J&0N<PP7O2J"0PPnQ2>P"7R2<"0SPPP7T2"PnU-J/$0V<P"0W<P&2XP&"LM2)>Y&0ZPP7[2"Pn\\-J0]P&2^&2_Pn`-J0a5'];
|
|
605
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/router.ts"],"names":[],"mappings":"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"}
|