@url-sanitize/brave 2.0.0 → 2.0.2

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 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": [
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "5d01c76f8d27",
3
- "hash": "5d01c76f8d279314e2b337ac429949c7d70a1e3432d28f481fe04fc0a2d36dbb",
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
- // 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
- 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: "5d01c76f8d27",
538
- hash: "5d01c76f8d279314e2b337ac429949c7d70a1e3432d28f481fe04fc0a2d36dbb",
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
- data_default,
546
- metadata_default
550
+ braveRawData,
551
+ braveMetadata
547
552
  };
package/dist/index.js CHANGED
@@ -1,85 +1,13 @@
1
1
  import {
2
- data_default,
3
- metadata_default
4
- } from "./chunk-WVINX3GD.js";
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
- data_default,
3
- metadata_default
4
- } from "./chunk-WVINX3GD.js";
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: 'redirect' | 'base64,redirect' | 'regex-path' | 'regex-path-template';
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.0",
3
+ "version": "2.0.2",
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.0"
34
+ "@url-sanitize/core": "2.0.2"
35
35
  },
36
36
  "keywords": [
37
37
  "brave",