mailschema 0.2.0 → 0.3.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -7
  3. data/README.md +29 -88
  4. data/artifacts/context.jsonld +50 -0
  5. data/artifacts/contract.schema.json +206 -0
  6. data/artifacts/core.schema.json +210 -0
  7. data/artifacts/implementation.schema.json +173 -0
  8. data/artifacts/profile.json +27 -0
  9. data/lib/mailschema/artifacts.rb +32 -75
  10. data/lib/mailschema/authentication.rb +77 -0
  11. data/lib/mailschema/contract.rb +184 -281
  12. data/lib/mailschema/description.rb +56 -0
  13. data/lib/mailschema/formats.rb +77 -0
  14. data/lib/mailschema/header.rb +75 -0
  15. data/lib/mailschema/implementation.rb +27 -0
  16. data/lib/mailschema/jcs.rb +11 -10
  17. data/lib/mailschema/json.rb +190 -0
  18. data/lib/mailschema/message.rb +127 -12
  19. data/lib/mailschema/origin.rb +18 -0
  20. data/lib/mailschema/patterns.rb +173 -0
  21. data/lib/mailschema/subschemas.rb +70 -0
  22. data/lib/mailschema/version.rb +1 -1
  23. data/lib/mailschema.rb +16 -26
  24. data/sig/mailschema.rbs +76 -68
  25. metadata +29 -54
  26. data/contexts/map-0.2.jsonld +0 -91
  27. data/lib/mailschema/capability.rb +0 -41
  28. data/lib/mailschema/document.rb +0 -79
  29. data/lib/mailschema/documents.rb +0 -127
  30. data/lib/mailschema/forms.rb +0 -41
  31. data/lib/mailschema/http.rb +0 -25
  32. data/lib/mailschema/limits.rb +0 -56
  33. data/lib/mailschema/pointer.rb +0 -46
  34. data/lib/mailschema/references.rb +0 -62
  35. data/lib/mailschema/schema_walk.rb +0 -29
  36. data/schemas/contribution.schema.json +0 -874
  37. data/schemas/forms-0.1.schema.json +0 -329
  38. data/schemas/map-0.2.schema.json +0 -1033
  39. data/schemas/type-contract-0.2.schema.json +0 -179
@@ -1,874 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "title": "MailSchema contribution format",
4
- "description": "Repository contribution data. This is not a MAP message or wire representation.",
5
- "$defs": {
6
- "definition": {
7
- "type": "object",
8
- "additionalProperties": false,
9
- "properties": {
10
- "slug": {
11
- "type": "string",
12
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
13
- "maxLength": 100
14
- },
15
- "name": {
16
- "type": "string",
17
- "minLength": 1,
18
- "maxLength": 240,
19
- "pattern": "\\S"
20
- },
21
- "summary": {
22
- "type": "string",
23
- "minLength": 1,
24
- "maxLength": 500,
25
- "pattern": "\\S"
26
- },
27
- "category": {
28
- "type": "string",
29
- "minLength": 1,
30
- "maxLength": 240,
31
- "pattern": "\\S"
32
- },
33
- "status": {
34
- "enum": ["Draft", "Proposal", "Reuse assessment"]
35
- },
36
- "version": {
37
- "anyOf": [
38
- {
39
- "type": "string",
40
- "pattern": "^[0-9]+\\.[0-9]+(?:\\.[0-9]+)?(?:-[a-zA-Z0-9.-]+)?$",
41
- "maxLength": 80
42
- },
43
- {
44
- "type": "null"
45
- }
46
- ]
47
- },
48
- "profile": {
49
- "type": "string",
50
- "minLength": 1,
51
- "maxLength": 240,
52
- "pattern": "\\S"
53
- },
54
- "overview": {
55
- "type": "string",
56
- "minLength": 1,
57
- "maxLength": 12000,
58
- "pattern": "\\S"
59
- },
60
- "target": {
61
- "type": "string",
62
- "minLength": 1,
63
- "maxLength": 12000,
64
- "pattern": "\\S"
65
- },
66
- "operations": {
67
- "type": "array",
68
- "items": {
69
- "type": "object",
70
- "additionalProperties": false,
71
- "properties": {
72
- "id": {
73
- "type": "string",
74
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
75
- "maxLength": 100
76
- },
77
- "name": {
78
- "type": "string",
79
- "minLength": 1,
80
- "maxLength": 240,
81
- "pattern": "\\S"
82
- },
83
- "description": {
84
- "type": "string",
85
- "minLength": 1,
86
- "maxLength": 12000,
87
- "pattern": "\\S"
88
- }
89
- },
90
- "required": ["id", "name", "description"]
91
- },
92
- "minItems": 1,
93
- "maxItems": 100
94
- },
95
- "inputs": {
96
- "type": "string",
97
- "minLength": 1,
98
- "maxLength": 12000,
99
- "pattern": "\\S"
100
- },
101
- "results": {
102
- "type": "string",
103
- "minLength": 1,
104
- "maxLength": 12000,
105
- "pattern": "\\S"
106
- },
107
- "permissions": {
108
- "type": "string",
109
- "minLength": 1,
110
- "maxLength": 12000,
111
- "pattern": "\\S"
112
- },
113
- "humanRoute": {
114
- "type": "string",
115
- "minLength": 1,
116
- "maxLength": 12000,
117
- "pattern": "\\S"
118
- },
119
- "example": {
120
- "type": "object",
121
- "additionalProperties": false,
122
- "properties": {
123
- "title": {
124
- "type": "string",
125
- "minLength": 1,
126
- "maxLength": 240,
127
- "pattern": "\\S"
128
- },
129
- "steps": {
130
- "type": "array",
131
- "items": {
132
- "type": "string",
133
- "minLength": 1,
134
- "maxLength": 12000,
135
- "pattern": "\\S"
136
- },
137
- "minItems": 1,
138
- "maxItems": 100
139
- },
140
- "exception": {
141
- "type": "string",
142
- "minLength": 1,
143
- "maxLength": 12000,
144
- "pattern": "\\S"
145
- }
146
- },
147
- "required": ["title", "steps", "exception"]
148
- },
149
- "references": {
150
- "type": "array",
151
- "items": {
152
- "type": "object",
153
- "additionalProperties": false,
154
- "properties": {
155
- "title": {
156
- "type": "string",
157
- "minLength": 1,
158
- "maxLength": 240,
159
- "pattern": "\\S"
160
- },
161
- "href": {
162
- "type": "string",
163
- "format": "uri",
164
- "pattern": "^https://",
165
- "maxLength": 2048
166
- },
167
- "description": {
168
- "type": "string",
169
- "minLength": 1,
170
- "maxLength": 12000,
171
- "pattern": "\\S"
172
- }
173
- },
174
- "required": ["title", "href", "description"]
175
- },
176
- "minItems": 1,
177
- "maxItems": 100
178
- },
179
- "openQuestions": {
180
- "type": "array",
181
- "items": {
182
- "type": "string",
183
- "minLength": 1,
184
- "maxLength": 12000,
185
- "pattern": "\\S"
186
- },
187
- "minItems": 0,
188
- "maxItems": 100
189
- },
190
- "maintainers": {
191
- "type": "array",
192
- "items": {
193
- "type": "object",
194
- "additionalProperties": false,
195
- "properties": {
196
- "id": {
197
- "type": "string",
198
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
199
- "maxLength": 100
200
- },
201
- "name": {
202
- "type": "string",
203
- "minLength": 1,
204
- "maxLength": 240,
205
- "pattern": "\\S"
206
- },
207
- "url": {
208
- "type": "string",
209
- "format": "uri",
210
- "pattern": "^https://",
211
- "maxLength": 2048
212
- }
213
- },
214
- "required": ["name"]
215
- },
216
- "minItems": 1,
217
- "maxItems": 100
218
- },
219
- "definition": {
220
- "type": "object",
221
- "additionalProperties": false,
222
- "properties": {
223
- "label": {
224
- "type": "string",
225
- "minLength": 1,
226
- "maxLength": 240,
227
- "pattern": "\\S"
228
- },
229
- "href": {
230
- "type": "string",
231
- "pattern": "^/specification/(?:[a-z0-9-]+/)*$",
232
- "maxLength": 300
233
- }
234
- },
235
- "required": ["label", "href"]
236
- }
237
- },
238
- "required": [
239
- "slug",
240
- "name",
241
- "summary",
242
- "category",
243
- "status",
244
- "version",
245
- "profile",
246
- "overview",
247
- "target",
248
- "operations",
249
- "inputs",
250
- "results",
251
- "permissions",
252
- "humanRoute",
253
- "example",
254
- "references",
255
- "openQuestions",
256
- "maintainers"
257
- ],
258
- "allOf": [
259
- {
260
- "if": {
261
- "properties": {
262
- "status": {
263
- "const": "Draft"
264
- }
265
- },
266
- "required": ["status"]
267
- },
268
- "then": {
269
- "required": ["definition"],
270
- "properties": {
271
- "version": {
272
- "type": "string"
273
- }
274
- }
275
- }
276
- }
277
- ]
278
- },
279
- "record": {
280
- "type": "object",
281
- "additionalProperties": false,
282
- "properties": {
283
- "slug": {
284
- "type": "string",
285
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
286
- "maxLength": 100
287
- },
288
- "name": {
289
- "type": "string",
290
- "minLength": 1,
291
- "maxLength": 240,
292
- "pattern": "\\S"
293
- },
294
- "summary": {
295
- "type": "string",
296
- "minLength": 1,
297
- "maxLength": 500,
298
- "pattern": "\\S"
299
- },
300
- "category": {
301
- "type": "string",
302
- "minLength": 1,
303
- "maxLength": 240,
304
- "pattern": "\\S"
305
- },
306
- "status": {
307
- "enum": ["Draft", "Proposal", "Reuse assessment"]
308
- },
309
- "version": {
310
- "anyOf": [
311
- {
312
- "type": "string",
313
- "pattern": "^[0-9]+\\.[0-9]+(?:\\.[0-9]+)?(?:-[a-zA-Z0-9.-]+)?$",
314
- "maxLength": 80
315
- },
316
- {
317
- "type": "null"
318
- }
319
- ]
320
- },
321
- "profile": {
322
- "type": "string",
323
- "minLength": 1,
324
- "maxLength": 240,
325
- "pattern": "\\S"
326
- },
327
- "overview": {
328
- "type": "string",
329
- "minLength": 1,
330
- "maxLength": 12000,
331
- "pattern": "\\S"
332
- },
333
- "target": {
334
- "type": "string",
335
- "minLength": 1,
336
- "maxLength": 12000,
337
- "pattern": "\\S"
338
- },
339
- "operations": {
340
- "type": "array",
341
- "items": {
342
- "type": "object",
343
- "additionalProperties": false,
344
- "properties": {
345
- "id": {
346
- "type": "string",
347
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
348
- "maxLength": 100
349
- },
350
- "name": {
351
- "type": "string",
352
- "minLength": 1,
353
- "maxLength": 240,
354
- "pattern": "\\S"
355
- },
356
- "description": {
357
- "type": "string",
358
- "minLength": 1,
359
- "maxLength": 12000,
360
- "pattern": "\\S"
361
- }
362
- },
363
- "required": ["id", "name", "description"]
364
- },
365
- "minItems": 1,
366
- "maxItems": 100
367
- },
368
- "inputs": {
369
- "type": "string",
370
- "minLength": 1,
371
- "maxLength": 12000,
372
- "pattern": "\\S"
373
- },
374
- "results": {
375
- "type": "string",
376
- "minLength": 1,
377
- "maxLength": 12000,
378
- "pattern": "\\S"
379
- },
380
- "permissions": {
381
- "type": "string",
382
- "minLength": 1,
383
- "maxLength": 12000,
384
- "pattern": "\\S"
385
- },
386
- "humanRoute": {
387
- "type": "string",
388
- "minLength": 1,
389
- "maxLength": 12000,
390
- "pattern": "\\S"
391
- },
392
- "example": {
393
- "type": "object",
394
- "additionalProperties": false,
395
- "properties": {
396
- "title": {
397
- "type": "string",
398
- "minLength": 1,
399
- "maxLength": 240,
400
- "pattern": "\\S"
401
- },
402
- "steps": {
403
- "type": "array",
404
- "items": {
405
- "type": "string",
406
- "minLength": 1,
407
- "maxLength": 12000,
408
- "pattern": "\\S"
409
- },
410
- "minItems": 1,
411
- "maxItems": 100
412
- },
413
- "exception": {
414
- "type": "string",
415
- "minLength": 1,
416
- "maxLength": 12000,
417
- "pattern": "\\S"
418
- }
419
- },
420
- "required": ["title", "steps", "exception"]
421
- },
422
- "references": {
423
- "type": "array",
424
- "items": {
425
- "type": "object",
426
- "additionalProperties": false,
427
- "properties": {
428
- "title": {
429
- "type": "string",
430
- "minLength": 1,
431
- "maxLength": 240,
432
- "pattern": "\\S"
433
- },
434
- "href": {
435
- "type": "string",
436
- "format": "uri",
437
- "pattern": "^https://",
438
- "maxLength": 2048
439
- },
440
- "description": {
441
- "type": "string",
442
- "minLength": 1,
443
- "maxLength": 12000,
444
- "pattern": "\\S"
445
- }
446
- },
447
- "required": ["title", "href", "description"]
448
- },
449
- "minItems": 1,
450
- "maxItems": 100
451
- },
452
- "openQuestions": {
453
- "type": "array",
454
- "items": {
455
- "type": "string",
456
- "minLength": 1,
457
- "maxLength": 12000,
458
- "pattern": "\\S"
459
- },
460
- "minItems": 0,
461
- "maxItems": 100
462
- },
463
- "maintainers": {
464
- "type": "array",
465
- "items": {
466
- "type": "object",
467
- "additionalProperties": false,
468
- "properties": {
469
- "name": {
470
- "type": "string",
471
- "minLength": 1,
472
- "maxLength": 240,
473
- "pattern": "\\S"
474
- },
475
- "url": {
476
- "type": "string",
477
- "format": "uri",
478
- "pattern": "^https://",
479
- "maxLength": 2048
480
- }
481
- },
482
- "required": ["name"]
483
- },
484
- "minItems": 1,
485
- "maxItems": 100
486
- },
487
- "definition": {
488
- "type": "object",
489
- "additionalProperties": false,
490
- "properties": {
491
- "label": {
492
- "type": "string",
493
- "minLength": 1,
494
- "maxLength": 240,
495
- "pattern": "\\S"
496
- },
497
- "href": {
498
- "type": "string",
499
- "pattern": "^/specification/(?:[a-z0-9-]+/)*$",
500
- "maxLength": 300
501
- }
502
- },
503
- "required": ["label", "href"]
504
- },
505
- "origin": {
506
- "type": "string",
507
- "minLength": 1,
508
- "maxLength": 240,
509
- "pattern": "\\S"
510
- },
511
- "contributors": {
512
- "type": "array",
513
- "items": {
514
- "type": "object",
515
- "additionalProperties": false,
516
- "properties": {
517
- "name": {
518
- "type": "string",
519
- "minLength": 1,
520
- "maxLength": 240,
521
- "pattern": "\\S"
522
- },
523
- "url": {
524
- "type": "string",
525
- "format": "uri",
526
- "pattern": "^https://",
527
- "maxLength": 2048
528
- }
529
- },
530
- "required": ["name"]
531
- },
532
- "minItems": 1,
533
- "maxItems": 100
534
- },
535
- "history": {
536
- "type": "array",
537
- "items": {
538
- "type": "object",
539
- "additionalProperties": false,
540
- "properties": {
541
- "label": {
542
- "type": "string",
543
- "minLength": 1,
544
- "maxLength": 240,
545
- "pattern": "\\S"
546
- },
547
- "description": {
548
- "type": "string",
549
- "minLength": 1,
550
- "maxLength": 12000,
551
- "pattern": "\\S"
552
- },
553
- "contributionId": {
554
- "type": "string",
555
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
556
- "maxLength": 100
557
- }
558
- },
559
- "required": ["label", "description"]
560
- },
561
- "minItems": 1,
562
- "maxItems": 100
563
- }
564
- },
565
- "required": [
566
- "slug",
567
- "name",
568
- "summary",
569
- "category",
570
- "status",
571
- "version",
572
- "profile",
573
- "overview",
574
- "target",
575
- "operations",
576
- "inputs",
577
- "results",
578
- "permissions",
579
- "humanRoute",
580
- "example",
581
- "references",
582
- "openQuestions",
583
- "maintainers",
584
- "origin",
585
- "contributors",
586
- "history"
587
- ],
588
- "allOf": [
589
- {
590
- "if": {
591
- "properties": {
592
- "status": {
593
- "const": "Draft"
594
- }
595
- },
596
- "required": ["status"]
597
- },
598
- "then": {
599
- "required": ["definition"],
600
- "properties": {
601
- "version": {
602
- "type": "string"
603
- }
604
- }
605
- }
606
- }
607
- ]
608
- }
609
- },
610
- "oneOf": [
611
- {
612
- "type": "object",
613
- "additionalProperties": false,
614
- "properties": {
615
- "format": {
616
- "const": "mailschema-contribution/1"
617
- },
618
- "id": {
619
- "type": "string",
620
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
621
- "maxLength": 100
622
- },
623
- "contributor": {
624
- "type": "object",
625
- "additionalProperties": false,
626
- "properties": {
627
- "name": {
628
- "type": "string",
629
- "minLength": 1,
630
- "maxLength": 240,
631
- "pattern": "\\S"
632
- },
633
- "url": {
634
- "type": "string",
635
- "format": "uri",
636
- "pattern": "^https://",
637
- "maxLength": 2048
638
- }
639
- },
640
- "required": ["name"]
641
- },
642
- "source": {
643
- "type": "string",
644
- "format": "uri",
645
- "pattern": "^https://",
646
- "maxLength": 2048
647
- },
648
- "summary": {
649
- "type": "string",
650
- "minLength": 1,
651
- "maxLength": 12000,
652
- "pattern": "\\S"
653
- },
654
- "kind": {
655
- "const": "new-type"
656
- },
657
- "record": {
658
- "$ref": "#/$defs/definition"
659
- }
660
- },
661
- "required": ["format", "id", "contributor", "summary", "kind", "record"]
662
- },
663
- {
664
- "type": "object",
665
- "additionalProperties": false,
666
- "properties": {
667
- "format": {
668
- "const": "mailschema-contribution/1"
669
- },
670
- "id": {
671
- "type": "string",
672
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
673
- "maxLength": 100
674
- },
675
- "contributor": {
676
- "type": "object",
677
- "additionalProperties": false,
678
- "properties": {
679
- "name": {
680
- "type": "string",
681
- "minLength": 1,
682
- "maxLength": 240,
683
- "pattern": "\\S"
684
- },
685
- "url": {
686
- "type": "string",
687
- "format": "uri",
688
- "pattern": "^https://",
689
- "maxLength": 2048
690
- }
691
- },
692
- "required": ["name"]
693
- },
694
- "source": {
695
- "type": "string",
696
- "format": "uri",
697
- "pattern": "^https://",
698
- "maxLength": 2048
699
- },
700
- "summary": {
701
- "type": "string",
702
- "minLength": 1,
703
- "maxLength": 12000,
704
- "pattern": "\\S"
705
- },
706
- "kind": {
707
- "const": "amendment"
708
- },
709
- "baseDigest": {
710
- "type": "string",
711
- "pattern": "^[a-f0-9]{64}$"
712
- },
713
- "record": {
714
- "$ref": "#/$defs/definition"
715
- }
716
- },
717
- "required": ["format", "id", "contributor", "summary", "kind", "baseDigest", "record"]
718
- },
719
- {
720
- "type": "object",
721
- "additionalProperties": false,
722
- "properties": {
723
- "format": {
724
- "const": "mailschema-contribution/1"
725
- },
726
- "id": {
727
- "type": "string",
728
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
729
- "maxLength": 100
730
- },
731
- "contributor": {
732
- "type": "object",
733
- "additionalProperties": false,
734
- "properties": {
735
- "name": {
736
- "type": "string",
737
- "minLength": 1,
738
- "maxLength": 240,
739
- "pattern": "\\S"
740
- },
741
- "url": {
742
- "type": "string",
743
- "format": "uri",
744
- "pattern": "^https://",
745
- "maxLength": 2048
746
- }
747
- },
748
- "required": ["name"]
749
- },
750
- "source": {
751
- "type": "string",
752
- "format": "uri",
753
- "pattern": "^https://",
754
- "maxLength": 2048
755
- },
756
- "summary": {
757
- "type": "string",
758
- "minLength": 1,
759
- "maxLength": 12000,
760
- "pattern": "\\S"
761
- },
762
- "kind": {
763
- "const": "implementation"
764
- },
765
- "type": {
766
- "type": "string",
767
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
768
- "maxLength": 100
769
- },
770
- "typeVersion": {
771
- "type": "string",
772
- "pattern": "^[0-9]+\\.[0-9]+(?:\\.[0-9]+)?(?:-[a-zA-Z0-9.-]+)?$",
773
- "maxLength": 80
774
- },
775
- "typeDigest": {
776
- "type": "string",
777
- "pattern": "^[a-f0-9]{64}$"
778
- },
779
- "profile": {
780
- "type": "string",
781
- "minLength": 1,
782
- "maxLength": 240,
783
- "pattern": "\\S"
784
- },
785
- "product": {
786
- "type": "object",
787
- "additionalProperties": false,
788
- "properties": {
789
- "name": {
790
- "type": "string",
791
- "minLength": 1,
792
- "maxLength": 240,
793
- "pattern": "\\S"
794
- },
795
- "url": {
796
- "type": "string",
797
- "format": "uri",
798
- "pattern": "^https://",
799
- "maxLength": 2048
800
- }
801
- },
802
- "required": ["name"]
803
- },
804
- "operations": {
805
- "type": "array",
806
- "items": {
807
- "type": "string",
808
- "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
809
- "maxLength": 100
810
- },
811
- "minItems": 1,
812
- "maxItems": 100
813
- },
814
- "evidence": {
815
- "type": "object",
816
- "additionalProperties": false,
817
- "properties": {
818
- "kind": {
819
- "enum": ["declaration", "test-report"]
820
- },
821
- "url": {
822
- "type": "string",
823
- "format": "uri",
824
- "pattern": "^https://",
825
- "maxLength": 2048
826
- },
827
- "reproduction": {
828
- "type": "string",
829
- "minLength": 1,
830
- "maxLength": 12000,
831
- "pattern": "\\S"
832
- },
833
- "results": {
834
- "type": "string",
835
- "minLength": 1,
836
- "maxLength": 12000,
837
- "pattern": "\\S"
838
- }
839
- },
840
- "required": ["kind"],
841
- "allOf": [
842
- {
843
- "if": {
844
- "properties": {
845
- "kind": {
846
- "const": "test-report"
847
- }
848
- },
849
- "required": ["kind"]
850
- },
851
- "then": {
852
- "required": ["url", "reproduction", "results"]
853
- }
854
- }
855
- ]
856
- }
857
- },
858
- "required": [
859
- "format",
860
- "id",
861
- "contributor",
862
- "summary",
863
- "kind",
864
- "type",
865
- "typeVersion",
866
- "typeDigest",
867
- "profile",
868
- "product",
869
- "operations",
870
- "evidence"
871
- ]
872
- }
873
- ]
874
- }