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.
		
		
		
		
			
				
					82 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					82 lines
				
				1.8 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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`)}`
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								}
							 |