123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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`)}`
- )
- }
|