Breaking: make exclusion rules work like match pattern

This commit is contained in:
eight 2019-03-28 13:57:06 +08:00
parent 439386f090
commit 03b1c9abec

View File

@ -43,7 +43,7 @@ const styleManager = (() => {
const BAD_MATCHER = {test: () => false}; const BAD_MATCHER = {test: () => false};
const compileRe = createCompiler(text => `^(${text})$`); const compileRe = createCompiler(text => `^(${text})$`);
const compileSloppyRe = createCompiler(text => `^${text}$`); const compileSloppyRe = createCompiler(text => `^${text}$`);
const compileExclusion = createCompiler(buildGlob); const compileExclusion = createCompiler(buildExclusion);
const DUMMY_URL = { const DUMMY_URL = {
hash: '', hash: '',
@ -544,8 +544,22 @@ const styleManager = (() => {
}; };
} }
function buildGlob(text) { function compileGlob(text) {
return '^' + escapeRegExp(text).replace(/\\\\\\\*|\\\*/g, m => m.length > 2 ? m : '.*') + '$'; return escapeRegExp(text).replace(/\\\\\\\*|\\\*/g, m => m.length > 2 ? m : '.*');
}
function buildExclusion(text) {
// match pattern
const match = text.match(/^(\*|[\w-]+):\/\/(\*\.)?([\w.]+\/.*)/);
if (!match) {
return '^' + compileGlob(text) + '$';
}
return '^' +
(match[1] === '*' ? '[\\w-]+' : match[1]) +
'://' +
(match[2] ? '(?:[\\w.]+\\.)?' : '') +
compileGlob(match[3]) +
'$';
} }
// The md5Url provided by USO includes a duplicate "update" subdomain (see #523), // The md5Url provided by USO includes a duplicate "update" subdomain (see #523),