Przeglądaj źródła

Refactor complex property into definitions to improve linear reading.

Samuel Jaffe 8 lat temu
rodzic
commit
97d1be35f2
1 zmienionych plików z 109 dodań i 101 usunięć
  1. 109 101
      schema/spell.json

+ 109 - 101
schema/spell.json

@@ -6,37 +6,10 @@
     },
     "area": {
       "oneOf":[
-        {
-          "properties":{
-            "@type": {"const": "Line"},
-            "distance": {"type": "integer"}
-          },
-          "additionalProperties": false
-        },
-        {
-          "properties":{
-            "@type": {"const": "Emission"},
-            "emit": {"enum": ["BURST", "EMANATION", "SPREAD", "NONE"]}
-          },
-          "additionalProperties": false
-        },
-        {
-          "properties":{
-            "@type": {"const": "Sphere"},
-            "radius": {"type": "integer"},
-            "emit": {"enum": ["BURST", "EMANATION", "SPREAD", "NONE"]},
-            "aroundYou": {"type": "boolean"}
-          },
-          "additionalProperties": false
-        },
-        {
-          "properties":{
-            "@type": {"const": "Cylinder"},
-            "radius": {"type": "integer"},
-            "height": {"type": "integer"}
-          },
-          "additionalProperties": false
-        }
+        {"$ref": "#/definitions/area/Line"},
+        {"$ref": "#/definitions/area/Emission"},
+        {"$ref": "#/definitions/area/Sphere"},
+        {"$ref": "#/definitions/area/Cylinder"}
       ]
     },
     "castingTime": {
@@ -60,45 +33,10 @@
     "duration": {
       "oneOf":[
         {"type": "string"},
-        {
-          "dependencies":{
-            "per": ["step"]
-          },
-          "properties":{
-            "duration": {"type": "integer"},
-            "per": {"type": "integer"},
-            "step": {"type": "integer"},
-            "unit":{
-              "enum": ["round", "minute", "hour", "day"]
-            }
-          },
-          "required": ["unit", "duration"],
-          "type": "object",
-          "additionalProperties": false
-        }
+        {"$ref": "#/definitions/duration"}
       ]
     },
-    "effect": {
-      "dependencies":{
-        "beyond":["per", "resolved"],
-        "count":["resolved"],
-        "per":["resolved"],
-        "step":["per", "resolved"],
-        "upto":["per", "resolved"]
-      },
-      "properties": {
-        "beyond": {"type": "integer"},
-        "count": {"type": "integer"},
-        "format": {"type": "string"},
-        "per": {"type": "integer"},
-        "resolved": {"type": "string"},
-        "step": {"type": "integer"},
-        "upto": {"type": "integer"}
-      },
-      "required": ["format"],
-      "type": "object",
-      "additionalProperties": false
-    },
+    "effect": {"$ref": "#/definitions/effect"},
     "keywords": {
       "items": {"type": "string"},
       "type": "array"
@@ -108,23 +46,8 @@
     },
     "range": {
       "oneOf": [
-        { 
-          "enum": ["Touch", "Close", "Medium", "Long", "Unlimited"]
-        },
-        {
-          "dependencies": {
-            "per": ["step"]
-          },
-          "properties": {
-            "name": {"type": "string"},
-            "range": {"type": "integer"},
-            "per": {"type": "integer"},
-            "step": {"type": "integer"}
-          },
-          "type": "object",
-          "required": ["name", "range"],
-          "additionalProperties": false
-        }
+        {"enum": ["Touch", "Close", "Medium", "Long", "Unlimited"]},
+        {"$ref": "#/definitions/range"}
       ]
     },
     "savingThrow": {
@@ -138,21 +61,8 @@
     },
     "target": {
       "oneOf":[
-        {
-          "type": "string"
-        },
-        {
-          "properties": {
-            "count": {"type": "integer"},
-            "format": {"type": "string"},
-            "per": {"type": "integer"},
-            "resolved": {"type": "string"},
-            "step": {"type": "integer"}
-          },
-          "required": ["format", "resolved", "count", "per", "step"],
-          "type": "object",
-          "additionalProperties": false
-       }
+        {"type": "string"},
+        {"$ref": "#/definitions/target"}
       ]
     }
   },
@@ -169,6 +79,104 @@
     "keywords",
     "savingThrow"
   ],
-  "type": "object"
+  "type": "object",
+  "definitions": {
+    "area": {
+      "Line": {
+        "properties":{
+          "@type": {"const": "Line"},
+          "distance": {"type": "integer"}
+        },
+        "additionalProperties": false
+      },
+      "Emission": {
+        "properties":{
+          "@type": {"const": "Emission"},
+          "emit": {"enum": ["BURST", "EMANATION", "SPREAD", "NONE"]}
+        },
+        "additionalProperties": false
+      },
+      "Sphere": {
+        "properties":{
+          "@type": {"const": "Sphere"},
+          "radius": {"type": "integer"},
+          "emit": {"enum": ["BURST", "EMANATION", "SPREAD", "NONE"]},
+          "aroundYou": {"type": "boolean"}
+        },
+        "additionalProperties": false
+      },
+      "Cylinder": {
+        "properties":{
+          "@type": {"const": "Cylinder"},
+          "radius": {"type": "integer"},
+          "height": {"type": "integer"}
+        },
+        "additionalProperties": false
+      }
+    },
+    "duration": {
+      "dependencies":{
+        "per": ["step"]
+      },
+      "properties":{
+        "duration": {"type": "integer"},
+        "per": {"type": "integer"},
+        "step": {"type": "integer"},
+        "unit":{
+          "enum": ["round", "minute", "hour", "day"]
+        }
+      },
+      "required": ["unit", "duration"],
+      "type": "object",
+      "additionalProperties": false
+    },
+    "effect": {
+      "dependencies":{
+        "beyond":["per", "resolved"],
+        "count":["resolved"],
+        "per":["resolved"],
+        "step":["per", "resolved"],
+        "upto":["per", "resolved"]
+      },
+      "properties": {
+        "beyond": {"type": "integer"},
+        "count": {"type": "integer"},
+        "format": {"type": "string"},
+        "per": {"type": "integer"},
+        "resolved": {"type": "string"},
+        "step": {"type": "integer"},
+        "upto": {"type": "integer"}
+      },
+      "required": ["format"],
+      "type": "object",
+      "additionalProperties": false
+    },
+    "range": {
+      "dependencies": {
+        "per": ["step"]
+      },
+      "properties": {
+        "name": {"type": "string"},
+        "range": {"type": "integer"},
+        "per": {"type": "integer"},
+        "step": {"type": "integer"}
+      },
+      "type": "object",
+      "required": ["name", "range"],
+      "additionalProperties": false
+    },
+    "target": {
+      "properties": {
+        "count": {"type": "integer"},
+        "format": {"type": "string"},
+        "per": {"type": "integer"},
+        "resolved": {"type": "string"},
+        "step": {"type": "integer"}
+      },
+      "required": ["format", "resolved", "count", "per", "step"],
+      "type": "object",
+      "additionalProperties": false
+    }
+  }
 }