@kumwe/studio-protocol 0.1.0-alpha.6 → 0.1.0-beta.2

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.
Files changed (56) hide show
  1. package/README.md +67 -7
  2. package/THIRD_PARTY_NOTICES.md +9 -0
  3. package/dist/generated/schema-models.d.ts +2750 -0
  4. package/dist/generated/schema-models.d.ts.map +1 -0
  5. package/dist/generated/schema-models.js +1 -0
  6. package/dist/guards.d.ts.map +1 -1
  7. package/dist/guards.js +1 -374
  8. package/dist/host-failure.d.ts +16 -0
  9. package/dist/host-failure.d.ts.map +1 -0
  10. package/dist/host-failure.js +1 -0
  11. package/dist/index.d.ts +6 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -4
  14. package/dist/release.d.ts +8 -0
  15. package/dist/release.d.ts.map +1 -0
  16. package/dist/release.js +1 -0
  17. package/dist/schemas.d.ts +22 -0
  18. package/dist/schemas.d.ts.map +1 -1
  19. package/dist/schemas.js +1 -102
  20. package/dist/types.d.ts +435 -2
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/types.js +1 -3
  23. package/package.json +7 -3
  24. package/schemas/authoring-http-vector.schema.json +195 -0
  25. package/schemas/authoring-http.schema.json +505 -0
  26. package/schemas/authoring-message-catalog.schema.json +45 -0
  27. package/schemas/authoring-save.schema.json +188 -0
  28. package/schemas/authoring-session.schema.json +151 -0
  29. package/schemas/authoring-target.schema.json +160 -0
  30. package/schemas/authoring-web-vector.schema.json +236 -0
  31. package/schemas/binding-projection-vector.schema.json +127 -0
  32. package/schemas/block-definition.schema.json +10 -1
  33. package/schemas/common.schema.json +45 -0
  34. package/schemas/host-error.schema.json +22 -1
  35. package/schemas/host-operations.schema.json +16 -0
  36. package/schemas/host-vector.schema.json +2 -0
  37. package/schemas/manifest.json +103 -9
  38. package/schemas/plugin-manifest.schema.json +1 -0
  39. package/schemas/renderer-web-vector.schema.json +273 -0
  40. package/schemas/reusable-content-type.schema.json +99 -0
  41. package/schemas/rich-text-projection.schema.json +12 -3
  42. package/schemas/rich-text.schema.json +156 -7
  43. package/schemas/studio-browser-assets.schema.json +376 -0
  44. package/schemas/studio-chart.schema.json +35 -0
  45. package/schemas/studio-config.schema.json +1 -33
  46. package/schemas/studio-deployment.schema.json +347 -0
  47. package/schemas/studio-drawing.schema.json +44 -0
  48. package/schemas/studio-money.schema.json +16 -0
  49. package/schemas/studio-presentation.schema.json +31 -0
  50. package/schemas/studio-release.schema.json +125 -0
  51. package/schemas/studio-table.schema.json +27 -0
  52. package/studio-release.json +35 -0
  53. package/dist/guards.js.map +0 -1
  54. package/dist/index.js.map +0 -1
  55. package/dist/schemas.js.map +0 -1
  56. package/dist/types.js.map +0 -1
@@ -24,7 +24,11 @@
24
24
  { "$ref": "#/$defs/blockquote" },
25
25
  { "$ref": "#/$defs/bulletList" },
26
26
  { "$ref": "#/$defs/orderedList" },
27
- { "$ref": "#/$defs/horizontalRule" }
27
+ { "$ref": "#/$defs/horizontalRule" },
28
+ { "$ref": "#/$defs/checklist" },
29
+ { "$ref": "#/$defs/table" },
30
+ { "$ref": "#/$defs/callout" },
31
+ { "$ref": "#/$defs/codeBlock" }
28
32
  ]
29
33
  },
30
34
  "paragraph": {
@@ -133,6 +137,131 @@
133
137
  "type": { "const": "horizontalRule" }
134
138
  }
135
139
  },
140
+ "checklist": {
141
+ "type": "object",
142
+ "additionalProperties": false,
143
+ "required": ["type", "content"],
144
+ "properties": {
145
+ "type": { "const": "checklist" },
146
+ "content": {
147
+ "type": "array",
148
+ "minItems": 1,
149
+ "maxItems": 500,
150
+ "items": { "$ref": "#/$defs/checklistItem" }
151
+ }
152
+ }
153
+ },
154
+ "checklistItem": {
155
+ "type": "object",
156
+ "additionalProperties": false,
157
+ "required": ["type", "attrs"],
158
+ "properties": {
159
+ "type": { "const": "checklistItem" },
160
+ "attrs": {
161
+ "type": "object",
162
+ "additionalProperties": false,
163
+ "required": ["checked", "level"],
164
+ "properties": {
165
+ "checked": { "type": "boolean" },
166
+ "level": { "type": "integer", "minimum": 0, "maximum": 4 }
167
+ }
168
+ },
169
+ "content": {
170
+ "type": "array",
171
+ "maxItems": 5000,
172
+ "items": { "$ref": "#/$defs/inline" }
173
+ }
174
+ }
175
+ },
176
+ "table": {
177
+ "type": "object",
178
+ "additionalProperties": false,
179
+ "required": ["type", "attrs", "content"],
180
+ "properties": {
181
+ "type": { "const": "table" },
182
+ "attrs": {
183
+ "type": "object",
184
+ "additionalProperties": false,
185
+ "required": ["header"],
186
+ "properties": { "header": { "type": "boolean" } }
187
+ },
188
+ "content": {
189
+ "type": "array",
190
+ "minItems": 1,
191
+ "maxItems": 200,
192
+ "items": { "$ref": "#/$defs/tableRow" }
193
+ }
194
+ }
195
+ },
196
+ "tableRow": {
197
+ "type": "object",
198
+ "additionalProperties": false,
199
+ "required": ["type", "content"],
200
+ "properties": {
201
+ "type": { "const": "tableRow" },
202
+ "content": {
203
+ "type": "array",
204
+ "minItems": 1,
205
+ "maxItems": 50,
206
+ "items": { "$ref": "#/$defs/tableCell" }
207
+ }
208
+ }
209
+ },
210
+ "tableCell": {
211
+ "type": "object",
212
+ "additionalProperties": false,
213
+ "required": ["type"],
214
+ "properties": {
215
+ "type": { "const": "tableCell" },
216
+ "content": {
217
+ "type": "array",
218
+ "maxItems": 5000,
219
+ "items": { "$ref": "#/$defs/inline" }
220
+ }
221
+ }
222
+ },
223
+ "callout": {
224
+ "type": "object",
225
+ "additionalProperties": false,
226
+ "required": ["type", "attrs", "content"],
227
+ "properties": {
228
+ "type": { "const": "callout" },
229
+ "attrs": {
230
+ "type": "object",
231
+ "additionalProperties": false,
232
+ "required": ["tone"],
233
+ "properties": {
234
+ "tone": { "enum": ["danger", "info", "success", "warning"] }
235
+ }
236
+ },
237
+ "content": {
238
+ "type": "array",
239
+ "minItems": 1,
240
+ "maxItems": 5000,
241
+ "items": { "$ref": "#/$defs/block" }
242
+ }
243
+ }
244
+ },
245
+ "codeBlock": {
246
+ "type": "object",
247
+ "additionalProperties": false,
248
+ "required": ["type", "attrs", "text"],
249
+ "properties": {
250
+ "type": { "const": "codeBlock" },
251
+ "attrs": {
252
+ "type": "object",
253
+ "additionalProperties": false,
254
+ "required": ["language"],
255
+ "properties": {
256
+ "language": {
257
+ "type": "string",
258
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9+_.#-]{0,63}$"
259
+ }
260
+ }
261
+ },
262
+ "text": { "type": "string", "maxLength": 250000 }
263
+ }
264
+ },
136
265
  "hardBreak": {
137
266
  "type": "object",
138
267
  "additionalProperties": false,
@@ -163,12 +292,32 @@
163
292
  "oneOf": [{ "$ref": "#/$defs/text" }, { "$ref": "#/$defs/hardBreak" }]
164
293
  },
165
294
  "mark": {
166
- "type": "object",
167
- "additionalProperties": false,
168
- "required": ["type"],
169
- "properties": {
170
- "type": { "enum": ["bold", "code", "italic", "strike"] }
171
- }
295
+ "oneOf": [
296
+ {
297
+ "type": "object",
298
+ "additionalProperties": false,
299
+ "required": ["type"],
300
+ "properties": {
301
+ "type": { "enum": ["bold", "code", "italic", "strike"] }
302
+ }
303
+ },
304
+ {
305
+ "type": "object",
306
+ "additionalProperties": false,
307
+ "required": ["type", "attrs"],
308
+ "properties": {
309
+ "type": { "const": "highlight" },
310
+ "attrs": {
311
+ "type": "object",
312
+ "additionalProperties": false,
313
+ "required": ["tone"],
314
+ "properties": {
315
+ "tone": { "enum": ["accent", "danger", "info", "success", "warning"] }
316
+ }
317
+ }
318
+ }
319
+ }
320
+ ]
172
321
  }
173
322
  }
174
323
  }
@@ -0,0 +1,376 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.kumwe.org/studio/v1/studio-browser-assets.schema.json",
4
+ "title": "Studio prebuilt browser asset manifest",
5
+ "description": "Integrity, CSP, runtime, and public-renderer materialization metadata for Studio's host-neutral prebuilt authoring ESM and published-page enhancement IIFE surfaces.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "kind",
10
+ "schemaVersion",
11
+ "assets",
12
+ "module",
13
+ "enhancementRuntime",
14
+ "publicRenderer",
15
+ "contentSecurityPolicy",
16
+ "productionRuntime",
17
+ "release"
18
+ ],
19
+ "properties": {
20
+ "kind": { "const": "studio-browser-assets" },
21
+ "schemaVersion": { "const": 1 },
22
+ "assets": {
23
+ "type": "array",
24
+ "minItems": 1,
25
+ "maxItems": 500,
26
+ "allOf": [
27
+ {
28
+ "contains": {
29
+ "type": "object",
30
+ "propertyNames": {
31
+ "enum": [
32
+ "path",
33
+ "role",
34
+ "mediaType",
35
+ "bytes",
36
+ "budgetBytes",
37
+ "contentHash",
38
+ "integrity",
39
+ "minified"
40
+ ]
41
+ },
42
+ "properties": { "role": { "const": "browser-module" } },
43
+ "required": ["role"]
44
+ },
45
+ "minContains": 1,
46
+ "maxContains": 1
47
+ },
48
+ {
49
+ "contains": {
50
+ "type": "object",
51
+ "propertyNames": {
52
+ "enum": [
53
+ "path",
54
+ "role",
55
+ "mediaType",
56
+ "bytes",
57
+ "budgetBytes",
58
+ "contentHash",
59
+ "integrity",
60
+ "minified"
61
+ ]
62
+ },
63
+ "properties": { "role": { "const": "enhancement-runtime" } },
64
+ "required": ["role"]
65
+ },
66
+ "minContains": 1,
67
+ "maxContains": 1
68
+ }
69
+ ],
70
+ "items": { "$ref": "#/$defs/asset" }
71
+ },
72
+ "module": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "required": ["entryPoint", "format", "exports"],
76
+ "properties": {
77
+ "entryPoint": {
78
+ "description": "Must equal the path of the one assets member whose role is browser-module; builders and consumers enforce this cross-member equality after schema validation.",
79
+ "$ref": "#/$defs/path"
80
+ },
81
+ "format": { "const": "esm" },
82
+ "exports": {
83
+ "type": "array",
84
+ "minItems": 16,
85
+ "maxItems": 16,
86
+ "uniqueItems": true,
87
+ "prefixItems": [
88
+ { "const": "mountStudio" },
89
+ { "const": "mountStudioFromConfigElement" },
90
+ { "const": "autoMountStudio" },
91
+ { "const": "parseStudioDeploymentConfiguration" },
92
+ { "const": "resolveStudioDeploymentRuntime" },
93
+ { "const": "createBrowserHttpHostAdapter" },
94
+ { "const": "createCoreProductionBlockDefinitions" },
95
+ { "const": "createCoreProductionPatterns" },
96
+ { "const": "createStudioStandaloneRuntime" },
97
+ { "const": "defineKumweStudio" },
98
+ { "const": "defineKumweStudioContextual" },
99
+ { "const": "defineKumweStudioStandalone" },
100
+ { "const": "defineStudioBrowserElements" },
101
+ { "const": "mountStudioHosted" },
102
+ { "const": "mountStudioStandalone" },
103
+ { "const": "openContextualStudioSession" }
104
+ ],
105
+ "items": false
106
+ }
107
+ }
108
+ },
109
+ "enhancementRuntime": {
110
+ "description": "The one trusted public-page behavior file. Producer includes it only when renderer-web output requests at least one member of the closed family set; the file discovers renderer-emitted data attributes and is safe to include unconditionally.",
111
+ "type": "object",
112
+ "additionalProperties": false,
113
+ "required": [
114
+ "entryPoint",
115
+ "format",
116
+ "loading",
117
+ "enhancements",
118
+ "needSignal",
119
+ "activation",
120
+ "safeToIncludeUnconditionally",
121
+ "noJavaScriptFallback",
122
+ "contentSecurityPolicy"
123
+ ],
124
+ "properties": {
125
+ "entryPoint": { "$ref": "#/$defs/path" },
126
+ "format": { "const": "iife" },
127
+ "loading": { "const": "defer" },
128
+ "enhancements": {
129
+ "type": "array",
130
+ "minItems": 8,
131
+ "maxItems": 8,
132
+ "uniqueItems": true,
133
+ "prefixItems": [
134
+ { "const": "countdown" },
135
+ { "const": "dialog" },
136
+ { "const": "lightbox" },
137
+ { "const": "navigation" },
138
+ { "const": "notice" },
139
+ { "const": "popover" },
140
+ { "const": "slideshow" },
141
+ { "const": "tabs" }
142
+ ],
143
+ "items": false
144
+ },
145
+ "needSignal": {
146
+ "type": "object",
147
+ "additionalProperties": false,
148
+ "required": ["source", "rule"],
149
+ "properties": {
150
+ "source": { "const": "renderer-web.enhancements" },
151
+ "rule": { "const": "closed-family-intersection-non-empty" }
152
+ }
153
+ },
154
+ "activation": { "const": "renderer-data-attributes" },
155
+ "safeToIncludeUnconditionally": { "const": true },
156
+ "noJavaScriptFallback": { "const": "semantic-renderer-output" },
157
+ "contentSecurityPolicy": {
158
+ "const": "default-src 'none'; script-src 'self'; require-trusted-types-for 'script'; trusted-types 'none'"
159
+ }
160
+ }
161
+ },
162
+ "publicRenderer": {
163
+ "description": "The language-neutral rule Producer and other server renderers use to materialize the exact canonical renderer-web CSS bytes without a host-selected minifier.",
164
+ "type": "object",
165
+ "additionalProperties": false,
166
+ "required": ["style"],
167
+ "properties": {
168
+ "style": {
169
+ "type": "object",
170
+ "additionalProperties": false,
171
+ "required": [
172
+ "source",
173
+ "materialization",
174
+ "fileNameTemplate",
175
+ "mediaType",
176
+ "contentHashAlgorithm",
177
+ "integrityAlgorithm",
178
+ "outputSchema",
179
+ "minified",
180
+ "budgetBytes"
181
+ ],
182
+ "properties": {
183
+ "source": { "const": "renderer-web.css" },
184
+ "materialization": { "const": "exact-utf8-bytes" },
185
+ "fileNameTemplate": {
186
+ "const": "studio-public-{{CONTENT_HASH_16}}.min.css"
187
+ },
188
+ "mediaType": { "const": "text/css" },
189
+ "contentHashAlgorithm": { "const": "sha256" },
190
+ "integrityAlgorithm": { "const": "sha256" },
191
+ "outputSchema": {
192
+ "const": "https://schemas.kumwe.org/studio/v1/studio-browser-assets.schema.json#/$defs/publicStyleAsset"
193
+ },
194
+ "minified": { "const": true },
195
+ "budgetBytes": { "const": 262144 }
196
+ }
197
+ }
198
+ }
199
+ },
200
+ "contentSecurityPolicy": { "$ref": "#/$defs/contentSecurityPolicy" },
201
+ "productionRuntime": {
202
+ "type": "object",
203
+ "additionalProperties": false,
204
+ "required": ["servingModel", "requires", "forbidden"],
205
+ "properties": {
206
+ "servingModel": { "const": "static-files" },
207
+ "requires": {
208
+ "type": "array",
209
+ "maxItems": 0,
210
+ "uniqueItems": true,
211
+ "items": { "type": "string", "minLength": 1, "maxLength": 100 }
212
+ },
213
+ "forbidden": {
214
+ "type": "array",
215
+ "minItems": 1,
216
+ "maxItems": 20,
217
+ "uniqueItems": true,
218
+ "items": { "type": "string", "minLength": 1, "maxLength": 100 }
219
+ }
220
+ }
221
+ },
222
+ "release": { "$ref": "#/$defs/release" }
223
+ },
224
+ "$defs": {
225
+ "release": {
226
+ "description": "The exact coordinated Studio release identity copied into every deployment configuration served with this asset generation.",
227
+ "type": "object",
228
+ "additionalProperties": false,
229
+ "required": ["version", "corpusManifestDigest"],
230
+ "properties": {
231
+ "version": {
232
+ "type": "string",
233
+ "pattern": "^(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*)(?:-(?:beta|rc)\\.(?:0|[1-9][0-9]*))?$"
234
+ },
235
+ "corpusManifestDigest": {
236
+ "type": "string",
237
+ "pattern": "^sha256-[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$"
238
+ }
239
+ }
240
+ },
241
+ "contentSecurityPolicy": {
242
+ "type": "object",
243
+ "additionalProperties": false,
244
+ "required": ["profile", "headerTemplate", "styleNonce", "inertConfigurationScript"],
245
+ "properties": {
246
+ "profile": { "const": "same-origin-http" },
247
+ "headerTemplate": {
248
+ "const": "default-src 'none'; script-src 'self'; require-trusted-types-for 'script'; trusted-types lit-html; style-src 'self' 'nonce-{{STYLE_NONCE}}'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src 'self'; worker-src 'none'; frame-src 'none'; manifest-src 'none'; object-src 'none'; frame-ancestors 'self'; base-uri 'none'; form-action 'none'"
249
+ },
250
+ "styleNonce": {
251
+ "type": "object",
252
+ "additionalProperties": false,
253
+ "required": ["placeholder", "minimumEntropyBits", "scope"],
254
+ "properties": {
255
+ "placeholder": { "const": "{{STYLE_NONCE}}" },
256
+ "minimumEntropyBits": { "const": 128 },
257
+ "scope": { "const": "response" }
258
+ }
259
+ },
260
+ "inertConfigurationScript": {
261
+ "type": "object",
262
+ "additionalProperties": false,
263
+ "required": ["element", "mediaType", "requiresHash", "requiresNonce"],
264
+ "properties": {
265
+ "element": { "const": "script" },
266
+ "mediaType": { "const": "application/json" },
267
+ "requiresHash": { "const": false },
268
+ "requiresNonce": { "const": false }
269
+ }
270
+ }
271
+ }
272
+ },
273
+ "path": {
274
+ "type": "string",
275
+ "minLength": 1,
276
+ "maxLength": 500,
277
+ "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*[\\\\?#])[A-Za-z0-9._/-]+$"
278
+ },
279
+ "publicStyleAsset": {
280
+ "description": "The closed per-page delivery-manifest record for exact canonical renderer-web CSS materialized by Producer or another server renderer.",
281
+ "type": "object",
282
+ "additionalProperties": false,
283
+ "required": [
284
+ "path",
285
+ "role",
286
+ "mediaType",
287
+ "bytes",
288
+ "budgetBytes",
289
+ "contentHash",
290
+ "integrity",
291
+ "minified"
292
+ ],
293
+ "properties": {
294
+ "path": {
295
+ "type": "string",
296
+ "minLength": 36,
297
+ "maxLength": 500,
298
+ "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*[\\\\?#])(?:[A-Za-z0-9._-]+/)*studio-public-[a-f0-9]{16}\\.min\\.css$"
299
+ },
300
+ "role": { "const": "public-style" },
301
+ "mediaType": { "const": "text/css" },
302
+ "bytes": { "type": "integer", "minimum": 1, "maximum": 262144 },
303
+ "budgetBytes": { "const": 262144 },
304
+ "contentHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
305
+ "integrity": {
306
+ "type": "string",
307
+ "pattern": "^sha256-[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$"
308
+ },
309
+ "minified": { "const": true }
310
+ }
311
+ },
312
+ "asset": {
313
+ "type": "object",
314
+ "additionalProperties": false,
315
+ "required": ["path", "role", "mediaType", "bytes", "integrity"],
316
+ "allOf": [
317
+ {
318
+ "if": {
319
+ "properties": {
320
+ "role": { "enum": ["browser-module", "enhancement-runtime"] }
321
+ },
322
+ "required": ["role"]
323
+ },
324
+ "then": {
325
+ "properties": {
326
+ "budgetBytes": {},
327
+ "contentHash": {},
328
+ "mediaType": { "const": "text/javascript" },
329
+ "minified": {}
330
+ },
331
+ "required": ["budgetBytes", "contentHash", "minified"]
332
+ }
333
+ },
334
+ {
335
+ "if": {
336
+ "properties": { "mediaType": { "const": "text/javascript" } },
337
+ "required": ["mediaType"]
338
+ },
339
+ "then": {
340
+ "properties": {
341
+ "role": { "enum": ["browser-module", "enhancement-runtime"] }
342
+ }
343
+ }
344
+ }
345
+ ],
346
+ "properties": {
347
+ "path": { "$ref": "#/$defs/path" },
348
+ "role": {
349
+ "enum": [
350
+ "browser-module",
351
+ "enhancement-runtime",
352
+ "license",
353
+ "notice",
354
+ "release-record",
355
+ "documentation",
356
+ "schema"
357
+ ]
358
+ },
359
+ "mediaType": {
360
+ "enum": ["text/javascript", "text/plain", "text/markdown", "application/json"]
361
+ },
362
+ "bytes": { "type": "integer", "minimum": 1, "maximum": 1073741824 },
363
+ "budgetBytes": { "type": "integer", "minimum": 1, "maximum": 1073741824 },
364
+ "contentHash": {
365
+ "type": "string",
366
+ "pattern": "^[a-f0-9]{64}$"
367
+ },
368
+ "integrity": {
369
+ "type": "string",
370
+ "pattern": "^sha256-[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$"
371
+ },
372
+ "minified": { "const": true }
373
+ }
374
+ }
375
+ }
376
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.kumwe.org/studio/v1/studio-chart.schema.json",
4
+ "title": "Studio canonical chart",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["type", "labels", "datasets"],
8
+ "properties": {
9
+ "type": { "enum": ["bar", "doughnut", "line", "pie"] },
10
+ "title": { "type": "string", "maxLength": 500 },
11
+ "labels": {
12
+ "type": "array",
13
+ "maxItems": 200,
14
+ "items": { "type": "string", "maxLength": 500 }
15
+ },
16
+ "datasets": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "maxItems": 20,
20
+ "items": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["label", "values"],
24
+ "properties": {
25
+ "label": { "type": "string", "maxLength": 500 },
26
+ "values": {
27
+ "type": "array",
28
+ "maxItems": 200,
29
+ "items": { "type": "number", "minimum": -1000000000000000, "maximum": 1000000000000000 }
30
+ }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -72,39 +72,7 @@
72
72
  "measurementSystem": { "enum": ["metric", "us", "uk"] }
73
73
  }
74
74
  },
75
- "resourceContext": {
76
- "type": "object",
77
- "additionalProperties": false,
78
- "required": ["key", "surface", "scopes"],
79
- "properties": {
80
- "key": { "$ref": "common.schema.json#/$defs/stableId" },
81
- "surface": { "$ref": "common.schema.json#/$defs/qualifiedName" },
82
- "revision": { "$ref": "common.schema.json#/$defs/revision" },
83
- "scopes": {
84
- "type": "array",
85
- "maxItems": 20,
86
- "uniqueItems": true,
87
- "items": {
88
- "type": "object",
89
- "additionalProperties": false,
90
- "required": ["kind", "id"],
91
- "properties": {
92
- "kind": { "$ref": "common.schema.json#/$defs/qualifiedName" },
93
- "id": { "$ref": "common.schema.json#/$defs/stableId" }
94
- }
95
- }
96
- },
97
- "resource": {
98
- "type": "object",
99
- "additionalProperties": false,
100
- "required": ["type", "id"],
101
- "properties": {
102
- "type": { "$ref": "common.schema.json#/$defs/qualifiedName" },
103
- "id": { "$ref": "common.schema.json#/$defs/stableId" }
104
- }
105
- }
106
- }
107
- },
75
+ "resourceContext": { "$ref": "common.schema.json#/$defs/resourceContext" },
108
76
  "permissions": {
109
77
  "type": "array",
110
78
  "maxItems": 500,