summaryrefslogtreecommitdiff
path: root/data/schemas
diff options
context:
space:
mode:
authorZach White <skullydazed@gmail.com>2021-06-24 20:48:53 -0700
committerGitHub <noreply@github.com>2021-06-24 20:48:53 -0700
commitb908275354ba6cd9dd4d393dbbedfbd2ad0f316d (patch)
tree7efbb70c51fb917d203b629feb9eadf169f71c91 /data/schemas
parent9d4412cb8bf9512952118b190fedea72e33d28cb (diff)
downloadqmk_firmware-b908275354ba6cd9dd4d393dbbedfbd2ad0f316d.tar.gz
qmk_firmware-b908275354ba6cd9dd4d393dbbedfbd2ad0f316d.zip
Optimize our jsonschema by using refs (#13271)
* fix some broken info.json files * optimize our jsonschema using refs * fix formatting after vscode broke it * make flake8 happy * cleanup * make our schema validation more compact and flexible
Diffstat (limited to 'data/schemas')
-rw-r--r--data/schemas/api_keyboard.jsonschema44
-rw-r--r--data/schemas/definitions.jsonschema107
-rw-r--r--data/schemas/keyboard.jsonschema263
3 files changed, 162 insertions, 252 deletions
diff --git a/data/schemas/api_keyboard.jsonschema b/data/schemas/api_keyboard.jsonschema
index d570ee9990..d638658a1d 100644
--- a/data/schemas/api_keyboard.jsonschema
+++ b/data/schemas/api_keyboard.jsonschema
@@ -1,34 +1,22 @@
{
+ "$id": "qmk.api.keyboard.v1",
"allOf": [
- { "$ref": "qmk.keyboard.v1" },
+ {"$ref": "qmk.keyboard.v1"},
{
- "$id": "qmk.api.keyboard.v1",
- "keymaps": {
- "type": "string"
- },
- "parse_errors": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "parse_warnings": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "processor_type": {
- "type": "string"
- },
- "protocol": {
- "type": "string"
- },
- "keyboard_folder": {
- "type": "string"
- },
- "platform": {
- "type": "string"
+ "properties": {
+ "keymaps": {
+ "type": "object",
+ "properties": {
+ "url": {"type": "string"}
+ }
+
+ },
+ "parse_errors": {"$ref": "qmk.definitions.v1#/string_array"},
+ "parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"},
+ "processor_type": {"type": "string"},
+ "protocol": {"type": "string"},
+ "keyboard_folder": {"type": "string"},
+ "platform": {"type": "string"}
}
}
]
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema
new file mode 100644
index 0000000000..822f237073
--- /dev/null
+++ b/data/schemas/definitions.jsonschema
@@ -0,0 +1,107 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "qmk.definitions.v1",
+ "title": "Common definitions used across QMK's jsonschemas.",
+ "type": "object",
+ "boolean_array": {
+ "type": "object",
+ "additionalProperties": {"type": "boolean"}
+ },
+ "filename": {
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^[0-9a-z_]*$"
+ },
+ "hex_number_2d": {
+ "type": "string",
+ "pattern": "^0x[0-9A-F]{2}$"
+ },
+ "hex_number_4d": {
+ "type": "string",
+ "pattern": "^0x[0-9A-F]{4}$"
+ },
+ "text_identifier": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 250
+ },
+ "layout_macro": {
+ "oneOf": [
+ {
+ "type": "string",
+ "enum": ["LAYOUT", "LAYOUT_planck_1x2uC"]
+ },
+ {
+ "type": "string",
+ "pattern": "^LAYOUT_[0-9a-z_]*$"
+ }
+ ]
+ },
+ "key_unit": {
+ "type": "number",
+ "min": 0.25
+ },
+ "mcu_pin_array": {
+ "type": "array",
+ "items": {"$ref": "#/mcu_pin"}
+ },
+ "mcu_pin": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[A-K]\\d{1,2}$"
+ },
+ {
+ "type": "string",
+ "pattern": "^LINE_PIN\\d{1,2}$"
+ },
+ {
+ "type": "number",
+ "multipleOf": 1
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "signed_decimal": {
+ "type": "number"
+ },
+ "signed_int": {
+ "type": "number",
+ "multipleOf": 1
+ }
+ "signed_int_8": {
+ "type": "number",
+ "min": -127,
+ "max": 127,
+ "multipleOf": 1
+ }
+ "string_array": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "string_object": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "unsigned_decimal": {
+ "type": "number",
+ "min": 0
+ },
+ "unsigned_int": {
+ "type": "number",
+ "min": 0,
+ "multipleOf": 1
+ }
+ "unsigned_int_8": {
+ "type": "number",
+ "min": 0,
+ "max": 255,
+ "multipleOf": 1
+ }
+}
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 177bb0a961..d6d33ce4ec 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -1,24 +1,12 @@
{
- "$schema": "http://json-schema.org/schema#",
+ "$schema": "http://json-schema.org/draft-07/schema#",
"$id": "qmk.keyboard.v1",
"title": "Keyboard Information",
"type": "object",
"properties": {
- "keyboard_name": {
- "type": "string",
- "minLength": 2,
- "maxLength": 250
- },
- "maintainer": {
- "type": "string",
- "minLength": 2,
- "maxLength": 250
- },
- "manufacturer": {
- "type": "string",
- "minLength": 2,
- "maxLength": 250
- },
+ "keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
+ "maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
+ "manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"},
"url": {
"type": "string",
"format": "uri"
@@ -40,62 +28,25 @@
"type": "string",
"enum": ["COL2ROW", "ROW2COL"]
},
- "debounce": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- },
- "height": {
- "type": "number",
- "min": 0.25
- },
- "width": {
- "type": "number",
- "min": 0.25
- },
+ "debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "height": {"$ref": "qmk.definitions.v1#/key_unit"},
+ "width": {"$ref": "qmk.definitions.v1#/key_unit"},
"community_layouts": {
"type": "array",
- "items": {
- "type": "string",
- "minLength": 2,
- "pattern": "^[0-9a-z_]*$"
- }
- },
- "features": {
- "type": "object",
- "additionalProperties": {"type": "boolean"}
+ "items": {"$ref": "qmk.definitions.v1#/filename"}
},
+ "features": {"$ref": "qmk.definitions.v1#/boolean_array"},
"indicators": {
"type": "object",
"properties": {
- "caps_lock": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- "num_lock": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- "scroll_lock": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- }
+ "caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
},
"layout_aliases": {
"type": "object",
- "additionalProperties": {
- "oneOf": [
- {
- "type": "string",
- "enum": ["LAYOUT", "LAYOUT_planck_1x2uC"]
- },
- {
- "type": "string",
- "pattern": "^LAYOUT_[0-9a-z_]*$"
- }
- ]
- }
+ "additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"}
},
"layouts": {
"type": "object",
@@ -109,11 +60,7 @@
"c_macro": {
"type": "boolean"
},
- "key_count": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- },
+ "key_count": {"$ref": "qmk.definitions.v1#/key_unit"},
"layout": {
"type": "array",
"items": {
@@ -131,34 +78,14 @@
"multipleOf": 1
}
},
- "h": {
- "type": "number",
- "min": 0.25
- },
- "r": {
- "type": "number",
- "min": 0
- },
- "rx": {
- "type": "number",
- "min": 0
- },
- "ry": {
- "type": "number",
- "min": 0
- },
- "w": {
- "type": "number",
- "min": 0.25
- },
- "x": {
- "type": "number",
- "min": 0
- },
- "y": {
- "type": "number",
- "min": 0
- }
+ "key_count": {"$ref": "qmk.definitions.v1#/key_unit"},
+ "r": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
+ "rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
+ "ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
+ "h": {"$ref": "qmk.definitions.v1#/key_unit"},
+ "w": {"$ref": "qmk.definitions.v1#/key_unit"},
+ "x": {"$ref": "qmk.definitions.v1#/key_unit"},
+ "y": {"$ref": "qmk.definitions.v1#/key_unit"}
}
}
}
@@ -171,73 +98,10 @@
"properties": {
"direct": {
"type": "array",
- "items": {
- "type": "array",
- "items": {
- "oneOf": [
- {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- {
- "type": "string",
- "pattern": "^LINE_PIN\\d{1,2}$"
- },
- {
- "type": "number",
- "multipleOf": 1
- },
- {
- "type": "null"
- }
- ]
- }
- }
+ "items": {$ref": "qmk.definitions.v1#/mcu_pin_array"}
},
- "cols": {
- "type": "array",
- "items": {
- "oneOf": [
- {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- {
- "type": "string",
- "pattern": "^LINE_PIN\\d{1,2}$"
- },
- {
- "type": "number",
- "multipleOf": 1
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "rows": {
- "type": "array",
- "items": {
- "oneOf": [
- {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- {
- "type": "string",
- "pattern": "^LINE_PIN\\d{1,2}$"
- },
- {
- "type": "number",
- "multipleOf": 1
- },
- {
- "type": "null"
- }
- ]
- }
- }
+ "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
+ "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
}
},
"rgblight": {
@@ -250,47 +114,19 @@
"type": "boolean"
}
},
- "brightness_steps": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- },
- "hue_steps": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- },
- "led_count": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- },
- "max_brightness": {
- "type": "number",
- "min": 0,
- "max": 255,
- "multipleOf": 1
- },
- "pin": {
- "type": "string",
- "pattern": "^([A-K]\\d{1,2}|LINE_PIN\\d{1,2})$"
- },
- "saturation_steps": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- },
+ "brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"sleep": {"type": "boolean"},
"split": {"type": "boolean"},
"split_count": {
"type": "array",
"minLength": 2,
"maxLength": 2,
- "items": {
- "type": "number",
- "min": 0,
- "multipleOf": 1
- }
+ "items": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
}
},
@@ -298,40 +134,19 @@
"type": "object",
"additionalProperties": false,
"properties": {
- "device_ver": {
- "type": "string",
- "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]"
- },
- "pid": {
- "type": "string",
- "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]"
- },
- "vid": {
- "type": "string",
- "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]"
- }
+ "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
+ "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
+ "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}
}
},
"qmk_lufa_bootloader": {
"type": "object",
"additionalProperties": false,
"properties": {
- "esc_output": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- "esc_input": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- "led": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- },
- "speaker": {
- "type": "string",
- "pattern": "^[A-K]\\d{1,2}$"
- }
+ "esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "led": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
}
}