@hozu/cli 0.12.0 → 0.14.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 (86) hide show
  1. package/bin/hozu.js +8 -2
  2. package/dist/commands/accept.d.ts +11 -0
  3. package/dist/commands/accept.d.ts.map +1 -0
  4. package/dist/commands/accept.js +55 -0
  5. package/dist/commands/accept.js.map +1 -0
  6. package/dist/commands/app.d.ts.map +1 -1
  7. package/dist/commands/app.js +11 -3
  8. package/dist/commands/app.js.map +1 -1
  9. package/dist/commands/browse.d.ts.map +1 -1
  10. package/dist/commands/browse.js +4 -2
  11. package/dist/commands/browse.js.map +1 -1
  12. package/dist/commands/build.d.ts.map +1 -1
  13. package/dist/commands/build.js +4 -2
  14. package/dist/commands/build.js.map +1 -1
  15. package/dist/commands/check.d.ts.map +1 -1
  16. package/dist/commands/check.js +9 -5
  17. package/dist/commands/check.js.map +1 -1
  18. package/dist/commands/dev.d.ts.map +1 -1
  19. package/dist/commands/dev.js +10 -1
  20. package/dist/commands/dev.js.map +1 -1
  21. package/dist/commands/docs.d.ts +3 -1
  22. package/dist/commands/docs.d.ts.map +1 -1
  23. package/dist/commands/docs.js +29 -7
  24. package/dist/commands/docs.js.map +1 -1
  25. package/dist/commands/env-ignore.d.ts +8 -0
  26. package/dist/commands/env-ignore.d.ts.map +1 -0
  27. package/dist/commands/env-ignore.js +30 -0
  28. package/dist/commands/env-ignore.js.map +1 -0
  29. package/dist/commands/env.d.ts +6 -0
  30. package/dist/commands/env.d.ts.map +1 -0
  31. package/dist/commands/env.js +77 -0
  32. package/dist/commands/env.js.map +1 -0
  33. package/dist/commands/serve.d.ts.map +1 -1
  34. package/dist/commands/serve.js +13 -1
  35. package/dist/commands/serve.js.map +1 -1
  36. package/dist/commands/validate.d.ts.map +1 -1
  37. package/dist/commands/validate.js +2 -1
  38. package/dist/commands/validate.js.map +1 -1
  39. package/dist/commands/why.d.ts +7 -0
  40. package/dist/commands/why.d.ts.map +1 -0
  41. package/dist/commands/why.js +60 -0
  42. package/dist/commands/why.js.map +1 -0
  43. package/dist/contract.d.ts +52 -20
  44. package/dist/contract.d.ts.map +1 -1
  45. package/dist/index.d.ts +0 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +0 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/load.d.ts +7 -0
  50. package/dist/load.d.ts.map +1 -1
  51. package/dist/load.js +22 -1
  52. package/dist/load.js.map +1 -1
  53. package/dist/main.d.ts.map +1 -1
  54. package/dist/main.js +55 -34
  55. package/dist/main.js.map +1 -1
  56. package/dist/migrate/step-0.11.d.ts +7 -1
  57. package/dist/migrate/step-0.11.d.ts.map +1 -1
  58. package/dist/migrate/step-0.11.js +6 -4
  59. package/dist/migrate/step-0.11.js.map +1 -1
  60. package/dist/migrate/step-0.14.d.ts +6 -0
  61. package/dist/migrate/step-0.14.d.ts.map +1 -0
  62. package/dist/migrate/step-0.14.js +40 -0
  63. package/dist/migrate/step-0.14.js.map +1 -0
  64. package/dist/migrate/steps.d.ts.map +1 -1
  65. package/dist/migrate/steps.js +31 -1
  66. package/dist/migrate/steps.js.map +1 -1
  67. package/dist/output.d.ts.map +1 -1
  68. package/dist/output.js +2 -72
  69. package/dist/output.js.map +1 -1
  70. package/package.json +8 -8
  71. package/schema/check.schema.json +41 -3
  72. package/schema/env.schema.json +122 -0
  73. package/schema/inspect.schema.json +38 -1
  74. package/schema/migrate.schema.json +41 -3
  75. package/schema/render.schema.json +6 -1
  76. package/schema/why.schema.json +975 -0
  77. package/dist/commands/add-widget.d.ts +0 -5
  78. package/dist/commands/add-widget.d.ts.map +0 -1
  79. package/dist/commands/add-widget.js +0 -90
  80. package/dist/commands/add-widget.js.map +0 -1
  81. package/dist/commands/graph.d.ts +0 -7
  82. package/dist/commands/graph.d.ts.map +0 -1
  83. package/dist/commands/graph.js +0 -137
  84. package/dist/commands/graph.js.map +0 -1
  85. package/schema/graph.schema.json +0 -109
  86. package/schema/validate.schema.json +0 -379
@@ -0,0 +1,975 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$ref": "#/definitions/WhyOutput",
4
+ "definitions": {
5
+ "WhyOutput": {
6
+ "anyOf": [
7
+ {
8
+ "type": "object",
9
+ "properties": {
10
+ "target": {
11
+ "type": "string"
12
+ },
13
+ "kind": {
14
+ "type": "string",
15
+ "const": "state"
16
+ },
17
+ "at": {
18
+ "type": [
19
+ "string",
20
+ "null"
21
+ ]
22
+ },
23
+ "state": {
24
+ "$ref": "#/definitions/ExplainOutput"
25
+ }
26
+ },
27
+ "required": [
28
+ "target",
29
+ "kind",
30
+ "at",
31
+ "state"
32
+ ],
33
+ "additionalProperties": false
34
+ },
35
+ {
36
+ "type": "object",
37
+ "properties": {
38
+ "target": {
39
+ "type": "string"
40
+ },
41
+ "kind": {
42
+ "type": "string",
43
+ "enum": [
44
+ "declaration",
45
+ "component"
46
+ ]
47
+ },
48
+ "at": {
49
+ "type": [
50
+ "string",
51
+ "null"
52
+ ]
53
+ },
54
+ "impact": {
55
+ "$ref": "#/definitions/ImpactOutput"
56
+ }
57
+ },
58
+ "required": [
59
+ "target",
60
+ "kind",
61
+ "at",
62
+ "impact"
63
+ ],
64
+ "additionalProperties": false
65
+ },
66
+ {
67
+ "type": "object",
68
+ "properties": {
69
+ "target": {
70
+ "type": "string"
71
+ },
72
+ "kind": {
73
+ "type": "string",
74
+ "enum": [
75
+ "node",
76
+ "page"
77
+ ]
78
+ },
79
+ "at": {
80
+ "type": [
81
+ "string",
82
+ "null"
83
+ ]
84
+ },
85
+ "node": {
86
+ "$ref": "#/definitions/LocateOutput"
87
+ }
88
+ },
89
+ "required": [
90
+ "target",
91
+ "kind",
92
+ "at",
93
+ "node"
94
+ ],
95
+ "additionalProperties": false
96
+ }
97
+ ],
98
+ "description": "`hozu why` (ADR 0053 F): what the target is, where (file:line), and what `explain`, `impact` or `locate` says."
99
+ },
100
+ "ExplainOutput": {
101
+ "type": "object",
102
+ "properties": {
103
+ "feature": {
104
+ "type": "string"
105
+ },
106
+ "state": {
107
+ "type": "string"
108
+ },
109
+ "initial": {
110
+ "type": "boolean"
111
+ },
112
+ "final": {
113
+ "type": "boolean"
114
+ },
115
+ "invoke": {
116
+ "anyOf": [
117
+ {
118
+ "type": "object",
119
+ "properties": {
120
+ "effect": {
121
+ "type": "string"
122
+ },
123
+ "input": {
124
+ "type": "string"
125
+ },
126
+ "errors": {
127
+ "type": "array",
128
+ "items": {
129
+ "type": "string"
130
+ }
131
+ },
132
+ "runs": {
133
+ "$ref": "#/definitions/Runs"
134
+ }
135
+ },
136
+ "required": [
137
+ "effect",
138
+ "input",
139
+ "errors",
140
+ "runs"
141
+ ],
142
+ "additionalProperties": false
143
+ },
144
+ {
145
+ "type": "null"
146
+ }
147
+ ]
148
+ },
149
+ "outgoing": {
150
+ "type": "array",
151
+ "items": {
152
+ "$ref": "#/definitions/ExplainTransition"
153
+ }
154
+ },
155
+ "incoming": {
156
+ "type": "array",
157
+ "items": {
158
+ "$ref": "#/definitions/ExplainTransition"
159
+ }
160
+ },
161
+ "sends": {
162
+ "type": "array",
163
+ "items": {
164
+ "$ref": "#/definitions/ExplainSend"
165
+ }
166
+ }
167
+ },
168
+ "required": [
169
+ "feature",
170
+ "state",
171
+ "initial",
172
+ "final",
173
+ "invoke",
174
+ "outgoing",
175
+ "incoming",
176
+ "sends"
177
+ ],
178
+ "additionalProperties": false
179
+ },
180
+ "Runs": {
181
+ "type": "string",
182
+ "enum": [
183
+ "server",
184
+ "browser",
185
+ "either"
186
+ ],
187
+ "description": "What an effect's implementation needs (ADR 0049): server secrets, browser credentials, or neither."
188
+ },
189
+ "ExplainTransition": {
190
+ "type": "object",
191
+ "properties": {
192
+ "id": {
193
+ "type": "string"
194
+ },
195
+ "from": {
196
+ "type": "string"
197
+ },
198
+ "to": {
199
+ "type": "string"
200
+ },
201
+ "trigger": {
202
+ "type": "string"
203
+ },
204
+ "guard": {
205
+ "type": [
206
+ "string",
207
+ "null"
208
+ ]
209
+ },
210
+ "assign": {
211
+ "type": "array",
212
+ "items": {
213
+ "type": "string"
214
+ }
215
+ },
216
+ "navigate": {
217
+ "type": [
218
+ "string",
219
+ "null"
220
+ ]
221
+ },
222
+ "coveredBy": {
223
+ "type": "array",
224
+ "items": {
225
+ "type": "string"
226
+ }
227
+ }
228
+ },
229
+ "required": [
230
+ "id",
231
+ "from",
232
+ "to",
233
+ "trigger",
234
+ "guard",
235
+ "assign",
236
+ "navigate",
237
+ "coveredBy"
238
+ ],
239
+ "additionalProperties": false
240
+ },
241
+ "ExplainSend": {
242
+ "type": "object",
243
+ "properties": {
244
+ "view": {
245
+ "type": "string"
246
+ },
247
+ "node": {
248
+ "type": "string"
249
+ },
250
+ "event": {
251
+ "type": "string"
252
+ },
253
+ "handled": {
254
+ "type": "boolean"
255
+ }
256
+ },
257
+ "required": [
258
+ "view",
259
+ "node",
260
+ "event",
261
+ "handled"
262
+ ],
263
+ "additionalProperties": false
264
+ },
265
+ "ImpactOutput": {
266
+ "anyOf": [
267
+ {
268
+ "$ref": "#/definitions/Impact"
269
+ },
270
+ {
271
+ "$ref": "#/definitions/ComponentImpact"
272
+ }
273
+ ]
274
+ },
275
+ "Impact": {
276
+ "type": "object",
277
+ "properties": {
278
+ "target": {
279
+ "type": "string"
280
+ },
281
+ "kind": {
282
+ "$ref": "#/definitions/ImpactKind"
283
+ },
284
+ "tags": {
285
+ "type": "array",
286
+ "items": {
287
+ "type": "string"
288
+ }
289
+ },
290
+ "queries": {
291
+ "type": "array",
292
+ "items": {
293
+ "$ref": "#/definitions/ImpactQuery"
294
+ }
295
+ },
296
+ "invalidatedBy": {
297
+ "type": "array",
298
+ "items": {
299
+ "type": "string"
300
+ }
301
+ },
302
+ "uses": {
303
+ "type": "array",
304
+ "items": {
305
+ "$ref": "#/definitions/ImpactUse"
306
+ }
307
+ },
308
+ "features": {
309
+ "type": "array",
310
+ "items": {
311
+ "type": "string"
312
+ }
313
+ },
314
+ "runs": {
315
+ "anyOf": [
316
+ {
317
+ "$ref": "#/definitions/Runs"
318
+ },
319
+ {
320
+ "type": "null"
321
+ }
322
+ ],
323
+ "description": "Where a query or mutation runs (ADR 0049); null for other symbols."
324
+ }
325
+ },
326
+ "required": [
327
+ "target",
328
+ "kind",
329
+ "tags",
330
+ "queries",
331
+ "invalidatedBy",
332
+ "uses",
333
+ "features",
334
+ "runs"
335
+ ],
336
+ "additionalProperties": false
337
+ },
338
+ "ImpactKind": {
339
+ "type": "string",
340
+ "enum": [
341
+ "event",
342
+ "query",
343
+ "mutation",
344
+ "tag",
345
+ "fn",
346
+ "view"
347
+ ]
348
+ },
349
+ "ImpactQuery": {
350
+ "type": "object",
351
+ "properties": {
352
+ "ref": {
353
+ "type": "string"
354
+ },
355
+ "tag": {
356
+ "type": "string"
357
+ },
358
+ "precision": {
359
+ "type": "string",
360
+ "enum": [
361
+ "exact",
362
+ "param-dependent"
363
+ ]
364
+ }
365
+ },
366
+ "required": [
367
+ "ref",
368
+ "tag",
369
+ "precision"
370
+ ],
371
+ "additionalProperties": false
372
+ },
373
+ "ImpactUse": {
374
+ "type": "object",
375
+ "properties": {
376
+ "feature": {
377
+ "type": "string"
378
+ },
379
+ "at": {
380
+ "type": "string"
381
+ },
382
+ "via": {
383
+ "type": "string"
384
+ }
385
+ },
386
+ "required": [
387
+ "feature",
388
+ "at",
389
+ "via"
390
+ ],
391
+ "additionalProperties": false
392
+ },
393
+ "ComponentImpact": {
394
+ "type": "object",
395
+ "properties": {
396
+ "target": {
397
+ "type": "string"
398
+ },
399
+ "kind": {
400
+ "type": "string",
401
+ "const": "component"
402
+ },
403
+ "owner": {
404
+ "$ref": "#/definitions/ComponentOwner"
405
+ },
406
+ "uses": {
407
+ "type": "array",
408
+ "items": {
409
+ "$ref": "#/definitions/ComponentUseSite"
410
+ }
411
+ },
412
+ "features": {
413
+ "type": "array",
414
+ "items": {
415
+ "type": "string"
416
+ }
417
+ }
418
+ },
419
+ "required": [
420
+ "target",
421
+ "kind",
422
+ "owner",
423
+ "uses",
424
+ "features"
425
+ ],
426
+ "additionalProperties": false
427
+ },
428
+ "ComponentOwner": {
429
+ "type": "object",
430
+ "properties": {
431
+ "kind": {
432
+ "type": "string",
433
+ "enum": [
434
+ "kit",
435
+ "feature"
436
+ ]
437
+ },
438
+ "id": {
439
+ "type": "string"
440
+ }
441
+ },
442
+ "required": [
443
+ "kind",
444
+ "id"
445
+ ],
446
+ "additionalProperties": false
447
+ },
448
+ "ComponentUseSite": {
449
+ "type": "object",
450
+ "properties": {
451
+ "feature": {
452
+ "type": "string"
453
+ },
454
+ "node": {
455
+ "type": "string"
456
+ },
457
+ "at": {
458
+ "type": [
459
+ "string",
460
+ "null"
461
+ ]
462
+ },
463
+ "variant": {
464
+ "type": "object",
465
+ "additionalProperties": {
466
+ "type": "string"
467
+ }
468
+ },
469
+ "added": {
470
+ "type": "array",
471
+ "items": {
472
+ "type": "string"
473
+ }
474
+ },
475
+ "overrides": {
476
+ "type": "array",
477
+ "items": {
478
+ "type": "string"
479
+ }
480
+ }
481
+ },
482
+ "required": [
483
+ "feature",
484
+ "node",
485
+ "at",
486
+ "variant",
487
+ "added",
488
+ "overrides"
489
+ ],
490
+ "additionalProperties": false
491
+ },
492
+ "LocateOutput": {
493
+ "$ref": "#/definitions/DevNode"
494
+ },
495
+ "DevNode": {
496
+ "type": "object",
497
+ "properties": {
498
+ "id": {
499
+ "type": "string"
500
+ },
501
+ "pointer": {
502
+ "type": [
503
+ "string",
504
+ "null"
505
+ ]
506
+ },
507
+ "kind": {
508
+ "type": "string",
509
+ "enum": [
510
+ "element",
511
+ "component",
512
+ "text",
513
+ "query",
514
+ "when",
515
+ "if",
516
+ "list",
517
+ "html",
518
+ "embed",
519
+ "page",
520
+ "other"
521
+ ]
522
+ },
523
+ "tag": {
524
+ "type": [
525
+ "string",
526
+ "null"
527
+ ]
528
+ },
529
+ "owner": {
530
+ "anyOf": [
531
+ {
532
+ "type": "object",
533
+ "properties": {
534
+ "feature": {
535
+ "type": "string"
536
+ },
537
+ "view": {
538
+ "type": "string"
539
+ }
540
+ },
541
+ "required": [
542
+ "feature",
543
+ "view"
544
+ ],
545
+ "additionalProperties": false
546
+ },
547
+ {
548
+ "type": "null"
549
+ }
550
+ ]
551
+ },
552
+ "component": {
553
+ "anyOf": [
554
+ {
555
+ "type": "object",
556
+ "properties": {
557
+ "ref": {
558
+ "type": "string"
559
+ },
560
+ "variant": {
561
+ "type": "object",
562
+ "additionalProperties": {
563
+ "type": "string"
564
+ }
565
+ },
566
+ "declaration": {
567
+ "anyOf": [
568
+ {
569
+ "$ref": "#/definitions/DevLocation"
570
+ },
571
+ {
572
+ "type": "null"
573
+ }
574
+ ]
575
+ },
576
+ "uses": {
577
+ "type": "number"
578
+ }
579
+ },
580
+ "required": [
581
+ "ref",
582
+ "variant",
583
+ "declaration",
584
+ "uses"
585
+ ],
586
+ "additionalProperties": false
587
+ },
588
+ {
589
+ "type": "null"
590
+ }
591
+ ]
592
+ },
593
+ "location": {
594
+ "anyOf": [
595
+ {
596
+ "$ref": "#/definitions/DevLocation"
597
+ },
598
+ {
599
+ "type": "null"
600
+ }
601
+ ]
602
+ },
603
+ "classes": {
604
+ "type": [
605
+ "string",
606
+ "null"
607
+ ]
608
+ },
609
+ "text": {
610
+ "type": [
611
+ "string",
612
+ "null"
613
+ ]
614
+ },
615
+ "source": {
616
+ "anyOf": [
617
+ {
618
+ "$ref": "#/definitions/DevTextSource"
619
+ },
620
+ {
621
+ "type": "null"
622
+ }
623
+ ]
624
+ },
625
+ "events": {
626
+ "type": "array",
627
+ "items": {
628
+ "type": "object",
629
+ "properties": {
630
+ "dom": {
631
+ "type": "string"
632
+ },
633
+ "event": {
634
+ "type": "string"
635
+ },
636
+ "transitions": {
637
+ "type": "array",
638
+ "items": {
639
+ "$ref": "#/definitions/DevTransition"
640
+ }
641
+ }
642
+ },
643
+ "required": [
644
+ "dom",
645
+ "event",
646
+ "transitions"
647
+ ],
648
+ "additionalProperties": false
649
+ }
650
+ },
651
+ "conditions": {
652
+ "type": "array",
653
+ "items": {
654
+ "$ref": "#/definitions/DevCondition"
655
+ }
656
+ },
657
+ "machine": {
658
+ "anyOf": [
659
+ {
660
+ "$ref": "#/definitions/DevLocation"
661
+ },
662
+ {
663
+ "type": "null"
664
+ }
665
+ ]
666
+ },
667
+ "children": {
668
+ "type": "array",
669
+ "items": {
670
+ "type": "object",
671
+ "properties": {
672
+ "id": {
673
+ "type": "string"
674
+ },
675
+ "kind": {
676
+ "type": "string"
677
+ },
678
+ "text": {
679
+ "type": [
680
+ "string",
681
+ "null"
682
+ ]
683
+ },
684
+ "source": {
685
+ "anyOf": [
686
+ {
687
+ "$ref": "#/definitions/DevTextSource"
688
+ },
689
+ {
690
+ "type": "null"
691
+ }
692
+ ]
693
+ }
694
+ },
695
+ "required": [
696
+ "id",
697
+ "kind",
698
+ "text",
699
+ "source"
700
+ ],
701
+ "additionalProperties": false
702
+ }
703
+ },
704
+ "excerpt": {
705
+ "anyOf": [
706
+ {
707
+ "type": "object",
708
+ "properties": {
709
+ "start": {
710
+ "type": "number"
711
+ },
712
+ "lines": {
713
+ "type": "array",
714
+ "items": {
715
+ "type": "string"
716
+ }
717
+ }
718
+ },
719
+ "required": [
720
+ "start",
721
+ "lines"
722
+ ],
723
+ "additionalProperties": false
724
+ },
725
+ {
726
+ "type": "null"
727
+ }
728
+ ]
729
+ },
730
+ "page": {
731
+ "anyOf": [
732
+ {
733
+ "$ref": "#/definitions/DevPage"
734
+ },
735
+ {
736
+ "type": "null"
737
+ }
738
+ ]
739
+ }
740
+ },
741
+ "required": [
742
+ "id",
743
+ "pointer",
744
+ "kind",
745
+ "tag",
746
+ "owner",
747
+ "component",
748
+ "location",
749
+ "classes",
750
+ "text",
751
+ "source",
752
+ "events",
753
+ "conditions",
754
+ "machine",
755
+ "children",
756
+ "excerpt",
757
+ "page"
758
+ ],
759
+ "additionalProperties": false
760
+ },
761
+ "DevLocation": {
762
+ "type": "object",
763
+ "properties": {
764
+ "file": {
765
+ "type": "string"
766
+ },
767
+ "line": {
768
+ "type": "number"
769
+ },
770
+ "column": {
771
+ "type": "number"
772
+ }
773
+ },
774
+ "required": [
775
+ "file",
776
+ "line",
777
+ "column"
778
+ ],
779
+ "additionalProperties": false
780
+ },
781
+ "DevTextSource": {
782
+ "type": "object",
783
+ "properties": {
784
+ "kind": {
785
+ "type": "string",
786
+ "enum": [
787
+ "literal",
788
+ "message",
789
+ "data",
790
+ "context",
791
+ "route",
792
+ "computed"
793
+ ]
794
+ },
795
+ "detail": {
796
+ "type": "string"
797
+ },
798
+ "location": {
799
+ "anyOf": [
800
+ {
801
+ "$ref": "#/definitions/DevLocation"
802
+ },
803
+ {
804
+ "type": "null"
805
+ }
806
+ ]
807
+ },
808
+ "uses": {
809
+ "type": [
810
+ "number",
811
+ "null"
812
+ ]
813
+ }
814
+ },
815
+ "required": [
816
+ "kind",
817
+ "detail",
818
+ "location",
819
+ "uses"
820
+ ],
821
+ "additionalProperties": false
822
+ },
823
+ "DevTransition": {
824
+ "type": "object",
825
+ "properties": {
826
+ "from": {
827
+ "type": "string"
828
+ },
829
+ "to": {
830
+ "type": "string"
831
+ },
832
+ "guarded": {
833
+ "type": "boolean"
834
+ },
835
+ "navigates": {
836
+ "type": "boolean"
837
+ },
838
+ "location": {
839
+ "anyOf": [
840
+ {
841
+ "$ref": "#/definitions/DevLocation"
842
+ },
843
+ {
844
+ "type": "null"
845
+ }
846
+ ]
847
+ }
848
+ },
849
+ "required": [
850
+ "from",
851
+ "to",
852
+ "guarded",
853
+ "navigates",
854
+ "location"
855
+ ],
856
+ "additionalProperties": false
857
+ },
858
+ "DevCondition": {
859
+ "type": "object",
860
+ "properties": {
861
+ "kind": {
862
+ "type": "string",
863
+ "enum": [
864
+ "when",
865
+ "if",
866
+ "query",
867
+ "each"
868
+ ]
869
+ },
870
+ "detail": {
871
+ "type": "string"
872
+ },
873
+ "location": {
874
+ "anyOf": [
875
+ {
876
+ "$ref": "#/definitions/DevLocation"
877
+ },
878
+ {
879
+ "type": "null"
880
+ }
881
+ ]
882
+ }
883
+ },
884
+ "required": [
885
+ "kind",
886
+ "detail",
887
+ "location"
888
+ ],
889
+ "additionalProperties": false
890
+ },
891
+ "DevPage": {
892
+ "type": "object",
893
+ "properties": {
894
+ "route": {
895
+ "type": "string"
896
+ },
897
+ "path": {
898
+ "type": "string"
899
+ },
900
+ "routeLocation": {
901
+ "anyOf": [
902
+ {
903
+ "$ref": "#/definitions/DevLocation"
904
+ },
905
+ {
906
+ "type": "null"
907
+ }
908
+ ]
909
+ },
910
+ "views": {
911
+ "type": "array",
912
+ "items": {
913
+ "type": "string"
914
+ }
915
+ },
916
+ "head": {
917
+ "type": "object",
918
+ "properties": {
919
+ "title": {
920
+ "type": [
921
+ "string",
922
+ "null"
923
+ ]
924
+ },
925
+ "description": {
926
+ "type": [
927
+ "string",
928
+ "null"
929
+ ]
930
+ },
931
+ "image": {
932
+ "type": [
933
+ "string",
934
+ "null"
935
+ ]
936
+ },
937
+ "type": {
938
+ "type": "string",
939
+ "enum": [
940
+ "website",
941
+ "article"
942
+ ]
943
+ },
944
+ "noindex": {
945
+ "type": "boolean"
946
+ },
947
+ "query": {
948
+ "type": [
949
+ "string",
950
+ "null"
951
+ ]
952
+ }
953
+ },
954
+ "required": [
955
+ "title",
956
+ "description",
957
+ "image",
958
+ "type",
959
+ "noindex",
960
+ "query"
961
+ ],
962
+ "additionalProperties": false
963
+ }
964
+ },
965
+ "required": [
966
+ "route",
967
+ "path",
968
+ "routeLocation",
969
+ "views",
970
+ "head"
971
+ ],
972
+ "additionalProperties": false
973
+ }
974
+ }
975
+ }