{
  "slug": "async-handler",
  "runtimes": {
    "node": {
      "frameworks": {
        "express": {
          "dependencies": {
            "runtime": [],
            "dev": []
          },
          "env": [],
          "architectures": {
            "mvc": {
              "files": [
                {
                  "type": "file",
                  "path": "src/utils/async-handler.ts",
                  "content": "import { Request, Response, NextFunction } from \"express\";\n\nexport type AsyncRouteHandler = (\n  req: Request,\n  res: Response,\n  next: NextFunction\n) => Promise<unknown>;\n\nexport function AsyncHandler(fn: AsyncRouteHandler) {\n  return function (req: Request, res: Response, next: NextFunction) {\n    Promise.resolve()\n      .then(() => fn(req, res, next))\n      .catch(next);\n  };\n}\n"
                },
                {
                  "type": "file",
                  "path": "src/routes/user.route.ts",
                  "content": "import { NextFunction, Request, Response, Router } from \"express\";\nimport { AsyncHandler } from \"../utils/async-handler\";\n\nconst router = Router();\n\nrouter.get(\n  \"/\",\n  AsyncHandler(async (req: Request, res: Response, next: NextFunction) => {\n    /*\n     * business logic\n     * your actual code\n     */\n  })\n);\n\nexport default router;\n"
                }
              ]
            },
            "feature": {
              "files": [
                {
                  "type": "file",
                  "path": "src/shared/utils/async-handler.ts",
                  "content": "import { Request, Response, NextFunction } from \"express\";\n\nexport type AsyncRouteHandler = (\n  req: Request,\n  res: Response,\n  next: NextFunction\n) => Promise<unknown>;\n\nexport function AsyncHandler(fn: AsyncRouteHandler) {\n  return function (req: Request, res: Response, next: NextFunction) {\n    Promise.resolve()\n      .then(() => fn(req, res, next))\n      .catch(next);\n  };\n}\n"
                },
                {
                  "type": "file",
                  "path": "src/modules/user/user.routes.ts",
                  "content": "import { Request, Response, NextFunction } from \"express\";\n\nexport type AsyncRouteHandler = (\n  req: Request,\n  res: Response,\n  next: NextFunction\n) => Promise<unknown>;\n\nexport function AsyncHandler(fn: AsyncRouteHandler) {\n  return function (req: Request, res: Response, next: NextFunction) {\n    Promise.resolve(fn(req, res, next)).catch(next);\n  };\n}\n"
                }
              ]
            }
          }
        }
      }
    }
  }
}
