@sebspark/openapi-express 5.0.0 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +11 -5
package/dist/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/router.ts"],"sourcesContent":["import {\n type APIResponse,\n type APIServerDefinition,\n type APIServerOptions,\n createHttpError,\n type HttpError,\n type Verb,\n} from '@sebspark/openapi-core'\nimport { json, Router } from 'express'\nimport type {\n ErrorRequestHandler,\n NextFunction,\n Request,\n RequestHandler,\n Response,\n} from 'express-serve-static-core'\n\nexport const TypedRouter = (\n api: APIServerDefinition,\n options: APIServerOptions = {}\n) => {\n const router = Router()\n\n router.use(json() as unknown as RequestHandler)\n\n // Add global pre to router\n const preUsings = Array.isArray(options.pre)\n ? options.pre\n : options.pre\n ? [options.pre]\n : []\n for (const pre of preUsings) {\n router.use(pre)\n }\n\n // loop through urls on server definition\n for (const [url, methods] of Object.entries(api)) {\n // loop through methods on url\n for (const [method, route] of Object.entries(methods)) {\n // Build handler for url/method\n const handler = async (\n req: Request,\n res: Response,\n next: NextFunction\n ) => {\n try {\n const [status, response] = await route.handler(req)\n res.status(status)\n\n if (!response) {\n res.end()\n return\n }\n\n const { headers, data } = response as APIResponse<\n unknown,\n Record<string, string>\n >\n\n if (headers) {\n for (const [name, value] of Object.entries(headers)) {\n res.setHeader(name, value)\n }\n }\n\n if (data) {\n res.send(data)\n } else {\n res.end()\n }\n } catch (error) {\n next(error)\n }\n }\n\n const pre = Array.isArray(route.pre)\n ? route.pre\n : route.pre\n ? [route.pre]\n : []\n const handlers = pre.concat(handler as RequestHandler)\n\n router[method as Verb](url, ...handlers)\n }\n }\n\n router.use(errorHandler)\n\n return router\n}\n\nconst errorHandler: ErrorRequestHandler = (err, _req, res, next) => {\n let error: HttpError = err\n\n if (!error.message || !error.statusCode) {\n const internal =\n err instanceof Error\n ? err\n : typeof err === 'string'\n ? new Error(err)\n : new Error(JSON.stringify(err || ''))\n error = createHttpError(500, undefined, internal)\n }\n\n const showStack = process.env.NODE_ENV !== 'production'\n res.status(error.statusCode).send(error.toJSON(showStack))\n next(error)\n}\n"],"mappings":";AAAA;AAAA,EAIE;AAAA,OAGK;AACP,SAAS,MAAM,cAAc;AAStB,IAAM,cAAc,CACzB,KACA,UAA4B,CAAC,MAC1B;AACH,QAAM,SAAS,OAAO;AAEtB,SAAO,IAAI,KAAK,CAA8B;AAG9C,QAAM,YAAY,MAAM,QAAQ,QAAQ,GAAG,IACvC,QAAQ,MACR,QAAQ,MACN,CAAC,QAAQ,GAAG,IACZ,CAAC;AACP,aAAW,OAAO,WAAW;AAC3B,WAAO,IAAI,GAAG;AAAA,EAChB;AAGA,aAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,GAAG,GAAG;AAEhD,eAAW,CAAC,QAAQ,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAErD,YAAM,UAAU,OACd,KACA,KACA,SACG;AACH,YAAI;AACF,gBAAM,CAAC,QAAQ,QAAQ,IAAI,MAAM,MAAM,QAAQ,GAAG;AAClD,cAAI,OAAO,MAAM;AAEjB,cAAI,CAAC,UAAU;AACb,gBAAI,IAAI;AACR;AAAA,UACF;AAEA,gBAAM,EAAE,SAAS,KAAK,IAAI;AAK1B,cAAI,SAAS;AACX,uBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,kBAAI,UAAU,MAAM,KAAK;AAAA,YAC3B;AAAA,UACF;AAEA,cAAI,MAAM;AACR,gBAAI,KAAK,IAAI;AAAA,UACf,OAAO;AACL,gBAAI,IAAI;AAAA,UACV;AAAA,QACF,SAAS,OAAO;AACd,eAAK,KAAK;AAAA,QACZ;AAAA,MACF;AAEA,YAAM,MAAM,MAAM,QAAQ,MAAM,GAAG,IAC/B,MAAM,MACN,MAAM,MACJ,CAAC,MAAM,GAAG,IACV,CAAC;AACP,YAAM,WAAW,IAAI,OAAO,OAAyB;AAErD,aAAO,MAAc,EAAE,KAAK,GAAG,QAAQ;AAAA,IACzC;AAAA,EACF;AAEA,SAAO,IAAI,YAAY;AAEvB,SAAO;AACT;AAEA,IAAM,eAAoC,CAAC,KAAK,MAAM,KAAK,SAAS;AAClE,MAAI,QAAmB;AAEvB,MAAI,CAAC,MAAM,WAAW,CAAC,MAAM,YAAY;AACvC,UAAM,WACJ,eAAe,QACX,MACA,OAAO,QAAQ,WACb,IAAI,MAAM,GAAG,IACb,IAAI,MAAM,KAAK,UAAU,OAAO,EAAE,CAAC;AAC3C,YAAQ,gBAAgB,KAAK,QAAW,QAAQ;AAAA,EAClD;AAEA,QAAM,YAAY,QAAQ,IAAI,aAAa;AAC3C,MAAI,OAAO,MAAM,UAAU,EAAE,KAAK,MAAM,OAAO,SAAS,CAAC;AACzD,OAAK,KAAK;AACZ;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebspark/openapi-express",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
8
14
|
"files": [
|
|
9
15
|
"dist"
|
|
10
16
|
],
|
|
11
17
|
"scripts": {
|
|
12
|
-
"build": "tsup
|
|
18
|
+
"build": "tsup src/index.ts --config tsup.config.ts",
|
|
13
19
|
"dev": "tsc --watch --noEmit",
|
|
14
20
|
"lint": "biome check .",
|
|
15
21
|
"test": "vitest run --passWithNoTests --coverage",
|
|
@@ -24,10 +30,10 @@
|
|
|
24
30
|
},
|
|
25
31
|
"dependencies": {
|
|
26
32
|
"@sebspark/openapi-core": "*",
|
|
27
|
-
"express": "5.1.0",
|
|
28
|
-
"express
|
|
33
|
+
"@types/express-serve-static-core": "5.1.0",
|
|
34
|
+
"express": "5.1.0"
|
|
29
35
|
},
|
|
30
36
|
"peerDependencies": {
|
|
31
|
-
"@sebspark/otel": ">=2.0.
|
|
37
|
+
"@sebspark/otel": ">=2.0.5"
|
|
32
38
|
}
|
|
33
39
|
}
|