diff options
author | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2023-03-25 19:24:00 +1100 |
---|---|---|
committer | Madeline <46743919+MaddyUnderStars@users.noreply.github.com> | 2023-03-25 19:24:00 +1100 |
commit | b272c56d1a3dd84fcbbd27db1bf61a03c3b3ca5d (patch) | |
tree | 64a559339de1ea93f55001f594165a503662ff79 | |
parent | Merge branch 'master' of github.com:fosscord/fosscord-server (diff) | |
download | server-b272c56d1a3dd84fcbbd27db1bf61a03c3b3ca5d.tar.xz |
Ajv and openapi spec use different versions of typescript json schema??????
-rw-r--r-- | assets/openapi.json | 14 | ||||
-rw-r--r-- | assets/schemas.json | 20 | ||||
-rw-r--r-- | scripts/openapi.js | 42 | ||||
-rw-r--r-- | scripts/schema.js | 36 |
4 files changed, 74 insertions, 38 deletions
diff --git a/assets/openapi.json b/assets/openapi.json index 069eaced..7e1f3cac 100644 --- a/assets/openapi.json +++ b/assets/openapi.json @@ -20,15 +20,13 @@ } }, "components": { - "securitySchemes": [ - { - "bearer": { - "type": "http", - "scheme": "bearer", - "description": "Bearer/Bot prefixes are not required." - } + "securitySchemes": { + "bearer": { + "type": "http", + "scheme": "bearer", + "description": "Bearer/Bot prefixes are not required." } - ], + }, "schemas": { "SelectProtocolSchema": { "type": "object", diff --git a/assets/schemas.json b/assets/schemas.json index a0c6d173..3c7e60a8 100644 --- a/assets/schemas.json +++ b/assets/schemas.json @@ -26292,8 +26292,14 @@ "type": "boolean" }, "mute_config": { - "nullable": true, - "$ref": "#/definitions/MuteConfig" + "anyOf": [ + { + "$ref": "#/definitions/MuteConfig" + }, + { + "type": "null" + } + ] }, "muted": { "type": "boolean" @@ -28417,8 +28423,14 @@ "type": "boolean" }, "custom_status": { - "nullable": true, - "$ref": "#/definitions/CustomStatus" + "anyOf": [ + { + "$ref": "#/definitions/CustomStatus" + }, + { + "type": "null" + } + ] }, "default_guilds_restricted": { "type": "boolean" 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("|"); diff --git a/scripts/schema.js b/scripts/schema.js index bd0f73d3..ae4b525a 100644 --- a/scripts/schema.js +++ b/scripts/schema.js @@ -20,6 +20,8 @@ Regenerates the `fosscord-server/assets/schemas.json` file, used for API/Gateway input validation. */ +/* eslint-env node */ + const path = require("path"); const fs = require("fs"); const TJS = require("typescript-json-schema"); @@ -110,23 +112,23 @@ function main() { continue; } - 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; - } - } - } + // 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; + // } + // } + // } } } |