Skip to content

Commit

Permalink
feat(ui): PluginApi -> describeTask initial impl.
Browse files Browse the repository at this point in the history
  • Loading branch information
Guillaume Chau committed Mar 25, 2018
1 parent fbc9a09 commit e07abbb
Show file tree
Hide file tree
Showing 19 changed files with 380 additions and 98 deletions.
74 changes: 74 additions & 0 deletions packages/@vue/cli-plugin-eslint/ui.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
module.exports = api => {
// Config file
api.describeConfig({
name: 'ESLint configuration',
description: 'Error checking & Code quality',
link: 'https://eslint.org',
files: {
json: ['eslintrc', 'eslintrc.json'],
js: ['eslintrc.js'],
package: 'eslintConfig'
},
onRead: ({ data }) => {
return {
prompts: [
{
name: 'rules.commaDangle',
type: 'list',
message: 'Trailing commas',
description: 'Enforce or disallow trailing commas at the end of the lines',
link: 'https://eslint.org/docs/rules/comma-dangle',
choices: [
{
name: 'Off',
value: 'off'
},
{
name: 'Never',
value: JSON.stringify(['error', 'never'])
},
{
name: 'Always',
value: JSON.stringify(['error', 'always'])
},
{
name: 'Always on multiline',
value: JSON.stringify(['error', 'always-multiline'])
},
{
name: 'Only on multiline',
value: JSON.stringify(['error', 'only-multiline'])
}
],
value: JSON.stringify(data.rules['comma-dangle'] || ['error', 'never'])
}
]
}
},
onWrite: ({ file, answers }) => {
file.assignData({
'rules.comma-dangle': answers.rules.commaDangle
})
}
})

// Tasks
api.describeTask({
match: /vue-cli-service lint/,
description: 'Lints and fixes files',
link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint#injected-commands',
prompts: [
{
name: 'noFix',
type: 'confirm',
default: false,
description: 'Do not fix errors'
}
],
onRun: ({ answers, args }) => {
if (answers.noFix) {
args.push('--no-fix')
}
}
})
}
7 changes: 6 additions & 1 deletion packages/@vue/cli-ui/src/components/TaskItem.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

<ListItemInfo
:name="task.name"
:description="task.description || status"
:description="(task.status === 'idle' && task.description) || status"
:selected="selected"
/>
</div>
Expand Down Expand Up @@ -72,6 +72,11 @@ export default {
flex 100% 1 1
width 0
>>> .description
white-space nowrap
overflow hidden
text-overflow ellipsis
&.selected
&.status-error .list-item-info >>> .name
color $vue-ui-color-danger
Expand Down
22 changes: 22 additions & 0 deletions packages/@vue/cli-ui/src/graphql-api/api/PluginApi.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
class PluginApi {
constructor () {
this.configurations = []
this.tasks = []
}

describeConfig (options) {
this.configurations.push(options)
}

describeTask (options) {
this.tasks.push(options)
}

getTask (command) {
return this.tasks.find(
options => options.match.test(command)
)
}
}

module.exports = PluginApi
2 changes: 1 addition & 1 deletion packages/@vue/cli-ui/src/graphql-api/connectors/logs.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const shortId = require('shortid')
const { events } = require('@vue/cli-shared-utils/lib/logger')
const { generateTitle } = require('@vue/cli/lib/util/clearConsole')

// Subs
const channels = require('../channels')

let init = false
Expand Down
66 changes: 38 additions & 28 deletions packages/@vue/cli-ui/src/graphql-api/connectors/plugins.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,44 @@ const {
getPluginLink
} = require('@vue/cli-shared-utils')
const getPackageVersion = require('@vue/cli/lib/util/getPackageVersion')
const { resolveModule, loadModule } = require('@vue/cli/lib/util/module')
const {
progress: installProgress,
installPackage,
uninstallPackage,
updatePackage
} = require('@vue/cli/lib/util/installDeps')
const invoke = require('@vue/cli/lib/invoke')

// Connectors
const cwd = require('./cwd')
const folders = require('./folders')
const prompts = require('./prompts')
const progress = require('./progress')
const logs = require('./logs')

// Api
const PluginApi = require('../api/PluginApi')
// Utils
const { getCommand } = require('../utils/command')

const PROGRESS_ID = 'plugin-installation'

// Caches
const metadataCache = new LRU({
max: 200,
maxAge: 1000 * 60 * 30
})

const logoCache = new LRU({
max: 50
})

const PROGRESS_ID = 'plugin-installation'

// Local
let currentPluginId
let eventsInstalled = false
let plugins = []
let pluginApi

function getPath (id) {
return path.dirname(require.resolve(id, {
paths: [cwd.get()]
}))
return path.dirname(resolveModule(id, cwd.get()))
}

function findPlugins (deps) {
Expand All @@ -64,9 +67,23 @@ function list (file, context) {
plugins = []
plugins = plugins.concat(findPlugins(pkg.dependencies || {}))
plugins = plugins.concat(findPlugins(pkg.devDependencies || {}))
resetPluginApi(context)
return plugins
}

function resetPluginApi (context) {
pluginApi = new PluginApi()
plugins.forEach(plugin => runPluginApi(plugin.id, context))
}

function runPluginApi (id, context) {
const module = loadModule(`${id}/ui`, cwd.get(), true)
if (module) {
module(pluginApi)
console.log(`PluginApi called for ${id}`)
}
}

function findOne (id, context) {
return plugins.find(
p => p.id === id
Expand Down Expand Up @@ -175,13 +192,9 @@ function install (id, context) {
status: 'plugin-install',
args: [id]
})

currentPluginId = id

await installPackage(cwd.get(), getCommand(), null, id)

await initPrompts(id, context)

return getInstallation(context)
})
}
Expand All @@ -192,13 +205,9 @@ function uninstall (id, context) {
status: 'plugin-uninstall',
args: [id]
})

currentPluginId = id

await uninstallPackage(cwd.get(), getCommand(), null, id)

currentPluginId = null

return getInstallation(context)
})
}
Expand All @@ -209,13 +218,14 @@ function runInvoke (id, context) {
status: 'plugin-invoke',
args: [id]
})

currentPluginId = id

await invoke(id, prompts.getAnswers(), cwd.get())

// Allow plugins that don't have a generator
if (resolveModule(`${id}/generator`, cwd.get())) {
await invoke(id, prompts.getAnswers(), cwd.get())
}
// Run plugin api
runPluginApi(id, context)
currentPluginId = null

return getInstallation(context)
})
}
Expand All @@ -240,25 +250,23 @@ function update (id, context) {
status: 'plugin-update',
args: [id]
})

currentPluginId = id

const plugin = findOne(id, context)
const { current, wanted } = await getVersion(plugin, context)

await updatePackage(cwd.get(), getCommand(), null, id)

logs.add({
message: `Plugin ${id} updated from ${current} to ${wanted}`,
type: 'info'
}, context)

currentPluginId = null

return findOne(id)
})
}

function getApi () {
return pluginApi
}

module.exports = {
list,
findOne,
Expand All @@ -269,5 +277,7 @@ module.exports = {
install,
uninstall,
update,
runInvoke
runInvoke,
resetPluginApi,
getApi
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Subs
const channels = require('../channels')

let map = new Map()
Expand Down
Loading

0 comments on commit e07abbb

Please sign in to comment.