-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathschema.js
118 lines (110 loc) · 2.25 KB
/
schema.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
const Hyperschema = require('hyperschema')
const HyperdbBuilder = require('hyperdb/builder')
const Hyperdispatch = require('hyperdispatch')
// SCHEMA CREATION START //
const autopass = Hyperschema.from('./spec/schema')
const template = autopass.namespace('autopass')
// You can find a list of supported data types here: https://github.com/holepunchto/compact-encoding
template.register({
name: 'records',
compact: false,
fields: [{
name: 'key',
type: 'string',
required: true
}, {
name: 'value',
type: 'string',
required: false
}
]
})
template.register({
name: 'writer',
compact: false,
fields: [{
name: 'key',
type: 'buffer',
required: true
}
]
})
template.register({
name: 'delete',
compact: false,
fields: [{
name: 'key',
type: 'string',
required: true
}
]
})
template.register({
name: 'invite',
compact: false,
fields: [{
name: 'id',
type: 'buffer',
required: true
}, {
name: 'invite',
type: 'buffer',
required: true
}, {
name: 'publicKey',
type: 'buffer',
required: true
}, {
name: 'expires',
type: 'int',
required: true
}
]
})
Hyperschema.toDisk(autopass)
const dbTemplate = HyperdbBuilder.from('./spec/schema', './spec/db')
const blobs = dbTemplate.namespace('autopass')
blobs.collections.register({
name: 'records',
schema: '@autopass/records',
key: ['key']
})
blobs.collections.register({
name: 'invite',
schema: '@autopass/invite',
key: ['id']
})
blobs.collections.register({
name: 'writer',
schema: '@autopass/writer',
key: ['key']
})
blobs.collections.register({
name: 'delete',
schema: '@autopass/delete',
key: ['key']
})
HyperdbBuilder.toDisk(dbTemplate)
const hyperdispatch = Hyperdispatch.from('./spec/schema', './spec/hyperdispatch')
const namespace = hyperdispatch.namespace('autopass')
namespace.register({
name: 'remove-writer',
requestType: '@autopass/writer'
})
namespace.register({
name: 'add-writer',
requestType: '@autopass/writer'
})
namespace.register({
name: 'put',
requestType: '@autopass/records'
})
namespace.register({
name: 'del',
requestType: '@autopass/delete'
})
namespace.register(({
name: 'add-invite',
requestType: '@autopass/invite'
}))
Hyperdispatch.toDisk(hyperdispatch)