edgespec
Version:
Write Winter-CG compatible routes with filesystem routing and tons of features
56 lines (53 loc) • 1.73 kB
JavaScript
export { BadRequestError, EdgeSpecMiddlewareError, InputParsingError, InputValidationError, InvalidContentTypeError, InvalidQueryParamsError, MethodNotAllowedError, NotFoundError, ResponseValidationError } from '../chunk-J77ZRDU2.js';
import '../chunk-5WRI5ZAA.js';
import kleur from 'kleur';
var createWithDefaultExceptionHandling = ({
coloredLogs = true,
logWhen = (status) => status >= 500,
includeStackTraceInResponse = true
} = {}) => async (req, ctx, next) => {
try {
return await next(req, ctx);
} catch (e) {
let response;
if ("_isHttpException" in e) {
response = Response.json(
{
message: e.message,
stack: includeStackTraceInResponse ? e.stack : void 0
},
{
status: e.status
}
);
} else {
response = Response.json(
{
message: "Internal server error",
stack: includeStackTraceInResponse ? e.stack : void 0
},
{
status: 500
}
);
}
if (logWhen(response.status, e)) {
const logger = ctx.logger ?? console;
kleur.enabled = coloredLogs;
const { pathname } = new URL(req.url);
const routeLog = response.status >= 500 ? kleur.bgRed(`${pathname} threw an error`) : kleur.bgYellow(`${pathname} threw an error`);
logger.error(
`${routeLog}: ${e instanceof Error ? e.stack : e.toString()}`
);
}
return response;
}
};
// src/middleware/with-logger.ts
var createWithLogger = (logger) => (req, ctx, next) => {
ctx.logger = logger;
return next(req, ctx);
};
export { createWithDefaultExceptionHandling, createWithLogger };
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map