Spaces:
Sleeping
Sleeping
const pluginRE = /^(@vue\/|vue-|@[\w-]+(\.)?[\w-]+\/vue-)cli-plugin-/ | |
const scopeRE = /^@[\w-]+(\.)?[\w-]+\// | |
const officialRE = /^@vue\// | |
const officialPlugins = [ | |
'babel', | |
'e2e-cypress', | |
'e2e-nightwatch', | |
'e2e-webdriverio', | |
'eslint', | |
'pwa', | |
'router', | |
'typescript', | |
'unit-jest', | |
'unit-mocha', | |
'vuex' | |
] | |
exports.isPlugin = id => pluginRE.test(id) | |
exports.isOfficialPlugin = id => exports.isPlugin(id) && officialRE.test(id) | |
exports.toShortPluginId = id => id.replace(pluginRE, '') | |
exports.resolvePluginId = id => { | |
// already full id | |
// e.g. vue-cli-plugin-foo, @vue/cli-plugin-foo, @bar/vue-cli-plugin-foo | |
if (pluginRE.test(id)) { | |
return id | |
} | |
if (id === '@vue/cli-service') { | |
return id | |
} | |
if (officialPlugins.includes(id)) { | |
return `@vue/cli-plugin-${id}` | |
} | |
// scoped short | |
// e.g. @vue/foo, @bar/foo | |
if (id.charAt(0) === '@') { | |
const scopeMatch = id.match(scopeRE) | |
if (scopeMatch) { | |
const scope = scopeMatch[0] | |
const shortId = id.replace(scopeRE, '') | |
return `${scope}${scope === '@vue/' ? `` : `vue-`}cli-plugin-${shortId}` | |
} | |
} | |
// default short | |
// e.g. foo | |
return `vue-cli-plugin-${id}` | |
} | |
exports.matchesPluginId = (input, full) => { | |
const short = full.replace(pluginRE, '') | |
return ( | |
// input is full | |
full === input || | |
// input is short without scope | |
short === input || | |
// input is short with scope | |
short === input.replace(scopeRE, '') | |
) | |
} | |
exports.getPluginLink = id => { | |
if (officialRE.test(id)) { | |
return `https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-${ | |
exports.toShortPluginId(id) | |
}` | |
} | |
let pkg = {} | |
try { | |
pkg = require(`${id}/package.json`) | |
} catch (e) {} | |
return ( | |
pkg.homepage || | |
(pkg.repository && pkg.repository.url) || | |
`https://www.npmjs.com/package/${id.replace(`/`, `%2F`)}` | |
) | |
} | |