summary refs log tree commit diff
path: root/scripts/openapi.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/openapi.js')
-rw-r--r--scripts/openapi.js42
1 files changed, 33 insertions, 9 deletions
diff --git a/scripts/openapi.js b/scripts/openapi.js
index 86297967..889a68cb 100644
--- a/scripts/openapi.js
+++ b/scripts/openapi.js
@@ -16,6 +16,8 @@
 	along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 
+/* eslint-env node */
+
 require("module-alias/register");
 const getRouteDescriptions = require("./util/getRouteDescriptions");
 const path = require("path");
@@ -27,7 +29,31 @@ require("missing-native-js-functions");
 
 const openapiPath = path.join(__dirname, "..", "assets", "openapi.json");
 const SchemaPath = path.join(__dirname, "..", "assets", "schemas.json");
-const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
+let schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
+
+for (var schema in schemas) {
+	const part = schemas[schema];
+	for (var key in part.properties) {
+		if (part.properties[key].anyOf) {
+			const nullIndex = part.properties[key].anyOf.findIndex(
+				(x) => x.type == "null",
+			);
+			if (nullIndex != -1) {
+				part.properties[key].nullable = true;
+				part.properties[key].anyOf.splice(nullIndex, 1);
+
+				if (part.properties[key].anyOf.length == 1) {
+					Object.assign(
+						part.properties[key],
+						part.properties[key].anyOf[0],
+					);
+					delete part.properties[key].anyOf;
+				}
+			}
+		}
+	}
+}
+
 const specification = JSON.parse(
 	fs.readFileSync(openapiPath, { encoding: "utf8" }),
 );
@@ -85,15 +111,13 @@ function apiRoutes() {
 		.map((x) => ({ name: x }));
 
 	specification.components = specification.components || {};
-	specification.components.securitySchemes = [
-		{
-			bearer: {
-				type: "http",
-				scheme: "bearer",
-				description: "Bearer/Bot prefixes are not required.",
-			},
+	specification.components.securitySchemes = {
+		bearer: {
+			type: "http",
+			scheme: "bearer",
+			description: "Bearer/Bot prefixes are not required.",
 		},
-	];
+	};
 
 	routes.forEach((route, pathAndMethod) => {
 		const [p, method] = pathAndMethod.split("|");