56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const { notEmpty } = require('../utils.js')
 | |
| 
 | |
| module.exports = {
 | |
|   description: 'generate vue component',
 | |
|   prompts: [{
 | |
|     type: 'input',
 | |
|     name: 'name',
 | |
|     message: 'component name please',
 | |
|     validate: notEmpty('name')
 | |
|   },
 | |
|   {
 | |
|     type: 'checkbox',
 | |
|     name: 'blocks',
 | |
|     message: 'Blocks:',
 | |
|     choices: [{
 | |
|       name: '<template>',
 | |
|       value: 'template',
 | |
|       checked: true
 | |
|     },
 | |
|     {
 | |
|       name: '<script>',
 | |
|       value: 'script',
 | |
|       checked: true
 | |
|     },
 | |
|     {
 | |
|       name: 'style',
 | |
|       value: 'style',
 | |
|       checked: true
 | |
|     }
 | |
|     ],
 | |
|     validate(value) {
 | |
|       if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
 | |
|         return 'Components require at least a <script> or <template> tag.'
 | |
|       }
 | |
|       return true
 | |
|     }
 | |
|   }
 | |
|   ],
 | |
|   actions: data => {
 | |
|     const name = '{{properCase name}}'
 | |
|     const actions = [{
 | |
|       type: 'add',
 | |
|       path: `src/components/${name}/index.vue`,
 | |
|       templateFile: 'plop-templates/component/index.hbs',
 | |
|       data: {
 | |
|         name: name,
 | |
|         template: data.blocks.includes('template'),
 | |
|         script: data.blocks.includes('script'),
 | |
|         style: data.blocks.includes('style')
 | |
|       }
 | |
|     }]
 | |
| 
 | |
|     return actions
 | |
|   }
 | |
| }
 |