git ssb

0+

Piet / ssb-loomio



Tree: e602c7f5b93b901ece225fec5f2fc495eeaed73d

Files: e602c7f5b93b901ece225fec5f2fc495eeaed73d / schema / poll.js

2716 bytesRaw
1const Validate = require('is-my-json-valid')
2const { msgIdRegex, feedIdRegex, blobIdRegex } = require('ssb-ref')
3
4const dotType = require('./pollDetails/dot.js')
5const proposalType = require('./pollDetails/proposal.js')
6const scoreType = require('./pollDetails/score.js')
7const { schema: chooseOneType } = require('./pollDetails/chooseOne.js')
8
9const schema = {
10 $schema: 'http://json-schema.org/schema#',
11 type: 'object',
12 required: ['type', 'pollDetails'],
13 properties: {
14 version: {
15 type: 'string',
16 pattern: '^0.1.0$'
17 },
18 type: {
19 type: 'string',
20 pattern: '^poll$'
21 },
22 pollDetails: {
23 oneOf: [
24 { $ref: '#/definitions/pollDetails/dot'},
25 { $ref: '#/definitions/pollDetails/proposal'},
26 { $ref: '#/definitions/pollDetails/score'},
27 { $ref: '#/definitions/pollDetails/chooseOne'}
28 // { $ref: '#/definitions/pollDetails/rsvp'},
29 // { $ref: '#/definitions/pollDetails/meeting'},
30 ]
31 },
32 text: { type: 'string' },
33 mentions: {
34 oneOf: [
35 { type: 'null' },
36 {
37 type: 'array',
38 items: {
39 oneOf: [
40 { $ref: '#/definitions/mentions/message' },
41 { $ref: '#/definitions/mentions/feed' },
42 { $ref: '#/definitions/mentions/blob' }
43 ]
44 }
45 }
46 ]
47 },
48 recps: {
49 oneOf: [
50 { type: 'null' },
51 {
52 type: 'array',
53 items: {
54 oneOf: [
55 { $ref: '#/definitions/feedId' },
56 { $ref: '#/definitions/mentions/feed' }
57 ]
58 }
59 }
60 ]
61 }
62 },
63 definitions: {
64
65 messageId: {
66 type: 'string',
67 pattern: msgIdRegex
68 },
69 feedId: {
70 type: 'string',
71 pattern: feedIdRegex
72 },
73 blobId: {
74 type: 'string',
75 pattern: blobIdRegex
76 },
77 pollDetails: {
78 type: 'object',
79 dot: dotType,
80 proposal: proposalType,
81 score: scoreType,
82 chooseOne: chooseOneType
83 },
84 mentions: {
85 message: {
86 type: 'object',
87 required: ['link'],
88 properties: {
89 link: { $ref: '#/definitions/messageId'}
90 }
91 },
92 feed: {
93 type: 'object',
94 required: ['link', 'name'],
95 properties: {
96 link: { $ref: '#/definitions/feedId'},
97 name: { type: 'string' }
98 }
99 },
100 blob: {
101 type: 'object',
102 required: ['link', 'name'],
103 properties: {
104 link: { $ref: '#/definitions/blobId'},
105 name: { type: 'string' }
106 }
107 }
108 }
109 }
110}
111
112const validate = Validate(schema, { verbose: true })
113
114module.exports = {
115 schema,
116 validate
117}
118

Built with git-ssb-web