@adonisjs/http-server
Advanced tools
Comparing version 6.8.2-9 to 6.8.2-10
@@ -69,5 +69,19 @@ /* | ||
const max = Number(parts[1]); | ||
/** | ||
* The ending status code does not exists | ||
*/ | ||
if (parts.length === 1 && !Number.isNaN(min)) { | ||
return { | ||
[min]: value, | ||
}; | ||
} | ||
/** | ||
* The starting status code is not a number | ||
*/ | ||
if (Number.isNaN(min) || Number.isNaN(max)) { | ||
return {}; | ||
} | ||
/** | ||
* Min and max are same | ||
*/ | ||
if (min === max) { | ||
@@ -78,5 +92,12 @@ return { | ||
} | ||
/** | ||
* Max cannot be smaller than min | ||
*/ | ||
if (max < min) { | ||
throw new InvalidArgumentsException(`Invalid range "${range}"`); | ||
} | ||
/** | ||
* Loop over the range and create a collection | ||
* of status codes | ||
*/ | ||
return [...Array(max - min + 1).keys()].reduce((result, step) => { | ||
@@ -83,0 +104,0 @@ result[min + step] = value; |
import type { ContainerResolver } from '@adonisjs/fold'; | ||
import type { StoreRouteNode } from '../types/route.js'; | ||
import type { HttpContext } from '../http_context/main.js'; | ||
import type { ServerErrorHandler } from '../types/server.js'; | ||
/** | ||
@@ -8,2 +9,2 @@ * Executor to execute the route middleware pipeline the route | ||
*/ | ||
export declare function execute(route: StoreRouteNode, resolver: ContainerResolver<any>, ctx: HttpContext): Promise<void>; | ||
export declare function execute(route: StoreRouteNode, resolver: ContainerResolver<any>, ctx: HttpContext, errorResponder: ServerErrorHandler['handle']): Promise<void>; |
@@ -14,5 +14,6 @@ /* | ||
*/ | ||
export function execute(route, resolver, ctx) { | ||
export function execute(route, resolver, ctx, errorResponder) { | ||
return route.middleware | ||
.runner() | ||
.errorHandler((error) => errorResponder(error, ctx)) | ||
.finalHandler(async () => { | ||
@@ -19,0 +20,0 @@ if (typeof route.handler === 'function') { |
import type { ContainerResolver } from '@adonisjs/fold'; | ||
import type { Router } from '../../router/main.js'; | ||
import type { HttpContext } from '../../http_context/main.js'; | ||
import type { ServerErrorHandler } from '../../types/server.js'; | ||
/** | ||
@@ -9,2 +10,2 @@ * The final handler is executed after the server middleware stack. | ||
*/ | ||
export declare function finalHandler(router: Router, resolver: ContainerResolver<any>, ctx: HttpContext): () => any; | ||
export declare function finalHandler(router: Router, resolver: ContainerResolver<any>, ctx: HttpContext, errorResponder: ServerErrorHandler['handle']): () => any; |
@@ -15,3 +15,3 @@ /* | ||
*/ | ||
export function finalHandler(router, resolver, ctx) { | ||
export function finalHandler(router, resolver, ctx, errorResponder) { | ||
return function () { | ||
@@ -27,3 +27,3 @@ const url = ctx.request.url(); | ||
ctx.routeKey = route.routeKey; | ||
return route.route.execute(route.route, resolver, ctx); | ||
return route.route.execute(route.route, resolver, ctx, errorResponder); | ||
} | ||
@@ -30,0 +30,0 @@ return Promise.reject(new errors.E_ROUTE_NOT_FOUND([method, url])); |
@@ -88,2 +88,14 @@ /* | ||
/** | ||
* The request error response is attached to the middleware | ||
* pipeline to intercept errors and invoke the user | ||
* registered error handler. | ||
* | ||
* We share this with the route middleware pipeline as well, | ||
* so that it does not throw any exceptions | ||
*/ | ||
#requestErrorResponder = (error, ctx) => { | ||
this.#resolvedErrorHandler.report(error, ctx); | ||
return this.#resolvedErrorHandler.handle(error, ctx); | ||
}; | ||
/** | ||
* Know if async local storage is enabled or not. | ||
@@ -131,7 +143,4 @@ */ | ||
return this.#serverMiddlewareStack.runner() | ||
.errorHandler((error) => { | ||
this.#resolvedErrorHandler.report(error, ctx); | ||
return this.#resolvedErrorHandler.handle(error, ctx); | ||
}) | ||
.finalHandler(finalHandler(this.#router, resolver, ctx)) | ||
.errorHandler((error) => this.#requestErrorResponder(error, ctx)) | ||
.finalHandler(finalHandler(this.#router, resolver, ctx, this.#requestErrorResponder)) | ||
.run(middlewareHandler(resolver, ctx)) | ||
@@ -138,0 +147,0 @@ .catch((error) => { |
@@ -6,2 +6,3 @@ import type Middleware from '@poppinss/middleware'; | ||
import type { MiddlewareFn, ParsedGlobalMiddleware } from './middleware.js'; | ||
import { ServerErrorHandler } from './server.js'; | ||
/** | ||
@@ -49,3 +50,3 @@ * Returns a union of methods from a controller that accepts | ||
*/ | ||
execute: (route: StoreRouteNode, resolver: ContainerResolver<any>, ctx: HttpContext) => any; | ||
execute: (route: StoreRouteNode, resolver: ContainerResolver<any>, ctx: HttpContext, errorResponder: ServerErrorHandler['handle']) => any; | ||
/** | ||
@@ -52,0 +53,0 @@ * A unique name for the route |
@@ -33,3 +33,3 @@ import type { ErrorHandler, FinalHandler } from '@poppinss/middleware/types'; | ||
*/ | ||
export type StatusPageRange = `${number}..${number}`; | ||
export type StatusPageRange = `${number}..${number}` | `${number}` | number; | ||
/** | ||
@@ -36,0 +36,0 @@ * The callback function to render status page for a given |
{ | ||
"name": "@adonisjs/http-server", | ||
"version": "6.8.2-9", | ||
"version": "6.8.2-10", | ||
"description": "AdonisJS HTTP server with support packed with Routing and Cookies", | ||
@@ -72,3 +72,3 @@ "main": "build/index.js", | ||
"@types/mime-types": "^2.1.1", | ||
"@types/node": "^20.4.2", | ||
"@types/node": "^20.4.3", | ||
"@types/on-finished": "^2.3.1", | ||
@@ -75,0 +75,0 @@ "@types/pem": "^1.14.0", |
285500
8954