@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
53 lines • 7.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const startsWithWildcardRegExp = /^\*\./;
const endsWithWildcardRegExp = /\.\*$/;
const trailingSlashesRegExp = /\/.*$/;
const portRegExp = /:(\d+)$/;
const protocolRegExp = /^(\w+):\/\//;
const wildcardRegExp = /\\\.\\\*/g;
function parseUrl(url) {
if (!url || typeof url !== 'string')
return null;
let protocol = url.match(protocolRegExp);
protocol = protocol ? protocol[1] : null;
url = url.replace(protocolRegExp, '');
url = url.replace(trailingSlashesRegExp, '');
let port = url.match(portRegExp);
port = port ? parseInt(port[1], 10) : null;
url = url.replace(portRegExp, '');
return { protocol, url, port };
}
function prepareRule(url) {
const rule = parseUrl(url);
if (rule) {
rule.url = rule.url.replace(startsWithWildcardRegExp, '.');
rule.url = rule.url.replace(endsWithWildcardRegExp, '.');
}
return rule;
}
function urlMatchRule(sourceUrl, rule) {
if (!sourceUrl || !rule)
return false;
const matchByProtocols = !rule.protocol || !sourceUrl.protocol || rule.protocol === sourceUrl.protocol;
const matchByPorts = !rule.port || sourceUrl.port === rule.port;
const domainRequiredBeforeRule = rule.url.startsWith('.');
const domainRequiredAfterRule = rule.url.endsWith('.');
let regExStr = '^';
if (domainRequiredBeforeRule)
regExStr += '.+';
regExStr += lodash_1.escapeRegExp(rule.url).replace(wildcardRegExp, '\\..*');
if (domainRequiredAfterRule)
regExStr += '.+';
regExStr += '$';
return new RegExp(regExStr).test(sourceUrl.url) && matchByProtocols && matchByPorts;
}
function default_1(url, rules) {
if (!Array.isArray(rules))
rules = [rules];
return rules.some(rule => urlMatchRule(parseUrl(url), prepareRule(rule)));
}
exports.default = default_1;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NoZWNrLXVybC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUFrRDtBQUVsRCxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQztBQUN6QyxNQUFNLHNCQUFzQixHQUFLLE9BQU8sQ0FBQztBQUN6QyxNQUFNLHFCQUFxQixHQUFNLE9BQU8sQ0FBQztBQUN6QyxNQUFNLFVBQVUsR0FBaUIsU0FBUyxDQUFDO0FBQzNDLE1BQU0sY0FBYyxHQUFhLGFBQWEsQ0FBQztBQUMvQyxNQUFNLGNBQWMsR0FBYSxXQUFXLENBQUM7QUFFN0MsU0FBUyxRQUFRLENBQUUsR0FBRztJQUNsQixJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFDL0IsT0FBTyxJQUFJLENBQUM7SUFFaEIsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV6QyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6QyxHQUFHLEdBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0MsR0FBRyxHQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0MsR0FBRyxHQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRW5DLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBRSxHQUFHO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzQixJQUFJLElBQUksRUFBRTtRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1RDtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBRSxTQUFTLEVBQUUsSUFBSTtJQUNsQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSTtRQUNuQixPQUFPLEtBQUssQ0FBQztJQUVqQixNQUFNLGdCQUFnQixHQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQy9HLE1BQU0sWUFBWSxHQUFlLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDNUUsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxNQUFNLHVCQUF1QixHQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhELElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUVuQixJQUFJLHdCQUF3QjtRQUN4QixRQUFRLElBQUksSUFBSSxDQUFDO0lBRXJCLFFBQVEsSUFBSSxxQkFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWhFLElBQUksdUJBQXVCO1FBQ3ZCLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFFckIsUUFBUSxJQUFJLEdBQUcsQ0FBQztJQUVoQixPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLElBQUksWUFBWSxDQUFDO0FBQ3hGLENBQUM7QUFFRCxtQkFBeUIsR0FBRyxFQUFFLEtBQUs7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBTEQsNEJBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlc2NhcGVSZWdFeHAgYXMgZXNjYXBlUmUgfSBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBzdGFydHNXaXRoV2lsZGNhcmRSZWdFeHAgPSAvXlxcKlxcLi87XG5jb25zdCBlbmRzV2l0aFdpbGRjYXJkUmVnRXhwICAgPSAvXFwuXFwqJC87XG5jb25zdCB0cmFpbGluZ1NsYXNoZXNSZWdFeHAgICAgPSAvXFwvLiokLztcbmNvbnN0IHBvcnRSZWdFeHAgICAgICAgICAgICAgICA9IC86KFxcZCspJC87XG5jb25zdCBwcm90b2NvbFJlZ0V4cCAgICAgICAgICAgPSAvXihcXHcrKTpcXC9cXC8vO1xuY29uc3Qgd2lsZGNhcmRSZWdFeHAgICAgICAgICAgID0gL1xcXFxcXC5cXFxcXFwqL2c7XG5cbmZ1bmN0aW9uIHBhcnNlVXJsICh1cmwpIHtcbiAgICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgcHJvdG9jb2wgPSB1cmwubWF0Y2gocHJvdG9jb2xSZWdFeHApO1xuXG4gICAgcHJvdG9jb2wgPSBwcm90b2NvbCA/IHByb3RvY29sWzFdIDogbnVsbDtcbiAgICB1cmwgICAgICA9IHVybC5yZXBsYWNlKHByb3RvY29sUmVnRXhwLCAnJyk7XG4gICAgdXJsICAgICAgPSB1cmwucmVwbGFjZSh0cmFpbGluZ1NsYXNoZXNSZWdFeHAsICcnKTtcblxuICAgIGxldCBwb3J0ID0gdXJsLm1hdGNoKHBvcnRSZWdFeHApO1xuXG4gICAgcG9ydCA9IHBvcnQgPyBwYXJzZUludChwb3J0WzFdLCAxMCkgOiBudWxsO1xuICAgIHVybCAgPSB1cmwucmVwbGFjZShwb3J0UmVnRXhwLCAnJyk7XG5cbiAgICByZXR1cm4geyBwcm90b2NvbCwgdXJsLCBwb3J0IH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVSdWxlICh1cmwpIHtcbiAgICBjb25zdCBydWxlID0gcGFyc2VVcmwodXJsKTtcblxuICAgIGlmIChydWxlKSB7XG4gICAgICAgIHJ1bGUudXJsID0gcnVsZS51cmwucmVwbGFjZShzdGFydHNXaXRoV2lsZGNhcmRSZWdFeHAsICcuJyk7XG4gICAgICAgIHJ1bGUudXJsID0gcnVsZS51cmwucmVwbGFjZShlbmRzV2l0aFdpbGRjYXJkUmVnRXhwLCAnLicpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlO1xufVxuXG5mdW5jdGlvbiB1cmxNYXRjaFJ1bGUgKHNvdXJjZVVybCwgcnVsZSkge1xuICAgIGlmICghc291cmNlVXJsIHx8ICFydWxlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBtYXRjaEJ5UHJvdG9jb2xzICAgICAgICAgPSAhcnVsZS5wcm90b2NvbCB8fCAhc291cmNlVXJsLnByb3RvY29sIHx8IHJ1bGUucHJvdG9jb2wgPT09IHNvdXJjZVVybC5wcm90b2NvbDtcbiAgICBjb25zdCBtYXRjaEJ5UG9ydHMgICAgICAgICAgICAgPSAhcnVsZS5wb3J0IHx8IHNvdXJjZVVybC5wb3J0ID09PSBydWxlLnBvcnQ7XG4gICAgY29uc3QgZG9tYWluUmVxdWlyZWRCZWZvcmVSdWxlID0gcnVsZS51cmwuc3RhcnRzV2l0aCgnLicpO1xuICAgIGNvbnN0IGRvbWFpblJlcXVpcmVkQWZ0ZXJSdWxlICA9IHJ1bGUudXJsLmVuZHNXaXRoKCcuJyk7XG5cbiAgICBsZXQgcmVnRXhTdHIgPSAnXic7XG5cbiAgICBpZiAoZG9tYWluUmVxdWlyZWRCZWZvcmVSdWxlKVxuICAgICAgICByZWdFeFN0ciArPSAnLisnO1xuXG4gICAgcmVnRXhTdHIgKz0gZXNjYXBlUmUocnVsZS51cmwpLnJlcGxhY2Uod2lsZGNhcmRSZWdFeHAsICdcXFxcLi4qJyk7XG5cbiAgICBpZiAoZG9tYWluUmVxdWlyZWRBZnRlclJ1bGUpXG4gICAgICAgIHJlZ0V4U3RyICs9ICcuKyc7XG5cbiAgICByZWdFeFN0ciArPSAnJCc7XG5cbiAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeFN0cikudGVzdChzb3VyY2VVcmwudXJsKSAmJiBtYXRjaEJ5UHJvdG9jb2xzICYmIG1hdGNoQnlQb3J0cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHVybCwgcnVsZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocnVsZXMpKVxuICAgICAgICBydWxlcyA9IFtydWxlc107XG5cbiAgICByZXR1cm4gcnVsZXMuc29tZShydWxlID0+IHVybE1hdGNoUnVsZShwYXJzZVVybCh1cmwpLCBwcmVwYXJlUnVsZShydWxlKSkpO1xufVxuIl19