aboutsummaryrefslogtreecommitdiff
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://hydrilla.koszko.org/schemas/common_definitions-1.0.1.schema.json",
    "title": "Common definitions",
    "description": "Definitions used by other Hydrilla schemas",
    "definitions": {
	"version": {
	    "description": "Version expressed as an array of integers",
	    "type": "array",
	    "minItems": 1,
	    "items": {
		"type": "integer",
		"minimum": 0
	    },
	    "contains": {
		"type": "integer",
		"minimum": 1
	    },
	    "minItems": 1
	},
	"source_name": {
	    "description": "Unique identifier of this source package",
	    "type": "string",
	    "pattern": "^[-0-9a-z.]+$"
	},
	"comment": {
	    "description": "An optional comment",
	    "type": "string"
	},
        "file_ref_list": {
	    "description": "List of simple file references",
	    "type": "array",
	    "items": {
		"type": "object",
		"required": ["file"],
		"properties": {
		    "file": {
			"description": "Filename relative to source package main directory; separator is '/'",
			"type": "string",
			"pattern": "^[^/]"
		    }
		}
	    }
        },
	"sha256": {
	    "description": "An SHA256 sum, in hexadecimal",
	    "type": "string",
	    "pattern": "^[0-9a-f]{64}$"
	},
        "file_ref_list_sha256": {
	    "description": "List of file references with files' SHA256 sums included",
	    "allOf": [{
		"$ref": "#/definitions/file_ref_list"
	    }, {
		"type": "array",
		"items": {
		    "type": "object",
		    "required": ["sha256"],
		    "properties": {
			"sha256": {
			    "$ref": "#/definitions/sha256"
			}
		    }
		}
	    }]
        },
	"item_identifier": {
	    "description": "Identifier of an item (shared with other versions of the item, otherwise unique)",
	    "type": "string",
	    "pattern": "^[-0-9a-z]+$"
	},
	"item_dep_specifier": {
	    "description": "Simple reference to an item as a dependency",
	    "type": "object",
	    "required": ["identifier"],
	    "properties": {
		"identifier": {
		    "$ref": "#/definitions/item_identifier"
		}
	    }
	},
	"item_ref": {
	    "description": "An object containing a subset of fields from full item definition",
	    "type": "object",
	    "required": ["identifier", "long_name", "version"],
	    "properties": {
		"identifier": {
		    "$ref": "#/definitions/item_identifier"
		},
		"long_name": {
		    "description": "User-friendly alternative to the identifier",
		    "type": "string"
		},
		"version": {
		    "$ref": "#/definitions/version"
		}
	    }
	},
	"typed_item_ref": {
	    "description": "An object containing a subset of fields from full item definition, including type",
	    "allOf": [{
		"$ref": "#/definitions/item_ref"
	    }, {
		"type": "object",
		"required": ["type"],
		"properties": {
		    "type": {
			"description": "What kind of item is it (resource or mapping)",
			"enum": ["resource", "mapping"]
		    }
		}
	    }]
	},
	"item_definition_base": {
	    "description": "Definition of a resource/mapping (fields common to source definitions and built definitions)",
	    "allOf": [{
		"$ref": "#/definitions/typed_item_ref"
	    }, {
		"type": "object",
		"required": ["description"],
		"properties": {
		    "uuid": {
			"description": "UUIDv4 of this item (shared with other versions of this item, otherwise unique)",
			"type": "string",
			"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
		    },
		    "description": {
			"description": "Item's description",
			"type": "string"
		    },
		    "comment": {
			"$ref": "#/definitions/comment"
		    }
		}
	    }]
	},
	"resource_definition_base": {
	    "description": "Definition of a resource (fields common to source definitions and built definitions)",
	    "allOf": [{
		"$ref": "#/definitions/item_definition_base"
	    }, {
		"type": "object",
		"required": ["type", "revision"],
		"properties": {
		    "type": {
			"description": "Identify this item as a resource",
			"const": "resource"
		    },
		    "revision": {
			"description": "Which revision of a packaging of given version of an upstream resource is this",
			"type": "integer",
			"minimum": 1
		    },
		    "scripts": {
			"description": "What scripts are included in the resource",
			"$ref": "#/definitions/file_ref_list",
			"default": []
		    },
		    "dependencies": {
			"description": "Which other resources this resource depends on",
			"type": "array",
			"items": {
			    "$ref": "#/definitions/item_dep_specifier"
			},
			"default": []
		    }
		}
	    }]
	},
	"mapping_definition_base": {
	    "description": "Definition of a mapping (fields common to source definitions and built definitions)",
	    "allOf": [{
		"$ref": "#/definitions/item_definition_base"
	    }, {
		"type": "object",
		"required": ["type"],
		"properties": {
		    "type": {
			"description": "Identify this item as a mapping",
			"const": "mapping"
		    },
		    "payloads": {
			"description": "Which payloads are to be applied to which URLs",
			"additionalProperties": {
			    "$ref": "#/definitions/item_dep_specifier"
			},
			"default": {},
			"examples": [{
			    "https://hydrillabugs.koszko.org/***": {
				"identifier": "helloapple"
			    },
			    "https://*.koszko.org/***": {
				"identifier": "hello-potato"
			    }
			}]
		    }
		}
	    }]
	},
	"generated_by": {
	    "description": "Describe what software generated this instance",
	    "type": "object",
	    "required": ["name"],
	    "properties": {
		"name": {
		    "type": "string",
		    "description": "Instance generator software name, without version"
		},
		"version": {
		    "type": "string",
		    "description": "Instance generator software version, in arbitrary format"
		}
	    }
	},
	"item_definition": {
	    "description": "Definition of a resource/mapping (fields specific to built definitions)",
	    "type": "object",
	    "required": ["source_name", "source_copyright"],
	    "properties": {
		"source_name": {
		    "$ref": "#/definitions/source_name"
		},
		"source_copyright": {
		    "description": "Which files indicate license terms of the source package and should be installed",
		    "$ref": "#/definitions/file_ref_list_sha256"
		},
		"generated_by": {
		    "$ref": "#/definitions/generated_by"
		}
	    }
	}
    }
}