Files
vue-cli/packages/@vue/cli-ui/apollo-server/schema/task.js
2018-07-17 12:40:00 +02:00

106 lines
2.4 KiB
JavaScript

const gql = require('graphql-tag')
// Subs
const { withFilter } = require('graphql-subscriptions')
const channels = require('../channels')
// Connectors
const tasks = require('../connectors/tasks')
const plugins = require('../connectors/plugins')
const projects = require('../connectors/projects')
exports.types = gql`
extend type Query {
tasks: [Task]
task (id: ID!): Task
}
extend type Mutation {
taskRun (id: ID!): Task
taskStop (id: ID!): Task
taskLogsClear (id: ID!): Task
taskOpen (id: ID!): Boolean
taskSaveParameters (id: ID!): [Prompt]
taskRestoreParameters (id: ID!): [Prompt]
}
extend type Subscription {
taskChanged: Task
taskLogAdded (id: ID!): TaskLog
}
type Task implements DescribedEntity {
id: ID!
status: TaskStatus!
command: String!
name: String
description: String
link: String
icon: String
logs: [TaskLog]
prompts: [Prompt]
views: [TaskView]
defaultView: String
plugin: Plugin
project: Project
}
enum TaskStatus {
idle
running
done
error
terminated
}
type TaskLog {
taskId: ID!
type: TaskLogType!
text: String
}
enum TaskLogType {
stdout
stderr
}
type TaskView {
id: ID!
label: String!
component: String!
icon: String
}
`
exports.resolvers = {
Task: {
prompts: (task, args, context) => tasks.getPrompts(task.id, context),
plugin: (task, args, context) => plugins.findOne({ id: task.pluginId, file: task.path }, context),
project: (task, args, context) => projects.findByPath(task.path, context)
},
Query: {
tasks: (root, args, context) => tasks.list(undefined, context),
task: (root, { id }, context) => tasks.findOne(id, context)
},
Mutation: {
taskRun: (root, { id }, context) => tasks.run(id, context),
taskStop: (root, { id }, context) => tasks.stop(id, context),
taskLogsClear: (root, { id }, context) => tasks.clearLogs(id, context),
taskOpen: (root, { id }, context) => tasks.open(id, context),
taskSaveParameters: (root, { id }, context) => tasks.saveParameters({ id }, context),
taskRestoreParameters: (root, { id }, context) => tasks.restoreParameters({ id }, context)
},
Subscription: {
taskChanged: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator(channels.TASK_CHANGED)
},
taskLogAdded: {
subscribe: withFilter(
(parent, args, { pubsub }) => pubsub.asyncIterator(channels.TASK_LOG_ADDED),
(payload, vars) => payload.taskLogAdded.taskId === vars.id
)
}
}
}