In case multiple plugins with a `analyzeCommits` step are configured, all of them will be executed and the highest release type (`major` > `minor`, `patch`) will be used.
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const {dirname} = require('path');
 | |
| const {isString, isFunction, castArray, isArray, isPlainObject, isNil} = require('lodash');
 | |
| const resolveFrom = require('resolve-from');
 | |
| 
 | |
| const validateSteps = conf => {
 | |
|   return conf.every(conf => {
 | |
|     if (
 | |
|       isArray(conf) &&
 | |
|       (conf.length === 1 || conf.length === 2) &&
 | |
|       (isString(conf[0]) || isFunction(conf[0])) &&
 | |
|       (isNil(conf[1]) || isPlainObject(conf[1]))
 | |
|     ) {
 | |
|       return true;
 | |
|     }
 | |
|     conf = castArray(conf);
 | |
| 
 | |
|     if (conf.length !== 1) {
 | |
|       return false;
 | |
|     }
 | |
| 
 | |
|     const [name, config] = parseConfig(conf[0]);
 | |
|     return (isString(name) || isFunction(name)) && isPlainObject(config);
 | |
|   });
 | |
| };
 | |
| 
 | |
| function validatePlugin(conf) {
 | |
|   return (
 | |
|     isString(conf) ||
 | |
|     (isArray(conf) &&
 | |
|       (conf.length === 1 || conf.length === 2) &&
 | |
|       (isString(conf[0]) || isPlainObject(conf[0])) &&
 | |
|       (isNil(conf[1]) || isPlainObject(conf[1]))) ||
 | |
|     (isPlainObject(conf) && (isNil(conf.path) || isString(conf.path) || isPlainObject(conf.path)))
 | |
|   );
 | |
| }
 | |
| 
 | |
| function validateStep({required}, conf) {
 | |
|   conf = castArray(conf).filter(Boolean);
 | |
|   if (required) {
 | |
|     return conf.length >= 1 && validateSteps(conf);
 | |
|   }
 | |
|   return conf.length === 0 || validateSteps(conf);
 | |
| }
 | |
| 
 | |
| function loadPlugin({cwd}, name, pluginsPath) {
 | |
|   const basePath = pluginsPath[name]
 | |
|     ? dirname(resolveFrom.silent(__dirname, pluginsPath[name]) || resolveFrom(cwd, pluginsPath[name]))
 | |
|     : __dirname;
 | |
|   return isFunction(name) ? name : require(resolveFrom.silent(basePath, name) || resolveFrom(cwd, name));
 | |
| }
 | |
| 
 | |
| function parseConfig(plugin) {
 | |
|   let path;
 | |
|   let config;
 | |
|   if (isArray(plugin)) {
 | |
|     [path, config] = plugin;
 | |
|   } else if (isPlainObject(plugin) && !isNil(plugin.path)) {
 | |
|     ({path, ...config} = plugin);
 | |
|   } else {
 | |
|     path = plugin;
 | |
|   }
 | |
|   return [path, config || {}];
 | |
| }
 | |
| 
 | |
| module.exports = {validatePlugin, validateStep, loadPlugin, parseConfig};
 |