1
0
Files
balatro-mod-index/schema/meta.schema.json
2025-06-22 19:21:35 -03:00

155 lines
4.4 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Balatro Mod Metadata",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"requires-steamodded": {
"type": "boolean"
},
"requires-talisman": {
"type": "boolean"
},
"categories": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Content",
"Joker",
"Quality of Life",
"Technical",
"Miscellaneous",
"Resource Packs",
"API"
]
},
"minItems": 1,
"uniqueItems": true
},
"author": {
"type": "string"
},
"repo": {
"type": "string",
"format": "uri"
},
"downloadURL": {
"type": "string",
"format": "uri"
},
"folderName": {
"type": "string",
"pattern": "^[^<>:\"/\\|?*]+$"
},
"version": {
"type": "string"
},
"automatic-version-check": {
"type": "boolean"
},
"fixed-release-tag-updates": {
"type": "boolean"
}
},
"required": [
"title",
"requires-steamodded",
"requires-talisman",
"categories",
"author",
"repo",
"downloadURL"
],
"allOf": [
{
"$comment": "This rule prevents accidental freezing of updates",
"not": {
"allOf": [
{
"$comment": "'automatic-version-check' is true",
"properties": {
"automatic-version-check": {
"const": true
}
},
"required": [
"automatic-version-check"
]
},
{
"$comment": "'downloadURL' points to a specific release page or asset",
"properties": {
"downloadURL": {
"pattern": "^https?://github\\.com/[^/]+/[^/]+/releases/(tag/[^/]+|download/[^/]+/.+)$"
}
},
"required": [
"downloadURL"
]
},
{
"$comment": "'fixed-release-tag-updates' is NOT true (i.e., it's false, or it's completely missing)",
"not": {
"properties": {
"fixed-release-tag-updates": {
"const": true
}
},
"required": [
"fixed-release-tag-updates"
]
}
}
]
},
"errorMessage": "When 'downloadURL' points to a specific GitHub release tag/asset AND 'automatic-version-check' is true, 'fixed-release-tag-updates' must also be true. This prevents accidental update freezing."
},
{
"$comment": "This rule checks the value of 'fixed-release-tag-updates' and guarantees consistency",
"if": {
"properties": {
"fixed-release-tag-updates": {
"const": true
}
},
"required": [
"fixed-release-tag-updates"
]
},
"then": {
"$comment": "Conditions when 'fixed-release-tag-updates' is true)",
"not": {
"required": [
"version"
],
"errorMessage": "When 'fixed-release-tag-updates' is true, the 'version' field must NOT be present as the version is extracted automatically."
},
"properties": {
"automatic-version-check": {
"const": true,
"errorMessage": "'automatic-version-check' must be true when 'fixed-release-tag-updates' is true."
},
"downloadURL": {
"pattern": "^https?://github\\.com/[^/]+/[^/]+/releases/(tag/[^/]+|download/[^/]+/.+)$",
"errorMessage": "When 'fixed-release-tag-updates' is true, 'downloadURL' must point to a specific GitHub release tag (e.g., '/releases/tag/v1.0.0') or a specific release asset (e.g., '/releases/download/v1.0.0/asset.zip'), NOT a branch head or latest release URL."
}
},
"required": [
"automatic-version-check"
],
"errorMessage": "When 'fixed-release-tag-updates' is true: 'version' must be absent, 'automatic-version-check' must be true, and 'downloadURL' must point to a specific release tag or asset."
},
"else": {
"$comment": "Conditions when 'fixed-release-tag-updates' is false or absent",
"required": [
"version"
],
"errorMessage": "When 'fixed-release-tag-updates' is false or absent, the 'version' field is required."
}
}
]
}