mirror of
https://github.com/fooflington/selfdefined.git
synced 2025-06-10 21:01:41 +00:00
update
This commit is contained in:
157
node_modules/resp-modifier/lib/utils.js
generated
vendored
Normal file
157
node_modules/resp-modifier/lib/utils.js
generated
vendored
Normal file
@ -0,0 +1,157 @@
|
||||
var minimatch = require("minimatch");
|
||||
var utils = exports;
|
||||
|
||||
utils.applyRules = function overwriteBody (rules, body, req, res) {
|
||||
return rules.reduce(function (body, rule) {
|
||||
/**
|
||||
* Try to use the replace string/fn first
|
||||
*/
|
||||
if (rule.replace || typeof rule.replace === "string") {
|
||||
rule.fn = rule.replace;
|
||||
}
|
||||
if (typeof rule.fn === 'string') {
|
||||
return body.replace(rule.match, rule.fn);
|
||||
}
|
||||
return body.replace(rule.match, function () {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
if (typeof rule.fn === 'function') {
|
||||
return rule.fn.apply(this, [req, res].concat(args))
|
||||
}
|
||||
return rule.fn;
|
||||
});
|
||||
}, body);
|
||||
};
|
||||
|
||||
/**
|
||||
* Extensions that will be ignored by default
|
||||
* @type {Array}
|
||||
*/
|
||||
utils.defaultIgnoreTypes = [
|
||||
// text files
|
||||
"js", "json", "css",
|
||||
// image files
|
||||
"png", "jpg", "jpeg", "gif", "ico", "tif", "tiff", "bmp", "webp", "psd",
|
||||
// vector & font
|
||||
"svg", "woff", "ttf", "otf", "eot", "eps", "ps", "ai",
|
||||
// audio
|
||||
"mp3", "wav", "aac", "m4a", "m3u", "mid", "wma",
|
||||
// video & other media
|
||||
"mpg", "mpeg", "mp4", "m4v", "webm", "swf", "flv", "avi", "mov", "wmv",
|
||||
// document files
|
||||
"pdf", "doc", "docx", "xls", "xlsx", "pps", "ppt", "pptx", "odt", "ods", "odp", "pages", "key", "rtf", "txt", "csv",
|
||||
// data files
|
||||
"zip", "rar", "tar", "gz", "xml", "app", "exe", "jar", "dmg", "pkg", "iso"
|
||||
].map(function (ext) {
|
||||
return "\\." + ext + "(\\?.*)?$";
|
||||
});
|
||||
|
||||
/**
|
||||
* Check if a URL was white-listed
|
||||
* @param url
|
||||
* @param whitelist
|
||||
* @returns {boolean}
|
||||
*/
|
||||
utils.isWhitelisted = function isWhitelisted(url, whitelist) {
|
||||
|
||||
if (whitelist.indexOf(url) > -1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return whitelist.some(function (pattern) {
|
||||
return minimatch(url, pattern);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if a URL was white-listed with single path
|
||||
* @param url
|
||||
* @param rules
|
||||
* @returns {Array}
|
||||
*/
|
||||
utils.isWhiteListedForSingle = function isWhiteListedForSingle(url, rules) {
|
||||
|
||||
return rules.filter(function (item) {
|
||||
return item.paths && utils.isWhitelisted(url, utils.toArray(item.paths));
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine if a response should be overwritten
|
||||
* @param {String} url
|
||||
* @param {Object} opts
|
||||
* @returns {boolean}
|
||||
*/
|
||||
utils.inBlackList = function inBlackList(url, opts) {
|
||||
|
||||
// First check for an exact match
|
||||
if (!url || opts.blacklist.indexOf(url) > -1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (url.length === 1 && url === "/") {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check the path only
|
||||
var split = url.split('?')[0];
|
||||
|
||||
// second, check that the URL does not contain a
|
||||
// file extension that should be ignored by default
|
||||
if (opts.ignore.some(function (pattern) {
|
||||
return new RegExp(pattern).test(split);
|
||||
})) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Finally, check any mini-match patterns for paths that have been excluded
|
||||
if (opts.blacklist.some(function (pattern) {
|
||||
return minimatch(url, pattern);
|
||||
})) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param req
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
utils.hasAcceptHeaders = function hasAcceptHeaders(req) {
|
||||
var acceptHeader = req.headers["accept"];
|
||||
if (!acceptHeader) {
|
||||
return false;
|
||||
}
|
||||
return acceptHeader.indexOf("html") > -1;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param body
|
||||
* @returns {boolean}
|
||||
*/
|
||||
utils.snip = function snip(body) {
|
||||
if (!body) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
utils.toArray = function toArray(item) {
|
||||
if (!item) {
|
||||
return item;
|
||||
}
|
||||
if (!Array.isArray(item)) {
|
||||
return [item];
|
||||
}
|
||||
return item;
|
||||
};
|
||||
|
||||
utils.isHtml = function isHtml(str) {
|
||||
if (!str) {
|
||||
return false;
|
||||
}
|
||||
// Test to see if start of file contents matches:
|
||||
// - Optional byte-order mark (BOM)
|
||||
// - Zero or more spaces
|
||||
// - Any sort of HTML tag, comment, or doctype tag (basically, <...>)
|
||||
return /^(\uFEFF|\uFFFE)?\s*<[^>]+>/i.test(str);
|
||||
};
|
Reference in New Issue
Block a user