mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 01:47:13 +00:00 
			
		
		
		
	 0e164d6da8
			
		
	
	
		0e164d6da8
		
	
	
	
	
		
			
			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;
 |