36 lines
1.2 KiB
Plaintext
36 lines
1.2 KiB
Plaintext
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
//#region src/middleware/request-id/request-id.ts
|
|
/**
|
|
* Request ID Middleware for Hono.
|
|
*
|
|
* @param {object} options - Options for Request ID middleware.
|
|
* @param {number} [options.limitLength=255] - The maximum length of request id.
|
|
* @param {string} [options.headerName=X-Request-Id] - The header name used in request id.
|
|
* @param {generator} [options.generator=() => crypto.randomUUID()] - The request id generation function.
|
|
*
|
|
* @returns {MiddlewareHandler} The middleware handler function.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* type Variables = RequestIdVariables
|
|
* const app = new Hono<{Variables: Variables}>()
|
|
*
|
|
* app.use(requestId())
|
|
* app.get('/', (c) => {
|
|
* console.log(c.get('requestId')) // Debug
|
|
* return c.text('Hello World!')
|
|
* })
|
|
* ```
|
|
*/
|
|
const requestId = ({ limitLength = 255, headerName = "X-Request-Id", generator = () => crypto.randomUUID() } = {}) => {
|
|
return async function requestId(c, next) {
|
|
let reqId = headerName ? c.req.header(headerName) : void 0;
|
|
if (!reqId || reqId.length > limitLength || /[^\w\-=]/.test(reqId)) reqId = generator(c);
|
|
c.set("requestId", reqId);
|
|
if (headerName) c.header(headerName, reqId);
|
|
await next();
|
|
};
|
|
};
|
|
//#endregion
|
|
exports.requestId = requestId;
|