@jxsuite/schema 1.4.0 → 1.8.0
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 +1 -0
- package/defs/children-value.schema.ts +10 -1
- package/defs/class-def.schema.ts +1 -0
- package/defs/element-def.schema.ts +1 -1
- package/defs/expression-node.schema.ts +4 -1
- package/defs/external-class-def.schema.ts +20 -2
- package/defs/field-schema.schema.ts +75 -0
- package/defs/head-entry.schema.ts +6 -1
- package/defs/image-config.schema.ts +7 -0
- package/defs/index.ts +2 -1
- package/defs/project-config.schema.ts +299 -7
- package/defs/tag-expression.schema.ts +98 -0
- package/defs/tag-name.schema.ts +13 -1
- package/package.json +7 -3
- package/project-schema.json +441 -5
- package/schema.json +289 -13
- package/schemas/document.paths.schema.json +54 -1
- package/schemas/project.core.schema.json +401 -5
- package/src/asset-paths.ts +21 -0
- package/src/extension-registry.ts +12 -0
- package/src/format-registry.ts +32 -2
- package/src/guards.ts +68 -2
- package/src/ijson.ts +205 -0
- package/src/intl.ts +155 -0
- package/src/locale.ts +429 -0
- package/src/media-type.ts +217 -0
- package/src/parse.ts +78 -1
- package/src/project-schemas.ts +358 -12
- package/src/schema.ts +85 -8
- package/types.ts +191 -4
package/schema.json
CHANGED
|
@@ -634,6 +634,7 @@
|
|
|
634
634
|
"resolvePaths",
|
|
635
635
|
"lower",
|
|
636
636
|
"emit",
|
|
637
|
+
"head",
|
|
637
638
|
"assets",
|
|
638
639
|
"mount",
|
|
639
640
|
"dialect",
|
|
@@ -957,11 +958,24 @@
|
|
|
957
958
|
"domain": {
|
|
958
959
|
"type": "string"
|
|
959
960
|
},
|
|
960
|
-
"expires": {
|
|
961
|
-
"type": "string"
|
|
962
|
-
},
|
|
963
961
|
"filter": {
|
|
964
|
-
"
|
|
962
|
+
"anyOf": [
|
|
963
|
+
{
|
|
964
|
+
"$ref": "#/$defs/RefObject"
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"description": "A single filter object, e.g. an equality shorthand.",
|
|
968
|
+
"type": "object"
|
|
969
|
+
},
|
|
970
|
+
{
|
|
971
|
+
"description": "Ordered filter rules, e.g. [{ field: \"Slug\", op: \"not empty\" }].",
|
|
972
|
+
"items": {
|
|
973
|
+
"type": "object"
|
|
974
|
+
},
|
|
975
|
+
"type": "array"
|
|
976
|
+
}
|
|
977
|
+
],
|
|
978
|
+
"description": "Filter configuration: a reactive $ref binding, a single filter object, or an ordered array of rules."
|
|
965
979
|
},
|
|
966
980
|
"headers": {
|
|
967
981
|
"additionalProperties": {
|
|
@@ -1542,7 +1556,7 @@
|
|
|
1542
1556
|
"title": "Pure method — genuine prototype methods; receiver in target, args in value"
|
|
1543
1557
|
},
|
|
1544
1558
|
{
|
|
1545
|
-
"description": "Invoke a callable, pure in formula position: target is the callee pointer — a named formula entry (#/state/…) or a blessed pure global via window#/ (Math.*, JSON.*, Object.keys/values/entries, and the Intl helpers Intl/formatNumber, Intl/formatDate, Intl/formatRelativeTime) — and value is the positional argument list (the splice args-in-value precedent). Argument order follows the callee's declared parameters.",
|
|
1559
|
+
"description": "Invoke a callable, pure in formula position: target is the callee pointer — a named formula entry (#/state/…) or a blessed pure global via window#/ (Math.*, JSON.*, Object.keys/values/entries, and the Intl helpers Intl/formatNumber, Intl/formatDate, Intl/formatRelativeTime, Intl/formatList, Intl/plural, Intl/compare, Intl/displayName, Intl/segment) — and value is the positional argument list (the splice args-in-value precedent). Argument order follows the callee's declared parameters.",
|
|
1546
1560
|
"not": {
|
|
1547
1561
|
"required": [
|
|
1548
1562
|
"initial"
|
|
@@ -1823,7 +1837,7 @@
|
|
|
1823
1837
|
"$ref": "#/$defs/NumberOrRef"
|
|
1824
1838
|
},
|
|
1825
1839
|
"tagName": {
|
|
1826
|
-
"$ref": "#/$defs/
|
|
1840
|
+
"$ref": "#/$defs/ElementTagName"
|
|
1827
1841
|
},
|
|
1828
1842
|
"textContent": {
|
|
1829
1843
|
"$ref": "#/$defs/StringOrRef"
|
|
@@ -6020,10 +6034,13 @@
|
|
|
6020
6034
|
"oneOf": [
|
|
6021
6035
|
{
|
|
6022
6036
|
"items": {
|
|
6023
|
-
"
|
|
6037
|
+
"anyOf": [
|
|
6024
6038
|
{
|
|
6025
6039
|
"$ref": "#/$defs/ElementDef"
|
|
6026
6040
|
},
|
|
6041
|
+
{
|
|
6042
|
+
"$ref": "#/$defs/SwitchNode"
|
|
6043
|
+
},
|
|
6027
6044
|
{
|
|
6028
6045
|
"$ref": "#/$defs/ArrayNamespace"
|
|
6029
6046
|
},
|
|
@@ -7719,6 +7736,26 @@
|
|
|
7719
7736
|
}
|
|
7720
7737
|
]
|
|
7721
7738
|
},
|
|
7739
|
+
"animation-delay-end": {
|
|
7740
|
+
"oneOf": [
|
|
7741
|
+
{
|
|
7742
|
+
"type": "string"
|
|
7743
|
+
},
|
|
7744
|
+
{
|
|
7745
|
+
"type": "number"
|
|
7746
|
+
}
|
|
7747
|
+
]
|
|
7748
|
+
},
|
|
7749
|
+
"animation-delay-start": {
|
|
7750
|
+
"oneOf": [
|
|
7751
|
+
{
|
|
7752
|
+
"type": "string"
|
|
7753
|
+
},
|
|
7754
|
+
{
|
|
7755
|
+
"type": "number"
|
|
7756
|
+
}
|
|
7757
|
+
]
|
|
7758
|
+
},
|
|
7722
7759
|
"animation-direction": {
|
|
7723
7760
|
"oneOf": [
|
|
7724
7761
|
{
|
|
@@ -7869,6 +7906,26 @@
|
|
|
7869
7906
|
}
|
|
7870
7907
|
]
|
|
7871
7908
|
},
|
|
7909
|
+
"animationDelayEnd": {
|
|
7910
|
+
"oneOf": [
|
|
7911
|
+
{
|
|
7912
|
+
"type": "string"
|
|
7913
|
+
},
|
|
7914
|
+
{
|
|
7915
|
+
"type": "number"
|
|
7916
|
+
}
|
|
7917
|
+
]
|
|
7918
|
+
},
|
|
7919
|
+
"animationDelayStart": {
|
|
7920
|
+
"oneOf": [
|
|
7921
|
+
{
|
|
7922
|
+
"type": "string"
|
|
7923
|
+
},
|
|
7924
|
+
{
|
|
7925
|
+
"type": "number"
|
|
7926
|
+
}
|
|
7927
|
+
]
|
|
7928
|
+
},
|
|
7872
7929
|
"animationDirection": {
|
|
7873
7930
|
"oneOf": [
|
|
7874
7931
|
{
|
|
@@ -18209,6 +18266,16 @@
|
|
|
18209
18266
|
}
|
|
18210
18267
|
]
|
|
18211
18268
|
},
|
|
18269
|
+
"scroll-axis-lock": {
|
|
18270
|
+
"oneOf": [
|
|
18271
|
+
{
|
|
18272
|
+
"type": "string"
|
|
18273
|
+
},
|
|
18274
|
+
{
|
|
18275
|
+
"type": "number"
|
|
18276
|
+
}
|
|
18277
|
+
]
|
|
18278
|
+
},
|
|
18212
18279
|
"scroll-behavior": {
|
|
18213
18280
|
"oneOf": [
|
|
18214
18281
|
{
|
|
@@ -18529,6 +18596,16 @@
|
|
|
18529
18596
|
}
|
|
18530
18597
|
]
|
|
18531
18598
|
},
|
|
18599
|
+
"scrollAxisLock": {
|
|
18600
|
+
"oneOf": [
|
|
18601
|
+
{
|
|
18602
|
+
"type": "string"
|
|
18603
|
+
},
|
|
18604
|
+
{
|
|
18605
|
+
"type": "number"
|
|
18606
|
+
}
|
|
18607
|
+
]
|
|
18608
|
+
},
|
|
18532
18609
|
"scrollBehavior": {
|
|
18533
18610
|
"oneOf": [
|
|
18534
18611
|
{
|
|
@@ -22674,8 +22751,9 @@
|
|
|
22674
22751
|
"type": "object"
|
|
22675
22752
|
},
|
|
22676
22753
|
"TagName": {
|
|
22677
|
-
"description": "HTML element tag name or custom element name (must contain a hyphen per Web Components spec).",
|
|
22754
|
+
"description": "HTML element tag name or custom element name (must contain a hyphen per Web Components spec). A NAME, never an expression: no `${…}` position in the pipeline evaluates a tagName. Use `$switch`/`cases` to vary the element.",
|
|
22678
22755
|
"minLength": 1,
|
|
22756
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9._-]*$",
|
|
22679
22757
|
"type": "string",
|
|
22680
22758
|
"examples": [
|
|
22681
22759
|
"a",
|
|
@@ -22891,6 +22969,85 @@
|
|
|
22891
22969
|
"user-card"
|
|
22892
22970
|
]
|
|
22893
22971
|
},
|
|
22972
|
+
"TagExpression": {
|
|
22973
|
+
"anyOf": [
|
|
22974
|
+
{
|
|
22975
|
+
"additionalProperties": false,
|
|
22976
|
+
"description": "Two-way: `target` is the test, `value` the tag when it is truthy, `initial` the tag when it is not.",
|
|
22977
|
+
"properties": {
|
|
22978
|
+
"initial": {
|
|
22979
|
+
"$ref": "#/$defs/TagName"
|
|
22980
|
+
},
|
|
22981
|
+
"operator": {
|
|
22982
|
+
"const": "?:",
|
|
22983
|
+
"type": "string"
|
|
22984
|
+
},
|
|
22985
|
+
"target": {
|
|
22986
|
+
"$ref": "#/$defs/ExpressionOperand"
|
|
22987
|
+
},
|
|
22988
|
+
"value": {
|
|
22989
|
+
"$ref": "#/$defs/TagName"
|
|
22990
|
+
}
|
|
22991
|
+
},
|
|
22992
|
+
"required": [
|
|
22993
|
+
"operator",
|
|
22994
|
+
"target",
|
|
22995
|
+
"value",
|
|
22996
|
+
"initial"
|
|
22997
|
+
],
|
|
22998
|
+
"title": "?: — the tag when the test holds, and the tag when it does not"
|
|
22999
|
+
},
|
|
23000
|
+
{
|
|
23001
|
+
"additionalProperties": false,
|
|
23002
|
+
"description": "Multiway: `target` is the discriminant, matched against case keys by its string form. `default` is required — an element with no tag cannot exist.",
|
|
23003
|
+
"properties": {
|
|
23004
|
+
"cases": {
|
|
23005
|
+
"additionalProperties": {
|
|
23006
|
+
"$ref": "#/$defs/TagName"
|
|
23007
|
+
},
|
|
23008
|
+
"type": "object"
|
|
23009
|
+
},
|
|
23010
|
+
"default": {
|
|
23011
|
+
"$ref": "#/$defs/TagName"
|
|
23012
|
+
},
|
|
23013
|
+
"operator": {
|
|
23014
|
+
"const": "switch",
|
|
23015
|
+
"type": "string"
|
|
23016
|
+
},
|
|
23017
|
+
"target": {
|
|
23018
|
+
"$ref": "#/$defs/ExpressionOperand"
|
|
23019
|
+
}
|
|
23020
|
+
},
|
|
23021
|
+
"required": [
|
|
23022
|
+
"operator",
|
|
23023
|
+
"target",
|
|
23024
|
+
"cases",
|
|
23025
|
+
"default"
|
|
23026
|
+
],
|
|
23027
|
+
"title": "switch — one tag per discriminant value, with a required fallback"
|
|
23028
|
+
}
|
|
23029
|
+
],
|
|
23030
|
+
"description": "A tag name chosen at element creation. Every branch resolves to a `TagName`, so the candidate set is enumerable without evaluating anything."
|
|
23031
|
+
},
|
|
23032
|
+
"ElementTagName": {
|
|
23033
|
+
"anyOf": [
|
|
23034
|
+
{
|
|
23035
|
+
"$ref": "#/$defs/TagName"
|
|
23036
|
+
},
|
|
23037
|
+
{
|
|
23038
|
+
"additionalProperties": false,
|
|
23039
|
+
"properties": {
|
|
23040
|
+
"$expression": {
|
|
23041
|
+
"$ref": "#/$defs/TagExpression"
|
|
23042
|
+
}
|
|
23043
|
+
},
|
|
23044
|
+
"required": [
|
|
23045
|
+
"$expression"
|
|
23046
|
+
],
|
|
23047
|
+
"type": "object"
|
|
23048
|
+
}
|
|
23049
|
+
]
|
|
23050
|
+
},
|
|
22894
23051
|
"JsonSchemaType": {
|
|
22895
23052
|
"enum": [
|
|
22896
23053
|
"string",
|
|
@@ -22930,7 +23087,15 @@
|
|
|
22930
23087
|
"type": "string"
|
|
22931
23088
|
},
|
|
22932
23089
|
"textContent": {
|
|
22933
|
-
"
|
|
23090
|
+
"description": "Element content. An object is serialized to JSON inside the tag — that is how a JSON-LD block (`<script type=\"application/ld+json\">`) is authored.",
|
|
23091
|
+
"oneOf": [
|
|
23092
|
+
{
|
|
23093
|
+
"type": "string"
|
|
23094
|
+
},
|
|
23095
|
+
{
|
|
23096
|
+
"type": "object"
|
|
23097
|
+
}
|
|
23098
|
+
]
|
|
22934
23099
|
}
|
|
22935
23100
|
},
|
|
22936
23101
|
"required": [
|
|
@@ -22953,6 +23118,10 @@
|
|
|
22953
23118
|
"optimize": {
|
|
22954
23119
|
"type": "boolean"
|
|
22955
23120
|
},
|
|
23121
|
+
"picture": {
|
|
23122
|
+
"description": "Wrap a multi-format image in a <picture> with one <source> per format (default true). With it off the <img> carries a srcset in the preferred format alone, which browsers that cannot decode that format will still select from.",
|
|
23123
|
+
"type": "boolean"
|
|
23124
|
+
},
|
|
22956
23125
|
"quality": {
|
|
22957
23126
|
"properties": {
|
|
22958
23127
|
"avif": {
|
|
@@ -22996,6 +23165,67 @@
|
|
|
22996
23165
|
}
|
|
22997
23166
|
},
|
|
22998
23167
|
"type": "object"
|
|
23168
|
+
},
|
|
23169
|
+
"PathsValue": {
|
|
23170
|
+
"$id": "https://jxsuite.com/schema/document/paths/v2",
|
|
23171
|
+
"anyOf": [
|
|
23172
|
+
{
|
|
23173
|
+
"additionalProperties": false,
|
|
23174
|
+
"description": "Explicit value list: generates one page per value, bound to `param` (default \"value\").",
|
|
23175
|
+
"properties": {
|
|
23176
|
+
"param": {
|
|
23177
|
+
"description": "Route parameter to fill (default \"value\").",
|
|
23178
|
+
"type": "string"
|
|
23179
|
+
},
|
|
23180
|
+
"values": {
|
|
23181
|
+
"description": "The values to expand.",
|
|
23182
|
+
"type": "array"
|
|
23183
|
+
}
|
|
23184
|
+
},
|
|
23185
|
+
"required": [
|
|
23186
|
+
"values"
|
|
23187
|
+
],
|
|
23188
|
+
"type": "object"
|
|
23189
|
+
},
|
|
23190
|
+
{
|
|
23191
|
+
"additionalProperties": false,
|
|
23192
|
+
"description": "JSON data-file source: loads a project-relative file that must contain an array, and generates one page per item.",
|
|
23193
|
+
"properties": {
|
|
23194
|
+
"$ref": {
|
|
23195
|
+
"description": "Project-relative path to a .json file containing an array.",
|
|
23196
|
+
"type": "string"
|
|
23197
|
+
},
|
|
23198
|
+
"field": {
|
|
23199
|
+
"description": "Item field providing the parameter value (default \"id\").",
|
|
23200
|
+
"type": "string"
|
|
23201
|
+
},
|
|
23202
|
+
"param": {
|
|
23203
|
+
"description": "Route parameter to fill (default \"id\").",
|
|
23204
|
+
"type": "string"
|
|
23205
|
+
}
|
|
23206
|
+
},
|
|
23207
|
+
"required": [
|
|
23208
|
+
"$ref"
|
|
23209
|
+
],
|
|
23210
|
+
"type": "object"
|
|
23211
|
+
},
|
|
23212
|
+
{
|
|
23213
|
+
"description": "Legacy explicit form: an array of ready-made parameter objects, used as-is with no expansion. Prefer one of the source shapes above.",
|
|
23214
|
+
"items": {
|
|
23215
|
+
"additionalProperties": {
|
|
23216
|
+
"type": "string"
|
|
23217
|
+
},
|
|
23218
|
+
"type": "object"
|
|
23219
|
+
},
|
|
23220
|
+
"type": "array"
|
|
23221
|
+
},
|
|
23222
|
+
{
|
|
23223
|
+
"description": "A source shape contributed by an extension this schema cannot see. The project's generated document.schema.json validates these exactly; enable the owning extension and regenerate with `jx schema` to get precise checking here.",
|
|
23224
|
+
"minProperties": 1,
|
|
23225
|
+
"type": "object"
|
|
23226
|
+
}
|
|
23227
|
+
],
|
|
23228
|
+
"description": "Default $paths source union: the core shapes, plus a catch-all for source shapes contributed by extensions this schema cannot see. The project's generated document.schema.json replaces this with the exact set its extensions provide."
|
|
22999
23229
|
}
|
|
23000
23230
|
},
|
|
23001
23231
|
"$id": "https://jxsuite.com/schema/v1",
|
|
@@ -23034,9 +23264,9 @@
|
|
|
23034
23264
|
"type": "array"
|
|
23035
23265
|
},
|
|
23036
23266
|
"$head": {
|
|
23037
|
-
"description": "Page-level <head> entries. Array of
|
|
23267
|
+
"description": "Page-level <head> entries. Array of head entries for meta tags, link tags, script tags, etc. Merged with layout and site-level $head entries.",
|
|
23038
23268
|
"items": {
|
|
23039
|
-
"$ref": "#/$defs/
|
|
23269
|
+
"$ref": "#/$defs/HeadEntry"
|
|
23040
23270
|
},
|
|
23041
23271
|
"type": "array"
|
|
23042
23272
|
},
|
|
@@ -23049,6 +23279,32 @@
|
|
|
23049
23279
|
],
|
|
23050
23280
|
"type": "string"
|
|
23051
23281
|
},
|
|
23282
|
+
"$dir": {
|
|
23283
|
+
"description": "Base direction for this page's <html> element, overriding `defaults.dir`. Right-to-left content renders left-to-right without it.",
|
|
23284
|
+
"enum": [
|
|
23285
|
+
"ltr",
|
|
23286
|
+
"rtl",
|
|
23287
|
+
"auto"
|
|
23288
|
+
],
|
|
23289
|
+
"type": "string"
|
|
23290
|
+
},
|
|
23291
|
+
"$lang": {
|
|
23292
|
+
"description": "Language tag for this page's <html> element, overriding `defaults.lang` (site-architecture.md §8.4).",
|
|
23293
|
+
"examples": [
|
|
23294
|
+
"en",
|
|
23295
|
+
"fr",
|
|
23296
|
+
"ar-EG"
|
|
23297
|
+
],
|
|
23298
|
+
"type": "string"
|
|
23299
|
+
},
|
|
23300
|
+
"$translationKey": {
|
|
23301
|
+
"description": "This page's identity across languages, overriding the one its path implies (site-architecture.md §13.5). Two routes are translations when their keys match; the default key is the path with the locale prefix removed, which is right whenever the paths are parallel and wrong for a localized slug — /fr-ca/a-propos/ shares nothing with /about/ until one of them says so.",
|
|
23302
|
+
"examples": [
|
|
23303
|
+
"about",
|
|
23304
|
+
"blog/hello-world"
|
|
23305
|
+
],
|
|
23306
|
+
"type": "string"
|
|
23307
|
+
},
|
|
23052
23308
|
"$layout": {
|
|
23053
23309
|
"description": "Layout reference for pages. String path to a layout JSON file, or false to opt out of the default layout.",
|
|
23054
23310
|
"examples": [
|
|
@@ -23064,6 +23320,26 @@
|
|
|
23064
23320
|
}
|
|
23065
23321
|
]
|
|
23066
23322
|
},
|
|
23323
|
+
"$shadow": {
|
|
23324
|
+
"description": "Render this component into a shadow root instead of the light DOM (spec.md §16.6). Off unless set: a shadow root isolates the component's styles from the page and replaces the <slot> emulation with real slot distribution, so it changes how the component composes. Overrides `defaults.shadow` in both directions — `false` opts one component out of a project that opted in.",
|
|
23325
|
+
"oneOf": [
|
|
23326
|
+
{
|
|
23327
|
+
"enum": [
|
|
23328
|
+
"open",
|
|
23329
|
+
"closed"
|
|
23330
|
+
],
|
|
23331
|
+
"type": "string"
|
|
23332
|
+
},
|
|
23333
|
+
{
|
|
23334
|
+
"const": false,
|
|
23335
|
+
"type": "boolean"
|
|
23336
|
+
}
|
|
23337
|
+
]
|
|
23338
|
+
},
|
|
23339
|
+
"$sitemap": {
|
|
23340
|
+
"description": "Set false to exclude this page from sitemap.xml (site-architecture.md §8.4.1). Every other page with a URL is included.",
|
|
23341
|
+
"type": "boolean"
|
|
23342
|
+
},
|
|
23067
23343
|
"$media": {
|
|
23068
23344
|
"additionalProperties": {
|
|
23069
23345
|
"type": "string"
|
|
@@ -23079,8 +23355,8 @@
|
|
|
23079
23355
|
"type": "object"
|
|
23080
23356
|
},
|
|
23081
23357
|
"$paths": {
|
|
23082
|
-
"
|
|
23083
|
-
"
|
|
23358
|
+
"$ref": "https://jxsuite.com/schema/document/paths/v2",
|
|
23359
|
+
"description": "Dynamic route source for a page: expands one page per entry at build time. One of the core shapes (explicit `values`, a `$ref` data file, or a bare array of parameter objects) or a source shape contributed by an enabled extension, such as the parser's `contentType`."
|
|
23084
23360
|
},
|
|
23085
23361
|
"$schema": {
|
|
23086
23362
|
"description": "URI identifying the Jx dialect version. Enables schema-aware IDE tooling.",
|
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$id": "https://jxsuite.com/schema/document/paths/v2",
|
|
3
3
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
-
"
|
|
4
|
+
"anyOf": [
|
|
5
|
+
{
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"description": "Explicit value list: generates one page per value, bound to `param` (default \"value\").",
|
|
8
|
+
"properties": {
|
|
9
|
+
"param": {
|
|
10
|
+
"description": "Route parameter to fill (default \"value\").",
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
"values": {
|
|
14
|
+
"description": "The values to expand.",
|
|
15
|
+
"type": "array"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"required": ["values"],
|
|
19
|
+
"type": "object"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"additionalProperties": false,
|
|
23
|
+
"description": "JSON data-file source: loads a project-relative file that must contain an array, and generates one page per item.",
|
|
24
|
+
"properties": {
|
|
25
|
+
"$ref": {
|
|
26
|
+
"description": "Project-relative path to a .json file containing an array.",
|
|
27
|
+
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
"field": {
|
|
30
|
+
"description": "Item field providing the parameter value (default \"id\").",
|
|
31
|
+
"type": "string"
|
|
32
|
+
},
|
|
33
|
+
"param": {
|
|
34
|
+
"description": "Route parameter to fill (default \"id\").",
|
|
35
|
+
"type": "string"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"required": ["$ref"],
|
|
39
|
+
"type": "object"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"description": "Legacy explicit form: an array of ready-made parameter objects, used as-is with no expansion. Prefer one of the source shapes above.",
|
|
43
|
+
"items": {
|
|
44
|
+
"additionalProperties": {
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"type": "object"
|
|
48
|
+
},
|
|
49
|
+
"type": "array"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"description": "A source shape contributed by an extension this schema cannot see. The project's generated document.schema.json validates these exactly; enable the owning extension and regenerate with `jx schema` to get precise checking here.",
|
|
53
|
+
"minProperties": 1,
|
|
54
|
+
"type": "object"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"description": "Default $paths-value union for documents: the core source shapes. Per-project entry documents override this resource with those members PLUS every extension-contributed paths shape.",
|
|
5
58
|
"title": "Jx Document Paths Union"
|
|
6
59
|
}
|