-
Notifications
You must be signed in to change notification settings - Fork 89
/
view_model_query_executors.js
48 lines (37 loc) · 1.38 KB
/
view_model_query_executors.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
import { createViewModel } from 'resolve-query'
import eventStore from './event_store'
import raiseError from './utils/raise_error'
import { viewModels } from './assemblies'
const message = require('../../configs/message.json')
const viewModelQueryExecutors = {}
viewModels.forEach(viewModel => {
if (!viewModel.name && viewModels.length === 1) {
viewModel.name = 'reduxInitial'
} else if (!viewModel.name) {
raiseError(message.viewModelMandatoryName, viewModel)
} else if (viewModelQueryExecutors[viewModel.name]) {
raiseError(message.duplicateName, viewModel)
}
if (!viewModel.serializeState || !viewModel.deserializeState) {
raiseError(message.viewModelSerializable, viewModel)
}
let snapshotAdapter, snapshotBucketSize
if (viewModel.snapshotAdapter) {
const createSnapshotAdapter = viewModel.snapshotAdapter.module
const snapshotAdapterOptions = viewModel.snapshotAdapter.options
snapshotAdapter = createSnapshotAdapter(snapshotAdapterOptions)
snapshotBucketSize = snapshotAdapterOptions.bucketSize
}
const facade = createViewModel({
projection: viewModel.projection,
invariantHash: viewModel.invariantHash,
snapshotAdapter,
snapshotBucketSize,
eventStore
})
viewModelQueryExecutors[viewModel.name] = {
read: facade.read,
serializeState: viewModel.serializeState
}
})
export default viewModelQueryExecutors