From 67f1875737bcefcb57d026ba8eaffe528cb1c40d Mon Sep 17 00:00:00 2001 From: Allison Reinheimer Moore Date: Tue, 11 Jul 2023 14:00:31 -0400 Subject: [PATCH 1/3] DOP-3766: set up swagger generation? --- package-lock.json | 123 ++++++++++++++++++++++++++---------- package.json | 6 +- swagger.js | 6 ++ swagger_output.json | 147 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 250 insertions(+), 32 deletions(-) create mode 100644 swagger.js create mode 100644 swagger_output.json diff --git a/package-lock.json b/package-lock.json index a61c65c..38b954b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,13 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "and": "^0.0.3", "dotenv": "^16.0.3", "express": "^4.18.2", "mongodb": "^5.2.0", "stream-json": "^1.8.0", + "swagger-autogen": "^2.23.4", + "swagger-ui-express": "^5.0.0", "winston": "^3.9.0" }, "devDependencies": { @@ -2909,6 +2912,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/and": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/and/-/and-0.0.3.tgz", + "integrity": "sha512-ns0tgq+jQFbDhAu5wrE+M7V87E4L3N8ZTJfRKVxafi7g0BSEM6JnwhL57HyR1XMHBeRfGPWZxq+SH1bZeUTiTw==" + }, "node_modules/ansi-escapes": { "version": "4.3.2", "dev": true, @@ -3093,7 +3101,6 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -3162,7 +3169,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3495,7 +3501,6 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/content-disposition": { @@ -3573,7 +3578,6 @@ }, "node_modules/deepmerge": { "version": "4.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4354,7 +4358,6 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -4433,7 +4436,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -4687,7 +4689,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -5498,7 +5499,6 @@ }, "node_modules/json5": { "version": "2.2.3", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -5715,7 +5715,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -6069,7 +6068,6 @@ }, "node_modules/once": { "version": "1.4.0", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -6205,7 +6203,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7012,6 +7009,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-autogen": { + "version": "2.23.4", + "resolved": "https://registry.npmjs.org/swagger-autogen/-/swagger-autogen-2.23.4.tgz", + "integrity": "sha512-ULBL813nFS87VU9DAgdzaKfjcQEpJvO/N4sSoMXOaA9B5SGSSSA1WY04ao2LHaPGhZTPVCH6lD90suiODtSGeA==", + "dependencies": { + "acorn": "^7.4.1", + "deepmerge": "^4.2.2", + "glob": "^7.1.7", + "json5": "^2.2.3" + } + }, + "node_modules/swagger-autogen/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.1.0.tgz", + "integrity": "sha512-c1KmAjuVODxw+vwkNLALQZrgdlBAuBbr2xSPfYrJgseEi7gFKcTvShysPmyuDI4kcUa1+5rFpjWvXdusKY74mg==" + }, + "node_modules/swagger-ui-express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz", + "integrity": "sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==", + "dependencies": { + "swagger-ui-dist": ">=5.0.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, "node_modules/tar-stream": { "version": "2.2.0", "dev": true, @@ -7492,7 +7530,6 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -9584,6 +9621,11 @@ "uri-js": "^4.2.2" } }, + "and": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/and/-/and-0.0.3.tgz", + "integrity": "sha512-ns0tgq+jQFbDhAu5wrE+M7V87E4L3N8ZTJfRKVxafi7g0BSEM6JnwhL57HyR1XMHBeRfGPWZxq+SH1bZeUTiTw==" + }, "ansi-escapes": { "version": "4.3.2", "dev": true, @@ -9709,8 +9751,7 @@ } }, "balanced-match": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "base64-js": { "version": "1.5.1", @@ -9752,7 +9793,6 @@ }, "brace-expansion": { "version": "1.1.11", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9949,8 +9989,7 @@ "dev": true }, "concat-map": { - "version": "0.0.1", - "dev": true + "version": "0.0.1" }, "content-disposition": { "version": "0.5.4", @@ -10003,8 +10042,7 @@ "dev": true }, "deepmerge": { - "version": "4.3.1", - "dev": true + "version": "4.3.1" }, "delayed-stream": { "version": "1.0.0", @@ -10497,8 +10535,7 @@ "dev": true }, "fs.realpath": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "fsevents": { "version": "2.3.2", @@ -10538,7 +10575,6 @@ }, "glob": { "version": "7.2.3", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10681,7 +10717,6 @@ }, "inflight": { "version": "1.0.6", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -11228,8 +11263,7 @@ "dev": true }, "json5": { - "version": "2.2.3", - "dev": true + "version": "2.2.3" }, "kleur": { "version": "3.0.3", @@ -11367,7 +11401,6 @@ }, "minimatch": { "version": "3.1.2", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11584,7 +11617,6 @@ }, "once": { "version": "1.4.0", - "dev": true, "requires": { "wrappy": "1" } @@ -11668,8 +11700,7 @@ "dev": true }, "path-is-absolute": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "path-key": { "version": "3.1.1", @@ -12145,6 +12176,37 @@ "version": "1.0.0", "dev": true }, + "swagger-autogen": { + "version": "2.23.4", + "resolved": "https://registry.npmjs.org/swagger-autogen/-/swagger-autogen-2.23.4.tgz", + "integrity": "sha512-ULBL813nFS87VU9DAgdzaKfjcQEpJvO/N4sSoMXOaA9B5SGSSSA1WY04ao2LHaPGhZTPVCH6lD90suiODtSGeA==", + "requires": { + "acorn": "^7.4.1", + "deepmerge": "^4.2.2", + "glob": "^7.1.7", + "json5": "^2.2.3" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "swagger-ui-dist": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.1.0.tgz", + "integrity": "sha512-c1KmAjuVODxw+vwkNLALQZrgdlBAuBbr2xSPfYrJgseEi7gFKcTvShysPmyuDI4kcUa1+5rFpjWvXdusKY74mg==" + }, + "swagger-ui-express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz", + "integrity": "sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==", + "requires": { + "swagger-ui-dist": ">=5.0.0" + } + }, "tar-stream": { "version": "2.2.0", "dev": true, @@ -12426,8 +12488,7 @@ } }, "wrappy": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "write-file-atomic": { "version": "4.0.2", diff --git a/package.json b/package.json index 7b5730d..f0a3db4 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "prettier": "prettier '**/*.{js,jsx,ts,tsx,json,md}'", "start": "node ./dist/index.js", - "test": "jest" + "test": "jest", + "swagger-autogen": "node swagger.js" }, "engines": { "node": "^18", @@ -21,10 +22,13 @@ "author": "", "license": "ISC", "dependencies": { + "and": "^0.0.3", "dotenv": "^16.0.3", "express": "^4.18.2", "mongodb": "^5.2.0", "stream-json": "^1.8.0", + "swagger-autogen": "^2.23.4", + "swagger-ui-express": "^5.0.0", "winston": "^3.9.0" }, "devDependencies": { diff --git a/swagger.js b/swagger.js new file mode 100644 index 0000000..a00021c --- /dev/null +++ b/swagger.js @@ -0,0 +1,6 @@ +const swaggerAutogen = require('swagger-autogen')() + +const outputFile = './swagger_output.json' +const endpointsFiles = ['./src/routes/builds.ts', './src/routes/projects.ts'] + +swaggerAutogen(outputFile, endpointsFiles) diff --git a/swagger_output.json b/swagger_output.json new file mode 100644 index 0000000..5cb51c0 --- /dev/null +++ b/swagger_output.json @@ -0,0 +1,147 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "REST API", + "description": "" + }, + "host": "localhost:3000", + "basePath": "/", + "schemes": [ + "http" + ], + "paths": { + "/{buildId}/documents": { + "get": { + "description": "", + "parameters": [ + { + "name": "buildId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "req-id", + "in": "header", + "type": "string" + } + ], + "responses": { + "default": { + "description": "" + } + } + } + }, + "/": { + "get": { + "description": "", + "parameters": [ + { + "name": "req-id", + "in": "header", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/{snootyProject}/documents": { + "get": { + "description": "", + "parameters": [ + { + "name": "snootyProject", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "updated", + "in": "query", + "type": "string" + }, + { + "name": "req-id", + "in": "header", + "type": "string" + } + ], + "responses": { + "default": { + "description": "" + } + } + } + }, + "/{snootyProject}/{branch}/documents": { + "get": { + "description": "", + "parameters": [ + { + "name": "snootyProject", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "branch", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "req-id", + "in": "header", + "type": "string" + } + ], + "responses": { + "default": { + "description": "" + } + } + } + }, + "/{snootyProject}/{branch}/documents/updated/{timestamp}": { + "get": { + "description": "", + "parameters": [ + { + "name": "snootyProject", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "branch", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "timestamp", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "req-id", + "in": "header", + "type": "string" + } + ], + "responses": { + "default": { + "description": "" + } + } + } + } + } +} \ No newline at end of file From 0c7d25712d7d459cbc46831d936461f842c7880e Mon Sep 17 00:00:00 2001 From: Allison Reinheimer Moore Date: Tue, 11 Jul 2023 14:13:13 -0400 Subject: [PATCH 2/3] formatting --- swagger.js | 8 ++++---- swagger_output.json | 6 ++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/swagger.js b/swagger.js index a00021c..971e24d 100644 --- a/swagger.js +++ b/swagger.js @@ -1,6 +1,6 @@ -const swaggerAutogen = require('swagger-autogen')() +const swaggerAutogen = require('swagger-autogen')(); -const outputFile = './swagger_output.json' -const endpointsFiles = ['./src/routes/builds.ts', './src/routes/projects.ts'] +const outputFile = './swagger_output.json'; +const endpointsFiles = ['./src/routes/builds.ts', './src/routes/projects.ts']; -swaggerAutogen(outputFile, endpointsFiles) +swaggerAutogen(outputFile, endpointsFiles); diff --git a/swagger_output.json b/swagger_output.json index 5cb51c0..3a4b89f 100644 --- a/swagger_output.json +++ b/swagger_output.json @@ -7,9 +7,7 @@ }, "host": "localhost:3000", "basePath": "/", - "schemes": [ - "http" - ], + "schemes": ["http"], "paths": { "/{buildId}/documents": { "get": { @@ -144,4 +142,4 @@ } } } -} \ No newline at end of file +} From 5188019efbe2afc14d24c4186c7aa95ae0398cae Mon Sep 17 00:00:00 2001 From: Allison Reinheimer Moore Date: Tue, 11 Jul 2023 14:59:36 -0400 Subject: [PATCH 3/3] linting --- .gitignore | 1 + package.json | 2 +- swagger.js => swagger.mjs | 4 ++-- swagger_output.json | 6 ++++-- 4 files changed, 8 insertions(+), 5 deletions(-) rename swagger.js => swagger.mjs (56%) diff --git a/.gitignore b/.gitignore index 60569e8..adf9387 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store .env dist/ node_modules/ diff --git a/package.json b/package.json index f0a3db4..0b05d2f 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "prettier": "prettier '**/*.{js,jsx,ts,tsx,json,md}'", "start": "node ./dist/index.js", "test": "jest", - "swagger-autogen": "node swagger.js" + "swagger-autogen": "node swagger.mjs" }, "engines": { "node": "^18", diff --git a/swagger.js b/swagger.mjs similarity index 56% rename from swagger.js rename to swagger.mjs index 971e24d..ae78d36 100644 --- a/swagger.js +++ b/swagger.mjs @@ -1,6 +1,6 @@ -const swaggerAutogen = require('swagger-autogen')(); +import swaggerAutogen from 'swagger-autogen'; const outputFile = './swagger_output.json'; const endpointsFiles = ['./src/routes/builds.ts', './src/routes/projects.ts']; -swaggerAutogen(outputFile, endpointsFiles); +swaggerAutogen(outputFile, endpointsFiles); \ No newline at end of file diff --git a/swagger_output.json b/swagger_output.json index 3a4b89f..5cb51c0 100644 --- a/swagger_output.json +++ b/swagger_output.json @@ -7,7 +7,9 @@ }, "host": "localhost:3000", "basePath": "/", - "schemes": ["http"], + "schemes": [ + "http" + ], "paths": { "/{buildId}/documents": { "get": { @@ -142,4 +144,4 @@ } } } -} +} \ No newline at end of file