| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Module dependencies | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Public node modules.
 | 
					
						
							|  |  |  | const reportback = require('reportback')(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Logger.
 | 
					
						
							|  |  |  | const logger = require('strapi-utils').logger; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-04 17:36:50 +02:00
										 |  |  | // Local dependencies.
 | 
					
						
							|  |  |  | const generate = require('./generate'); | 
					
						
							| 
									
										
										
										
											2019-06-19 19:02:36 +02:00
										 |  |  | const generateTarget = require('./target'); | 
					
						
							| 
									
										
										
										
											2018-05-04 17:36:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* eslint-disable prefer-template */ | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Generate module(s) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param {Object} scope | 
					
						
							|  |  |  |  * @param {Function} cb | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @return {[Type]} | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-11 13:03:35 +02:00
										 |  |  | module.exports = (scope, cb) => { | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  |   cb = cb || {}; | 
					
						
							|  |  |  |   cb = reportback.extend(cb, { | 
					
						
							|  |  |  |     error: cb.error, | 
					
						
							| 
									
										
										
										
											2016-07-11 13:03:35 +02:00
										 |  |  |     success: () => {}, | 
					
						
							|  |  |  |     notStrapiApp: () => {}, | 
					
						
							|  |  |  |     alreadyExists: () => { | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  |       return cb.error(); | 
					
						
							| 
									
										
										
										
											2019-06-19 19:02:36 +02:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Use configured module name for this `generatorType` if applicable.
 | 
					
						
							|  |  |  |   const module = 'strapi-generate-' + scope.generatorType; | 
					
						
							|  |  |  |   let generator; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function throwIfModuleNotFoundError(error, module) { | 
					
						
							| 
									
										
										
										
											2019-06-19 19:02:36 +02:00
										 |  |  |     const isModuleNotFoundError = | 
					
						
							|  |  |  |       error && | 
					
						
							|  |  |  |       error.code === 'MODULE_NOT_FOUND' && | 
					
						
							|  |  |  |       error.message.match(new RegExp(module)); | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  |     if (!isModuleNotFoundError) { | 
					
						
							|  |  |  |       logger.error('Invalid `' + scope.generatorType + '` generator.'); | 
					
						
							|  |  |  |       throw error; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       return error; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Try to require the module or throw if error.
 | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     generator = require('../../' + module); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							| 
									
										
										
										
											2017-01-04 18:28:47 +01:00
										 |  |  |     throwIfModuleNotFoundError(error, module); | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!generator) { | 
					
						
							| 
									
										
										
										
											2019-06-19 19:02:36 +02:00
										 |  |  |     return logger.error( | 
					
						
							|  |  |  |       'No generator called `' + scope.generatorType + '` found.' | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2016-03-18 11:12:50 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   generate(generator, scope, cb); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-06-19 19:02:36 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports.generateTarget = generateTarget; |