@deepkit/http 1.0.1-alpha.94 → 1.0.1-alpha.95

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.
@@ -5,14 +5,15 @@ import {
5
5
  findMember,
6
6
  getSerializeFunction,
7
7
  getValidatorFunction,
8
- metaAnnotation, ReflectionFunction,
8
+ metaAnnotation,
9
9
  ReflectionKind,
10
10
  ReflectionParameter,
11
11
  resolveReceiveType,
12
12
  serializer,
13
13
  stringifyType,
14
14
  Type,
15
- typeToObject, ValidationError
15
+ typeToObject,
16
+ ValidationError
16
17
  } from '@deepkit/type';
17
18
  import { BodyValidationError, createRequestWithCachedBody, getRegExp, HttpRequest, ValidatedBody } from './model.js';
18
19
  import { RouteConfig, UploadedFile } from './router.js';
@@ -22,13 +23,15 @@ import qs from 'qs';
22
23
 
23
24
  // @ts-ignore
24
25
  import formidable from 'formidable';
26
+ import { HttpParserOptions } from './module.config.js';
25
27
 
26
28
 
27
- function parseBody(req: HttpRequest, foundFiles: { [name: string]: UploadedFile }) {
28
- const form = formidable({
29
+ function parseBody(
30
+ options: HttpParserOptions,
31
+ req: HttpRequest, foundFiles: { [name: string]: UploadedFile }) {
32
+ const form = formidable(Object.assign(options, {
29
33
  multiples: true,
30
- hash: 'sha1',
31
- });
34
+ }));
32
35
  return asyncOperation((resolve, reject) => {
33
36
  function parseData(err: any, fields: any, files: any) {
34
37
  if (err) {
@@ -149,7 +152,7 @@ export function parseRoutePathToRegex(path: string, params: ReflectionParameter[
149
152
  return { regex: path, parameterNames };
150
153
  }
151
154
 
152
- export function buildRequestParser(parameters: ReflectionParameter[], path?: string): (request: HttpRequest) => any[] {
155
+ export function buildRequestParser(parseOptions: HttpParserOptions, parameters: ReflectionParameter[], path?: string): (request: HttpRequest) => any[] {
153
156
  const compiler = new CompilerContext();
154
157
  const params = parameters.map(v => new ParameterForRequestParser(v));
155
158
 
@@ -164,7 +167,7 @@ export function buildRequestParser(parameters: ReflectionParameter[], path?: str
164
167
  }
165
168
  }
166
169
 
167
- const code = getRequestParserCodeForParameters(compiler, params, {});
170
+ const code = getRequestParserCodeForParameters(compiler, parseOptions, params, {});
168
171
  compiler.context.set('ValidationError', ValidationError);
169
172
  compiler.context.set('qs', qs);
170
173
 
@@ -188,13 +191,14 @@ export function buildRequestParser(parameters: ReflectionParameter[], path?: str
188
191
 
189
192
  export function getRequestParserCodeForParameters(
190
193
  compiler: CompilerContext,
194
+ parseOptions: HttpParserOptions,
191
195
  parameters: ParameterForRequestParser[],
192
196
  config: {
193
197
  module?: InjectorModule<any>,
194
198
  resolverForParameterName?: Map<string, ClassType>,
195
199
  resolverForToken?: Map<any, ClassType>,
196
200
  pathParameterNames?: { [name: string]: number },
197
- routeConfig?: RouteConfig
201
+ routeConfig?: RouteConfig,
198
202
  }
199
203
  ) {
200
204
  let enableParseBody = false;
@@ -314,9 +318,10 @@ export function getRequestParserCodeForParameters(
314
318
 
315
319
  let parseBodyLoading = '';
316
320
  if (enableParseBody) {
321
+ const parseOptionsVar = compiler.reserveVariable('parseOptions', parseOptions);
317
322
  const parseBodyVar = compiler.reserveVariable('parseBody', parseBody);
318
323
  parseBodyLoading = `
319
- const bodyFields = (await ${parseBodyVar}(request, uploadedFiles));`;
324
+ const bodyFields = (await ${parseBodyVar}(${parseOptionsVar}, request, uploadedFiles));`;
320
325
  requiresAsyncParameters = true;
321
326
  }
322
327
 
package/src/router.ts CHANGED
@@ -21,6 +21,7 @@ import { HttpMiddlewareConfig, HttpMiddlewareFn } from './middleware.js';
21
21
  import qs from 'qs';
22
22
  import { HtmlResponse, JSONResponse, Response } from './http.js';
23
23
  import { getRequestParserCodeForParameters, ParameterForRequestParser, parseRoutePathToRegex } from './request-parser.js';
24
+ import { HttpConfig, HttpParserOptions } from './module.config.js';
24
25
 
25
26
  export type RouteParameterResolverForInjector = ((injector: InjectorContext) => HttpRequestPositionedParameters | Promise<HttpRequestPositionedParameters>);
26
27
 
@@ -215,7 +216,10 @@ export interface RouteParameterResolverContext {
215
216
  type: ReflectionParameter;
216
217
  }
217
218
 
218
- function filterMiddlewaresForRoute(middlewareRawConfigs: MiddlewareRegistryEntry[], routeConfig: RouteConfig, fullPath: string): { config: HttpMiddlewareConfig, module: InjectorModule<any> }[] {
219
+ function filterMiddlewaresForRoute(middlewareRawConfigs: MiddlewareRegistryEntry[], routeConfig: RouteConfig, fullPath: string): {
220
+ config: HttpMiddlewareConfig,
221
+ module: InjectorModule<any>
222
+ }[] {
219
223
  const middlewares = middlewareRawConfigs.slice(0);
220
224
  middlewares.push(...routeConfig.middlewares as any[]);
221
225
 
@@ -526,11 +530,11 @@ export class HttpRouter {
526
530
  protected buildId: number = 0;
527
531
  protected resolveFn?: (name: string, parameters: { [name: string]: any }) => string;
528
532
 
529
-
530
533
  constructor(
531
534
  controllers: HttpControllers,
532
535
  private logger: LoggerInterface,
533
536
  tagRegistry: TagRegistry,
537
+ private config: HttpConfig,
534
538
  private middlewareRegistry: MiddlewareRegistry = new MiddlewareRegistry,
535
539
  private registry: HttpRouterRegistry = new HttpRouterRegistry,
536
540
  ) {
@@ -547,11 +551,12 @@ export class HttpRouter {
547
551
  controllers: (ClassType | { module: InjectorModule<any>, controller: ClassType })[],
548
552
  tagRegistry: TagRegistry = new TagRegistry(),
549
553
  middlewareRegistry: MiddlewareRegistry = new MiddlewareRegistry(),
550
- module: InjectorModule<any> = new InjectorModule()
554
+ module: InjectorModule<any> = new InjectorModule(),
555
+ config: HttpConfig = new HttpConfig()
551
556
  ): HttpRouter {
552
557
  return new this(new HttpControllers(controllers.map(v => {
553
558
  return isClass(v) ? { controller: v, module } : v;
554
- })), new Logger([], []), tagRegistry, middlewareRegistry);
559
+ })), new Logger([], []), tagRegistry, config, middlewareRegistry);
555
560
  }
556
561
 
557
562
  protected getRouteCode(compiler: CompilerContext, routeConfig: RouteConfig): string {
@@ -600,7 +605,7 @@ export class HttpRouter {
600
605
  `;
601
606
  }
602
607
 
603
- const parametersLoader = getRequestParserCodeForParameters(compiler, parameters, {
608
+ const parametersLoader = getRequestParserCodeForParameters(compiler, this.config.parser, parameters, {
604
609
  module: routeConfig.module,
605
610
  resolverForToken: routeConfig.resolverForToken,
606
611
  resolverForParameterName: routeConfig.resolverForParameterName,