mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-12 17:20:35 +08:00
Chore: minor changes
This commit is contained in:
parent
4417f0a4a1
commit
f57a7dde94
@ -6,12 +6,12 @@ export const HOSTS: HostsSource[] = [
|
|||||||
// have not been updated for more than a year, so we set a 14 days cache ttl
|
// have not been updated for more than a year, so we set a 14 days cache ttl
|
||||||
['https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt', null, true],
|
['https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt', null, true],
|
||||||
['https://raw.githubusercontent.com/jerryn70/GoodbyeAds/master/Extension/GoodbyeAds-Xiaomi-Extension.txt', null, false],
|
['https://raw.githubusercontent.com/jerryn70/GoodbyeAds/master/Extension/GoodbyeAds-Xiaomi-Extension.txt', null, false],
|
||||||
['https://raw.githubusercontent.com/jerryn70/GoodbyeAds/master/Extension/GoodbyeAds-Huawei-AdBlock.txt', null, false],
|
['https://raw.githubusercontent.com/jerryn70/GoodbyeAds/master/Extension/GoodbyeAds-Huawei-AdBlock.txt', null, false]
|
||||||
['https://raw.githubusercontent.com/durablenapkin/block/master/tvstream.txt', null, true]
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export const HOSTS_EXTRA: HostsSource[] = [
|
export const HOSTS_EXTRA: HostsSource[] = [
|
||||||
// This stupid hosts blocks t.co, so we determine that this is also bullshit, so it is also extra
|
['https://raw.githubusercontent.com/durablenapkin/block/master/tvstream.txt', null, true],
|
||||||
|
// This stupid hosts blocks t.co, so we determine that this is also bullshit, so it is extra
|
||||||
[
|
[
|
||||||
'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext',
|
'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext',
|
||||||
['https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/thirdparties/pgl.yoyo.org/as/serverlist'],
|
['https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/thirdparties/pgl.yoyo.org/as/serverlist'],
|
||||||
@ -31,26 +31,19 @@ export const HOSTS_EXTRA: HostsSource[] = [
|
|||||||
|
|
||||||
export const DOMAIN_LISTS: HostsSource[] = [
|
export const DOMAIN_LISTS: HostsSource[] = [
|
||||||
// CoinBlockerList
|
// CoinBlockerList
|
||||||
// Although the hosts file is still actively maintained, the hosts_browser file is not updated since 2024-03, so we set a 14 days cache ttl
|
// The CoinBlockerList is no longer maintained and even close-source, so we no longer trust it
|
||||||
|
// instead we maintain a list of our own
|
||||||
// [
|
// [
|
||||||
// 'https://zerodot1.gitlab.io/CoinBlockerLists/list_browser.txt',
|
// 'https://zerodot1.gitlab.io/CoinBlockerLists/list_browser.txt',
|
||||||
// [
|
// [],
|
||||||
// 'https://proxy.cdn.skk.moe/?https://zerodot1.gitlab.io/CoinBlockerLists/list_browser.txt'
|
|
||||||
// ],
|
|
||||||
// true,
|
// true,
|
||||||
//
|
|
||||||
// ]
|
// ]
|
||||||
];
|
];
|
||||||
|
|
||||||
export const DOMAIN_LISTS_EXTRA: HostsSource[] = [
|
export const DOMAIN_LISTS_EXTRA: HostsSource[] = [
|
||||||
// CoinBlockerList - Full
|
// CoinBlockerList - Full
|
||||||
// Lat update 10 months ago, so we set a 14 days cache ttl
|
// The CoinBlockerList is no longer maintained and even close-source, so we no longer trust it
|
||||||
// [
|
// instead we maintain a list of our own
|
||||||
// 'https://zerodot1.gitlab.io/CoinBlockerLists/list.txt',
|
|
||||||
// ['https://proxy.cdn.skk.moe/?https://zerodot1.gitlab.io/CoinBlockerLists/list.txt'],
|
|
||||||
// true,
|
|
||||||
//
|
|
||||||
// ],
|
|
||||||
|
|
||||||
// BarbBlock
|
// BarbBlock
|
||||||
// The barbblock list has never been updated since 2019-05, so we set a 14 days cache ttl
|
// The barbblock list has never been updated since 2019-05, so we set a 14 days cache ttl
|
||||||
@ -121,11 +114,9 @@ export const PHISHING_DOMAIN_LISTS_EXTRA: HostsSource[] = [
|
|||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
type AdGuardFilterSource = [main: string, mirrors: string[] | null, allowThirdParty?: boolean];
|
type AdGuardFilterSource = [main: string, mirrors: string[] | null, includeThirdParty?: boolean];
|
||||||
|
|
||||||
export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
||||||
// no coin list adguard list is more maintained than its hosts
|
|
||||||
['https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt', []],
|
|
||||||
// EasyList
|
// EasyList
|
||||||
[
|
[
|
||||||
'https://easylist.to/easylist/easylist.txt',
|
'https://easylist.to/easylist/easylist.txt',
|
||||||
@ -137,7 +128,6 @@ export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
|||||||
'https://raw.githubusercontent.com/easylist/easylist/gh-pages/easylist.txt',
|
'https://raw.githubusercontent.com/easylist/easylist/gh-pages/easylist.txt',
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/101_optimized.txt'
|
'https://filters.adtidy.org/extension/ublock/filters/101_optimized.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// EasyPrivacy
|
// EasyPrivacy
|
||||||
[
|
[
|
||||||
@ -150,7 +140,6 @@ export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
|||||||
'https://raw.githubusercontent.com/easylist/easylist/gh-pages/easyprivacy.txt',
|
'https://raw.githubusercontent.com/easylist/easylist/gh-pages/easyprivacy.txt',
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/118_optimized.txt'
|
'https://filters.adtidy.org/extension/ublock/filters/118_optimized.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// AdGuard DNS Filter
|
// AdGuard DNS Filter
|
||||||
[
|
[
|
||||||
@ -159,31 +148,26 @@ export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
|||||||
'https://filters.adtidy.org/extension/ublock/filters/15_optimized.txt',
|
'https://filters.adtidy.org/extension/ublock/filters/15_optimized.txt',
|
||||||
'https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt'
|
'https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// AdGuard Base Filter
|
// AdGuard Base Filter
|
||||||
[
|
[
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt',
|
'https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt',
|
||||||
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt']
|
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// AdGuard Mobile AD
|
// AdGuard Mobile AD
|
||||||
[
|
[
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/11_optimized.txt',
|
'https://filters.adtidy.org/extension/ublock/filters/11_optimized.txt',
|
||||||
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt']
|
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// AdGuard Tracking Protection
|
// AdGuard Tracking Protection
|
||||||
[
|
[
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/3_optimized.txt',
|
'https://filters.adtidy.org/extension/ublock/filters/3_optimized.txt',
|
||||||
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/3_optimized.txt']
|
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/3_optimized.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// AdGuard Chinese filter (EasyList China + AdGuard Chinese filter)
|
// AdGuard Chinese filter (EasyList China + AdGuard Chinese filter)
|
||||||
[
|
[
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/224_optimized.txt',
|
'https://filters.adtidy.org/extension/ublock/filters/224_optimized.txt',
|
||||||
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/224_optimized.txt']
|
['https://proxy.cdn.skk.moe/?https://filters.adtidy.org/extension/ublock/filters/224_optimized.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// GameConsoleAdblockList
|
// GameConsoleAdblockList
|
||||||
// Update almost once per 1 to 3 months, let's set a 10 days cache ttl
|
// Update almost once per 1 to 3 months, let's set a 10 days cache ttl
|
||||||
@ -195,7 +179,6 @@ export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt'
|
'https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV-AGH.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// uBlock Origin Unbreak
|
// uBlock Origin Unbreak
|
||||||
[
|
[
|
||||||
@ -203,7 +186,6 @@ export const ADGUARD_FILTERS: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://ublockorigin.pages.dev/filters/unbreak.min.txt'
|
'https://ublockorigin.pages.dev/filters/unbreak.min.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -213,18 +195,18 @@ export const ADGUARD_FILTERS_WHITELIST: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://raw.githubusercontent.com/AdguardTeam/AdGuardSDNSFilter/master/Filters/exceptions.txt'
|
'https://raw.githubusercontent.com/AdguardTeam/AdGuardSDNSFilter/master/Filters/exceptions.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'https://adguardteam.github.io/AdGuardSDNSFilter/Filters/exclusions.txt',
|
'https://adguardteam.github.io/AdGuardSDNSFilter/Filters/exclusions.txt',
|
||||||
[
|
[
|
||||||
'https://raw.githubusercontent.com/AdguardTeam/AdGuardSDNSFilter/master/Filters/exclusions.txt'
|
'https://raw.githubusercontent.com/AdguardTeam/AdGuardSDNSFilter/master/Filters/exclusions.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
||||||
|
// no coin list adguard list is more maintained than its hosts
|
||||||
|
['https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt', [], true],
|
||||||
// AdGuard Annoyances filter
|
// AdGuard Annoyances filter
|
||||||
[
|
[
|
||||||
'https://filters.adtidy.org/extension/ublock/filters/14_optimized.txt',
|
'https://filters.adtidy.org/extension/ublock/filters/14_optimized.txt',
|
||||||
@ -253,7 +235,6 @@ export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://ublockorigin.pages.dev/filters/filters.min.txt'
|
'https://ublockorigin.pages.dev/filters/filters.min.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// AdGuard Popup Overlay - included in Annoyances filter
|
// AdGuard Popup Overlay - included in Annoyances filter
|
||||||
// ['https://filters.adtidy.org/extension/ublock/filters/19_optimized.txt', null, true],
|
// ['https://filters.adtidy.org/extension/ublock/filters/19_optimized.txt', null, true],
|
||||||
@ -266,7 +247,6 @@ export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://ublockorigin.pages.dev/filters/badware.min.txt'
|
'https://ublockorigin.pages.dev/filters/badware.min.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// uBlock Origin Privacy List
|
// uBlock Origin Privacy List
|
||||||
[
|
[
|
||||||
@ -274,7 +254,6 @@ export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://ublockorigin.pages.dev/filters/privacy.min.txt'
|
'https://ublockorigin.pages.dev/filters/privacy.min.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// uBlock Origin Resource Abuse: merged in uBlock Origin Privacy List
|
// uBlock Origin Resource Abuse: merged in uBlock Origin Privacy List
|
||||||
// [
|
// [
|
||||||
@ -285,25 +264,21 @@ export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
|||||||
[
|
[
|
||||||
'https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt',
|
'https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt',
|
||||||
['https://ublockorigin.pages.dev/filters/annoyances.min.txt']
|
['https://ublockorigin.pages.dev/filters/annoyances.min.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// EasyList Annoyances
|
// EasyList Annoyances
|
||||||
[
|
[
|
||||||
'https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt',
|
'https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt',
|
||||||
['https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt']
|
['https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// EasyList - Newsletters
|
// EasyList - Newsletters
|
||||||
[
|
[
|
||||||
'https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt',
|
'https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt',
|
||||||
['https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt']
|
['https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// EasyList - Notifications
|
// EasyList - Notifications
|
||||||
[
|
[
|
||||||
'https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt',
|
'https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt',
|
||||||
['https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt']
|
['https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt']
|
||||||
|
|
||||||
],
|
],
|
||||||
// Fanboy Cookie Monster (EasyList Cookie List)
|
// Fanboy Cookie Monster (EasyList Cookie List)
|
||||||
[
|
[
|
||||||
@ -312,7 +287,6 @@ export const ADGUARD_FILTERS_EXTRA: AdGuardFilterSource[] = [
|
|||||||
'https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt',
|
'https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt',
|
||||||
'https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt'
|
'https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt'
|
||||||
]
|
]
|
||||||
|
|
||||||
],
|
],
|
||||||
// Dandelion Sprout's Annoyances
|
// Dandelion Sprout's Annoyances
|
||||||
[
|
[
|
||||||
|
|||||||
@ -47,27 +47,6 @@ export const writeFile: Write = async (destination: string, input, dir = dirname
|
|||||||
|
|
||||||
export const removeFiles = async (files: string[]) => Promise.all(files.map((file) => fsp.rm(file, { force: true })));
|
export const removeFiles = async (files: string[]) => Promise.all(files.map((file) => fsp.rm(file, { force: true })));
|
||||||
|
|
||||||
export function domainWildCardToRegex(domain: string) {
|
|
||||||
let result = '^';
|
|
||||||
for (let i = 0, len = domain.length; i < len; i++) {
|
|
||||||
switch (domain[i]) {
|
|
||||||
case '.':
|
|
||||||
result += String.raw`\.`;
|
|
||||||
break;
|
|
||||||
case '*':
|
|
||||||
result += '[a-zA-Z0-9-_.]*?';
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
result += '[a-zA-Z0-9-_.]';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
result += domain[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result += '$';
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function withBannerArray(title: string, description: string[] | readonly string[], date: Date, content: string[]) {
|
export function withBannerArray(title: string, description: string[] | readonly string[], date: Date, content: string[]) {
|
||||||
return [
|
return [
|
||||||
'#########################################',
|
'#########################################',
|
||||||
|
|||||||
@ -23,7 +23,7 @@ export { type ParseType };
|
|||||||
export function processFilterRulesWithPreload(
|
export function processFilterRulesWithPreload(
|
||||||
filterRulesUrl: string,
|
filterRulesUrl: string,
|
||||||
fallbackUrls?: string[] | null,
|
fallbackUrls?: string[] | null,
|
||||||
allowThirdParty = false
|
includeThirdParty = false
|
||||||
) {
|
) {
|
||||||
const downloadPromise = fetchAssets(filterRulesUrl, fallbackUrls);
|
const downloadPromise = fetchAssets(filterRulesUrl, fallbackUrls);
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ export function processFilterRulesWithPreload(
|
|||||||
* @param {string} line
|
* @param {string} line
|
||||||
*/
|
*/
|
||||||
const lineCb = (line: string) => {
|
const lineCb = (line: string) => {
|
||||||
const result = parse(line, MUTABLE_PARSE_LINE_RESULT, allowThirdParty);
|
const result = parse(line, MUTABLE_PARSE_LINE_RESULT, includeThirdParty);
|
||||||
const flag = result[1];
|
const flag = result[1];
|
||||||
|
|
||||||
if (flag === ParseType.NotParsed) {
|
if (flag === ParseType.NotParsed) {
|
||||||
@ -120,7 +120,7 @@ export async function processFilterRules(
|
|||||||
parentSpan: Span,
|
parentSpan: Span,
|
||||||
filterRulesUrl: string,
|
filterRulesUrl: string,
|
||||||
fallbackUrls?: string[] | null,
|
fallbackUrls?: string[] | null,
|
||||||
allowThirdParty = false
|
includeThirdParty = false
|
||||||
): Promise<{ white: string[], black: string[] }> {
|
): Promise<{ white: string[], black: string[] }> {
|
||||||
const [white, black, warningMessages] = await parentSpan.traceChild(`process filter rules: ${filterRulesUrl}`).traceAsyncFn(async (span) => {
|
const [white, black, warningMessages] = await parentSpan.traceChild(`process filter rules: ${filterRulesUrl}`).traceAsyncFn(async (span) => {
|
||||||
const text = await span.traceChildAsync('download', () => fetchAssets(filterRulesUrl, fallbackUrls));
|
const text = await span.traceChildAsync('download', () => fetchAssets(filterRulesUrl, fallbackUrls));
|
||||||
@ -135,7 +135,7 @@ export async function processFilterRules(
|
|||||||
* @param {string} line
|
* @param {string} line
|
||||||
*/
|
*/
|
||||||
const lineCb = (line: string) => {
|
const lineCb = (line: string) => {
|
||||||
const result = parse(line, MUTABLE_PARSE_LINE_RESULT, allowThirdParty);
|
const result = parse(line, MUTABLE_PARSE_LINE_RESULT, includeThirdParty);
|
||||||
const flag = result[1];
|
const flag = result[1];
|
||||||
|
|
||||||
if (flag === ParseType.NotParsed) {
|
if (flag === ParseType.NotParsed) {
|
||||||
@ -246,7 +246,7 @@ const kwfilter = createKeywordFilter([
|
|||||||
'^popup'
|
'^popup'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export function parse($line: string, result: [string, ParseType], allowThirdParty: boolean): [hostname: string, flag: ParseType] {
|
export function parse($line: string, result: [string, ParseType], includeThirdParty: boolean): [hostname: string, flag: ParseType] {
|
||||||
if (
|
if (
|
||||||
// doesn't include
|
// doesn't include
|
||||||
!$line.includes('.') // rule with out dot can not be a domain
|
!$line.includes('.') // rule with out dot can not be a domain
|
||||||
@ -354,7 +354,7 @@ export function parse($line: string, result: [string, ParseType], allowThirdPart
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (_3p) {
|
if (_3p) {
|
||||||
if (allowThirdParty) {
|
if (includeThirdParty) {
|
||||||
result[0] = hostname;
|
result[0] = hostname;
|
||||||
result[1] = isIncludeAllSubDomain ? ParseType.BlackIncludeSubdomain : ParseType.BlackAbsolute;
|
result[1] = isIncludeAllSubDomain ? ParseType.BlackIncludeSubdomain : ParseType.BlackAbsolute;
|
||||||
return result;
|
return result;
|
||||||
@ -474,7 +474,7 @@ export function parse($line: string, result: [string, ParseType], allowThirdPart
|
|||||||
* `.1.1.1.l80.js^$third-party`
|
* `.1.1.1.l80.js^$third-party`
|
||||||
*/
|
*/
|
||||||
if (
|
if (
|
||||||
!allowThirdParty
|
!includeThirdParty
|
||||||
&& (
|
&& (
|
||||||
line.includes('third-party', indexOfDollar + 1)
|
line.includes('third-party', indexOfDollar + 1)
|
||||||
|| line.includes('3p', indexOfDollar + 1)
|
|| line.includes('3p', indexOfDollar + 1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user