added mermaid and a lot of cmap changes
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://racket-wiki.local/schemas/racket-wiki-cmap-bundle-v1.schema.json",
|
||||
"title": "Racket Wiki CMap bundle version 1",
|
||||
"type": "object",
|
||||
"required": ["format", "formatVersion", "rootCmapSlug", "cmaps", "concepts", "pages"],
|
||||
"properties": {
|
||||
"$schema": { "type": "string" },
|
||||
"format": { "const": "racket-wiki-cmap-bundle" },
|
||||
"formatVersion": { "const": 1 },
|
||||
"exportedAt": { "type": "string", "format": "date-time" },
|
||||
"generator": { "type": "string" },
|
||||
"rootCmapSlug": { "$ref": "#/$defs/slug" },
|
||||
"cmaps": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/$defs/cmap" }
|
||||
},
|
||||
"concepts": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/$defs/concept" }
|
||||
},
|
||||
"pages": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/$defs/page" }
|
||||
},
|
||||
"missing": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"cmaps": { "type": "array", "items": { "$ref": "#/$defs/slug" } },
|
||||
"pages": { "type": "array", "items": { "type": "string", "minLength": 1 } }
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"$defs": {
|
||||
"slug": {
|
||||
"type": "string",
|
||||
"pattern": "^[\\p{L}\\p{N}][\\p{L}\\p{N}._-]{0,119}$"
|
||||
},
|
||||
"conceptId": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{ "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" },
|
||||
{ "pattern": "^new:[A-Za-z0-9][A-Za-z0-9._-]{0,119}$" }
|
||||
]
|
||||
},
|
||||
"concept": {
|
||||
"type": "object",
|
||||
"required": ["id", "label"],
|
||||
"properties": {
|
||||
"id": { "$ref": "#/$defs/conceptId" },
|
||||
"label": { "type": "string", "minLength": 1 },
|
||||
"synopsis": { "type": "string" },
|
||||
"aspects": { "type": "array", "items": { "type": "string" } },
|
||||
"tags": { "type": "array", "items": {} },
|
||||
"descriptionPageSlug": { "type": ["string", "null"] },
|
||||
"pageSlug": { "type": ["string", "null"] },
|
||||
"cmapSlug": { "type": ["string", "null"] },
|
||||
"externalUrl": { "type": ["string", "null"], "pattern": "^[hH][tT][tT][pP][sS]?://" },
|
||||
"imageSource": { "type": ["string", "null"] }
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"conceptReference": {
|
||||
"type": "object",
|
||||
"required": ["id"],
|
||||
"properties": { "id": { "$ref": "#/$defs/conceptId" } },
|
||||
"additionalProperties": false
|
||||
},
|
||||
"item": {
|
||||
"type": "object",
|
||||
"required": ["id", "x", "y"],
|
||||
"properties": {
|
||||
"id": { "type": "integer" },
|
||||
"conceptId": { "$ref": "#/$defs/conceptId" },
|
||||
"kind": { "enum": ["concept", "page", "submap", "phrase"] },
|
||||
"label": { "type": "string" },
|
||||
"x": { "type": "number" },
|
||||
"y": { "type": "number" },
|
||||
"width": { "type": "number" },
|
||||
"height": { "type": "number" },
|
||||
"parentSubmapId": { "type": ["integer", "null"] },
|
||||
"hidden": { "type": "boolean" },
|
||||
"backgroundColor": { "type": "string" },
|
||||
"borderColor": { "type": "string" },
|
||||
"textColor": { "type": "string" },
|
||||
"fontFamily": { "type": "string" },
|
||||
"fontSize": { "type": "number" },
|
||||
"fontWeight": { "type": "string" },
|
||||
"fontStyle": { "type": "string" },
|
||||
"synopsisFontSize": { "type": "number" },
|
||||
"synopsisFontWeight": { "type": "string" },
|
||||
"synopsisFontStyle": { "type": "string" },
|
||||
"submapBackgroundColor": { "type": "string" },
|
||||
"submapBorderColor": { "type": "string" }
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": { "required": ["kind"], "properties": { "kind": { "const": "phrase" } } },
|
||||
"then": { "required": ["label"] },
|
||||
"else": { "required": ["conceptId"] }
|
||||
}
|
||||
],
|
||||
"additionalProperties": true
|
||||
},
|
||||
"connector": {
|
||||
"type": "object",
|
||||
"required": ["sourceId", "targetId"],
|
||||
"properties": {
|
||||
"id": { "type": "integer" },
|
||||
"sourceId": { "type": "integer" },
|
||||
"targetId": { "type": "integer" },
|
||||
"hasArrow": { "type": "boolean" }
|
||||
},
|
||||
"additionalProperties": true
|
||||
},
|
||||
"document": {
|
||||
"type": "object",
|
||||
"required": ["concepts", "items", "connectors"],
|
||||
"properties": {
|
||||
"schemaVersion": { "type": "integer" },
|
||||
"metadata": { "type": "object", "additionalProperties": true },
|
||||
"derivedView": {
|
||||
"type": "object",
|
||||
"required": ["sourceCmapSlug", "rootItemId"],
|
||||
"properties": {
|
||||
"sourceCmapSlug": { "$ref": "#/$defs/slug" },
|
||||
"rootItemId": { "type": "integer" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"concepts": { "type": "array", "items": { "$ref": "#/$defs/conceptReference" } },
|
||||
"items": { "type": "array", "items": { "$ref": "#/$defs/item" } },
|
||||
"connectors": { "type": "array", "items": { "$ref": "#/$defs/connector" } },
|
||||
"conceptMaps": { "type": "array" },
|
||||
"viewport": { "type": "object" }
|
||||
},
|
||||
"additionalProperties": true
|
||||
},
|
||||
"cmap": {
|
||||
"type": "object",
|
||||
"required": ["slug", "title", "document"],
|
||||
"properties": {
|
||||
"slug": { "$ref": "#/$defs/slug" },
|
||||
"title": { "type": "string", "minLength": 1 },
|
||||
"document": { "$ref": "#/$defs/document" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"page": {
|
||||
"type": "object",
|
||||
"required": ["reference", "title", "markdown", "tags"],
|
||||
"properties": {
|
||||
"reference": { "type": "string", "minLength": 1 },
|
||||
"title": { "type": "string", "minLength": 1 },
|
||||
"markdown": { "type": "string" },
|
||||
"tags": { "type": "array", "items": { "type": "string" } },
|
||||
"attachments": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/$defs/attachment" }
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"attachment": {
|
||||
"type": "object",
|
||||
"required": ["url", "name", "mimeType", "contentBase64"],
|
||||
"properties": {
|
||||
"url": { "type": "string", "pattern": "^/uploads/" },
|
||||
"name": { "type": "string", "minLength": 1 },
|
||||
"mimeType": { "type": "string", "minLength": 1 },
|
||||
"contentBase64": {
|
||||
"type": "string",
|
||||
"pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user