1{
2 "$schema": "https://json-schema.org/draft/2020-12/schema",
3 "$id": "https://wheelnext.dev/schema/variant-0.0.2.json",
4 "title": "Variant metadata, v0.0.2",
5 "description": "The format for variant metadata (variant.json) and index-level metadata ({name}-{version}-variants.json)",
6 "type": "object",
7 "properties": {
8 "$schema": {
9 "description": "JSON schema URL",
10 "type": "string"
11 },
12 "default-priorities": {
13 "description": "Default priorities for ordering variants",
14 "type": "object",
15 "properties": {
16 "namespace": {
17 "description": "Namespaces (in order of preference)",
18 "type": "array",
19 "items": {
20 "type": "string",
21 "pattern": "^[a-z0-9_]+$"
22 },
23 "minItems": 1,
24 "uniqueItems": true
25 },
26 "feature": {
27 "description": "Default feature priorities (by namespace)",
28 "type": "object",
29 "patternProperties": {
30 "^[a-z0-9_]+$": {
31 "description": "The most preferred features",
32 "type": "array",
33 "items": {
34 "type": "string",
35 "pattern": "^[a-z0-9_]+$"
36 },
37 "minItems": 0,
38 "uniqueItems": true
39 }
40 },
41 "additionalProperties": false,
42 "uniqueItems": true
43 },
44 "property": {
45 "description": "Default property priorities (by namespace)",
46 "type": "object",
47 "patternProperties": {
48 "^[a-z0-9_]+$": {
49 "description": "Default property priorities (by feature name)",
50 "type": "object",
51 "patternProperties": {
52 "^[a-z0-9_]+$": {
53 "description": "The most preferred feature values",
54 "type": "array",
55 "items": {
56 "type": "string",
57 "pattern": "^[a-z0-9_.]+$"
58 },
59 "minItems": 0,
60 "uniqueItems": true
61 }
62 },
63 "additionalProperties": false,
64 "uniqueItems": true
65 }
66 },
67 "additionalProperties": false,
68 "uniqueItems": true
69 }
70 },
71 "additionalProperties": false,
72 "uniqueItems": true,
73 "required": [
74 "namespace"
75 ]
76 },
77 "providers": {
78 "description": "Mapping of namespaces to provider information",
79 "type": "object",
80 "patternProperties": {
81 "^[A-Za-z0-9_]+$": {
82 "type": "object",
83 "description": "Provider information",
84 "properties": {
85 "plugin-api": {
86 "description": "Object reference to plugin class",
87 "type": "string",
88 "pattern": "^([a-zA-Z0-9._]+ *: *[a-zA-Z0-9._]+)|([a-zA-Z0-9._]+)$"
89 },
90 "optional": {
91 "description": "Whether the provider is optional (disabled by default)",
92 "type": "boolean"
93 },
94 "requires": {
95 "description": "Dependency specifiers for how to install the plugin",
96 "type": "array",
97 "items": {
98 "type": "string",
99 "minLength": 1
100 },
101 "minItems": 0,
102 "uniqueItems": true
103 },
104 "static-properties": {
105 "description": "Static properties (by feature name)",
106 "type": "object",
107 "patternProperties": {
108 "^[a-z0-9_]+$": {
109 "description": "Ordered value list",
110 "type": "array",
111 "items": {
112 "type": "string",
113 "pattern": "^[a-z0-9_.]+$"
114 },
115 "minItems": 0,
116 "uniqueItems": true
117 },
118 "additionalProperties": false,
119 "uniqueItems": true
120 }
121 }
122 },
123 "additionalProperties": false,
124 "uniqueItems": true,
125 "anyOf": [
126 {"required": ["requires"]},
127 {"required": ["static-properties"]}
128 ]
129 }
130 },
131 "additionalProperties": false,
132 "uniqueItems": true
133 },
134 "variants": {
135 "description": "Mapping of variant labels to properties",
136 "type": "object",
137 "patternProperties": {
138 "^[a-z0-9_.]{1,16}$": {
139 "type": "object",
140 "description": "Mapping of namespaces in a variant",
141 "patternProperties": {
142 "^[a-z0-9_.]+$": {
143 "description": "Mapping of feature names in a namespace",
144 "patternProperties": {
145 "^[a-z0-9_.]+$": {
146 "description": "List of values for this variant feature",
147 "type": "array",
148 "items": {
149 "type": "string",
150 "pattern": "^[a-z0-9_.]+$"
151 },
152 "minItems": 1,
153 "uniqueItems": true
154 }
155 },
156 "uniqueItems": true,
157 "additionalProperties": false
158 }
159 },
160 "uniqueItems": true,
161 "additionalProperties": false
162 }
163 },
164 "additionalProperties": false,
165 "uniqueItems": true
166 }
167 },
168 "required": [
169 "$schema",
170 "default-priorities",
171 "providers",
172 "variants"
173 ],
174 "additionalProperties": false,
175 "uniqueItems": true
176}