| var _ = require('lodash') | 
| var logger = require('./logger').getInstance() | 
| var ERRORS = require('./errors') | 
|   | 
| module.exports = { | 
|   create: createPathRewriter | 
| } | 
|   | 
| /** | 
|  * Create rewrite function, to cache parsed rewrite rules. | 
|  * | 
|  * @param {Object} rewriteConfig | 
|  * @return {Function} Function to rewrite paths; This function should accept `path` (request.url) as parameter | 
|  */ | 
| function createPathRewriter(rewriteConfig) { | 
|   var rulesCache | 
|   | 
|   if (!isValidRewriteConfig(rewriteConfig)) { | 
|     return | 
|   } | 
|   | 
|   if (_.isFunction(rewriteConfig)) { | 
|     var customRewriteFn = rewriteConfig | 
|     return customRewriteFn | 
|   } else { | 
|     rulesCache = parsePathRewriteRules(rewriteConfig) | 
|     return rewritePath | 
|   } | 
|   | 
|   function rewritePath(path) { | 
|     var result = path | 
|   | 
|     _.forEach(rulesCache, function(rule) { | 
|       if (rule.regex.test(path)) { | 
|         result = result.replace(rule.regex, rule.value) | 
|         logger.debug('[HPM] Rewriting path from "%s" to "%s"', path, result) | 
|         return false | 
|       } | 
|     }) | 
|   | 
|     return result | 
|   } | 
| } | 
|   | 
| function isValidRewriteConfig(rewriteConfig) { | 
|   if (_.isFunction(rewriteConfig)) { | 
|     return true | 
|   } else if (!_.isEmpty(rewriteConfig) && _.isPlainObject(rewriteConfig)) { | 
|     return true | 
|   } else if ( | 
|     _.isUndefined(rewriteConfig) || | 
|     _.isNull(rewriteConfig) || | 
|     _.isEqual(rewriteConfig, {}) | 
|   ) { | 
|     return false | 
|   } else { | 
|     throw new Error(ERRORS.ERR_PATH_REWRITER_CONFIG) | 
|   } | 
| } | 
|   | 
| function parsePathRewriteRules(rewriteConfig) { | 
|   var rules = [] | 
|   | 
|   if (_.isPlainObject(rewriteConfig)) { | 
|     _.forIn(rewriteConfig, function(value, key) { | 
|       rules.push({ | 
|         regex: new RegExp(key), | 
|         value: rewriteConfig[key] | 
|       }) | 
|       logger.info( | 
|         '[HPM] Proxy rewrite rule created: "%s" ~> "%s"', | 
|         key, | 
|         rewriteConfig[key] | 
|       ) | 
|     }) | 
|   } | 
|   | 
|   return rules | 
| } |