mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 11:54:10 +00:00 
			
		
		
		
	Fix the fix merged with #1575 The original patch was done over a block of code moved on #1667 resulting in re-introducing code that now is not invoqued and continue with the bug reported on #916. This patch take the original changes and put them in the current correct place.
		
			
				
	
	
		
			32 lines
		
	
	
		
			993 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			993 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const { isString, isPlainObject } = require('lodash');
 | 
						|
 | 
						|
const regex = /\$\{[^()]*\}/g;
 | 
						|
const excludeConfigPaths = ['info.scripts'];
 | 
						|
 | 
						|
/**
 | 
						|
 * Allow dynamic config values through the native ES6 template string function.
 | 
						|
 */
 | 
						|
const templateConfiguration = (obj, configPath = '') => {
 | 
						|
  // Allow values which looks like such as an ES6 literal string without parenthesis inside (aka function call).
 | 
						|
  // Exclude config with conflicting syntax (e.g. npm scripts).
 | 
						|
  return Object.keys(obj).reduce((acc, key) => {
 | 
						|
    if (isPlainObject(obj[key]) && !isString(obj[key])) {
 | 
						|
      acc[key] = templateConfiguration(obj[key], `${configPath}.${key}`);
 | 
						|
 | 
						|
    } else if (isString(obj[key])
 | 
						|
      && !excludeConfigPaths.includes(configPath.substr(1))
 | 
						|
      && obj[key].match(regex) !== null
 | 
						|
    ) {
 | 
						|
      // eslint-disable-next-line prefer-template
 | 
						|
      acc[key] = eval('`' + obj[key] + '`');
 | 
						|
 | 
						|
    } else {
 | 
						|
      acc[key] = obj[key];
 | 
						|
    }
 | 
						|
 | 
						|
    return acc;
 | 
						|
  }, {});
 | 
						|
};
 | 
						|
 | 
						|
module.exports = templateConfiguration;
 |