Skip to content

Commit a51c143

Browse files
authored
Merge pull request #3 from Workflow-AS/feat/addSwagger
feat(swagger): added Swagger to document the endpoints
2 parents 6b13223 + 58a8c91 commit a51c143

6 files changed

Lines changed: 122 additions & 3 deletions

File tree

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"scripts": {
77
"build": "npx tsc",
88
"start": "node dist/index.js",
9-
"dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\""
9+
"dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\"",
10+
"swagger:gen": "node ./src/swagger.js"
1011
},
1112
"keywords": [],
1213
"author": "",
@@ -18,12 +19,15 @@
1819
"reflect-metadata": "^0.1.13",
1920
"sequelize": "^6.32.1",
2021
"sequelize-typescript": "^2.1.5",
22+
"swagger-autogen": "^2.23.5",
23+
"swagger-ui-express": "^5.0.0",
2124
"zod": "^3.21.4"
2225
},
2326
"devDependencies": {
2427
"@types/dotenv": "^8.2.0",
2528
"@types/express": "^4.17.17",
2629
"@types/node": "^20.4.8",
30+
"@types/swagger-ui-express": "^4.1.3",
2731
"concurrently": "^8.2.0",
2832
"nodemon": "^3.0.1",
2933
"ts-node": "^10.9.1",

src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import express, { Express } from "express";
22
import bodyParser from "body-parser";
3+
import swaggerUi from "swagger-ui-express";
4+
import swaggerFile from "./swagger_output.json";
35
import "./config/env";
46
import { DBConnection } from "./config/database";
57
import { routes } from "./routes";
@@ -10,6 +12,8 @@ const port = process.env.PORT;
1012
app.use(bodyParser.json());
1113
app.use("/v1", routes);
1214

15+
app.use("/", swaggerUi.serve, swaggerUi.setup(swaggerFile));
16+
1317
const start = async (): Promise<void> => {
1418
try {
1519
await DBConnection.sync();

src/swagger.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const swaggerAutogen = require("swagger-autogen")();
2+
3+
const outputFile = "./swagger_output.json";
4+
const endpointsFiles = ["./routes/index"];
5+
6+
swaggerAutogen(outputFile, endpointsFiles);

src/swagger_output.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"swagger": "2.0",
3+
"info": {
4+
"version": "1.0.0",
5+
"title": "REST API",
6+
"description": ""
7+
},
8+
"host": "localhost:3000",
9+
"basePath": "/",
10+
"schemes": ["http"],
11+
"paths": {
12+
"/": {
13+
"get": {
14+
"description": "",
15+
"responses": {
16+
"200": {
17+
"description": "OK"
18+
}
19+
}
20+
}
21+
},
22+
"/create": {
23+
"post": {
24+
"description": "Create a new world",
25+
"parameters": [
26+
{
27+
"name": "body",
28+
"in": "body",
29+
"schema": {
30+
"type": "object",
31+
"properties": {
32+
"name": {
33+
"example": "string"
34+
}
35+
}
36+
}
37+
}
38+
],
39+
"responses": {
40+
"default": {
41+
"description": ""
42+
}
43+
}
44+
}
45+
}
46+
}
47+
}

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"forceConsistentCasingInFileNames": true,
88
"experimentalDecorators": true,
99
"emitDecoratorMetadata": true,
10+
"resolveJsonModule": true,
1011
"strict": true,
1112
"skipLibCheck": true,
1213
"allowJs": true

yarn.lock

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
"@types/range-parser" "*"
9494
"@types/send" "*"
9595

96-
"@types/express@^4.17.17":
96+
"@types/express@*", "@types/express@^4.17.17":
9797
version "4.17.17"
9898
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4"
9999
integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
@@ -155,6 +155,14 @@
155155
"@types/mime" "*"
156156
"@types/node" "*"
157157

158+
"@types/swagger-ui-express@^4.1.3":
159+
version "4.1.3"
160+
resolved "https://registry.yarnpkg.com/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz#7adbbbf5343b45869debef1e9ff39c9ba73e380f"
161+
integrity sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==
162+
dependencies:
163+
"@types/express" "*"
164+
"@types/serve-static" "*"
165+
158166
"@types/validator@^13.7.17":
159167
version "13.9.0"
160168
resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.9.0.tgz#e7a96da3ea6a936222c6e76bb54abdd3dc4c9e4a"
@@ -178,6 +186,11 @@ acorn-walk@^8.1.1:
178186
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
179187
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
180188

189+
acorn@^7.4.1:
190+
version "7.4.1"
191+
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
192+
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
193+
181194
acorn@^8.4.1:
182195
version "8.10.0"
183196
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
@@ -388,6 +401,11 @@ debug@^4.3.4:
388401
dependencies:
389402
ms "2.1.2"
390403

404+
deepmerge@^4.2.2:
405+
version "4.3.1"
406+
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
407+
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
408+
391409
denque@^2.1.0:
392410
version "2.1.0"
393411
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
@@ -571,6 +589,18 @@ glob@7.2.0:
571589
once "^1.3.0"
572590
path-is-absolute "^1.0.0"
573591

592+
glob@^7.1.7:
593+
version "7.2.3"
594+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
595+
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
596+
dependencies:
597+
fs.realpath "^1.0.0"
598+
inflight "^1.0.4"
599+
inherits "2"
600+
minimatch "^3.1.1"
601+
once "^1.3.0"
602+
path-is-absolute "^1.0.0"
603+
574604
has-flag@^3.0.0:
575605
version "3.0.0"
576606
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -685,6 +715,11 @@ is-property@^1.0.2:
685715
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
686716
integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==
687717

718+
json5@^2.2.3:
719+
version "2.2.3"
720+
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
721+
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
722+
688723
lodash@^4.17.21:
689724
version "4.17.21"
690725
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
@@ -749,7 +784,7 @@ mime@1.6.0:
749784
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
750785
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
751786

752-
minimatch@^3.0.4, minimatch@^3.1.2:
787+
minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
753788
version "3.1.2"
754789
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
755790
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -1113,6 +1148,28 @@ supports-color@^8.1.1:
11131148
dependencies:
11141149
has-flag "^4.0.0"
11151150

1151+
swagger-autogen@^2.23.5:
1152+
version "2.23.5"
1153+
resolved "https://registry.yarnpkg.com/swagger-autogen/-/swagger-autogen-2.23.5.tgz#fe86bde66daf991a2e9064ec83f2136319d19258"
1154+
integrity sha512-4Tl2+XhZMyHoBYkABnScHtQE0lKPKUD3NBt09mClrI6UKOUYljKlYw1xiFVwsHCTGR2hAXmhT4PpgjruCtt1ZA==
1155+
dependencies:
1156+
acorn "^7.4.1"
1157+
deepmerge "^4.2.2"
1158+
glob "^7.1.7"
1159+
json5 "^2.2.3"
1160+
1161+
swagger-ui-dist@>=5.0.0:
1162+
version "5.3.1"
1163+
resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.3.1.tgz#ae76a74136152d790b06a8b71ca389cac35ab78f"
1164+
integrity sha512-El78OvXp9zMasfPrshtkW1CRx8AugAKoZuGGOTW+8llJzOV1RtDJYqQRz/6+2OakjeWWnZuRlN2Qj1Y0ilux3w==
1165+
1166+
swagger-ui-express@^5.0.0:
1167+
version "5.0.0"
1168+
resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz#7a00a18dd909574cb0d628574a299b9ba53d4d49"
1169+
integrity sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==
1170+
dependencies:
1171+
swagger-ui-dist ">=5.0.0"
1172+
11161173
to-regex-range@^5.0.1:
11171174
version "5.0.1"
11181175
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"

0 commit comments

Comments
 (0)