@rathnasgala2/schemas 3.6.0 → 3.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.
Files changed (53) hide show
  1. package/THIRD_PARTY_LICENSES.json +1 -1
  2. package/diagnostics/diagnostic-map.json +845 -20
  3. package/docs/catalogs/app-components.json +1766 -2
  4. package/docs/catalogs/app-routes.json +598 -1
  5. package/docs/catalogs/schema-inventory.json +10 -10
  6. package/examples/valid/build-input/rules.json +24 -2
  7. package/examples/valid/template-composition/rules.json +769 -0
  8. package/examples/valid/theme-contract/rules.json +1107 -5
  9. package/fixtures/boundary/build-input/rules.json +24 -2
  10. package/fixtures/boundary/template-composition/rules.json +769 -0
  11. package/fixtures/boundary/theme-contract/rules.json +1107 -5
  12. package/fixtures/invalid/build-input/SCHEMA_PATTERN_INVALID/cases.json +22 -11
  13. package/fixtures/invalid/build-input/SCHEMA_TYPE_INVALID/cases.json +22 -0
  14. package/fixtures/invalid/build-input/SCHEMA_UNION_INVALID/cases.json +11 -0
  15. package/fixtures/invalid/template-composition/SCHEMA_CONSTANT_INVALID/cases.json +497 -0
  16. package/fixtures/invalid/template-composition/SCHEMA_ENUM_INVALID/cases.json +83 -0
  17. package/fixtures/invalid/template-composition/SCHEMA_NEGATED_RULE_MATCHED/cases.json +11 -0
  18. package/fixtures/invalid/template-composition/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +909 -0
  19. package/fixtures/invalid/template-composition/SCHEMA_UNION_INVALID/cases.json +20 -0
  20. package/fixtures/invalid/theme-contract/REQUEST_FIELD_UNKNOWN/cases.json +120 -0
  21. package/fixtures/invalid/theme-contract/SCHEMA_CONSTANT_INVALID/cases.json +680 -0
  22. package/fixtures/invalid/theme-contract/SCHEMA_NEGATED_RULE_MATCHED/cases.json +11 -0
  23. package/fixtures/invalid/theme-contract/SCHEMA_PATTERN_INVALID/cases.json +33 -9
  24. package/fixtures/invalid/theme-contract/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +1383 -3
  25. package/fixtures/invalid/theme-contract/SCHEMA_TYPE_INVALID/cases.json +77 -0
  26. package/fixtures/invalid/theme-contract/SCHEMA_UNION_INVALID/cases.json +18 -0
  27. package/fixtures/invalid/theme-contract/SCHEMA_VERSION_UNSUPPORTED/cases.json +110 -0
  28. package/fixtures/manifest.json +7414 -1089
  29. package/fixtures/s2/manifest.json +1 -1
  30. package/fixtures/unknown-field/build-input/rules.json +5 -1
  31. package/fixtures/unknown-field/template-composition/rules.json +111 -0
  32. package/fixtures/unknown-field/theme-contract/rules.json +276 -1
  33. package/generated/browser/validator-core.mjs +3 -3
  34. package/generated/typescript/contracts/artifact-manifest.d.ts +4 -2
  35. package/generated/typescript/contracts/build-input.d.ts +3 -2
  36. package/generated/typescript/contracts/build-provenance.d.ts +4 -2
  37. package/generated/typescript/contracts/deployment-intent.d.ts +1 -0
  38. package/generated/typescript/contracts/deployment-receipt.d.ts +1 -0
  39. package/generated/typescript/contracts/lock.d.ts +2 -1
  40. package/generated/typescript/contracts/template-composition.d.ts +75 -4
  41. package/generated/typescript/contracts/theme-contract.d.ts +75 -2
  42. package/openapi/http-catalog.json +170 -2
  43. package/openapi/openapi.yaml +2711 -145
  44. package/package.json +1 -1
  45. package/sbom.cdx.json +23 -23
  46. package/schemas/artifact-manifest.schema.json +4 -2
  47. package/schemas/build-input.schema.json +12 -2
  48. package/schemas/build-provenance.schema.json +4 -2
  49. package/schemas/deployment-intent.schema.json +1 -0
  50. package/schemas/deployment-receipt.schema.json +1 -0
  51. package/schemas/lock.schema.json +2 -1
  52. package/schemas/template-composition.schema.json +179 -2
  53. package/schemas/theme-contract.schema.json +282 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rathnasgala2/schemas",
3
- "version": "3.6.0",
3
+ "version": "3.8.0",
4
4
  "description": "Executable JSON Schema and OpenAPI contracts for Galascribe",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
package/sbom.cdx.json CHANGED
@@ -97,8 +97,8 @@
97
97
  "type": "library",
98
98
  "name": "schemas",
99
99
  "group": "@rathnasgala2",
100
- "version": "3.6.0",
101
- "bom-ref": "@rathnasgala2/schemas@3.6.0",
100
+ "version": "3.8.0",
101
+ "bom-ref": "@rathnasgala2/schemas@3.8.0",
102
102
  "description": "Executable JSON Schema and OpenAPI contracts for Galascribe",
103
103
  "licenses": [
104
104
  {
@@ -108,7 +108,7 @@
108
108
  }
109
109
  }
110
110
  ],
111
- "purl": "pkg:npm/%40rathnasgala2/schemas@3.6.0?vcs_url=git%2Bhttps%3A%2F%2Fgithub.com%2Frathnasgala2%2Fschema.git",
111
+ "purl": "pkg:npm/%40rathnasgala2/schemas@3.8.0?vcs_url=git%2Bhttps%3A%2F%2Fgithub.com%2Frathnasgala2%2Fschema.git",
112
112
  "externalReferences": [
113
113
  {
114
114
  "url": "https://github.com/rathnasgala2/schema/issues",
@@ -153,7 +153,7 @@
153
153
  "type": "library",
154
154
  "name": "ajv-formats",
155
155
  "version": "3.0.1",
156
- "bom-ref": "@rathnasgala2/schemas@3.6.0|ajv-formats@3.0.1",
156
+ "bom-ref": "@rathnasgala2/schemas@3.8.0|ajv-formats@3.0.1",
157
157
  "licenses": [
158
158
  {
159
159
  "license": {
@@ -187,7 +187,7 @@
187
187
  "type": "library",
188
188
  "name": "ajv",
189
189
  "version": "8.20.0",
190
- "bom-ref": "@rathnasgala2/schemas@3.6.0|ajv@8.20.0",
190
+ "bom-ref": "@rathnasgala2/schemas@3.8.0|ajv@8.20.0",
191
191
  "licenses": [
192
192
  {
193
193
  "license": {
@@ -221,7 +221,7 @@
221
221
  "type": "library",
222
222
  "name": "fast-deep-equal",
223
223
  "version": "3.1.3",
224
- "bom-ref": "@rathnasgala2/schemas@3.6.0|fast-deep-equal@3.1.3",
224
+ "bom-ref": "@rathnasgala2/schemas@3.8.0|fast-deep-equal@3.1.3",
225
225
  "licenses": [
226
226
  {
227
227
  "license": {
@@ -255,7 +255,7 @@
255
255
  "type": "library",
256
256
  "name": "fast-uri",
257
257
  "version": "3.1.8",
258
- "bom-ref": "@rathnasgala2/schemas@3.6.0|fast-uri@3.1.8",
258
+ "bom-ref": "@rathnasgala2/schemas@3.8.0|fast-uri@3.1.8",
259
259
  "licenses": [
260
260
  {
261
261
  "license": {
@@ -289,7 +289,7 @@
289
289
  "type": "library",
290
290
  "name": "json-schema-traverse",
291
291
  "version": "1.0.0",
292
- "bom-ref": "@rathnasgala2/schemas@3.6.0|json-schema-traverse@1.0.0",
292
+ "bom-ref": "@rathnasgala2/schemas@3.8.0|json-schema-traverse@1.0.0",
293
293
  "licenses": [
294
294
  {
295
295
  "license": {
@@ -323,7 +323,7 @@
323
323
  "type": "library",
324
324
  "name": "require-from-string",
325
325
  "version": "2.0.2",
326
- "bom-ref": "@rathnasgala2/schemas@3.6.0|require-from-string@2.0.2",
326
+ "bom-ref": "@rathnasgala2/schemas@3.8.0|require-from-string@2.0.2",
327
327
  "licenses": [
328
328
  {
329
329
  "license": {
@@ -1064,10 +1064,10 @@
1064
1064
  ],
1065
1065
  "dependencies": [
1066
1066
  {
1067
- "ref": "@rathnasgala2/schemas@3.6.0",
1067
+ "ref": "@rathnasgala2/schemas@3.8.0",
1068
1068
  "dependsOn": [
1069
- "@rathnasgala2/schemas@3.6.0|ajv-formats@3.0.1",
1070
- "@rathnasgala2/schemas@3.6.0|ajv@8.20.0",
1069
+ "@rathnasgala2/schemas@3.8.0|ajv-formats@3.0.1",
1070
+ "@rathnasgala2/schemas@3.8.0|ajv@8.20.0",
1071
1071
  "pkg:npm/semver@7.8.5",
1072
1072
  "urn:gala:source-data:iana-ipv4-special-registry",
1073
1073
  "urn:gala:source-data:iana-ipv6-special-registry",
@@ -1089,31 +1089,31 @@
1089
1089
  ]
1090
1090
  },
1091
1091
  {
1092
- "ref": "@rathnasgala2/schemas@3.6.0|ajv-formats@3.0.1",
1092
+ "ref": "@rathnasgala2/schemas@3.8.0|ajv-formats@3.0.1",
1093
1093
  "dependsOn": [
1094
- "@rathnasgala2/schemas@3.6.0|ajv@8.20.0"
1094
+ "@rathnasgala2/schemas@3.8.0|ajv@8.20.0"
1095
1095
  ]
1096
1096
  },
1097
1097
  {
1098
- "ref": "@rathnasgala2/schemas@3.6.0|ajv@8.20.0",
1098
+ "ref": "@rathnasgala2/schemas@3.8.0|ajv@8.20.0",
1099
1099
  "dependsOn": [
1100
- "@rathnasgala2/schemas@3.6.0|fast-deep-equal@3.1.3",
1101
- "@rathnasgala2/schemas@3.6.0|fast-uri@3.1.8",
1102
- "@rathnasgala2/schemas@3.6.0|json-schema-traverse@1.0.0",
1103
- "@rathnasgala2/schemas@3.6.0|require-from-string@2.0.2"
1100
+ "@rathnasgala2/schemas@3.8.0|fast-deep-equal@3.1.3",
1101
+ "@rathnasgala2/schemas@3.8.0|fast-uri@3.1.8",
1102
+ "@rathnasgala2/schemas@3.8.0|json-schema-traverse@1.0.0",
1103
+ "@rathnasgala2/schemas@3.8.0|require-from-string@2.0.2"
1104
1104
  ]
1105
1105
  },
1106
1106
  {
1107
- "ref": "@rathnasgala2/schemas@3.6.0|fast-deep-equal@3.1.3"
1107
+ "ref": "@rathnasgala2/schemas@3.8.0|fast-deep-equal@3.1.3"
1108
1108
  },
1109
1109
  {
1110
- "ref": "@rathnasgala2/schemas@3.6.0|fast-uri@3.1.8"
1110
+ "ref": "@rathnasgala2/schemas@3.8.0|fast-uri@3.1.8"
1111
1111
  },
1112
1112
  {
1113
- "ref": "@rathnasgala2/schemas@3.6.0|json-schema-traverse@1.0.0"
1113
+ "ref": "@rathnasgala2/schemas@3.8.0|json-schema-traverse@1.0.0"
1114
1114
  },
1115
1115
  {
1116
- "ref": "@rathnasgala2/schemas@3.6.0|require-from-string@2.0.2"
1116
+ "ref": "@rathnasgala2/schemas@3.8.0|require-from-string@2.0.2"
1117
1117
  },
1118
1118
  {
1119
1119
  "ref": "pkg:npm/semver@7.8.5"
@@ -385,7 +385,8 @@
385
385
  "@rathnasgala2/theme-amaze",
386
386
  "@rathnasgala2/theme-flashy",
387
387
  "@rathnasgala2/theme-minimal",
388
- "@rathnasgala2/theme-zebra"
388
+ "@rathnasgala2/theme-zebra",
389
+ "@rathnasgala2/theme-editorial"
389
390
  ]
390
391
  }
391
392
  }
@@ -850,7 +851,8 @@
850
851
  "@rathnasgala2/theme-amaze",
851
852
  "@rathnasgala2/theme-flashy",
852
853
  "@rathnasgala2/theme-minimal",
853
- "@rathnasgala2/theme-zebra"
854
+ "@rathnasgala2/theme-zebra",
855
+ "@rathnasgala2/theme-editorial"
854
856
  ]
855
857
  }
856
858
  }
@@ -232,7 +232,8 @@
232
232
  "@rathnasgala2/theme-amaze",
233
233
  "@rathnasgala2/theme-flashy",
234
234
  "@rathnasgala2/theme-minimal",
235
- "@rathnasgala2/theme-zebra"
235
+ "@rathnasgala2/theme-zebra",
236
+ "@rathnasgala2/theme-editorial"
236
237
  ]
237
238
  }
238
239
  }
@@ -742,7 +743,16 @@
742
743
  "allOf": [
743
744
  { "$ref": "#/$defs/packageExact" },
744
745
  {
745
- "pattern": "^@rathnasgala2/theme-(?:default|amaze|flashy|minimal|zebra)@"
746
+ "anyOf": [
747
+ {
748
+ "type": "string",
749
+ "pattern": "^@rathnasgala2/theme-(?:default|amaze|flashy|minimal|zebra)@"
750
+ },
751
+ {
752
+ "type": "string",
753
+ "pattern": "^@rathnasgala2/theme-editorial@"
754
+ }
755
+ ]
746
756
  }
747
757
  ]
748
758
  },
@@ -425,7 +425,8 @@
425
425
  "@rathnasgala2/theme-amaze",
426
426
  "@rathnasgala2/theme-flashy",
427
427
  "@rathnasgala2/theme-minimal",
428
- "@rathnasgala2/theme-zebra"
428
+ "@rathnasgala2/theme-zebra",
429
+ "@rathnasgala2/theme-editorial"
429
430
  ]
430
431
  }
431
432
  }
@@ -890,7 +891,8 @@
890
891
  "@rathnasgala2/theme-amaze",
891
892
  "@rathnasgala2/theme-flashy",
892
893
  "@rathnasgala2/theme-minimal",
893
- "@rathnasgala2/theme-zebra"
894
+ "@rathnasgala2/theme-zebra",
895
+ "@rathnasgala2/theme-editorial"
894
896
  ]
895
897
  }
896
898
  }
@@ -1627,6 +1627,7 @@
1627
1627
  "enum": [
1628
1628
  "@rathnasgala2/theme-default",
1629
1629
  "@rathnasgala2/theme-amaze",
1630
+ "@rathnasgala2/theme-editorial",
1630
1631
  "@rathnasgala2/theme-flashy",
1631
1632
  "@rathnasgala2/theme-minimal",
1632
1633
  "@rathnasgala2/theme-zebra"
@@ -1615,6 +1615,7 @@
1615
1615
  "enum": [
1616
1616
  "@rathnasgala2/theme-default",
1617
1617
  "@rathnasgala2/theme-amaze",
1618
+ "@rathnasgala2/theme-editorial",
1618
1619
  "@rathnasgala2/theme-flashy",
1619
1620
  "@rathnasgala2/theme-minimal",
1620
1621
  "@rathnasgala2/theme-zebra"
@@ -55,7 +55,8 @@
55
55
  "@rathnasgala2/theme-amaze",
56
56
  "@rathnasgala2/theme-flashy",
57
57
  "@rathnasgala2/theme-minimal",
58
- "@rathnasgala2/theme-zebra"
58
+ "@rathnasgala2/theme-zebra",
59
+ "@rathnasgala2/theme-editorial"
59
60
  ]
60
61
  }
61
62
  }
@@ -6,7 +6,32 @@
6
6
  "required": ["schemaId", "schemaVersion"],
7
7
  "properties": {
8
8
  "schemaId": { "const": "urn:gala:schema:template-composition:2.0.0" },
9
- "schemaVersion": { "const": "2.0.0" }
9
+ "schemaVersion": { "const": "2.0.0" },
10
+ "profile": {
11
+ "enum": ["editorial", "newsletter", "visual", "personal", "developer"]
12
+ },
13
+ "homeLayout": {
14
+ "enum": [
15
+ "magazine",
16
+ "newspaper",
17
+ "gallery",
18
+ "chronological",
19
+ "topic-index"
20
+ ]
21
+ },
22
+ "articleLayout": {
23
+ "enum": ["editorial", "issue", "full-bleed", "prose", "technical"]
24
+ },
25
+ "authorLayout": {
26
+ "enum": ["portrait", "profile", "portfolio", "biography"]
27
+ },
28
+ "listingLayout": { "enum": ["rows", "issues", "image-grid", "dated-rows"] },
29
+ "headerLayout": {
30
+ "enum": ["masthead", "publication", "minimal", "compact", "utility"]
31
+ },
32
+ "footerLayout": { "enum": ["expanded", "compact"] },
33
+ "mediaRatio": { "enum": ["landscape", "mixed"] },
34
+ "density": { "enum": ["comfortable", "spacious", "compact"] }
10
35
  },
11
36
  "additionalProperties": false,
12
37
  "$defs": {
@@ -129,5 +154,157 @@
129
154
  "description": "Reverse-DNS extension namespace that cannot shadow a core key."
130
155
  }
131
156
  },
132
- "$comment": "MVP composition is intentionally empty: deferred module properties and every unknown property reject."
157
+ "oneOf": [
158
+ {
159
+ "not": {
160
+ "anyOf": [
161
+ { "properties": { "profile": {} }, "required": ["profile"] },
162
+ { "properties": { "homeLayout": {} }, "required": ["homeLayout"] },
163
+ {
164
+ "properties": { "articleLayout": {} },
165
+ "required": ["articleLayout"]
166
+ },
167
+ {
168
+ "properties": { "authorLayout": {} },
169
+ "required": ["authorLayout"]
170
+ },
171
+ {
172
+ "properties": { "listingLayout": {} },
173
+ "required": ["listingLayout"]
174
+ },
175
+ {
176
+ "properties": { "headerLayout": {} },
177
+ "required": ["headerLayout"]
178
+ },
179
+ {
180
+ "properties": { "footerLayout": {} },
181
+ "required": ["footerLayout"]
182
+ },
183
+ { "properties": { "mediaRatio": {} }, "required": ["mediaRatio"] },
184
+ { "properties": { "density": {} }, "required": ["density"] }
185
+ ]
186
+ }
187
+ },
188
+ {
189
+ "properties": {
190
+ "profile": { "const": "editorial" },
191
+ "homeLayout": { "const": "magazine" },
192
+ "articleLayout": { "const": "editorial" },
193
+ "authorLayout": { "const": "portrait" },
194
+ "listingLayout": { "const": "rows" },
195
+ "headerLayout": { "const": "masthead" },
196
+ "footerLayout": { "const": "expanded" },
197
+ "mediaRatio": { "const": "landscape" },
198
+ "density": { "const": "comfortable" }
199
+ },
200
+ "required": [
201
+ "profile",
202
+ "homeLayout",
203
+ "articleLayout",
204
+ "authorLayout",
205
+ "listingLayout",
206
+ "headerLayout",
207
+ "footerLayout",
208
+ "mediaRatio",
209
+ "density"
210
+ ]
211
+ },
212
+ {
213
+ "properties": {
214
+ "profile": { "const": "newsletter" },
215
+ "homeLayout": { "const": "newspaper" },
216
+ "articleLayout": { "const": "issue" },
217
+ "authorLayout": { "const": "profile" },
218
+ "listingLayout": { "const": "issues" },
219
+ "headerLayout": { "const": "publication" },
220
+ "footerLayout": { "const": "expanded" },
221
+ "mediaRatio": { "const": "landscape" },
222
+ "density": { "const": "comfortable" }
223
+ },
224
+ "required": [
225
+ "profile",
226
+ "homeLayout",
227
+ "articleLayout",
228
+ "authorLayout",
229
+ "listingLayout",
230
+ "headerLayout",
231
+ "footerLayout",
232
+ "mediaRatio",
233
+ "density"
234
+ ]
235
+ },
236
+ {
237
+ "properties": {
238
+ "profile": { "const": "visual" },
239
+ "homeLayout": { "const": "gallery" },
240
+ "articleLayout": { "const": "full-bleed" },
241
+ "authorLayout": { "const": "portfolio" },
242
+ "listingLayout": { "const": "image-grid" },
243
+ "headerLayout": { "const": "minimal" },
244
+ "footerLayout": { "const": "compact" },
245
+ "mediaRatio": { "const": "mixed" },
246
+ "density": { "const": "comfortable" }
247
+ },
248
+ "required": [
249
+ "profile",
250
+ "homeLayout",
251
+ "articleLayout",
252
+ "authorLayout",
253
+ "listingLayout",
254
+ "headerLayout",
255
+ "footerLayout",
256
+ "mediaRatio",
257
+ "density"
258
+ ]
259
+ },
260
+ {
261
+ "properties": {
262
+ "profile": { "const": "personal" },
263
+ "homeLayout": { "const": "chronological" },
264
+ "articleLayout": { "const": "prose" },
265
+ "authorLayout": { "const": "biography" },
266
+ "listingLayout": { "const": "dated-rows" },
267
+ "headerLayout": { "const": "compact" },
268
+ "footerLayout": { "const": "compact" },
269
+ "mediaRatio": { "const": "landscape" },
270
+ "density": { "const": "spacious" }
271
+ },
272
+ "required": [
273
+ "profile",
274
+ "homeLayout",
275
+ "articleLayout",
276
+ "authorLayout",
277
+ "listingLayout",
278
+ "headerLayout",
279
+ "footerLayout",
280
+ "mediaRatio",
281
+ "density"
282
+ ]
283
+ },
284
+ {
285
+ "properties": {
286
+ "profile": { "const": "developer" },
287
+ "homeLayout": { "const": "topic-index" },
288
+ "articleLayout": { "const": "technical" },
289
+ "authorLayout": { "const": "biography" },
290
+ "listingLayout": { "const": "rows" },
291
+ "headerLayout": { "const": "utility" },
292
+ "footerLayout": { "const": "compact" },
293
+ "mediaRatio": { "const": "landscape" },
294
+ "density": { "const": "compact" }
295
+ },
296
+ "required": [
297
+ "profile",
298
+ "homeLayout",
299
+ "articleLayout",
300
+ "authorLayout",
301
+ "listingLayout",
302
+ "headerLayout",
303
+ "footerLayout",
304
+ "mediaRatio",
305
+ "density"
306
+ ]
307
+ }
308
+ ],
309
+ "$comment": "The legacy composition remains empty. Generation 4 adds five closed, all-fields-required branches; fields from different profiles cannot be mixed and theme options remain deferred."
133
310
  }