You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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', 'webpack-4' ]
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`)}` ) }
|