Ajv and openapi spec use different versions of typescript json schema??????

This commit is contained in:
Madeline 2023-03-25 19:24:00 +11:00
parent 59c0dd0731
commit b272c56d1a
No known key found for this signature in database
GPG Key ID: 1958E017C36F2E47
4 changed files with 73 additions and 37 deletions

View File

@ -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",

View File

@ -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"

View File

@ -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("|");

View File

@ -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) {
// 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.length == 1) {
// Object.assign(
// part.properties[key],
// part.properties[key].anyOf[0],
// );
// delete part.properties[key].anyOf;
// }
// }
// }
}
}