UNPKG

node-generate

Version:

Runs custom generators

104 lines (85 loc) 2.67 kB
/** * Module dependencies */ var generate = require('./generate'); var path = require('path'); var reportback = require('reportback')(); /** * Generate module(s) * * @param {Object} scope [description] * @param {Function} cb [description] * @return {[type]} [description] */ module.exports = function(scope, cb) { cb = cb || {}; cb = reportback.extend(cb, { error: cb.error, invalid: cb.invalid, success: function(output) { cb.log.info('ok!'); }, notSailsApp: function() { cb.log.error('Not a sails app.'); }, alreadyExists: function() { return cb.error(); } }); if (!scope.generatorType) { return cb.error('Sorry, `scope.generatorType` must be defined.'); } // Use configured module name for this generatorType if applicable. var module = (scope.modules && scope.modules[scope.generatorType]) || 'sails-generate-' + scope.generatorType; var Generator; var requirePath; var requireError; function throwIfModuleNotFoundError (e, module) { var isModuleNotFoundError = e && e.code === 'MODULE_NOT_FOUND' && e.message.match(new RegExp(module)); if (!isModuleNotFoundError) { cb.log.error('Error in "'+scope.generatorType+'" generator (loaded from '+module+')'); throw e; } else return e; } // Allow `scope.generator` to be specified as an inline generator // ... todo ... // Try requiring it directly as a path try { Generator = require(module); } catch (e) { requireError = throwIfModuleNotFoundError(e, module); } // Try requiring the generator from the rootPath if (!Generator) { try { requirePath = path.resolve(scope.rootPath, 'node_modules', module); Generator = require(requirePath); } catch (e) { requireError = throwIfModuleNotFoundError(e, module); } } // If that doesn't work, try `require()`ing it from console user's cwd if (!Generator) { try { requirePath = path.resolve(process.cwd(), 'node_modules', module); Generator = require(requirePath); } catch (e) { requireError = throwIfModuleNotFoundError(e, module); } } // Finally, try to load the generator module from sails-generate's dependencies if (!Generator) { try { Generator = require(path.resolve(scope.rootPath || process.cwd(), module)); } catch (e) { requireError = throwIfModuleNotFoundError(e, module); } } if (!Generator) { return cb.log.error("No generator called `" + scope.generatorType + "` found; perhaps you meant `sails generate api " + scope.generatorType + "`?"); } generate(Generator, scope, cb); };