Files
grungnet/src/validators/MapState.ts
2021-07-23 12:45:07 +10:00

105 lines
2.0 KiB
TypeScript

import Ajv from "ajv";
import { MapState } from "../types/MapState";
import { DrawingSchema } from "./Drawing";
import { FogSchema } from "./Fog";
import { NoteSchema } from "./Note";
import { TokenStateSchema } from "./TokenState";
import { Vector2Schema } from "./Vector2";
import { ColorSchema } from "./Color";
import { OutlineSchema } from "./Outline";
export const MapStateSchema: any = {
$id: "https://www.owlbear.rodeo/schemas/map-state.json",
properties: {
tokens: {
$ref: "#/definitions/TokenStates",
},
drawShapes: {
$ref: "#/definitions/DrawingState",
},
fogShapes: {
$ref: "#/definitions/FogState",
},
editFlags: {
items: {
enum: ["drawing", "fog", "notes", "tokens"],
type: "string",
},
type: "array",
},
notes: {
$ref: "#/definitions/Notes",
},
mapId: {
type: "string",
},
},
required: [
"drawShapes",
"editFlags",
"fogShapes",
"mapId",
"notes",
"tokens",
],
type: "object",
definitions: {
TokenStates: {
propertyNames: {
type: "string",
},
additionalProperties: {
$ref: "token-state.json",
},
required: [],
type: "object",
},
DrawingState: {
propertyNames: {
type: "string",
},
additionalProperties: {
$ref: "drawing.json",
},
required: [],
type: "object",
},
FogState: {
propertyNames: {
type: "string",
},
additionalProperties: {
$ref: "fog.json",
},
required: [],
type: "object",
},
Notes: {
propertyNames: {
type: "string",
},
additionalProperties: {
$ref: "note.json",
},
required: [],
type: "object",
},
},
};
export const ajv = new Ajv({
schemas: [
MapStateSchema,
DrawingSchema,
FogSchema,
NoteSchema,
TokenStateSchema,
Vector2Schema,
ColorSchema,
OutlineSchema,
],
});
export const isMapState = ajv.compile<MapState>(MapStateSchema);