From cef53c0db91562a627379512c544b1162e834f22 Mon Sep 17 00:00:00 2001 From: Methapon Metanipat Date: Thu, 24 Oct 2024 11:50:55 +0700 Subject: [PATCH] experimental: api doc --- package.json | 3 +- pnpm-lock.yaml | 74 ++++++++++++++++++++++++++++++-------------------- src/app.ts | 5 ++-- 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index cb8e906..f4928cc 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/node": "^20.16.13", - "@types/swagger-ui-express": "^4.1.6", "nodemon": "^3.1.7", "prettier": "^3.3.3", "prisma": "^5.21.1", @@ -33,6 +32,7 @@ "@elastic/elasticsearch": "^8.15.1", "@fast-csv/parse": "^5.0.0", "@prisma/client": "^5.21.1", + "@scalar/express-api-reference": "^0.4.165", "@tsoa/runtime": "^6.5.1", "@types/morgan": "^1.9.9", "cors": "^2.8.5", @@ -44,7 +44,6 @@ "morgan": "^1.10.0", "prisma-extension-kysely": "^2.1.0", "promise.any": "^2.0.6", - "swagger-ui-express": "^5.0.1", "tsoa": "^6.5.1", "winston": "^3.15.0", "winston-elasticsearch": "^0.19.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fe0eb53..57f16ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: '@prisma/client': specifier: ^5.21.1 version: 5.21.1(prisma@5.21.1) + '@scalar/express-api-reference': + specifier: ^0.4.165 + version: 0.4.165 '@tsoa/runtime': specifier: ^6.5.1 version: 6.5.1 @@ -50,9 +53,6 @@ importers: promise.any: specifier: ^2.0.6 version: 2.0.6 - swagger-ui-express: - specifier: ^5.0.1 - version: 5.0.1(express@4.21.1) tsoa: specifier: ^6.5.1 version: 6.5.1 @@ -72,9 +72,6 @@ importers: '@types/node': specifier: ^20.16.13 version: 20.16.13 - '@types/swagger-ui-express': - specifier: ^4.1.6 - version: 4.1.6 nodemon: specifier: ^3.1.7 version: 3.1.7 @@ -354,6 +351,18 @@ packages: '@prisma/prisma-schema-wasm@5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59': resolution: {integrity: sha512-+zUI7NQDXfcNnU8HgrAj4jRMv8yRfITLzcfv0Urf0adKimM+hkkVG4rX38i9zWMlxekkEBw7NLFx3Gxxy8d3iQ==} + '@scalar/express-api-reference@0.4.165': + resolution: {integrity: sha512-Bpam2htoq6Oq+vlW05qlEyw1libyoA2i44DwN+1gHH9s6toydEIkFdlAS00gor+3WwN+ogdBeAyfJDZlqUj7Bw==} + engines: {node: '>=18'} + + '@scalar/openapi-types@0.1.4': + resolution: {integrity: sha512-+wRXgmqzgDnj8Dxqf4OOPMPo4or/LRd1Bsy4pnrIW0yBt8rKSdtBb+jH/aRnhgDDmKVjWxJ+KFk7WlSKvZwNTw==} + engines: {node: '>=18'} + + '@scalar/types@0.0.17': + resolution: {integrity: sha512-wUrvNnYFMULsHENX/9TP3oyECRTtZsP06mOZU+RlWg9sRtzWVTjlBCahkgUETL93J+Bz2RLFSKVgPyNN4fpIpA==} + engines: {node: '>=18'} + '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -457,12 +466,12 @@ packages: '@types/serve-static@1.15.5': resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - '@types/swagger-ui-express@4.1.6': - resolution: {integrity: sha512-UVSiGYXa5IzdJJG3hrc86e8KdZWLYxyEsVoUI4iPXc7CO4VZ3AfNP8d/8+hrDRIqz+HAaSMtZSqAsF3Nq2X/Dg==} - '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@unhead/schema@1.11.10': + resolution: {integrity: sha512-lXh7cm5XtFaw3gc+ZVXTSfIHXiBpAywbjtEiOsz5TR4GxOjj2rtfOAl4C3Difk1yupP6L2otYmOZdn/i8EXSJg==} + '@zxing/text-encoding@0.9.0': resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} @@ -1173,6 +1182,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -2215,15 +2227,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swagger-ui-dist@5.13.0: - resolution: {integrity: sha512-uaWhh6j18IIs5tOX0arvIBnVINAzpTXaQXkr7qAk8zoupegJVg0UU/5+S/FgsgVCnzVsJ9d7QLjIxkswEeTg0Q==} - - swagger-ui-express@5.0.1: - resolution: {integrity: sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==} - engines: {node: '>= v0.10.32'} - peerDependencies: - express: '>=4.0.0 || >=5.0.0-beta' - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -2501,6 +2504,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zhead@2.2.4: + resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} + zip-stream@4.1.1: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} engines: {node: '>= 10'} @@ -2950,6 +2956,17 @@ snapshots: '@prisma/prisma-schema-wasm@5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59': {} + '@scalar/express-api-reference@0.4.165': + dependencies: + '@scalar/types': 0.0.17 + + '@scalar/openapi-types@0.1.4': {} + + '@scalar/types@0.0.17': + dependencies: + '@scalar/openapi-types': 0.1.4 + '@unhead/schema': 1.11.10 + '@tsconfig/node10@1.0.11': {} '@tsconfig/node12@1.0.11': {} @@ -3095,13 +3112,13 @@ snapshots: '@types/mime': 4.0.0 '@types/node': 20.16.13 - '@types/swagger-ui-express@4.1.6': - dependencies: - '@types/express': 4.17.21 - '@types/serve-static': 1.15.5 - '@types/triple-beam@1.3.5': {} + '@unhead/schema@1.11.10': + dependencies: + hookable: 5.5.3 + zhead: 2.2.4 + '@zxing/text-encoding@0.9.0': optional: true @@ -4024,6 +4041,8 @@ snapshots: dependencies: function-bind: 1.1.2 + hookable@5.5.3: {} + hosted-git-info@2.8.9: {} hpagent@1.2.0: {} @@ -5081,13 +5100,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swagger-ui-dist@5.13.0: {} - - swagger-ui-express@5.0.1(express@4.21.1): - dependencies: - express: 4.21.1 - swagger-ui-dist: 5.13.0 - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -5408,6 +5420,8 @@ snapshots: yocto-queue@0.1.0: {} + zhead@2.2.4: {} + zip-stream@4.1.1: dependencies: archiver-utils: 3.0.4 diff --git a/src/app.ts b/src/app.ts index 16f62e9..f429970 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,13 +1,12 @@ import "dotenv/config"; import cors from "cors"; import express, { json, urlencoded } from "express"; -import swaggerUi from "swagger-ui-express"; -import swaggerDocument from "./swagger.json"; import error from "./middlewares/error"; import morgan from "./middlewares/morgan"; import { RegisterRoutes } from "./routes"; import { initThailandAreaDatabase } from "./utils/thailand-area"; import { initFirstAdmin } from "./utils/database"; +import { apiReference } from "@scalar/express-api-reference"; const APP_HOST = process.env.APP_HOST || "0.0.0.0"; const APP_PORT = +(process.env.APP_PORT || 3000); @@ -31,7 +30,7 @@ const APP_PORT = +(process.env.APP_PORT || 3000); app.use(morgan); app.use("/", express.static("static")); - app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument)); + app.use("/api-docs", apiReference({ theme: "kepler", spec: { url: "/api/openapi" } })); RegisterRoutes(app);