| 
									
										
										
										
											2017-02-14 01:18:07 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Module dependencies | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Public node modules.
 | 
					
						
							|  |  |  | const _ = require('lodash'); | 
					
						
							| 
									
										
										
										
											2017-06-08 17:16:20 +01:00
										 |  |  | const fs = require('fs-extra'); | 
					
						
							|  |  |  | const path = require('path'); | 
					
						
							| 
									
										
										
										
											2017-02-14 01:18:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * This `before` function is run before generating targets. | 
					
						
							|  |  |  |  * Validate, configure defaults, get extra dependencies, etc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param {Object} scope | 
					
						
							|  |  |  |  * @param {Function} cb | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = (scope, cb) => { | 
					
						
							|  |  |  |   if (!scope.rootPath || !scope.id) { | 
					
						
							|  |  |  |     return cb.invalid('Usage: `$ strapi generate:plugin pluginName`'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // `scope.args` are the raw command line arguments.
 | 
					
						
							|  |  |  |   _.defaults(scope, { | 
					
						
							|  |  |  |     id: _.trim(_.deburr(scope.id)) | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Determine default values based on the available scope.
 | 
					
						
							|  |  |  |   _.defaults(scope, { | 
					
						
							|  |  |  |     globalID: _.upperFirst(_.camelCase(scope.id)), | 
					
						
							|  |  |  |     ext: '.js' | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-08 17:16:20 +01:00
										 |  |  |   // Plugin info.
 | 
					
						
							|  |  |  |   _.defaults(scope, { | 
					
						
							|  |  |  |     name: scope.args.name || scope.id, | 
					
						
							|  |  |  |     author: scope.author || 'A Strapi developer', | 
					
						
							|  |  |  |     email: scope.email || '', | 
					
						
							|  |  |  |     year: (new Date()).getFullYear(), | 
					
						
							|  |  |  |     license: 'MIT' | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2017-02-14 01:18:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Take another pass to take advantage of the defaults absorbed in previous passes.
 | 
					
						
							|  |  |  |   _.defaults(scope, { | 
					
						
							|  |  |  |     filename: `${scope.globalID}${scope.ext}` | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Humanize output.
 | 
					
						
							|  |  |  |   _.defaults(scope, { | 
					
						
							| 
									
										
										
										
											2017-06-06 14:43:32 +02:00
										 |  |  |     humanizeId: scope.id.toLowerCase(), | 
					
						
							| 
									
										
										
										
											2017-02-14 01:18:07 +01:00
										 |  |  |     humanizedPath: '`./plugins`' | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-08 17:16:20 +01:00
										 |  |  |   // Copy the admin files.
 | 
					
						
							|  |  |  |   fs.copySync(path.resolve(__dirname, '..', 'files'), path.resolve(scope.rootPath, 'plugins', scope.humanizeId)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-14 01:18:07 +01:00
										 |  |  |   // Trigger callback with no error to proceed.
 | 
					
						
							|  |  |  |   return cb.success(); | 
					
						
							|  |  |  | }; |