forked from vuejs/vue-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresolvers.js
99 lines (90 loc) · 3.08 KB
/
resolvers.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
const { withFilter } = require('graphql-subscriptions')
const path = require('path')
const globby = require('globby')
const merge = require('lodash.merge')
const GraphQLJSON = require('graphql-type-json')
// Channels for subscriptions
const channels = require('./channels')
// Connectors
const cwd = require('./connectors/cwd')
const progress = require('./connectors/progress')
const files = require('./connectors/files')
const clientAddons = require('./connectors/client-addons')
const sharedData = require('./connectors/shared-data')
const locales = require('./connectors/locales')
// Utils
const stats = require('./util/stats')
// Start ipc server
require('./util/ipc')
process.env.VUE_CLI_API_MODE = true
const resolvers = [{
JSON: GraphQLJSON,
DescribedEntity: {
__resolveType (obj, context, info) {
return null
}
},
ClientAddon: {
url: (addon, args, context) => clientAddons.getUrl(addon, context)
},
Query: {
cwd: () => cwd.get(),
progress: (root, { id }, context) => progress.get(id, context),
clientAddons: (root, args, context) => clientAddons.list(context),
sharedData: (root, args, context) => sharedData.get(args, context),
locales: (root, args, context) => locales.list(context)
},
Mutation: {
fileOpenInEditor: (root, { input }, context) => files.openInEditor(input, context),
sharedDataUpdate: (root, args, context) => sharedData.set(args, context)
},
Subscription: {
cwdChanged: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator(channels.CWD_CHANGED)
},
progressChanged: {
subscribe: withFilter(
// Iterator
(parent, args, { pubsub }) => pubsub.asyncIterator(channels.PROGRESS_CHANGED),
// Filter
(payload, vars) => payload.progressChanged.id === vars.id
)
},
progressRemoved: {
subscribe: withFilter(
// Iterator
(parent, args, { pubsub }) => pubsub.asyncIterator(channels.PROGRESS_REMOVED),
// Filter
(payload, vars) => payload.progressRemoved === vars.id
)
},
clientAddonAdded: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator(channels.CLIENT_ADDON_ADDED)
},
sharedDataUpdated: {
subscribe: withFilter(
(parent, args, { pubsub }) => pubsub.asyncIterator(channels.SHARED_DATA_UPDATED),
(payload, vars) => {
const result = payload.sharedDataUpdated.id === vars.id && payload.sharedDataUpdated.projectId === vars.projectId
if (result) {
stats.get(`shared-data_${vars.projectId}`, vars.id).value++
}
return result
}
)
},
localeAdded: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator(channels.LOCALE_ADDED)
},
routeRequested: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator(channels.ROUTE_REQUESTED)
}
}
}]
// Load resolvers in './schema'
const paths = globby.sync([path.join(__dirname, './schema/*.js')])
paths.forEach(file => {
const { resolvers: r } = require(file)
r && resolvers.push(r)
})
module.exports = merge.apply(null, resolvers)