Airbase data being validated

This commit is contained in:
PeekabooSteam
2023-12-22 15:11:59 +00:00
parent cbaadb6fc9
commit de14f6c738
6 changed files with 152 additions and 8 deletions

View File

@@ -18,6 +18,7 @@ import { Manager } from "./other/manager";
import { SVGInjector } from "@tanem/svg-injector";
import { ServerManager } from "./server/servermanager";
import { sha256 } from 'js-sha256';
import Ajv from "ajv"
import { BLUE_COMMANDER, FILL_SELECTED_RING, GAME_MASTER, HIDE_UNITS_SHORT_RANGE_RINGS, RED_COMMANDER, SHOW_UNITS_ACQUISITION_RINGS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNIT_LABELS } from "./constants/constants";
import { aircraftDatabase } from "./unit/databases/aircraftdatabase";
@@ -27,6 +28,8 @@ import { navyUnitDatabase } from "./unit/databases/navyunitdatabase";
import { UnitListPanel } from "./panels/unitlistpanel";
import { ContextManager } from "./context/contextmanager";
import { Context } from "./context/context";
import { AirDefenceUnitSpawnMenu } from "./controls/unitspawnmenu";
import { AirbasesJSONSchemaValidator } from "./schemas/schema";
var VERSION = "{{OLYMPUS_VERSION_NUMBER}}";
@@ -193,6 +196,9 @@ export class OlympusApp {
this.#unitsManager = new UnitsManager();
this.#weaponsManager = new WeaponsManager();
/* Validate data */
this.#validateData();
// Toolbars
this.getToolbarsManager().add("primaryToolbar", new PrimaryToolbar("primary-toolbar"))
.add("commandModeToolbar", new CommandModeToolbar("command-mode-toolbar"));
@@ -447,4 +453,28 @@ export class OlympusApp {
img.addEventListener("load", () => { SVGInjector(img); });
})
}
#validateData() {
const airbasesValidator = new AirbasesJSONSchemaValidator();
/*
const validator = new Ajv();
const schema = {
type: "object",
properties: {
foo: {type: "integer"},
bar: {type: "string"},
},
required: ["foo"],
additionalProperties: false,
}
const data = this.#getRunwayData();
const validate = validator.compile(schema);
const valid = validate(data);
if (!valid) console.log(validate.errors);
//*/
}
}

View File

@@ -0,0 +1,67 @@
{
"type": "object",
"additionalProperties": false,
"properties": {
"airfields": {
"type": "object",
"minProperties": 1,
"patternProperties": {
".*": {
"type": "object",
"properties": {
"elevation": {
"type": "string",
"pattern": "^(0|([1-9][0-9]*))?$"
},
"ICAO": {
"type": "string"
},
"runways": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"headings": {
"type": "array",
"items": {
"type": "object",
"patternProperties": {
".*": {
"type": "object",
"properties": {
"ILS": {
"type": "string",
"pattern": "^(1[0-9]{1,2}\\.[0-9][05])?$"
},
"magHeading": {
"type": "string",
"pattern": "^([0-2][0-9]{2})|(3[0-6][0-9])?$"
}
},
"required": ["magHeading"]
}
}
},
"minItems": 1
},
"length": {
"type": "string",
"pattern": "^[1-9][0-9]{3,4}$"
}
},
"required": [ "headings", "length" ]
}
},
"TACAN": {
"type": "string",
"pattern": "^([1-9][0-9]{1,2}X)?$"
}
},
"required": [ "elevation", "runways" ]
}
}
}
},
"required": ["airfields"]
}

View File

@@ -0,0 +1,51 @@
import Ajv, { JSONSchemaType } from "ajv";
import { AnySchemaObject, Schema } from "ajv/dist/core";
// For future extension
abstract class JSONSchemaValidator {
#schema!:AnySchemaObject;
constructor( schema:AnySchemaObject ) {
this.#schema = schema;
}
getSchema() {
return this.#schema;
}
}
export class AirbasesJSONSchemaValidator extends JSONSchemaValidator {
constructor( ) {
const schema = require("../schemas/airbases.schema.json");
super( schema );
const ajv = new Ajv({
"allErrors": true
});
[
require( "../../public/databases/airbases/caucasus.json" ),
require( "../../public/databases/airbases/falklands.json" ),
require( "../../public/databases/airbases/marianas.json" ),
require( "../../public/databases/airbases/nevada.json" ),
require( "../../public/databases/airbases/normandy.json" ),
require( "../../public/databases/airbases/persiangulf.json" ),
require( "../../public/databases/airbases/sinaimap.json" ),
require( "../../public/databases/airbases/syria.json" ),
require( "../../public/databases/airbases/thechannel.json" )
].forEach( data => {
const validate = ajv.compile(this.getSchema());
const valid = validate(data);
if (!valid) console.error(validate.errors);
});
}
}