@url-sanitize/brave 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/data.json +4 -3
- package/data/metadata.json +2 -2
- package/dist/adapter.js +3 -67
- package/dist/chunk-GEHCLNTD.js +100 -0
- package/dist/{chunk-WVINX3GD.js → chunk-JZAEMBSS.js} +12 -7
- package/dist/index.js +6 -78
- package/dist/raw.js +3 -7
- package/dist/types.d.ts +3 -2
- package/package.json +2 -2
package/data/data.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"*://llo.to/e/*",
|
|
15
15
|
"*://g-o-media.digidip.net/visit?*",
|
|
16
16
|
"*://www.dpbolvw.net/click-*",
|
|
17
|
-
"*://www.tkqlhce.com/click
|
|
17
|
+
"*://www.tkqlhce.com/click-*",
|
|
18
18
|
"*://backerkit.com/ahoy/messages/*/click?*",
|
|
19
19
|
"*://www.sopasti.com/anime.php?*",
|
|
20
20
|
"*://flake.creditcable.info/*",
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
},
|
|
190
190
|
{
|
|
191
191
|
"include": [
|
|
192
|
-
"*://t.lever-analytics.com/email-link
|
|
192
|
+
"*://t.lever-analytics.com/email-link?*",
|
|
193
193
|
"*://cat.criteo.com/beacon?*"
|
|
194
194
|
],
|
|
195
195
|
"exclude": [],
|
|
@@ -422,7 +422,8 @@
|
|
|
422
422
|
"exclude": [],
|
|
423
423
|
"prepend_scheme": "https",
|
|
424
424
|
"action": "regex-path",
|
|
425
|
-
"param": "^/([^/]+)/s(/.*)$"
|
|
425
|
+
"param": "^/([^/]+)/s(/.*)$",
|
|
426
|
+
"redirect_url_template": "$1$2"
|
|
426
427
|
},
|
|
427
428
|
{
|
|
428
429
|
"include": [
|
package/data/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
3
|
-
"hash": "
|
|
2
|
+
"version": "babcc24be00b",
|
|
3
|
+
"hash": "babcc24be00bc6586c7b859be2f03447d9eb9ecef4c15c6aeab0294e99341ef7",
|
|
4
4
|
"fetchedAt": "2026-06-03T17:40:39.060Z",
|
|
5
5
|
"upstream": "https://raw.githubusercontent.com/brave/adblock-lists/master/brave-lists/debounce.json",
|
|
6
6
|
"license": "MPL-2.0"
|
package/dist/adapter.js
CHANGED
|
@@ -1,70 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
let index = 0;
|
|
5
|
-
for (const upstreamRule of data) {
|
|
6
|
-
const exceptions = upstreamRule.exclude.map(matchPatternToRegex);
|
|
7
|
-
for (const include of upstreamRule.include) {
|
|
8
|
-
const base = {
|
|
9
|
-
kind: "unwrap-redirect",
|
|
10
|
-
source: "brave",
|
|
11
|
-
provider: `brave-debounce-${index}`,
|
|
12
|
-
urlPattern: matchPatternToRegex(include),
|
|
13
|
-
exceptions,
|
|
14
|
-
pattern: upstreamRule.param,
|
|
15
|
-
captureGroup: 1
|
|
16
|
-
};
|
|
17
|
-
if (upstreamRule.prepend_scheme) base.prependScheme = upstreamRule.prepend_scheme;
|
|
18
|
-
if (upstreamRule.action === "redirect" || upstreamRule.action === "base64,redirect") {
|
|
19
|
-
rules.push({
|
|
20
|
-
...base,
|
|
21
|
-
pattern: `[?&]${escapeRegExp(upstreamRule.param)}=([^&]+)`,
|
|
22
|
-
captureGroup: 1,
|
|
23
|
-
targetEncoding: upstreamRule.action === "base64,redirect" ? "base64" : "percent"
|
|
24
|
-
});
|
|
25
|
-
} else if (upstreamRule.action === "regex-path") {
|
|
26
|
-
rules.push({
|
|
27
|
-
...base,
|
|
28
|
-
pattern: upstreamRule.param,
|
|
29
|
-
captureGroup: 1,
|
|
30
|
-
matchPart: "pathname"
|
|
31
|
-
});
|
|
32
|
-
} else {
|
|
33
|
-
const templateRule = {
|
|
34
|
-
...base,
|
|
35
|
-
pattern: upstreamRule.param,
|
|
36
|
-
captureGroup: 1,
|
|
37
|
-
matchPart: "pathname"
|
|
38
|
-
};
|
|
39
|
-
if (upstreamRule.redirect_url_template) {
|
|
40
|
-
templateRule.targetTemplate = upstreamRule.redirect_url_template;
|
|
41
|
-
}
|
|
42
|
-
rules.push(templateRule);
|
|
43
|
-
}
|
|
44
|
-
index++;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
version: meta.version,
|
|
49
|
-
generatedAt: meta.fetchedAt,
|
|
50
|
-
sources: [
|
|
51
|
-
{
|
|
52
|
-
name: "brave",
|
|
53
|
-
version: meta.version,
|
|
54
|
-
hash: meta.hash,
|
|
55
|
-
license: meta.license,
|
|
56
|
-
upstream: meta.upstream
|
|
57
|
-
}
|
|
58
|
-
],
|
|
59
|
-
rules
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
function matchPatternToRegex(pattern) {
|
|
63
|
-
return `^${escapeRegExp(pattern).replace(/^\\\*:\/\\\//, "https?:\\/\\/").replace(/\\\*/g, ".*")}$`;
|
|
64
|
-
}
|
|
65
|
-
function escapeRegExp(value) {
|
|
66
|
-
return value.replace(/[|\\{}()[\]^$+?.*]/g, "\\$&");
|
|
67
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
braveToCatalog
|
|
3
|
+
} from "./chunk-GEHCLNTD.js";
|
|
68
4
|
export {
|
|
69
5
|
braveToCatalog
|
|
70
6
|
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// src/adapter.ts
|
|
2
|
+
function braveToCatalog(data, meta) {
|
|
3
|
+
const rules = [];
|
|
4
|
+
let index = 0;
|
|
5
|
+
for (const upstreamRule of data) {
|
|
6
|
+
const exceptions = upstreamRule.exclude.map(matchPatternToRegex);
|
|
7
|
+
for (const include of upstreamRule.include) {
|
|
8
|
+
const base = {
|
|
9
|
+
kind: "unwrap-redirect",
|
|
10
|
+
source: "brave",
|
|
11
|
+
provider: `brave-debounce-${index}`,
|
|
12
|
+
urlPattern: matchPatternToRegex(include),
|
|
13
|
+
exceptions,
|
|
14
|
+
pattern: upstreamRule.param,
|
|
15
|
+
captureGroup: 1
|
|
16
|
+
};
|
|
17
|
+
if (upstreamRule.prepend_scheme) base.prependScheme = upstreamRule.prepend_scheme;
|
|
18
|
+
if (upstreamRule.action === "redirect" || upstreamRule.action === "base64,redirect") {
|
|
19
|
+
rules.push({
|
|
20
|
+
...base,
|
|
21
|
+
pattern: `[?&]${escapeRegExp(upstreamRule.param)}=([^&]+)`,
|
|
22
|
+
captureGroup: 1,
|
|
23
|
+
targetEncoding: upstreamRule.action === "base64,redirect" ? "base64" : "percent"
|
|
24
|
+
});
|
|
25
|
+
} else if (upstreamRule.action === "regex-path") {
|
|
26
|
+
const pathRule = {
|
|
27
|
+
...base,
|
|
28
|
+
pattern: upstreamRule.param,
|
|
29
|
+
captureGroup: 1,
|
|
30
|
+
matchPart: "pathname"
|
|
31
|
+
};
|
|
32
|
+
if (upstreamRule.redirect_url_template) {
|
|
33
|
+
pathRule.targetTemplate = upstreamRule.redirect_url_template;
|
|
34
|
+
} else {
|
|
35
|
+
const captureTemplate = captureGroupsTemplate(upstreamRule.param);
|
|
36
|
+
if (captureTemplate) pathRule.targetTemplate = captureTemplate;
|
|
37
|
+
}
|
|
38
|
+
rules.push(pathRule);
|
|
39
|
+
} else if (upstreamRule.action === "regex-path-template") {
|
|
40
|
+
const templateRule = {
|
|
41
|
+
...base,
|
|
42
|
+
pattern: upstreamRule.param,
|
|
43
|
+
captureGroup: 1,
|
|
44
|
+
matchPart: "pathname"
|
|
45
|
+
};
|
|
46
|
+
if (upstreamRule.redirect_url_template) {
|
|
47
|
+
templateRule.targetTemplate = upstreamRule.redirect_url_template;
|
|
48
|
+
}
|
|
49
|
+
rules.push(templateRule);
|
|
50
|
+
} else {
|
|
51
|
+
throw new Error(`Unsupported Brave debounce action: ${upstreamRule.action}`);
|
|
52
|
+
}
|
|
53
|
+
index++;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
version: meta.version,
|
|
58
|
+
generatedAt: meta.fetchedAt,
|
|
59
|
+
sources: [
|
|
60
|
+
{
|
|
61
|
+
name: "brave",
|
|
62
|
+
version: meta.version,
|
|
63
|
+
hash: meta.hash,
|
|
64
|
+
license: meta.license,
|
|
65
|
+
upstream: meta.upstream
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
rules
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function matchPatternToRegex(pattern) {
|
|
72
|
+
pattern = normalizedIncludePattern(pattern);
|
|
73
|
+
if (pattern.startsWith("*://")) {
|
|
74
|
+
return `^https?:\\/\\/${escapeRegExp(pattern.slice("*://".length)).replace(/\\\*/g, ".*")}$`;
|
|
75
|
+
}
|
|
76
|
+
return `^${escapeRegExp(pattern).replace(/\\\*/g, ".*")}$`;
|
|
77
|
+
}
|
|
78
|
+
function normalizedIncludePattern(pattern) {
|
|
79
|
+
if (pattern === "*://www.tkqlhce.com/click-") return `${pattern}*`;
|
|
80
|
+
if (pattern === "*://t.lever-analytics.com/email-link?") return `${pattern}*`;
|
|
81
|
+
return pattern;
|
|
82
|
+
}
|
|
83
|
+
function captureGroupsTemplate(pattern) {
|
|
84
|
+
let count = 0;
|
|
85
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
86
|
+
if (pattern[i] !== "(") continue;
|
|
87
|
+
if (i > 0 && pattern[i - 1] === "\\") continue;
|
|
88
|
+
if (pattern[i + 1] === "?") continue;
|
|
89
|
+
count++;
|
|
90
|
+
}
|
|
91
|
+
if (count <= 1) return void 0;
|
|
92
|
+
return Array.from({ length: count }, (_, index) => `$${index + 1}`).join("");
|
|
93
|
+
}
|
|
94
|
+
function escapeRegExp(value) {
|
|
95
|
+
return value.replace(/[|\\{}()[\]^$+?.*]/g, "\\$&");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export {
|
|
99
|
+
braveToCatalog
|
|
100
|
+
};
|
|
@@ -15,7 +15,7 @@ var data_default = [
|
|
|
15
15
|
"*://llo.to/e/*",
|
|
16
16
|
"*://g-o-media.digidip.net/visit?*",
|
|
17
17
|
"*://www.dpbolvw.net/click-*",
|
|
18
|
-
"*://www.tkqlhce.com/click
|
|
18
|
+
"*://www.tkqlhce.com/click-*",
|
|
19
19
|
"*://backerkit.com/ahoy/messages/*/click?*",
|
|
20
20
|
"*://www.sopasti.com/anime.php?*",
|
|
21
21
|
"*://flake.creditcable.info/*",
|
|
@@ -190,7 +190,7 @@ var data_default = [
|
|
|
190
190
|
},
|
|
191
191
|
{
|
|
192
192
|
include: [
|
|
193
|
-
"*://t.lever-analytics.com/email-link
|
|
193
|
+
"*://t.lever-analytics.com/email-link?*",
|
|
194
194
|
"*://cat.criteo.com/beacon?*"
|
|
195
195
|
],
|
|
196
196
|
exclude: [],
|
|
@@ -423,7 +423,8 @@ var data_default = [
|
|
|
423
423
|
exclude: [],
|
|
424
424
|
prepend_scheme: "https",
|
|
425
425
|
action: "regex-path",
|
|
426
|
-
param: "^/([^/]+)/s(/.*)$"
|
|
426
|
+
param: "^/([^/]+)/s(/.*)$",
|
|
427
|
+
redirect_url_template: "$1$2"
|
|
427
428
|
},
|
|
428
429
|
{
|
|
429
430
|
include: [
|
|
@@ -534,14 +535,18 @@ var data_default = [
|
|
|
534
535
|
|
|
535
536
|
// data/metadata.json
|
|
536
537
|
var metadata_default = {
|
|
537
|
-
version: "
|
|
538
|
-
hash: "
|
|
538
|
+
version: "babcc24be00b",
|
|
539
|
+
hash: "babcc24be00bc6586c7b859be2f03447d9eb9ecef4c15c6aeab0294e99341ef7",
|
|
539
540
|
fetchedAt: "2026-06-03T17:40:39.060Z",
|
|
540
541
|
upstream: "https://raw.githubusercontent.com/brave/adblock-lists/master/brave-lists/debounce.json",
|
|
541
542
|
license: "MPL-2.0"
|
|
542
543
|
};
|
|
543
544
|
|
|
545
|
+
// src/raw.ts
|
|
546
|
+
var braveRawData = data_default;
|
|
547
|
+
var braveMetadata = metadata_default;
|
|
548
|
+
|
|
544
549
|
export {
|
|
545
|
-
|
|
546
|
-
|
|
550
|
+
braveRawData,
|
|
551
|
+
braveMetadata
|
|
547
552
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,85 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
braveToCatalog
|
|
3
|
+
} from "./chunk-GEHCLNTD.js";
|
|
4
|
+
import {
|
|
5
|
+
braveMetadata,
|
|
6
|
+
braveRawData
|
|
7
|
+
} from "./chunk-JZAEMBSS.js";
|
|
5
8
|
|
|
6
9
|
// src/index.ts
|
|
7
10
|
import { compileSanitizer } from "@url-sanitize/core";
|
|
8
|
-
|
|
9
|
-
// src/adapter.js
|
|
10
|
-
function braveToCatalog(data, meta) {
|
|
11
|
-
const rules = [];
|
|
12
|
-
let index = 0;
|
|
13
|
-
for (const upstreamRule of data) {
|
|
14
|
-
const exceptions = upstreamRule.exclude.map(matchPatternToRegex);
|
|
15
|
-
for (const include of upstreamRule.include) {
|
|
16
|
-
const base = {
|
|
17
|
-
kind: "unwrap-redirect",
|
|
18
|
-
source: "brave",
|
|
19
|
-
provider: `brave-debounce-${index}`,
|
|
20
|
-
urlPattern: matchPatternToRegex(include),
|
|
21
|
-
exceptions,
|
|
22
|
-
pattern: upstreamRule.param,
|
|
23
|
-
captureGroup: 1
|
|
24
|
-
};
|
|
25
|
-
if (upstreamRule.prepend_scheme)
|
|
26
|
-
base.prependScheme = upstreamRule.prepend_scheme;
|
|
27
|
-
if (upstreamRule.action === "redirect" || upstreamRule.action === "base64,redirect") {
|
|
28
|
-
rules.push({
|
|
29
|
-
...base,
|
|
30
|
-
pattern: `[?&]${escapeRegExp(upstreamRule.param)}=([^&]+)`,
|
|
31
|
-
captureGroup: 1,
|
|
32
|
-
targetEncoding: upstreamRule.action === "base64,redirect" ? "base64" : "percent"
|
|
33
|
-
});
|
|
34
|
-
} else if (upstreamRule.action === "regex-path") {
|
|
35
|
-
rules.push({
|
|
36
|
-
...base,
|
|
37
|
-
pattern: upstreamRule.param,
|
|
38
|
-
captureGroup: 1,
|
|
39
|
-
matchPart: "pathname"
|
|
40
|
-
});
|
|
41
|
-
} else {
|
|
42
|
-
const templateRule = {
|
|
43
|
-
...base,
|
|
44
|
-
pattern: upstreamRule.param,
|
|
45
|
-
captureGroup: 1,
|
|
46
|
-
matchPart: "pathname"
|
|
47
|
-
};
|
|
48
|
-
if (upstreamRule.redirect_url_template) {
|
|
49
|
-
templateRule.targetTemplate = upstreamRule.redirect_url_template;
|
|
50
|
-
}
|
|
51
|
-
rules.push(templateRule);
|
|
52
|
-
}
|
|
53
|
-
index++;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
version: meta.version,
|
|
58
|
-
generatedAt: meta.fetchedAt,
|
|
59
|
-
sources: [
|
|
60
|
-
{
|
|
61
|
-
name: "brave",
|
|
62
|
-
version: meta.version,
|
|
63
|
-
hash: meta.hash,
|
|
64
|
-
license: meta.license,
|
|
65
|
-
upstream: meta.upstream
|
|
66
|
-
}
|
|
67
|
-
],
|
|
68
|
-
rules
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
function matchPatternToRegex(pattern) {
|
|
72
|
-
return `^${escapeRegExp(pattern).replace(/^\\\*:\/\\\//, "https?:\\/\\/").replace(/\\\*/g, ".*")}$`;
|
|
73
|
-
}
|
|
74
|
-
function escapeRegExp(value) {
|
|
75
|
-
return value.replace(/[|\\{}()[\]^$+?.*]/g, "\\$&");
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// src/raw.js
|
|
79
|
-
var braveRawData = data_default;
|
|
80
|
-
var braveMetadata = metadata_default;
|
|
81
|
-
|
|
82
|
-
// src/index.ts
|
|
83
11
|
var braveCatalog = braveToCatalog(braveRawData, braveMetadata);
|
|
84
12
|
var sanitize = compileSanitizer(braveCatalog);
|
|
85
13
|
export {
|
package/dist/raw.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
|
|
6
|
-
// src/raw.ts
|
|
7
|
-
var braveRawData = data_default;
|
|
8
|
-
var braveMetadata = metadata_default;
|
|
2
|
+
braveMetadata,
|
|
3
|
+
braveRawData
|
|
4
|
+
} from "./chunk-JZAEMBSS.js";
|
|
9
5
|
export {
|
|
10
6
|
braveMetadata,
|
|
11
7
|
braveRawData
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
type BraveDebounceAction = 'redirect' | 'base64,redirect' | 'regex-path' | 'regex-path-template' | (string & {});
|
|
1
2
|
interface BraveDebounceRule {
|
|
2
|
-
action:
|
|
3
|
+
action: BraveDebounceAction;
|
|
3
4
|
exclude: string[];
|
|
4
5
|
include: string[];
|
|
5
6
|
param: string;
|
|
@@ -16,4 +17,4 @@ interface BraveMetadata {
|
|
|
16
17
|
license: string;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
export type { BraveDebounceData, BraveDebounceRule, BraveMetadata };
|
|
20
|
+
export type { BraveDebounceAction, BraveDebounceData, BraveDebounceRule, BraveMetadata };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@url-sanitize/brave",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Brave Debouncer catalog adapter for @url-sanitize/core.",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"NOTICE"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@url-sanitize/core": "2.0.
|
|
34
|
+
"@url-sanitize/core": "2.0.1"
|
|
35
35
|
},
|
|
36
36
|
"keywords": [
|
|
37
37
|
"brave",
|