@jxsuite/schema 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/class-schema.json +290 -0
- package/package.json +25 -0
- package/project-schema.json +264 -0
- package/schema.json +18891 -0
- package/src/schema.js +1514 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jxsuite.com/schema/class/v1",
|
|
4
|
+
"title": "Jx Class Definition",
|
|
5
|
+
"description": "Schema for Jx .class.json files. A class definition describes a schema-defined class with fields, constructor, methods, and type parameters. Optionally points to a JS module via $implementation for hybrid execution.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["$prototype", "title"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string"
|
|
11
|
+
},
|
|
12
|
+
"$id": {
|
|
13
|
+
"type": "string"
|
|
14
|
+
},
|
|
15
|
+
"$prototype": {
|
|
16
|
+
"description": "Must be \"Class\" for class definition files.",
|
|
17
|
+
"type": "string",
|
|
18
|
+
"const": "Class"
|
|
19
|
+
},
|
|
20
|
+
"title": {
|
|
21
|
+
"description": "PascalCase class name, used as the export name.",
|
|
22
|
+
"type": "string",
|
|
23
|
+
"examples": ["MarkdownFile", "DataSource", "Calculator"]
|
|
24
|
+
},
|
|
25
|
+
"description": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"extends": {
|
|
29
|
+
"description": "Base class — string name or $ref to another .class.json.",
|
|
30
|
+
"oneOf": [
|
|
31
|
+
{
|
|
32
|
+
"type": "string"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "object",
|
|
36
|
+
"required": ["$ref"],
|
|
37
|
+
"properties": {
|
|
38
|
+
"$ref": {
|
|
39
|
+
"type": "string"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"additionalProperties": false
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"$implementation": {
|
|
47
|
+
"description": "Relative path to a JS module containing the actual class implementation.",
|
|
48
|
+
"type": "string",
|
|
49
|
+
"examples": ["./md.js", "./lib/calculator.js"]
|
|
50
|
+
},
|
|
51
|
+
"$defs": {
|
|
52
|
+
"description": "Class members: parameters, returnTypes, fields, constructor, methods.",
|
|
53
|
+
"type": "object",
|
|
54
|
+
"properties": {
|
|
55
|
+
"parameters": {
|
|
56
|
+
"description": "Reusable typed parameter schemas, keyed by name.",
|
|
57
|
+
"type": "object",
|
|
58
|
+
"additionalProperties": {
|
|
59
|
+
"$ref": "#/$defs/ClassParameterDef"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"returnTypes": {
|
|
63
|
+
"description": "Output type schemas, keyed by name.",
|
|
64
|
+
"type": "object",
|
|
65
|
+
"additionalProperties": {
|
|
66
|
+
"type": "object"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"fields": {
|
|
70
|
+
"description": "Class fields with role, access, scope, and type information.",
|
|
71
|
+
"type": "object",
|
|
72
|
+
"additionalProperties": {
|
|
73
|
+
"$ref": "#/$defs/ClassFieldDef"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"constructor": {
|
|
77
|
+
"$ref": "#/$defs/ClassConstructorDef"
|
|
78
|
+
},
|
|
79
|
+
"methods": {
|
|
80
|
+
"description": "Class methods and accessors.",
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": {
|
|
83
|
+
"$ref": "#/$defs/ClassMethodDef"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"additionalProperties": false,
|
|
90
|
+
"$defs": {
|
|
91
|
+
"ClassParameterDef": {
|
|
92
|
+
"description": "A typed parameter definition for a class.",
|
|
93
|
+
"type": "object",
|
|
94
|
+
"required": ["identifier"],
|
|
95
|
+
"properties": {
|
|
96
|
+
"identifier": {
|
|
97
|
+
"type": "string"
|
|
98
|
+
},
|
|
99
|
+
"type": {},
|
|
100
|
+
"format": {
|
|
101
|
+
"description": "When \"json-schema\", this parameter's value is itself a JSON Schema.",
|
|
102
|
+
"type": "string"
|
|
103
|
+
},
|
|
104
|
+
"description": {
|
|
105
|
+
"type": "string"
|
|
106
|
+
},
|
|
107
|
+
"default": {},
|
|
108
|
+
"examples": {
|
|
109
|
+
"type": "array"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"ClassFieldDef": {
|
|
114
|
+
"description": "A class field definition with access control and scope.",
|
|
115
|
+
"type": "object",
|
|
116
|
+
"properties": {
|
|
117
|
+
"role": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"const": "field"
|
|
120
|
+
},
|
|
121
|
+
"access": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"enum": ["public", "private", "protected"]
|
|
124
|
+
},
|
|
125
|
+
"scope": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"enum": ["instance", "static"]
|
|
128
|
+
},
|
|
129
|
+
"identifier": {
|
|
130
|
+
"type": "string"
|
|
131
|
+
},
|
|
132
|
+
"type": {},
|
|
133
|
+
"$prototype": {
|
|
134
|
+
"description": "Data source prototype for this field (e.g., \"Request\").",
|
|
135
|
+
"type": "string"
|
|
136
|
+
},
|
|
137
|
+
"initializer": {},
|
|
138
|
+
"default": {},
|
|
139
|
+
"description": {
|
|
140
|
+
"type": "string"
|
|
141
|
+
},
|
|
142
|
+
"examples": {
|
|
143
|
+
"type": "array"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"ClassConstructorDef": {
|
|
148
|
+
"description": "Class constructor definition.",
|
|
149
|
+
"type": "object",
|
|
150
|
+
"properties": {
|
|
151
|
+
"role": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"const": "constructor"
|
|
154
|
+
},
|
|
155
|
+
"$prototype": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"const": "Function"
|
|
158
|
+
},
|
|
159
|
+
"parameters": {
|
|
160
|
+
"type": "array",
|
|
161
|
+
"items": {
|
|
162
|
+
"oneOf": [
|
|
163
|
+
{
|
|
164
|
+
"type": "object",
|
|
165
|
+
"required": ["$ref"],
|
|
166
|
+
"properties": {
|
|
167
|
+
"$ref": {
|
|
168
|
+
"type": "string"
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"additionalProperties": false
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"$ref": "#/$defs/ClassParameterDef"
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
"superCall": {
|
|
180
|
+
"type": "object",
|
|
181
|
+
"properties": {
|
|
182
|
+
"arguments": {
|
|
183
|
+
"type": "array",
|
|
184
|
+
"items": {
|
|
185
|
+
"type": "string"
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"body": {
|
|
191
|
+
"oneOf": [
|
|
192
|
+
{
|
|
193
|
+
"type": "string"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"type": "array",
|
|
197
|
+
"items": {
|
|
198
|
+
"type": "string"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
"description": {
|
|
204
|
+
"type": "string"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"ClassMethodDef": {
|
|
209
|
+
"description": "A class method or accessor definition.",
|
|
210
|
+
"type": "object",
|
|
211
|
+
"properties": {
|
|
212
|
+
"role": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"enum": ["method", "accessor"]
|
|
215
|
+
},
|
|
216
|
+
"$prototype": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"const": "Function"
|
|
219
|
+
},
|
|
220
|
+
"access": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"enum": ["public", "private", "protected"]
|
|
223
|
+
},
|
|
224
|
+
"scope": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"enum": ["instance", "static"]
|
|
227
|
+
},
|
|
228
|
+
"identifier": {
|
|
229
|
+
"type": "string"
|
|
230
|
+
},
|
|
231
|
+
"parameters": {
|
|
232
|
+
"type": "array",
|
|
233
|
+
"items": {
|
|
234
|
+
"oneOf": [
|
|
235
|
+
{
|
|
236
|
+
"type": "object",
|
|
237
|
+
"required": ["$ref"],
|
|
238
|
+
"properties": {
|
|
239
|
+
"$ref": {
|
|
240
|
+
"type": "string"
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"additionalProperties": false
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"$ref": "#/$defs/ClassParameterDef"
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
"returnType": {},
|
|
252
|
+
"body": {
|
|
253
|
+
"oneOf": [
|
|
254
|
+
{
|
|
255
|
+
"type": "string"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"type": "array",
|
|
259
|
+
"items": {
|
|
260
|
+
"type": "string"
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
"getter": {
|
|
266
|
+
"type": "object",
|
|
267
|
+
"properties": {
|
|
268
|
+
"body": {
|
|
269
|
+
"type": "string"
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
"setter": {
|
|
274
|
+
"type": "object",
|
|
275
|
+
"properties": {
|
|
276
|
+
"parameters": {
|
|
277
|
+
"type": "array"
|
|
278
|
+
},
|
|
279
|
+
"body": {
|
|
280
|
+
"type": "string"
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
"description": {
|
|
285
|
+
"type": "string"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jxsuite/schema",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "JSON Schema 2020-12 meta-schema generator for Jx documents",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"files": [
|
|
7
|
+
"src/",
|
|
8
|
+
"*.json",
|
|
9
|
+
"!package.json"
|
|
10
|
+
],
|
|
11
|
+
"type": "module",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": "./src/schema.js"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"schema": "bun run src/schema.js",
|
|
17
|
+
"test": "bun test",
|
|
18
|
+
"upgrade": "bunx npm-check-updates -u && bun install"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@webref/css": "^8.5.3",
|
|
22
|
+
"@webref/elements": "^2.7.1",
|
|
23
|
+
"@webref/idl": "^3.75.3"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jxsuite.com/schema/project/v1",
|
|
4
|
+
"title": "Jx Project",
|
|
5
|
+
"description": "Schema for Jx project.json files. A project.json file is the root anchor file for a Jx project, declaring site metadata, default settings, global styles, content collections, and build configuration.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"description": "Human-readable project name.",
|
|
10
|
+
"type": "string",
|
|
11
|
+
"default": "Jx Site",
|
|
12
|
+
"examples": ["My Portfolio", "Jx Example Site"]
|
|
13
|
+
},
|
|
14
|
+
"url": {
|
|
15
|
+
"description": "Production URL of the deployed site.",
|
|
16
|
+
"type": "string",
|
|
17
|
+
"examples": ["https://example.com", "https://jxsuite.com"]
|
|
18
|
+
},
|
|
19
|
+
"defaults": {
|
|
20
|
+
"description": "Default settings applied to all pages unless overridden.",
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"layout": {
|
|
24
|
+
"description": "Default layout file path applied to all pages. Set to null to render pages without a layout.",
|
|
25
|
+
"oneOf": [
|
|
26
|
+
{
|
|
27
|
+
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "null"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"default": null,
|
|
34
|
+
"examples": ["./layouts/base.json"]
|
|
35
|
+
},
|
|
36
|
+
"lang": {
|
|
37
|
+
"description": "Default lang attribute for the <html> element.",
|
|
38
|
+
"type": "string",
|
|
39
|
+
"default": "en"
|
|
40
|
+
},
|
|
41
|
+
"charset": {
|
|
42
|
+
"description": "Default charset for the page.",
|
|
43
|
+
"type": "string",
|
|
44
|
+
"default": "utf-8"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"$head": {
|
|
49
|
+
"description": "Global <head> entries applied to all pages. Array of element definitions for meta tags, link tags, script tags, etc.",
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"properties": {
|
|
54
|
+
"tagName": {
|
|
55
|
+
"type": "string"
|
|
56
|
+
},
|
|
57
|
+
"attributes": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"additionalProperties": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"examples": [
|
|
66
|
+
[
|
|
67
|
+
{
|
|
68
|
+
"tagName": "link",
|
|
69
|
+
"attributes": {
|
|
70
|
+
"rel": "icon",
|
|
71
|
+
"href": "/favicon.svg"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"tagName": "meta",
|
|
76
|
+
"attributes": {
|
|
77
|
+
"name": "generator",
|
|
78
|
+
"content": "Jx"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"$elements": {
|
|
85
|
+
"description": "Global custom element dependencies available to all pages. Items are $ref objects or npm package specifier strings.",
|
|
86
|
+
"type": "array",
|
|
87
|
+
"items": {
|
|
88
|
+
"oneOf": [
|
|
89
|
+
{
|
|
90
|
+
"type": "object",
|
|
91
|
+
"required": ["$ref"],
|
|
92
|
+
"properties": {
|
|
93
|
+
"$ref": {
|
|
94
|
+
"type": "string"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"additionalProperties": false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"type": "string"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"imports": {
|
|
106
|
+
"description": "Global import map: $prototype names to .class.json file paths. Makes external classes available by name in all pages.",
|
|
107
|
+
"type": "object",
|
|
108
|
+
"additionalProperties": {
|
|
109
|
+
"type": "string"
|
|
110
|
+
},
|
|
111
|
+
"examples": [
|
|
112
|
+
{
|
|
113
|
+
"MarkdownFile": "@jxplatform/parser/MarkdownFile.class.json",
|
|
114
|
+
"MarkdownCollection": "@jxplatform/parser/MarkdownCollection.class.json"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"$media": {
|
|
119
|
+
"description": "Named media breakpoints following CSS @custom-media convention. Available in all component style objects.",
|
|
120
|
+
"type": "object",
|
|
121
|
+
"additionalProperties": {
|
|
122
|
+
"type": "string"
|
|
123
|
+
},
|
|
124
|
+
"examples": [
|
|
125
|
+
{
|
|
126
|
+
"--sm": "(min-width: 640px)",
|
|
127
|
+
"--md": "(min-width: 768px)",
|
|
128
|
+
"--lg": "(min-width: 1024px)"
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"style": {
|
|
133
|
+
"description": "Global CSS styles applied to the <body> element. Uses the same camelCase CSSOM convention as component styles.",
|
|
134
|
+
"type": "object",
|
|
135
|
+
"additionalProperties": {
|
|
136
|
+
"oneOf": [
|
|
137
|
+
{
|
|
138
|
+
"type": "string"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"type": "number"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "object"
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"state": {
|
|
150
|
+
"description": "Site-wide reactive state available to all pages.",
|
|
151
|
+
"type": "object"
|
|
152
|
+
},
|
|
153
|
+
"collections": {
|
|
154
|
+
"description": "Content collection definitions. Each key is a collection name; the value defines the source glob, frontmatter schema, and element dependencies.",
|
|
155
|
+
"type": "object",
|
|
156
|
+
"additionalProperties": {
|
|
157
|
+
"type": "object",
|
|
158
|
+
"properties": {
|
|
159
|
+
"source": {
|
|
160
|
+
"description": "Glob pattern for content files relative to the content directory.",
|
|
161
|
+
"type": "string",
|
|
162
|
+
"examples": ["./blog/**/*.md", "./docs/**/*.md"]
|
|
163
|
+
},
|
|
164
|
+
"schema": {
|
|
165
|
+
"description": "JSON Schema for validating frontmatter of collection entries.",
|
|
166
|
+
"type": "object"
|
|
167
|
+
},
|
|
168
|
+
"$elements": {
|
|
169
|
+
"description": "Custom elements available in markdown directives for this collection.",
|
|
170
|
+
"type": "array",
|
|
171
|
+
"items": {
|
|
172
|
+
"oneOf": [
|
|
173
|
+
{
|
|
174
|
+
"type": "object",
|
|
175
|
+
"required": ["$ref"],
|
|
176
|
+
"properties": {
|
|
177
|
+
"$ref": {
|
|
178
|
+
"type": "string"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"type": "string"
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"redirects": {
|
|
192
|
+
"description": "Static redirect rules. Maps source paths to destination paths.",
|
|
193
|
+
"type": "object",
|
|
194
|
+
"additionalProperties": {
|
|
195
|
+
"type": "string"
|
|
196
|
+
},
|
|
197
|
+
"examples": [
|
|
198
|
+
{
|
|
199
|
+
"/old-about": "/about"
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
"copy": {
|
|
204
|
+
"description": "Declarative file copy map. Keys are source paths (relative to project root), values are destination paths (relative to outDir).",
|
|
205
|
+
"type": "object",
|
|
206
|
+
"additionalProperties": {
|
|
207
|
+
"type": "string"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"build": {
|
|
211
|
+
"description": "Build configuration.",
|
|
212
|
+
"type": "object",
|
|
213
|
+
"properties": {
|
|
214
|
+
"outDir": {
|
|
215
|
+
"description": "Output directory for compiled site.",
|
|
216
|
+
"type": "string",
|
|
217
|
+
"default": "./dist"
|
|
218
|
+
},
|
|
219
|
+
"format": {
|
|
220
|
+
"description": "Output format.",
|
|
221
|
+
"type": "string",
|
|
222
|
+
"enum": ["directory", "single"],
|
|
223
|
+
"default": "directory"
|
|
224
|
+
},
|
|
225
|
+
"trailingSlash": {
|
|
226
|
+
"description": "Trailing slash behavior for generated URLs.",
|
|
227
|
+
"type": "string",
|
|
228
|
+
"enum": ["always", "never", "ignore"],
|
|
229
|
+
"default": "always"
|
|
230
|
+
},
|
|
231
|
+
"adapter": {
|
|
232
|
+
"description": "Platform adapter for deployment-specific output.",
|
|
233
|
+
"type": "string",
|
|
234
|
+
"enum": ["netlify", "vercel", "cloudflare"]
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"i18n": {
|
|
239
|
+
"description": "Internationalization configuration.",
|
|
240
|
+
"type": "object",
|
|
241
|
+
"properties": {
|
|
242
|
+
"defaultLocale": {
|
|
243
|
+
"description": "Default locale code.",
|
|
244
|
+
"type": "string",
|
|
245
|
+
"examples": ["en"]
|
|
246
|
+
},
|
|
247
|
+
"locales": {
|
|
248
|
+
"description": "Available locale codes.",
|
|
249
|
+
"type": "array",
|
|
250
|
+
"items": {
|
|
251
|
+
"type": "string"
|
|
252
|
+
},
|
|
253
|
+
"examples": [["en", "fr", "de"]]
|
|
254
|
+
},
|
|
255
|
+
"routing": {
|
|
256
|
+
"description": "Locale routing strategy.",
|
|
257
|
+
"type": "string",
|
|
258
|
+
"enum": ["prefix-except-default", "prefix-always"]
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
"additionalProperties": false
|
|
264
|
+
}
|