@sebspark/openapi-express
Advanced tools
+25
-13
@@ -28,15 +28,27 @@ "use strict"; | ||
| // src/router.ts | ||
| var import_openapi_core = require("@sebspark/openapi-core"); | ||
| var import_express = require("express"); | ||
| var import_openapi_core = require("@sebspark/openapi-core"); | ||
| var TypedRouter = (api, options = {}) => { | ||
| const router = (0, import_express.Router)(); | ||
| router.use((0, import_express.json)()); | ||
| const preUsings = options.pre instanceof Array ? options.pre : options.pre ? [options.pre] : []; | ||
| preUsings.forEach((pre) => router.use(pre)); | ||
| Object.entries(api).forEach(([url, methods]) => { | ||
| Object.entries(methods).forEach(([method, route]) => { | ||
| const preUsings = Array.isArray(options.pre) ? options.pre : options.pre ? [options.pre] : []; | ||
| for (const pre of preUsings) { | ||
| router.use(pre); | ||
| } | ||
| for (const [url, methods] of Object.entries(api)) { | ||
| for (const [method, route] of Object.entries(methods)) { | ||
| const handler = async (req, res, next) => { | ||
| try { | ||
| const [code, body] = await route.handler(req); | ||
| res.status(code).send(body); | ||
| const [status, response] = await route.handler(req); | ||
| const { headers, data } = response; | ||
| res.status(status); | ||
| if (headers) { | ||
| for (const [name, value] of Object.entries(headers)) { | ||
| res.setHeader(name, value); | ||
| } | ||
| } | ||
| if (data) | ||
| res.send(data); | ||
| else | ||
| res.end(); | ||
| } catch (error) { | ||
@@ -46,15 +58,15 @@ next(error); | ||
| }; | ||
| const pre = route.pre instanceof Array ? route.pre : route.pre ? [route.pre] : []; | ||
| const pre = Array.isArray(route.pre) ? route.pre : route.pre ? [route.pre] : []; | ||
| const handlers = pre.concat(handler); | ||
| router[method](url, ...handlers); | ||
| }); | ||
| }); | ||
| } | ||
| } | ||
| router.use(errorHandler); | ||
| return router; | ||
| }; | ||
| var errorHandler = (err, req, res, _next) => { | ||
| var errorHandler = (err, _req, res, _next) => { | ||
| let error; | ||
| if (err.message && err.statusCode && err.toJSON) | ||
| if (err.message && err.statusCode && err.toJSON) { | ||
| error = err; | ||
| else { | ||
| } else { | ||
| const internal = err instanceof Error ? err : typeof err === "string" ? new Error(err) : void 0; | ||
@@ -61,0 +73,0 @@ error = (0, import_openapi_core.createHttpError)(500, void 0, internal); |
+27
-15
| // src/router.ts | ||
| import { | ||
| createHttpError | ||
| } from "@sebspark/openapi-core"; | ||
| import { | ||
| Router, | ||
| json | ||
| } from "express"; | ||
| import { | ||
| createHttpError | ||
| } from "@sebspark/openapi-core"; | ||
| var TypedRouter = (api, options = {}) => { | ||
| const router = Router(); | ||
| router.use(json()); | ||
| const preUsings = options.pre instanceof Array ? options.pre : options.pre ? [options.pre] : []; | ||
| preUsings.forEach((pre) => router.use(pre)); | ||
| Object.entries(api).forEach(([url, methods]) => { | ||
| Object.entries(methods).forEach(([method, route]) => { | ||
| const preUsings = Array.isArray(options.pre) ? options.pre : options.pre ? [options.pre] : []; | ||
| for (const pre of preUsings) { | ||
| router.use(pre); | ||
| } | ||
| for (const [url, methods] of Object.entries(api)) { | ||
| for (const [method, route] of Object.entries(methods)) { | ||
| const handler = async (req, res, next) => { | ||
| try { | ||
| const [code, body] = await route.handler(req); | ||
| res.status(code).send(body); | ||
| const [status, response] = await route.handler(req); | ||
| const { headers, data } = response; | ||
| res.status(status); | ||
| if (headers) { | ||
| for (const [name, value] of Object.entries(headers)) { | ||
| res.setHeader(name, value); | ||
| } | ||
| } | ||
| if (data) | ||
| res.send(data); | ||
| else | ||
| res.end(); | ||
| } catch (error) { | ||
@@ -24,15 +36,15 @@ next(error); | ||
| }; | ||
| const pre = route.pre instanceof Array ? route.pre : route.pre ? [route.pre] : []; | ||
| const pre = Array.isArray(route.pre) ? route.pre : route.pre ? [route.pre] : []; | ||
| const handlers = pre.concat(handler); | ||
| router[method](url, ...handlers); | ||
| }); | ||
| }); | ||
| } | ||
| } | ||
| router.use(errorHandler); | ||
| return router; | ||
| }; | ||
| var errorHandler = (err, req, res, _next) => { | ||
| var errorHandler = (err, _req, res, _next) => { | ||
| let error; | ||
| if (err.message && err.statusCode && err.toJSON) | ||
| if (err.message && err.statusCode && err.toJSON) { | ||
| error = err; | ||
| else { | ||
| } else { | ||
| const internal = err instanceof Error ? err : typeof err === "string" ? new Error(err) : void 0; | ||
@@ -39,0 +51,0 @@ error = createHttpError(500, void 0, internal); |
+5
-5
| { | ||
| "name": "@sebspark/openapi-express", | ||
| "version": "0.1.0", | ||
| "version": "1.0.0", | ||
| "license": "Apache-2.0", | ||
@@ -14,10 +14,10 @@ "main": "dist/index.js", | ||
| "dev": "tsc --watch --noEmit", | ||
| "lint": "eslint \"src/**/*.ts*\"", | ||
| "lint": "biome check .", | ||
| "test": "vitest --passWithNoTests --coverage", | ||
| "typecheck": "vitest typecheck --passWithNoTests" | ||
| "typecheck": "vitest --typecheck.only --passWithNoTests" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/supertest": "2.0.15", | ||
| "@types/supertest": "6.0.2", | ||
| "express": "4.18.2", | ||
| "supertest": "6.3.3", | ||
| "supertest": "6.3.4", | ||
| "tsconfig": "*" | ||
@@ -24,0 +24,0 @@ }, |
+4
-4
@@ -28,6 +28,6 @@ # `@sebspark/openapi-express-router` | ||
| import { TypedRouter } from '@sebspark/openapi-express' | ||
| import { MarketdataAPIServer } from './schemas/marketdata' | ||
| import { MarketdataServer } from './schemas/marketdata' | ||
| import { getMarkets, getMarket } from './markets' | ||
| const api: MarketdataAPIServer = { | ||
| const api: MarketdataServer = { | ||
| '/markets': { | ||
@@ -37,3 +37,3 @@ get: { | ||
| const markets = await getMarkets() | ||
| return [200, markets] | ||
| return [200, {data: markets}] | ||
| }, | ||
@@ -46,3 +46,3 @@ }, | ||
| const market = await getMarket(params.id) | ||
| return [200, market] | ||
| return [200, {data: market}] | ||
| }, | ||
@@ -49,0 +49,0 @@ }, |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
17583
3.58%136
21.43%1
-50%