2016-03-18 11:12:50 +01:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Module dependencies
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Public node modules.
|
|
|
|
const reportback = require('reportback')();
|
|
|
|
|
|
|
|
// Logger.
|
2021-04-29 13:51:12 +02:00
|
|
|
const logger = require('@strapi/utils').logger;
|
2016-03-18 11:12:50 +01:00
|
|
|
|
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.
|
2021-04-29 13:51:12 +02:00
|
|
|
const module = '@strapi/generate-' + scope.generatorType;
|
2016-03-18 11:12:50 +01:00
|
|
|
let generator;
|
|
|
|
|
|
|
|
function throwIfModuleNotFoundError(error, module) {
|
2019-06-19 19:02:36 +02:00
|
|
|
const isModuleNotFoundError =
|
2021-04-29 11:11:46 +02:00
|
|
|
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 {
|
2021-04-29 15:40:35 +02:00
|
|
|
generator = require(module);
|
2016-03-18 11:12:50 +01:00
|
|
|
} catch (error) {
|
2017-01-04 18:28:47 +01:00
|
|
|
throwIfModuleNotFoundError(error, module);
|
2016-03-18 11:12:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!generator) {
|
2021-04-29 11:11:46 +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;
|