@calvin_von/plugin-request-hijack
Version:
A dalao-proxy plugin for hijacking asynchronous requests to do more cool things
70 lines (61 loc) • 1.58 kB
JavaScript
/**
* @type {import('./type').HijackOptions}
*/
const defaultOptions = {
prefix: '',
smartInfer: true,
page: /^\/$|(\.html)?/,
excludes: [/hot-update/],
logger: true,
};
function setting() {
return {
defaultEnable: true,
optionsField: 'requestHijack',
dependFields: ['proxyTable', 'target'],
enableField: 'enable',
}
}
/**
* @param {import('./type').HijackOptions} requestHijack
* @param {import('./type').ProxyTable} proxyTable
* @param {string} version
*/
function parser(requestHijack, proxyTable, target) {
const defaults = this.context.config.defaults || {};
const { hostRewrite } = defaults.route || { hostRewrite: {} };
const { rewriteString } = this.context.exports.Utils || { rewriteString: v => v };
const {
rewrite: _rewrite,
smartInfer
} = requestHijack || {};
const rewrite = _rewrite || [];
if (smartInfer && (!rewrite || !Array.isArray(rewrite) || !rewrite.length)) {
Object.keys(proxyTable).forEach(key => {
const { target: ruleTarget, path = '' } = proxyTable[key];
rewrite.push({
from: rewriteString(addHttpProtocol(ruleTarget || target), hostRewrite) + path,
to: key
});
});
}
return {
...defaultOptions,
...requestHijack,
rewrite,
};
}
module.exports = {
setting,
parser
};
const HTTP_PROTOCOL_REG = new RegExp(/^(https?:)?\/\//);
// make url complete with http/https
function addHttpProtocol(urlFragment) {
if (!HTTP_PROTOCOL_REG.test(urlFragment)) {
return 'http://' + urlFragment;
}
else {
return urlFragment;
}
}