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.
66 lines
2.1 KiB
66 lines
2.1 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.createPathRewriter = void 0; |
|
const isPlainObj = require("is-plain-obj"); |
|
const errors_1 = require("./errors"); |
|
const logger_1 = require("./logger"); |
|
const logger = (0, logger_1.getInstance)(); |
|
/** |
|
* 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) { |
|
let rulesCache; |
|
if (!isValidRewriteConfig(rewriteConfig)) { |
|
return; |
|
} |
|
if (typeof rewriteConfig === 'function') { |
|
const customRewriteFn = rewriteConfig; |
|
return customRewriteFn; |
|
} |
|
else { |
|
rulesCache = parsePathRewriteRules(rewriteConfig); |
|
return rewritePath; |
|
} |
|
function rewritePath(path) { |
|
let result = path; |
|
for (const rule of rulesCache) { |
|
if (rule.regex.test(path)) { |
|
result = result.replace(rule.regex, rule.value); |
|
logger.debug('[HPM] Rewriting path from "%s" to "%s"', path, result); |
|
break; |
|
} |
|
} |
|
return result; |
|
} |
|
} |
|
exports.createPathRewriter = createPathRewriter; |
|
function isValidRewriteConfig(rewriteConfig) { |
|
if (typeof rewriteConfig === 'function') { |
|
return true; |
|
} |
|
else if (isPlainObj(rewriteConfig)) { |
|
return Object.keys(rewriteConfig).length !== 0; |
|
} |
|
else if (rewriteConfig === undefined || rewriteConfig === null) { |
|
return false; |
|
} |
|
else { |
|
throw new Error(errors_1.ERRORS.ERR_PATH_REWRITER_CONFIG); |
|
} |
|
} |
|
function parsePathRewriteRules(rewriteConfig) { |
|
const rules = []; |
|
if (isPlainObj(rewriteConfig)) { |
|
for (const [key] of Object.entries(rewriteConfig)) { |
|
rules.push({ |
|
regex: new RegExp(key), |
|
value: rewriteConfig[key], |
|
}); |
|
logger.info('[HPM] Proxy rewrite rule created: "%s" ~> "%s"', key, rewriteConfig[key]); |
|
} |
|
} |
|
return rules; |
|
}
|
|
|