import { AsyncLocalStorage } from 'node:async_hooks'; import { createRequestHandler as createExpoHandler, } from './abstract'; import { createNodeEnv, createNodeRequestScope } from './environment/node'; import { respond, convertRequest } from './http'; export { ExpoError } from './abstract'; const STORE = new AsyncLocalStorage(); /** * Returns a request handler for Express that serves the response using Remix. */ export function createRequestHandler(params, setup) { const run = createNodeRequestScope(STORE, params); const onRequest = createExpoHandler({ ...createNodeEnv(params), ...setup, }); async function requestHandler(request) { try { return await run(onRequest, request); } catch (error) { const handleRouteError = setup?.handleRouteError; if (handleRouteError && error != null && typeof error === 'object') { try { return await handleRouteError(error); } catch { // Rethrow original error below } } throw error; } } return async (req, res, next) => { if (!req?.url || !req.method) { return next(); } try { const request = convertRequest(req, res); const response = await requestHandler(request); await respond(res, response); } catch (error) { // Express doesn't support async functions, so we have to pass along the // error manually using next(). next(error); } }; } export { convertRequest, respond } from './http'; //# sourceMappingURL=express.js.map