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.
93 lines
2.9 KiB
93 lines
2.9 KiB
"use strict"; |
|
var connectUtils = require("./connect-utils"); |
|
var config = require("./config"); |
|
var lrSnippet = require("resp-modifier"); |
|
var path = require("path"); |
|
var _ = require("./lodash.custom"); |
|
var utils = require("./utils"); |
|
var fs = require("fs"); |
|
var path = require("path"); |
|
/** |
|
* Utils for snippet injection |
|
*/ |
|
var snippetUtils = { |
|
/** |
|
* @param {String} url |
|
* @param {Array} excludeList |
|
* @returns {boolean} |
|
*/ |
|
isExcluded: function (url, excludeList) { |
|
var extension = path.extname(url); |
|
if (extension) { |
|
if (~url.indexOf("?")) { |
|
return true; |
|
} |
|
extension = extension.slice(1); |
|
return _.includes(excludeList, extension); |
|
} |
|
return false; |
|
}, |
|
/** |
|
* @param {String} snippet |
|
* @param {Object} options |
|
* @returns {{match: RegExp, fn: Function}} |
|
*/ |
|
getRegex: function (snippet, options) { |
|
var fn = options.getIn(["rule", "fn"]); |
|
return { |
|
match: options.getIn(["rule", "match"]), |
|
fn: function (req, res, match) { |
|
return fn.apply(null, [snippet, match]); |
|
}, |
|
once: true, |
|
id: "bs-snippet" |
|
}; |
|
}, |
|
getSnippetMiddleware: function (snippet, options, rewriteRules) { |
|
return lrSnippet.create(snippetUtils.getRules(snippet, options, rewriteRules)); |
|
}, |
|
getRules: function (snippet, options, rewriteRules) { |
|
var rules = [snippetUtils.getRegex(snippet, options)]; |
|
if (rewriteRules) { |
|
rules = rules.concat(rewriteRules); |
|
} |
|
return { |
|
rules: rules, |
|
blacklist: utils.arrayify(options.get("blacklist")), |
|
whitelist: utils.arrayify(options.get("whitelist")) |
|
}; |
|
}, |
|
/** |
|
* @param {Object} req |
|
* @param {Array} [excludeList] |
|
* @returns {Object} |
|
*/ |
|
isOldIe: function (excludeList) { |
|
return function (req, res, next) { |
|
var ua = req.headers["user-agent"]; |
|
var match = /MSIE (\d)\.\d/.exec(ua); |
|
if (match) { |
|
if (parseInt(match[1], 10) < 9) { |
|
if (!snippetUtils.isExcluded(req.url, excludeList)) { |
|
req.headers["accept"] = "text/html"; |
|
} |
|
} |
|
} |
|
next(); |
|
}; |
|
}, |
|
/** |
|
* @param {Number} port |
|
* @param {BrowserSync.options} options |
|
* @returns {String} |
|
*/ |
|
getClientJs: function (port, options) { |
|
return () => { |
|
const script = options.get("minify") ? "index.js" : "index.js"; |
|
const client = fs.readFileSync(require.resolve("browser-sync-client/dist/" + script), "utf8"); |
|
return [connectUtils.socketConnector(options), client].join(";\n"); |
|
}; |
|
} |
|
}; |
|
module.exports.utils = snippetUtils; |
|
//# sourceMappingURL=snippet.js.map
|