You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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 }
|