@adriangalilea/utils 2.9.0 → 2.10.0
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/README.md +32 -0
- package/dist/browser.d.ts +1 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/universal/url/index.d.ts +24 -0
- package/dist/universal/url/index.d.ts.map +1 -0
- package/dist/universal/url/index.js +129 -0
- package/dist/universal/url/index.js.map +1 -0
- package/dist/universal/url/overlay.d.ts +14 -0
- package/dist/universal/url/overlay.d.ts.map +1 -0
- package/dist/universal/url/overlay.js +63 -0
- package/dist/universal/url/overlay.js.map +1 -0
- package/dist/universal/url/tidy-rules.d.ts +19 -0
- package/dist/universal/url/tidy-rules.d.ts.map +1 -0
- package/dist/universal/url/tidy-rules.js +192 -0
- package/dist/universal/url/tidy-rules.js.map +1 -0
- package/dist/universal/url/update-rules.d.ts +15 -0
- package/dist/universal/url/update-rules.d.ts.map +1 -0
- package/dist/universal/url/update-rules.js +114 -0
- package/dist/universal/url/update-rules.js.map +1 -0
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -99,6 +99,38 @@ btc(0.00001234) // "0.00001234 ₿"
|
|
|
99
99
|
money(100, 'EUR') // "€100.00"
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
+
### URL (`url`)
|
|
103
|
+
|
|
104
|
+
Tracking-parameter stripping and canonical cache keys, on the WHATWG URL API.
|
|
105
|
+
The knowledge of WHICH params are tracking is vendored from
|
|
106
|
+
[@protontech/tidy-url](https://www.npmjs.com/package/@protontech/tidy-url)
|
|
107
|
+
(Proton's maintained fork of DrKain/tidy-url, MIT; refresh with
|
|
108
|
+
`pnpm update-url-rules`) plus a small tested overlay: global rules only for
|
|
109
|
+
unambiguous trackers (utm_*, fbclid, gclid, …), ambiguous names per-host —
|
|
110
|
+
`si` is junk on YouTube/Spotify but `ref` on GitHub names a branch and
|
|
111
|
+
survives. Two verbs for two jobs:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { cleanUrl, urlKey } from '@adriangalilea/utils/url'
|
|
115
|
+
|
|
116
|
+
// The SAME resource minus tracking — safe to fetch, share, display.
|
|
117
|
+
// Keeps scheme, www., param order, and the fragment (a real anchor).
|
|
118
|
+
cleanUrl('https://www.youtube.com/watch?v=abc&t=120s&si=junk&utm_source=x')
|
|
119
|
+
// 'https://www.youtube.com/watch?v=abc&t=120s'
|
|
120
|
+
|
|
121
|
+
// The resource's IDENTITY — for cache keys and dedupe. Scheme-agnostic,
|
|
122
|
+
// www-less lowercase host, no trailing slash, params stripped + sorted,
|
|
123
|
+
// fragment dropped: every spelling of one page collides, different pages never do.
|
|
124
|
+
urlKey('https://www.theverge.com/2026/1/1/story/?utm_source=twitter#comments')
|
|
125
|
+
// 'theverge.com/2026/1/1/story'
|
|
126
|
+
|
|
127
|
+
// App-specific junk rides along per call
|
|
128
|
+
urlKey(url, { strip: ['session_id'] })
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Unparseable or non-http(s) input passes through unchanged — these are hygiene
|
|
132
|
+
functions over user-pasted text, not validators.
|
|
133
|
+
|
|
102
134
|
### CLI presentation (`cli`)
|
|
103
135
|
|
|
104
136
|
Terminal output: aligned tables, key/value blocks, trees, and a semantic color
|
package/dist/browser.d.ts
CHANGED
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
package/dist/browser.js
CHANGED
|
@@ -13,6 +13,7 @@ export * from "./universal/currency/index.js";
|
|
|
13
13
|
export * from "./universal/format.js";
|
|
14
14
|
// Universal utilities that work in browser
|
|
15
15
|
export * from "./universal/log.js";
|
|
16
|
+
export * from "./universal/url/index.js";
|
|
16
17
|
// Note: file, dir, path, project, and kev are NOT exported here
|
|
17
18
|
// because they depend on Node.js file system APIs
|
|
18
19
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,2CAA2C;AAC3C,cAAc,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,2CAA2C;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AAEzC,gEAAgE;AAChE,kDAAkD"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yDAAyD;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,8BAA8B;AAC9B,mEAAmE;AACnE,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzD,uDAAuD;AACvD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,wCAAwC;AACxC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yDAAyD;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,8BAA8B;AAC9B,mEAAmE;AACnE,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzD,uDAAuD;AACvD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,wCAAwC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { TIDY_RULES, TIDY_VERSION, type TrackingProvider } from "./tidy-rules.js";
|
|
2
|
+
export { OVERLAY_RULES } from "./overlay.js";
|
|
3
|
+
export interface StripOptions {
|
|
4
|
+
/** Extra param names to strip (compared lowercased), for app-specific junk. */
|
|
5
|
+
strip?: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The same URL minus tracking params: safe to fetch, share, and display.
|
|
9
|
+
* Unparseable or non-http(s) input is returned unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export declare function cleanUrl(url: string, opts?: StripOptions): string;
|
|
12
|
+
/**
|
|
13
|
+
* A canonical identity for the resource behind `url` — `host/path?sortedQuery`
|
|
14
|
+
* — for cache keys and dedupe. Unparseable or non-http(s) input is returned
|
|
15
|
+
* unchanged so it still keys consistently.
|
|
16
|
+
*/
|
|
17
|
+
export declare function urlKey(url: string, opts?: StripOptions): string;
|
|
18
|
+
/**
|
|
19
|
+
* True if `name` is a tracking param — globally, or on `host` specifically.
|
|
20
|
+
* Providers that match on the full URL (matchHref) need more context than a
|
|
21
|
+
* host and are skipped here; `cleanUrl`/`urlKey` do honor them.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isTrackingParam(name: string, host?: string): boolean;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/universal/url/index.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAU/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAUhE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL hygiene: tracking-parameter stripping and canonical cache keys.
|
|
3
|
+
* Pure and dependency-free — safe in Node, Workers, and browsers.
|
|
4
|
+
*
|
|
5
|
+
* Two verbs for two jobs:
|
|
6
|
+
* - `cleanUrl(url)`: the SAME resource, minus tracking params. Safe to fetch,
|
|
7
|
+
* share, and display. Keeps scheme, www., remaining param order, and the
|
|
8
|
+
* fragment (a fragment can be a real anchor).
|
|
9
|
+
* - `urlKey(url)`: the resource's IDENTITY, for cache keys and dedupe.
|
|
10
|
+
* Scheme-agnostic, lowercase host without www. or a trailing dot, no
|
|
11
|
+
* trailing slash, tracking params stripped, surviving params sorted,
|
|
12
|
+
* fragment dropped. Two spellings of one page collide; two different
|
|
13
|
+
* pages never do.
|
|
14
|
+
*
|
|
15
|
+
* The knowledge of WHICH params are tracking is not ours: it's vendored from
|
|
16
|
+
* @protontech/tidy-url (Proton's maintained fork of DrKain/tidy-url, MIT; see
|
|
17
|
+
* tidy-rules.ts, refresh with `pnpm update-url-rules`) plus a small tested
|
|
18
|
+
* overlay for gaps (overlay.ts). URLs are parsed with the WHATWG URL API,
|
|
19
|
+
* never regexes; the dataset's per-provider matchers select which rules apply
|
|
20
|
+
* to a host, and param names are compared literally (lowercased).
|
|
21
|
+
*
|
|
22
|
+
* Unparseable or non-http(s) input passes through unchanged: these are hygiene
|
|
23
|
+
* functions over user-pasted text, not validators.
|
|
24
|
+
*/
|
|
25
|
+
import { OVERLAY_RULES } from "./overlay.js";
|
|
26
|
+
import { TIDY_RULES } from "./tidy-rules.js";
|
|
27
|
+
export { TIDY_RULES, TIDY_VERSION } from "./tidy-rules.js";
|
|
28
|
+
export { OVERLAY_RULES } from "./overlay.js";
|
|
29
|
+
/**
|
|
30
|
+
* The same URL minus tracking params: safe to fetch, share, and display.
|
|
31
|
+
* Unparseable or non-http(s) input is returned unchanged.
|
|
32
|
+
*/
|
|
33
|
+
export function cleanUrl(url, opts) {
|
|
34
|
+
const u = parseHttp(url);
|
|
35
|
+
if (!u)
|
|
36
|
+
return url;
|
|
37
|
+
deleteTracking(u, opts);
|
|
38
|
+
return u.toString();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A canonical identity for the resource behind `url` — `host/path?sortedQuery`
|
|
42
|
+
* — for cache keys and dedupe. Unparseable or non-http(s) input is returned
|
|
43
|
+
* unchanged so it still keys consistently.
|
|
44
|
+
*/
|
|
45
|
+
export function urlKey(url, opts) {
|
|
46
|
+
const u = parseHttp(url);
|
|
47
|
+
if (!u)
|
|
48
|
+
return url;
|
|
49
|
+
deleteTracking(u, opts);
|
|
50
|
+
u.searchParams.sort();
|
|
51
|
+
const host = u.hostname.toLowerCase().replace(/^www\./, "").replace(/\.$/, "");
|
|
52
|
+
const port = u.port ? `:${u.port}` : ""; // default ports never survive URL parsing
|
|
53
|
+
const path = u.pathname.replace(/\/+$/, "") || "/";
|
|
54
|
+
const query = u.searchParams.toString();
|
|
55
|
+
return `${host}${port}${path}${query ? `?${query}` : ""}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* True if `name` is a tracking param — globally, or on `host` specifically.
|
|
59
|
+
* Providers that match on the full URL (matchHref) need more context than a
|
|
60
|
+
* host and are skipped here; `cleanUrl`/`urlKey` do honor them.
|
|
61
|
+
*/
|
|
62
|
+
export function isTrackingParam(name, host = "") {
|
|
63
|
+
const n = name.toLowerCase();
|
|
64
|
+
const doomed = new Set();
|
|
65
|
+
const allowed = new Set();
|
|
66
|
+
for (const p of compiled()) {
|
|
67
|
+
if (p.provider.matchHref)
|
|
68
|
+
continue;
|
|
69
|
+
if (!p.match.test(host))
|
|
70
|
+
continue;
|
|
71
|
+
collect(p.provider, doomed, allowed);
|
|
72
|
+
}
|
|
73
|
+
return doomed.has(n) && !allowed.has(n);
|
|
74
|
+
}
|
|
75
|
+
let cache = null;
|
|
76
|
+
/** All providers (vendored + overlay), matchers compiled once per process. */
|
|
77
|
+
function compiled() {
|
|
78
|
+
cache ??= [...TIDY_RULES, ...OVERLAY_RULES].map((provider) => ({
|
|
79
|
+
provider,
|
|
80
|
+
match: new RegExp(provider.match, provider.flags),
|
|
81
|
+
exclude: (provider.exclude ?? []).map((e) => new RegExp(e.match, e.flags)),
|
|
82
|
+
}));
|
|
83
|
+
return cache;
|
|
84
|
+
}
|
|
85
|
+
/** Parse as a WHATWG URL, but only for http(s); anything else → null. */
|
|
86
|
+
function parseHttp(url) {
|
|
87
|
+
let u;
|
|
88
|
+
try {
|
|
89
|
+
u = new URL(url);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return u.protocol === "http:" || u.protocol === "https:" ? u : null;
|
|
95
|
+
}
|
|
96
|
+
/** Fold one provider's rules/allow into the doomed/allowed sets (lowercased). */
|
|
97
|
+
function collect(provider, doomed, allowed) {
|
|
98
|
+
for (const r of provider.rules)
|
|
99
|
+
doomed.add(r.toLowerCase());
|
|
100
|
+
for (const a of provider.allow ?? [])
|
|
101
|
+
allowed.add(a.toLowerCase());
|
|
102
|
+
}
|
|
103
|
+
/** Remove tracking params (dataset + overlay + caller extras) from `u` in place. */
|
|
104
|
+
function deleteTracking(u, opts) {
|
|
105
|
+
const doomed = new Set();
|
|
106
|
+
const allowed = new Set();
|
|
107
|
+
for (const p of compiled()) {
|
|
108
|
+
// Upstream semantics: providers match on the host (href when matchHref),
|
|
109
|
+
// and an exclude pattern opts the whole URL out of that provider.
|
|
110
|
+
if (!p.match.test(p.provider.matchHref ? u.href : u.host))
|
|
111
|
+
continue;
|
|
112
|
+
if (p.exclude.some((x) => x.test(u.href)))
|
|
113
|
+
continue;
|
|
114
|
+
collect(p.provider, doomed, allowed);
|
|
115
|
+
}
|
|
116
|
+
for (const extra of opts?.strip ?? [])
|
|
117
|
+
doomed.add(extra.toLowerCase());
|
|
118
|
+
for (const a of allowed)
|
|
119
|
+
doomed.delete(a);
|
|
120
|
+
if (doomed.size === 0)
|
|
121
|
+
return;
|
|
122
|
+
// Collect first: deleting while iterating URLSearchParams skips entries.
|
|
123
|
+
const keys = [...new Set(u.searchParams.keys())];
|
|
124
|
+
for (const k of keys) {
|
|
125
|
+
if (doomed.has(k.toLowerCase()))
|
|
126
|
+
u.searchParams.delete(k);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/universal/url/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Curated additions the vendored ruleset lacks, in the same TrackingProvider
|
|
3
|
+
* shape so the engine treats both identically. Everything here is covered by
|
|
4
|
+
* tests/url-test.ts; entries that land upstream can be deleted on the next
|
|
5
|
+
* `pnpm update-url-rules`.
|
|
6
|
+
*
|
|
7
|
+
* The bar for the global entry is UNAMBIGUOUS: ad-platform click ids and
|
|
8
|
+
* analytics linkers that never carry meaning anywhere. Ambiguous names
|
|
9
|
+
* (`ref`, `source`, `si`, `t`) go under a host — a global strip of `ref`
|
|
10
|
+
* would corrupt GitHub URLs, where it names a branch.
|
|
11
|
+
*/
|
|
12
|
+
import type { TrackingProvider } from "./tidy-rules.js";
|
|
13
|
+
export declare const OVERLAY_RULES: readonly TrackingProvider[];
|
|
14
|
+
//# sourceMappingURL=overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/universal/url/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,eAAO,MAAM,aAAa,EAAE,SAAS,gBAAgB,EA6DpD,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export const OVERLAY_RULES = [
|
|
2
|
+
{
|
|
3
|
+
name: "overlay:global",
|
|
4
|
+
match: ".*",
|
|
5
|
+
flags: "",
|
|
6
|
+
rules: [
|
|
7
|
+
// Ad-platform click ids upstream's Global list misses
|
|
8
|
+
"msclkid", // Microsoft Ads
|
|
9
|
+
"dclid", // Google DoubleClick
|
|
10
|
+
"yclid", // Yandex
|
|
11
|
+
"twclid", // Twitter Ads
|
|
12
|
+
"ttclid", // TikTok Ads
|
|
13
|
+
"li_fat_id", // LinkedIn
|
|
14
|
+
"epik", // Pinterest
|
|
15
|
+
"irclickid", // Impact Radius
|
|
16
|
+
"srsltid", // Google Merchant / shopping results
|
|
17
|
+
"gbraid", // Google Ads (iOS attribution)
|
|
18
|
+
"wbraid",
|
|
19
|
+
// Google Analytics cross-domain linker
|
|
20
|
+
"_ga",
|
|
21
|
+
"_gl",
|
|
22
|
+
"_gid",
|
|
23
|
+
// Openstat (mail.ru / rambler analytics)
|
|
24
|
+
"_openstat",
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
// Upstream's youtube matcher (`.*.youtube.com`) misses the bare host, and its
|
|
29
|
+
// rules miss the share/attribution params — carry a superset that covers both.
|
|
30
|
+
name: "overlay:youtube.com",
|
|
31
|
+
match: "(^|\\.)youtube\\.com$",
|
|
32
|
+
flags: "i",
|
|
33
|
+
rules: ["si", "pp", "ab_channel", "kw", "feature", "app", "embeds_referring_euri", "embeds_referring_origin"],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "overlay:youtu.be",
|
|
37
|
+
match: "(^|\\.)youtu\\.be$",
|
|
38
|
+
flags: "i",
|
|
39
|
+
rules: ["si", "feature"],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
// Upstream covers twitter.com but not the x.com rename; `t` (share token) is
|
|
43
|
+
// missing on both. `s` and `t` are share residue here, meaningful elsewhere.
|
|
44
|
+
name: "overlay:x.com",
|
|
45
|
+
match: "(^|\\.)x\\.com$",
|
|
46
|
+
flags: "i",
|
|
47
|
+
rules: ["s", "t", "src", "ref_url", "ref_src", "mx"],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "overlay:twitter.com",
|
|
51
|
+
match: "(^|\\.)twitter\\.com$",
|
|
52
|
+
flags: "i",
|
|
53
|
+
rules: ["t"],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
// Substack share links: `r` is the referrer handle, the rest is signup routing.
|
|
57
|
+
name: "overlay:substack.com",
|
|
58
|
+
match: "(^|\\.)substack\\.com$",
|
|
59
|
+
flags: "i",
|
|
60
|
+
rules: ["r", "triedRedirect", "freeWelcomeReferral", "isFreemail"],
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
//# sourceMappingURL=overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/universal/url/overlay.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,aAAa,GAAgC;IACzD;QACC,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,EAAE;QACT,KAAK,EAAE;YACN,sDAAsD;YACtD,SAAS,EAAE,gBAAgB;YAC3B,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,aAAa;YACvB,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,qCAAqC;YAChD,QAAQ,EAAE,+BAA+B;YACzC,QAAQ;YACR,uCAAuC;YACvC,KAAK;YACL,KAAK;YACL,MAAM;YACN,yCAAyC;YACzC,WAAW;SACX;KACD;IACD;QACC,8EAA8E;QAC9E,+EAA+E;QAC/E,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,CAAC;KAC7G;IACD;QACC,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,oBAAoB;QAC3B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;KACxB;IACD;QACC,6EAA6E;QAC7E,6EAA6E;QAC7E,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;KACpD;IACD;QACC,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,GAAG,CAAC;KACZ;IACD;QACC,gFAAgF;QAChF,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,CAAC;KAClE;CACD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TrackingProvider {
|
|
2
|
+
name: string;
|
|
3
|
+
/** Host-matcher regex source; tested against the URL host (href when matchHref). */
|
|
4
|
+
match: string;
|
|
5
|
+
flags: string;
|
|
6
|
+
matchHref?: boolean;
|
|
7
|
+
/** Param names to strip (compared lowercased). */
|
|
8
|
+
rules: readonly string[];
|
|
9
|
+
/** Param names protected from ANY rule on this provider's URLs. */
|
|
10
|
+
allow?: readonly string[];
|
|
11
|
+
/** URL patterns that opt a URL out of this provider entirely. */
|
|
12
|
+
exclude?: readonly {
|
|
13
|
+
match: string;
|
|
14
|
+
flags: string;
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
export declare const TIDY_VERSION = "1.18.5";
|
|
18
|
+
export declare const TIDY_RULES: readonly TrackingProvider[];
|
|
19
|
+
//# sourceMappingURL=tidy-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tidy-rules.d.ts","sourceRoot":"","sources":["../../../src/universal/url/tidy-rules.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtD;AAED,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,UAAU,EAAE,SAAS,gBAAgB,EAiLjD,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// GENERATED FILE — do not edit; refresh with `pnpm update-url-rules`.
|
|
2
|
+
//
|
|
3
|
+
// Tracking-parameter ruleset vendored from @protontech/tidy-url@1.18.5 (data/rules.js),
|
|
4
|
+
// Proton's maintained fork of https://github.com/DrKain/tidy-url.
|
|
5
|
+
// Upstream license: MIT — Copyright (c) 2021 DrKain (https://github.com/DrKain)
|
|
6
|
+
//
|
|
7
|
+
// Carried fields: the host matcher (match/flags; tested against the URL host,
|
|
8
|
+
// or the full href when matchHref), the param names to strip (rules), params
|
|
9
|
+
// protected from any rule (allow), and URL patterns that opt a URL out of the
|
|
10
|
+
// provider (exclude). Upstream's redirect/AMP/decode features are out of scope;
|
|
11
|
+
// 56 providers that only did those were dropped (176 kept).
|
|
12
|
+
// Generated 2026-07-13.
|
|
13
|
+
export const TIDY_VERSION = "1.18.5";
|
|
14
|
+
export const TIDY_RULES = [
|
|
15
|
+
{ "name": "Global", "match": ".*", "flags": "", "rules": ["utm_source", "utm_medium", "utm_term", "utm_campaign", "utm_content", "utm_name", "utm_cid", "utm_reader", "utm_viz_id", "utm_pubreferrer", "utm_swu", "utm_social-type", "utm_brand", "utm_team", "utm_feeditemid", "utm_id", "utm_marketing_tactic", "utm_creative_format", "utm_campaign_id", "utm_source_platform", "utm_timestamp", "utm_souce", "utm_couponvalue", "itm_source", "itm_medium", "itm_term", "itm_campaign", "itm_content", "itm_channel", "itm_source_s", "itm_medium_s", "itm_campaign_s", "itm_audience", "int_source", "int_cmp_name", "int_cmp_id", "int_cmp_creative", "int_medium", "int_campaign", "int_content", "pk_campaign", "pk_cpn", "pk_source", "pk_medium", "pk_keyword", "pk_kwd", "pk_content", "pk_cid", "piwik_campaign", "piwik_cpn", "piwik_source", "piwik_medium", "piwik_keyword", "piwik_kwd", "piwik_content", "piwik_cid", "gclid", "ga_source", "ga_medium", "ga_term", "ga_content", "ga_campaign", "ga_place", "gclid", "gclsrc", "hsa_cam", "hsa_grp", "hsa_mt", "hsa_src", "hsa_ad", "hsa_acc", "hsa_net", "hsa_kw", "hsa_tgt", "hsa_ver", "hsa_la", "hsa_ol", "fbclid", "oly_enc_id", "oly_anon_id", "vero_id", "vero_conv", "__s", "_hsenc", "_hsmi", "__hssc", "__hstc", "__hsfp", "hsCtaTracking", "mkt_tok", "mtm_campaign", "mtm_keyword", "mtm_kwd", "mtm_source", "mtm_medium", "mtm_content", "mtm_cid", "mtm_group", "mtm_placement", "elqTrackId", "elq", "elqak", "elqaid", "elqat", "elqCampaignId", "elqTrack", "mc_cid", "mc_eid", "ncid", "cmpid", "mbid", "rdt_cid"] },
|
|
16
|
+
{ "name": "audible.com", "match": "www.audible.com", "flags": "i", "rules": ["qid", "sr", "pf_rd_p", "pf_rd_r", "plink", "ref"] },
|
|
17
|
+
{ "name": "bandcamp.com", "match": ".*.bandcamp.com", "flags": "i", "rules": ["from", "search_item_id", "search_item_type", "search_match_part", "search_page_id", "search_page_no", "search_rank", "search_sig"] },
|
|
18
|
+
{ "name": "amazon.com", "match": "amazon\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["psc", "colid", "coliid", "linkId", "tag", "linkCode", "ms3_c", "pf_rd_s", "pf_rd_t", " pf_rd_i", "pf_rd_m", "pd_rd_w", "qid", "sr", "keywords", "dchild", "ref", "ref_", "rnid", "pf_rd_r", "pf_rd_p", "pd_rd_r", "smid", "pd_rd_wg", "content-id", "spLa", "crid", "sprefix", "hvlocint", "hvdvcmdl", "hvptwo", "hvpone", "hvpos", "qu", "pd_rd_i", "nc2", "nc1", "trk", "sc_icampaign", "trkCampaign", "ufe", "sc_icontent", "sc_ichannel", "sc_iplace", "sc_country", "sc_outcome", "sc_geo", "sc_campaign", "sc_channel"] },
|
|
19
|
+
{ "name": "reddit.com", "match": ".*.reddit.com", "flags": "i", "rules": ["ref_campaign", "ref_source", "tags", "keyword", "channel", "campaign", "user_agent", "domain", "base_url", "$android_deeplink_path", "$deeplink_path", "$og_redirect", "share_id", "correlation_id", "ref", "rdt"] },
|
|
20
|
+
{ "name": "app.link", "match": ".*\\.app\\.link", "flags": "i", "rules": ["tags", "keyword", "channel", "campaign", "user_agent", "domain", "base_url", "$android_deeplink_path", "$deeplink_path", "$og_redirect", "compact_view", "dnt", "adblock", "geoip_country", "referrer_domain", "referrer_url"] },
|
|
21
|
+
{ "name": "twitch.tv", "match": "www.twitch.tv", "flags": "i", "rules": ["tt_medium", "tt_content", "tt_email_id"] },
|
|
22
|
+
{ "name": "blog.twitch.tv", "match": "blog.twitch.tv", "flags": "i", "rules": ["utm_referrer"] },
|
|
23
|
+
{ "name": "pixiv.net", "match": "www.pixiv.net", "flags": "i", "rules": ["p", "i", "g"] },
|
|
24
|
+
{ "name": "spotify.com", "match": "open.spotify.com", "flags": "i", "rules": ["si", "utm_source", "context", "sp_cid", "_branch_match_id", "_branch_referrer"], "allow": ["go", "nd"] },
|
|
25
|
+
{ "name": "aliexpress.com", "match": "^(?:https?:\\/\\/)?(?:[^.]+\\.)?aliexpress\\.(?:[a-z]{2,}){1,}", "flags": "i", "rules": ["_t", "spm", "algo_pvid", "algo_expid", "btsid", "ws_ab_test", "initiative_id", "origin", "widgetId", "tabType", "productId", "productIds", "gps-id", "scm", "scm_id", "scm-url", "pvid", "algo_exp_id", "pdp_pi", "fromRankId", "sourceType", "utparam", "gatewayAdapt", "_evo_buckets", "tpp_rcmd_bucket_id", "scenario", "pdp_npi", "tt", "spreadType", "srcSns", "bizType", "social_params", "aff_fcid", "aff_fsk", "aff_platform", "aff_trace_key", "shareId", "platform", "businessType", "terminal_id", "afSmartRedirect", "sk", "gbraid"], "allow": ["sku_id", "pdp_ext_f"] },
|
|
26
|
+
{ "name": "google.com", "match": "www.google\\..*", "flags": "i", "rules": ["sourceid", "client", "aqs", "sxsrf", "uact", "ved", "iflsig", "source", "ei", "oq", "gs_lcp", "sclient", "bih", "biw", "sa", "dpr", "rlz", "gs_lp", "sca_esv", "si", "gs_l", "gs_lcrp"] },
|
|
27
|
+
{ "name": "youtube.com", "match": ".*.youtube.com", "flags": "i", "rules": ["gclid", "feature", "app", "src", "lId", "cId", "embeds_referring_euri"] },
|
|
28
|
+
{ "name": "humblebundle.com", "match": "www.humblebundle.com", "flags": "i", "rules": ["hmb_source", "hmb_medium", "hmb_campaign", "mcID", "linkID"], "allow": ["partner"] },
|
|
29
|
+
{ "name": "greenmangaming.com", "match": "www.greenmangaming.com", "flags": "i", "rules": ["CJEVENT", "cjevent", "irclickid", "irgwc", "pdpgatetoken"] },
|
|
30
|
+
{ "name": "fanatical.com", "match": "www.fanatical.com", "flags": "i", "rules": ["cj_pid", "cj_aid", "aff_track", "CJEVENT", "cjevent"] },
|
|
31
|
+
{ "name": "newsweek.com", "match": "www.newsweek.com", "flags": "i", "rules": ["subref", "amp"] },
|
|
32
|
+
{ "name": "imgur.com", "match": "imgur.com", "flags": "i", "rules": ["source"] },
|
|
33
|
+
{ "name": "plex.tv", "match": ".*.plex.tv", "flags": "i", "rules": ["origin", "plex_utm", "sl", "ckhid"] },
|
|
34
|
+
{ "name": "imdb.com", "match": "^.*\\.imdb\\.com", "flags": "i", "rules": ["ref_", "ref\\_", "pf_rd_m", "pf_rd_r", "pf_rd_p", "pf_rd_s", "pf_rd_t", "pf_rd_i", "ref_hp_hp_e_2", "rf", "ref"] },
|
|
35
|
+
{ "name": "gog.com", "match": "www.gog.com", "flags": "i", "rules": ["at_gd", "rec_scenario_id", "rec_sub_source_id", "rec_item_id", "vds_id", "prod_id", "rec_source"] },
|
|
36
|
+
{ "name": "tiktok.com", "match": "www.tiktok.com", "flags": "i", "rules": ["is_copy_url", "is_from_webapp", "sender_device", "sender_web_id", "sec_user_id", "share_app_id", "share_item_id", "share_link_id", "social_sharing", "_r", "source", "user_id", "u_code", "tt_from", "share_author_id", "sec_uid", "checksum", "_d", "refer", "enter_from", "enter_method", "attr_medium", "attr_source"], "allow": ["lang"] },
|
|
37
|
+
{ "name": "facebook.com", "match": ".*.facebook.com", "flags": "i", "rules": ["fbclid", "fb_ref", "fb_source", "referral_code", "referral_story_type", "tracking", "ref"], "exclude": [{ "match": "www\\.facebook\\.com\\/sharer", "flags": "i" }] },
|
|
38
|
+
{ "name": "yandex.com", "match": "yandex.com", "flags": "i", "rules": ["lr", "from", "grhow", "origin", "_openstat"] },
|
|
39
|
+
{ "name": "store.steampowered.com", "match": "store.steampowered.com", "flags": "i", "rules": ["snr"] },
|
|
40
|
+
{ "name": "findojobs.co.nz", "match": "www.findojobs.co.nz", "flags": "i", "rules": ["source"] },
|
|
41
|
+
{ "name": "linkedin.com", "match": ".*.linkedin.com", "flags": "i", "rules": ["contextUrn", "destRedirectURL", "lipi", "licu", "trk", "trkInfo", "originalReferer", "upsellOrderOrigin", "upsellTrk", "upsellTrackingId", "src", "trackingId", "midToken", "midSig", "trkEmail", "eid"], "allow": ["otpToken"] },
|
|
42
|
+
{ "name": "indeed.com", "match": ".*.indeed.com", "flags": "i", "rules": ["from", "attributionid"] },
|
|
43
|
+
{ "name": "discord.com", "match": "(?:.*\\.)?discord\\.com", "flags": "i", "rules": ["source", "ref"] },
|
|
44
|
+
{ "name": "medium.com", "match": "medium.com", "flags": "i", "rules": ["source"] },
|
|
45
|
+
{ "name": "twitter.com", "match": "twitter.com", "flags": "i", "rules": ["s", "src", "ref_url", "ref_src"] },
|
|
46
|
+
{ "name": "voidu.com", "match": "voidu.com", "flags": "i", "rules": ["affiliate"] },
|
|
47
|
+
{ "name": "wingamestore.com", "match": "wingamestore.com", "flags": "i", "rules": ["ars"] },
|
|
48
|
+
{ "name": "gamebillet.com", "match": "gamebillet.com", "flags": "i", "rules": ["affiliate"] },
|
|
49
|
+
{ "name": "gamesload.com", "match": "^www.gamesload.com", "flags": "i", "rules": ["affil"], "allow": ["REF"] },
|
|
50
|
+
{ "name": "mightyape", "match": "mightyape.(co.nz|com.au)", "flags": "i", "rules": ["m"] },
|
|
51
|
+
{ "name": "apple.com", "match": ".*.apple.com", "flags": "i", "rules": ["uo", "app", "at", "ct", "ls", "pt", "mt", "itsct", "itscg", "referrer", "src", "cid"] },
|
|
52
|
+
{ "name": "music.apple.com", "match": "music.apple.com", "flags": "i", "rules": ["i", "lId", "cId", "sr", "src"] },
|
|
53
|
+
{ "name": "play.google.com", "match": "play.google.com", "flags": "i", "rules": ["referrer", "pcampaignid"] },
|
|
54
|
+
{ "name": "lenovo.com", "match": ".*.lenovo.com", "flags": "i", "rules": ["PID", "clickid", "irgwc", "cid", "acid", "linkTrack"] },
|
|
55
|
+
{ "name": "itch.io", "match": "itch.io", "flags": "i", "rules": ["fbclid"] },
|
|
56
|
+
{ "name": "microsoft.com", "match": "microsoft.com", "flags": "i", "rules": ["refd", "icid"] },
|
|
57
|
+
{ "name": "berrybase.de", "match": "berrybase.de", "flags": "i", "rules": ["sPartner"] },
|
|
58
|
+
{ "name": "instagram.com", "match": "instagram.com", "flags": "i", "rules": ["igshid", "igsh", "source"] },
|
|
59
|
+
{ "name": "hubspot.com", "match": "hubspot.com", "flags": "i", "rules": ["hubs_content-cta", "hubs_content"] },
|
|
60
|
+
{ "name": "ebay.com", "match": "^(?:https?:\\/\\/)?(?:[^.]+\\.)?ebay\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["amdata", "var", "hash", "_trkparms", "_trksid", "_from", "mkcid", "mkrid", "campid", "toolid", "mkevt", "customid", "siteid", "ufes_redirect", "ff3", "pub", "media", "widget_ver", "ssspo", "sssrc", "ssuid"], "allow": ["epid", "_nkw"] },
|
|
61
|
+
{ "name": "shopee.com", "match": "^(?:https?:\\/\\/)?(?:[^.]+\\.)?shopee\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["af_siteid", "pid", "af_click_lookback", "af_viewthrough_lookback", "is_retargeting", "af_reengagement_window", "af_sub_siteid", "c"] },
|
|
62
|
+
{ "name": "msn.com", "match": "www.msn.com", "flags": "i", "rules": ["ocid", "cvid", "pc"] },
|
|
63
|
+
{ "name": "nuuvem.com", "match": "www.nuuvem.com", "flags": "i", "rules": ["ranMID", "ranEAID", "ranSiteID"] },
|
|
64
|
+
{ "name": "linksynergy.com", "match": ".*.linksynergy.com", "flags": "i", "rules": ["id", "mid"] },
|
|
65
|
+
{ "name": "cnbc.com", "match": "www.cnbc.com", "flags": "i", "rules": ["__source"] },
|
|
66
|
+
{ "name": "yahoo.com", "match": "yahoo.com", "flags": "i", "rules": ["guce_referrer", "guce_referrer_sig", "guccounter", "soc_src", "soc_trk", "tsrc"] },
|
|
67
|
+
{ "name": "techcrunch.com", "match": "techcrunch.com", "flags": "i", "rules": ["guce_referrer", "guce_referrer_sig", "guccounter"] },
|
|
68
|
+
{ "name": "office.com", "match": "office.com", "flags": "i", "rules": ["from"] },
|
|
69
|
+
{ "name": "ticketmaster.co.nz", "match": "ticketmaster.co.nz", "flags": "i", "rules": ["tm_link"] },
|
|
70
|
+
{ "name": "bostonglobe.com", "match": "bostonglobe.com", "flags": "i", "rules": ["p1"] },
|
|
71
|
+
{ "name": "ampproject.org", "match": "cdn.ampproject.org", "flags": "i", "rules": ["amp_gsa", "amp_js_v", "usqp", "outputType"] },
|
|
72
|
+
{ "name": "nbcnews.com", "match": "nbcnews.com", "flags": "i", "rules": ["fbclid"] },
|
|
73
|
+
{ "name": "countdown.co.nz", "match": "www.countdown.co.nz", "flags": "i", "rules": ["promo_name", "promo_creative", "promo_position", "itemID"] },
|
|
74
|
+
{ "name": "etsy.com", "match": "www.etsy.com", "flags": "i", "rules": ["click_key", "click_sum", "rec_type", "ref", "frs", "sts", "dd_referrer"] },
|
|
75
|
+
{ "name": "wattpad.com", "match": "www.wattpad.com", "flags": "i", "rules": ["wp_page", "wp_uname", "wp_originator"] },
|
|
76
|
+
{ "name": "noctre.com", "match": "www.noctre.com", "flags": "i", "rules": ["aff"] },
|
|
77
|
+
{ "name": "dreamgame.com", "match": "www.dreamgame.com", "flags": "i", "rules": ["affiliate"] },
|
|
78
|
+
{ "name": "startpage.com", "match": ".*.startpage.com", "flags": "i", "rules": ["source"] },
|
|
79
|
+
{ "name": "2game.com", "match": "^2game.com", "flags": "i", "rules": ["ref"] },
|
|
80
|
+
{ "name": "gamesplanet.com", "match": "^(?:.*\\.|)gamesplanet\\.com", "flags": "i", "rules": ["ref"] },
|
|
81
|
+
{ "name": "gamersgate.com", "match": "www.gamersgate.com", "flags": "i", "rules": ["aff"] },
|
|
82
|
+
{ "name": "ranker.com", "match": "^(www|blog).ranker.com", "flags": "i", "rules": ["ref", "rlf", "l", "li_source", "li_medium"] },
|
|
83
|
+
{ "name": "watchworthy.app", "match": "^watchworthy.app", "flags": "i", "rules": ["ref"] },
|
|
84
|
+
{ "name": "squarespace.com", "match": "^.*.squarespace.com", "flags": "i", "rules": ["subchannel", "source", "subcampaign", "campaign", "channel", "_ga"] },
|
|
85
|
+
{ "name": "baidu.com", "match": "^www.baidu.com", "flags": "i", "rules": ["rsv_spt", "rsv_idx", "rsv_pq", "rsv_t", "rsv_bp", "rsv_dl", "rsv_iqid", "rsv_enter", "rsv_sug1", "rsv_sug2", "rsv_sug3", "rsv_sug4", "rsv_sug5", "rsv_sug6", "rsv_sug7", "rsv_sug8", "rsv_sug9", "rsv_sug7", "rsv_btype", "tn", "sa", "rsf", "rqid", "usm", "__pc2ps_ab", "p_signature", "p_sign", "p_timestamp", "p_tk", "oq"], "allow": ["wd", "ie"] },
|
|
86
|
+
{ "name": "primevideo.com", "match": "^www.primevideo.com", "flags": "i", "rules": ["dclid"] },
|
|
87
|
+
{ "name": "threadless.com", "match": "^www.threadless.com", "flags": "i", "rules": ["itm_source_s", "itm_medium_s", "itm_campaign_s"] },
|
|
88
|
+
{ "name": "wsj.com", "match": "^www.wsj.com", "flags": "i", "rules": ["mod"] },
|
|
89
|
+
{ "name": "thewarehouse.co.nz", "match": "^www.thewarehouse.co.nz", "flags": "i", "rules": ["sfmc_j", "sfmc_id", "sfmc_mid", "sfmc_uid", "sfmc_id", "sfmc_activityid"] },
|
|
90
|
+
{ "name": "ko-fi.com", "match": "^ko-fi.com", "flags": "i", "rules": ["ref", "src"] },
|
|
91
|
+
{ "name": "indiegala.com", "match": "^www.indiegala.com", "flags": "i", "rules": ["ref"] },
|
|
92
|
+
{ "name": "transparency.fb.com", "match": "^transparency.fb.com", "flags": "i", "rules": ["source"] },
|
|
93
|
+
{ "name": "manymorestores.com", "match": "^www.manymorestores.com", "flags": "i", "rules": ["ref"] },
|
|
94
|
+
{ "name": "macgamestore.com", "match": "^www.macgamestore.com", "flags": "i", "rules": ["ars"] },
|
|
95
|
+
{ "name": "blizzardgearstore.com", "match": "^www.blizzardgearstore.com", "flags": "i", "rules": ["_s"] },
|
|
96
|
+
{ "name": "playbook.com", "match": "^www.playbook.com", "flags": "i", "rules": ["p"] },
|
|
97
|
+
{ "name": "cookiepro.com", "match": "^.*.cookiepro.com", "flags": "i", "rules": ["source", "referral"] },
|
|
98
|
+
{ "name": "pinterest.com", "match": "^www\\.pinterest\\..*", "flags": "i", "rules": ["rs"] },
|
|
99
|
+
{ "name": "bing.com", "match": "^www\\.bing\\.com", "flags": "i", "rules": ["qs", "form", "sp", "pq", "sc", "sk", "cvid", "FORM", "ck", "simid", "thid", "cdnurl", "pivotparams", "ghsh", "ghacc", "ccid", "", "ru"], "allow": ["q", "tsc", "iss", "id", "view", "setlang"] },
|
|
100
|
+
{ "name": "jf79.net", "match": "^jf79\\.net", "flags": "i", "rules": ["li", "wi", "ws", "ws2"] },
|
|
101
|
+
{ "name": "frankenergie.nl", "match": "^www\\.frankenergie\\.nl", "flags": "i", "rules": ["aff_id"] },
|
|
102
|
+
{ "name": "nova.cz", "match": "^.*\\.nova\\.cz", "flags": "i", "rules": ["sznclid"] },
|
|
103
|
+
{ "name": "cnn.com", "match": ".*.cnn.com", "flags": "i", "rules": ["hpt", "iid"], "exclude": [{ "match": "e.newsletters.cnn.com", "flags": "i" }] },
|
|
104
|
+
{ "name": "justwatch.com", "match": "click\\.justwatch\\.com", "flags": "i", "rules": ["cx", "uct_country", "uct_buybox", "sid"] },
|
|
105
|
+
{ "name": "psychologytoday.com", "match": "www\\.psychologytoday\\.com", "flags": "i", "rules": ["amp"] },
|
|
106
|
+
{ "name": "mouser.com", "match": "www\\.mouser\\.com", "flags": "i", "rules": ["qs"] },
|
|
107
|
+
{ "name": "awin1.com", "match": "www\\.awin1\\.com", "flags": "i", "rules": ["awinmid", "awinaffid", "clickref"] },
|
|
108
|
+
{ "name": "castorama.fr", "match": "www\\.castorama\\.fr", "flags": "i", "rules": ["syte_ref"] },
|
|
109
|
+
{ "name": "quizlet.com", "match": "quizlet\\.com", "flags": "i", "rules": ["funnelUUID", "source"] },
|
|
110
|
+
{ "name": "pbtech.co.nz", "match": "www\\.pbtech\\.co\\.nz", "flags": "i", "rules": ["qr"] },
|
|
111
|
+
{ "name": "matomo.org", "match": "matomo\\.org", "flags": "i", "rules": ["menu", "footer", "header", "hp-reasons-learn", "hp-top", "above-fold", "step1-hp", "mid-hp", "take-back-control-hp", "hp-reasons-icon", "hp-reasons-heading", "hp-reasons-p", "hp-bottom", "footer", "menu"] },
|
|
112
|
+
{ "name": "eufy.com", "match": "eufy\\.com", "flags": "i", "rules": ["ref"] },
|
|
113
|
+
{ "name": "newsflare.com", "match": "www\\.newsflare\\.com", "flags": "i", "rules": ["jwsource"] },
|
|
114
|
+
{ "name": "wish.com", "match": "www\\.wish\\.com", "flags": "i", "rules": ["share"] },
|
|
115
|
+
{ "name": "change.org", "match": "www\\.change\\.org", "flags": "i", "rules": ["source_location"] },
|
|
116
|
+
{ "name": "washingtonpost.com", "match": ".*\\.washingtonpost\\.com", "flags": "i", "rules": ["itid", "s_l"] },
|
|
117
|
+
{ "name": "lowes.com", "match": "www\\.lowes\\.com", "flags": "i", "rules": ["cm_mmc", "ds_rl", "gbraid"] },
|
|
118
|
+
{ "name": "stacks.wellcomecollection.org", "match": "stacks\\.wellcomecollection\\.org", "flags": "i", "rules": ["source"] },
|
|
119
|
+
{ "name": "redbubble.com", "match": ".*\\.redbubble\\.com", "flags": "i", "rules": ["ref"] },
|
|
120
|
+
{ "name": "inyourarea.co.uk", "match": "inyourarea.co.uk", "flags": "i", "rules": ["from_reach_primary_nav", "from_reach_footer_nav", "branding"] },
|
|
121
|
+
{ "name": "fiverr.com", "match": ".*\\.fiverr\\.com", "flags": "i", "rules": ["source", "context_referrer", "referrer_gig_slug", "ref_ctx_id", "funnel", "imp_id"] },
|
|
122
|
+
{ "name": "kqzyfj.com", "match": "www\\.kqzyfj\\.com", "flags": "i", "rules": ["cjsku", "pubdata"] },
|
|
123
|
+
{ "name": "marca.com", "match": ".*\\.marca\\.com", "flags": "i", "rules": ["intcmp", "s_kw", "emk"] },
|
|
124
|
+
{ "name": "marcaentradas.com", "match": ".*\\.marcaentradas\\.com", "flags": "i", "rules": ["intcmp", "s_kw"] },
|
|
125
|
+
{ "name": "honeycode.aws", "match": ".*\\.honeycode\\.aws", "flags": "i", "rules": ["trackingId", "sc_icampaign", "sc_icontent", "sc_ichannel", "sc_iplace", "sc_country", "sc_outcome", "sc_geo", "sc_campaign", "sc_channel", "trkCampaign", "trk"] },
|
|
126
|
+
{ "name": "studentbeans.com", "match": "www\\.studentbeans\\.com", "flags": "i", "rules": ["source"] },
|
|
127
|
+
{ "name": "boxofficemojo.com", "match": "boxofficemojo.com", "flags": "i", "rules": ["ref_"] },
|
|
128
|
+
{ "name": "solodeportes.com.ar", "match": "www.solodeportes.com.ar", "flags": "i", "rules": ["nosto", "refSrc"] },
|
|
129
|
+
{ "name": "joybuggy.com", "match": "joybuggy.com", "flags": "i", "rules": ["ref"] },
|
|
130
|
+
{ "name": "etail.market", "match": "etail.market", "flags": "i", "rules": ["tracking"] },
|
|
131
|
+
{ "name": "myanimelist.net", "match": "myanimelist.net", "flags": "i", "rules": ["_location", "click_type", "click_param"] },
|
|
132
|
+
{ "name": "support-dev.discord.com", "match": "support-dev.discord.com", "flags": "i", "rules": ["ref"] },
|
|
133
|
+
{ "name": "dlgamer.com", "match": "dlgamer.com", "flags": "i", "rules": ["affil"] },
|
|
134
|
+
{ "name": "newsletter.manor.ch", "match": "newsletter.manor.ch", "flags": "i", "rules": ["user_id_1"] },
|
|
135
|
+
{ "name": "producthunt.com", "match": "producthunt.com", "flags": "i", "rules": ["ref"] },
|
|
136
|
+
{ "name": "cbsnews.com", "match": "www.cbsnews.com", "flags": "i", "rules": ["ftag", "intcid"] },
|
|
137
|
+
{ "name": "jobs.venturebeat.com", "match": "jobs.venturebeat.com", "flags": "i", "rules": ["source"] },
|
|
138
|
+
{ "name": "wfaa.com", "match": "www.wfaa.com", "flags": "i", "rules": ["ref"] },
|
|
139
|
+
{ "name": "buyatoyota.com", "match": "www.buyatoyota.com", "flags": "i", "rules": ["siteid"] },
|
|
140
|
+
{ "name": "independent.co.uk", "match": "www.independent.co.uk", "flags": "i", "rules": ["amp", "regSourceMethod"] },
|
|
141
|
+
{ "name": "cooking.nytimes.com", "match": "cooking.nytimes.com", "flags": "i", "rules": ["smid", "variant", "algo", "req_id", "surface", "imp_id", "action", "region", "module", "pgType"] },
|
|
142
|
+
{ "name": "optigruen.com", "match": "www\\.optigruen\\.[a-z0-9]{0,3}", "flags": "i", "rules": ["cHash", "chash", "mdrv"] },
|
|
143
|
+
{ "name": "osi.rosenberger.com", "match": "osi.rosenberger.com", "flags": "i", "rules": ["cHash", "chash"] },
|
|
144
|
+
{ "name": "cbc.ca", "match": "cbc.ca", "flags": "i", "rules": ["__vfz", "cmp", "referrer"] },
|
|
145
|
+
{ "name": "local12.com", "match": "local12.com", "flags": "i", "rules": ["_gl"] },
|
|
146
|
+
{ "name": "eufylife.com", "match": "eufylife.com", "flags": "i", "rules": ["ref"] },
|
|
147
|
+
{ "name": "walmart.com", "match": "walmart.com", "flags": "i", "rules": ["athAsset", "povid", "wmlspartner", "athcpid", "athpgid", "athznid", "athmtid", "athstid", "athguid", "athwpid", "athtvid", "athcgid", "athieid", "athancid", "athbdg", "campaign_id", "eventST", "bt", "pos", "rdf", "tax", "plmt", "mloc", "pltfm", "pgId", "pt", "spQs", "adUid", "adsRedirect"] },
|
|
148
|
+
{ "name": "dyno.gg", "match": "dyno.gg", "flags": "i", "rules": ["ref"] },
|
|
149
|
+
{ "name": "eufylife.com", "match": "eufylife.com", "flags": "i", "rules": ["ref"] },
|
|
150
|
+
{ "name": "connect.studentbeans.com", "match": "connect.studentbeans.com", "flags": "i", "rules": ["ref"] },
|
|
151
|
+
{ "name": "s.pemsrv.com", "match": "s.pemsrv.com", "flags": "i", "rules": ["cat", "idzone", "type", "sub", "block", "el", "tags", "cookieconsent", "scr_info"] },
|
|
152
|
+
{ "name": "chess.com", "match": "www.chess.com", "flags": "i", "rules": ["c"] },
|
|
153
|
+
{ "name": "porndude.link", "match": "porndude.link", "flags": "i", "rules": ["ref"] },
|
|
154
|
+
{ "name": "xvideos.com", "match": "xvideos.com", "flags": "i", "rules": ["sxcaf"] },
|
|
155
|
+
{ "name": "xvideos.red", "match": "xvideos.red", "flags": "i", "rules": ["sxcaf", "pmsc", "pmln"] },
|
|
156
|
+
{ "name": "xhamster.com", "match": "xhamster.com", "flags": "i", "rules": ["source"] },
|
|
157
|
+
{ "name": "milkrun.com", "match": "milkrun.com", "flags": "i", "rules": ["_branch_match_id", "_branch_referrer"] },
|
|
158
|
+
{ "name": "gog.salesmanago.com", "match": "gog.salesmanago.com", "flags": "i", "rules": ["smclient", "smconv", "smlid"] },
|
|
159
|
+
{ "name": "dailymail.co.uk", "match": "dailymail.co.uk", "flags": "i", "rules": ["reg_source", "ito"] },
|
|
160
|
+
{ "name": "hashnode.com", "match": "(?:.*\\.)?hashnode\\.com", "flags": "i", "rules": ["source"] },
|
|
161
|
+
{ "name": "s.amazon-adsystem.com", "match": "s.amazon-adsystem.com", "flags": "i", "rules": ["dsig", "d", "ex-fch", "ex-fargs", "cb"] },
|
|
162
|
+
{ "name": "theguardian.com", "match": "theguardian.com", "flags": "i", "rules": ["INTCMP", "acquisitionData", "REFPVID"] },
|
|
163
|
+
{ "name": "seek.co.nz", "match": "www.seek.co.nz", "flags": "i", "rules": ["tracking", "sc_trk"] },
|
|
164
|
+
{ "name": "seekvolunteer.co.nz", "match": "seekvolunteer.co.nz", "flags": "i", "rules": ["tracking", "sc_trk"] },
|
|
165
|
+
{ "name": "seekbusiness.com.au", "match": "www.seekbusiness.com.au", "flags": "i", "rules": ["tracking", "cid"] },
|
|
166
|
+
{ "name": "garageclothing.com", "match": "www.garageclothing.com", "flags": "i", "rules": ["syte_ref", "site_ref"] },
|
|
167
|
+
{ "name": "urbandictionary.com", "match": "urbandictionary.com", "flags": "i", "rules": ["amp"] },
|
|
168
|
+
{ "name": "norml.org", "match": "norml.org", "flags": "i", "rules": ["amp"] },
|
|
169
|
+
{ "name": "nbcconnecticut.com", "match": "www.nbcconnecticut.com", "flags": "i", "rules": ["amp"] },
|
|
170
|
+
{ "name": "ladysmithchronicle.com", "match": "www.ladysmithchronicle.com", "flags": "i", "rules": ["ref"] },
|
|
171
|
+
{ "name": "m10news.com", "match": "m10news.com", "flags": "i", "rules": ["amp"] },
|
|
172
|
+
{ "name": "libretro.com", "match": "www.libretro.com", "flags": "i", "rules": ["amp"] },
|
|
173
|
+
{ "name": "bostonherald.com", "match": "bostonherald.com", "flags": "i", "rules": ["g2i_source", "g2i_medium", "g2i_campaign"] },
|
|
174
|
+
{ "name": "playshoptitans.com", "match": "playshoptitans.com", "flags": "i", "rules": ["af_ad", "pid", "source_caller", "shortlink", "c"] },
|
|
175
|
+
{ "name": "news.com.au", "match": "www.news.com.au", "flags": "i", "rules": ["sourceCode"] },
|
|
176
|
+
{ "name": "wvva.com", "match": "www.wvva.com", "flags": "i", "rules": ["outputType"] },
|
|
177
|
+
{ "name": "realestate.com.au", "match": "www.realestate.com.au", "flags": "i", "rules": ["campaignType", "campaignChannel", "campaignName", "campaignContent", "campaignSource", "campaignPlacement", "sourcePage", "sourceElement", "cid"] },
|
|
178
|
+
{ "name": "redirectingat.com", "match": "redirectingat.com", "flags": "i", "rules": ["id", "xcust", "xs"] },
|
|
179
|
+
{ "name": "map.sewoon.org", "match": "map.sewoon.org", "flags": "i", "rules": ["cid"] },
|
|
180
|
+
{ "name": "vi-control.net", "match": "[&?]source=https:\\/\\/vi-control\\.net\\/community$", "flags": "", "matchHref": true, "rules": ["source"] },
|
|
181
|
+
{ "name": "rosequake.com", "match": "www.rosequake.com", "flags": "i", "rules": ["edmID", "linkID", "userID", "em", "taskItemID"] },
|
|
182
|
+
{ "name": "rekrute.com", "match": "www.rekrute.com", "flags": "i", "rules": ["clear"] },
|
|
183
|
+
{ "name": "go.skimresources.com", "match": "go.skimresources.com", "flags": "i", "rules": ["id", "xs", "xcust"] },
|
|
184
|
+
{ "name": "khnum-ezi.com", "match": "khnum-ezi.com", "flags": "i", "rules": ["browserWidth", "browserHeight", "iframeDetected", "webdriverDetected", "gpu", "timezone", "visitid", "type", "timezoneName"] },
|
|
185
|
+
{ "name": "theatlantic.com", "match": "(?:www|accounts)\\.theatlantic\\.com", "flags": "i", "rules": ["source", "referral"] },
|
|
186
|
+
{ "name": "rumble.com", "match": "rumble.com", "flags": "i", "rules": ["e9s"] },
|
|
187
|
+
{ "name": "cointiply.com", "match": "cointiply.com", "flags": "i", "rules": ["source_cta"] },
|
|
188
|
+
{ "name": "dev.to", "match": "dev.to", "flags": "", "rules": ["t", "s", "u"] },
|
|
189
|
+
{ "name": "milda-clq.com", "match": "milda-clq.com", "flags": "", "rules": ["visitid", "type", "browserWidth", "browserHeight", "webdriverDetected", "timezone", "gpu", "iframeDetected", "timezoneName"] },
|
|
190
|
+
{ "name": "app.message.asce", "match": ".*.app\\.message\\.asce\\.org", "flags": "i", "rules": [], "allow": ["elq"] },
|
|
191
|
+
];
|
|
192
|
+
//# sourceMappingURL=tidy-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tidy-rules.js","sourceRoot":"","sources":["../../../src/universal/url/tidy-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Vendors the tracking-parameter ruleset from @protontech/tidy-url (Proton's
|
|
4
|
+
* maintained fork of DrKain/tidy-url, MIT) into ./tidy-rules.ts. Same pattern
|
|
5
|
+
* as currency's download-crypto-list.ts: dataset knowledge is community-
|
|
6
|
+
* maintained upstream; we vendor a snapshot instead of taking a runtime dep.
|
|
7
|
+
*
|
|
8
|
+
* Only the param-stripping fields are carried over (name, match, match_href,
|
|
9
|
+
* rules, allow, exclude). Upstream's redirect-unwrapping, AMP, and base64-
|
|
10
|
+
* decode features are out of scope — providers that ONLY do those are dropped.
|
|
11
|
+
*
|
|
12
|
+
* Usage: pnpm update-url-rules
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=update-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-rules.d.ts","sourceRoot":"","sources":["../../../src/universal/url/update-rules.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Vendors the tracking-parameter ruleset from @protontech/tidy-url (Proton's
|
|
4
|
+
* maintained fork of DrKain/tidy-url, MIT) into ./tidy-rules.ts. Same pattern
|
|
5
|
+
* as currency's download-crypto-list.ts: dataset knowledge is community-
|
|
6
|
+
* maintained upstream; we vendor a snapshot instead of taking a runtime dep.
|
|
7
|
+
*
|
|
8
|
+
* Only the param-stripping fields are carried over (name, match, match_href,
|
|
9
|
+
* rules, allow, exclude). Upstream's redirect-unwrapping, AMP, and base64-
|
|
10
|
+
* decode features are out of scope — providers that ONLY do those are dropped.
|
|
11
|
+
*
|
|
12
|
+
* Usage: pnpm update-url-rules
|
|
13
|
+
*/
|
|
14
|
+
import { execSync } from "node:child_process";
|
|
15
|
+
import { mkdtempSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { createRequire } from "node:module";
|
|
17
|
+
import { tmpdir } from "node:os";
|
|
18
|
+
import { dirname, join } from "node:path";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
const OUT = join(dirname(fileURLToPath(import.meta.url)), "tidy-rules.ts");
|
|
21
|
+
const PACKAGE = "@protontech/tidy-url";
|
|
22
|
+
function fetchUpstream() {
|
|
23
|
+
const dir = mkdtempSync(join(tmpdir(), "tidy-url-"));
|
|
24
|
+
console.log(`Packing ${PACKAGE}@latest ...`);
|
|
25
|
+
const tarball = execSync(`npm pack ${PACKAGE}@latest --pack-destination ${JSON.stringify(dir)}`, {
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
})
|
|
28
|
+
.trim()
|
|
29
|
+
.split("\n")
|
|
30
|
+
.at(-1);
|
|
31
|
+
if (!tarball)
|
|
32
|
+
throw new Error("npm pack produced no tarball name");
|
|
33
|
+
execSync(`tar xzf ${JSON.stringify(join(dir, tarball))} -C ${JSON.stringify(dir)}`);
|
|
34
|
+
const pkg = JSON.parse(readFileSync(join(dir, "package/package.json"), "utf8"));
|
|
35
|
+
// data/rules.js is CommonJS (`module.exports = [...]`) with RegExp literals;
|
|
36
|
+
// requiring it yields real RegExp objects — no parsing of our own.
|
|
37
|
+
const rules = createRequire(import.meta.url)(join(dir, "package/data/rules.js"));
|
|
38
|
+
const copyright = readFileSync(join(dir, "package/LICENSE"), "utf8")
|
|
39
|
+
.split("\n")
|
|
40
|
+
.find((l) => l.startsWith("Copyright"));
|
|
41
|
+
if (!Array.isArray(rules) || rules.length === 0)
|
|
42
|
+
throw new Error("upstream rules did not load");
|
|
43
|
+
if (pkg.license !== "MIT")
|
|
44
|
+
throw new Error(`upstream license changed to ${pkg.license} — review before vendoring`);
|
|
45
|
+
return { rules, version: pkg.version, license: `${pkg.license} — ${copyright ?? ""}`.trim() };
|
|
46
|
+
}
|
|
47
|
+
/** A regex serialized for the generated file; `g`/`y` are dropped (statefulness). */
|
|
48
|
+
function serializeRegex(re) {
|
|
49
|
+
return { match: re.source, flags: re.flags.replace(/[gy]/g, "") };
|
|
50
|
+
}
|
|
51
|
+
function assertStrings(list, where) {
|
|
52
|
+
for (const item of list) {
|
|
53
|
+
if (typeof item !== "string")
|
|
54
|
+
throw new Error(`non-string entry in ${where}: ${JSON.stringify(item)}`);
|
|
55
|
+
}
|
|
56
|
+
return list;
|
|
57
|
+
}
|
|
58
|
+
function generate() {
|
|
59
|
+
const { rules, version, license } = fetchUpstream();
|
|
60
|
+
const kept = rules
|
|
61
|
+
.filter((r) => (r.rules?.length ?? 0) > 0 || (r.allow?.length ?? 0) > 0)
|
|
62
|
+
.map((r) => {
|
|
63
|
+
if (typeof r.name !== "string" || !(r.match instanceof RegExp)) {
|
|
64
|
+
throw new Error(`malformed provider: ${JSON.stringify(r.name)}`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
name: r.name,
|
|
68
|
+
...serializeRegex(r.match),
|
|
69
|
+
...(r.match_href === true ? { matchHref: true } : {}),
|
|
70
|
+
rules: assertStrings(r.rules ?? [], r.name),
|
|
71
|
+
...(r.allow?.length ? { allow: assertStrings(r.allow, `${r.name}.allow`) } : {}),
|
|
72
|
+
...(r.exclude?.length ? { exclude: r.exclude.map(serializeRegex) } : {}),
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
const dropped = rules.length - kept.length;
|
|
76
|
+
const body = kept.map((p) => `\t${JSON.stringify(p)},`).join("\n");
|
|
77
|
+
const file = `// GENERATED FILE — do not edit; refresh with \`pnpm update-url-rules\`.
|
|
78
|
+
//
|
|
79
|
+
// Tracking-parameter ruleset vendored from ${PACKAGE}@${version} (data/rules.js),
|
|
80
|
+
// Proton's maintained fork of https://github.com/DrKain/tidy-url.
|
|
81
|
+
// Upstream license: ${license}
|
|
82
|
+
//
|
|
83
|
+
// Carried fields: the host matcher (match/flags; tested against the URL host,
|
|
84
|
+
// or the full href when matchHref), the param names to strip (rules), params
|
|
85
|
+
// protected from any rule (allow), and URL patterns that opt a URL out of the
|
|
86
|
+
// provider (exclude). Upstream's redirect/AMP/decode features are out of scope;
|
|
87
|
+
// ${dropped} providers that only did those were dropped (${kept.length} kept).
|
|
88
|
+
// Generated ${new Date().toISOString().slice(0, 10)}.
|
|
89
|
+
|
|
90
|
+
export interface TrackingProvider {
|
|
91
|
+
name: string;
|
|
92
|
+
/** Host-matcher regex source; tested against the URL host (href when matchHref). */
|
|
93
|
+
match: string;
|
|
94
|
+
flags: string;
|
|
95
|
+
matchHref?: boolean;
|
|
96
|
+
/** Param names to strip (compared lowercased). */
|
|
97
|
+
rules: readonly string[];
|
|
98
|
+
/** Param names protected from ANY rule on this provider's URLs. */
|
|
99
|
+
allow?: readonly string[];
|
|
100
|
+
/** URL patterns that opt a URL out of this provider entirely. */
|
|
101
|
+
exclude?: readonly { match: string; flags: string }[];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export const TIDY_VERSION = ${JSON.stringify(version)};
|
|
105
|
+
|
|
106
|
+
export const TIDY_RULES: readonly TrackingProvider[] = [
|
|
107
|
+
${body}
|
|
108
|
+
];
|
|
109
|
+
`;
|
|
110
|
+
writeFileSync(OUT, file);
|
|
111
|
+
console.log(`Wrote ${kept.length} providers (${dropped} dropped) from ${PACKAGE}@${version} → ${OUT}`);
|
|
112
|
+
}
|
|
113
|
+
generate();
|
|
114
|
+
//# sourceMappingURL=update-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-rules.js","sourceRoot":"","sources":["../../../src/universal/url/update-rules.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adriangalilea/utils",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"description": "TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"types": "./dist/universal/format.d.ts",
|
|
25
25
|
"default": "./dist/universal/format.js"
|
|
26
26
|
},
|
|
27
|
+
"./url": {
|
|
28
|
+
"types": "./dist/universal/url/index.d.ts",
|
|
29
|
+
"default": "./dist/universal/url/index.js"
|
|
30
|
+
},
|
|
27
31
|
"./log": {
|
|
28
32
|
"types": "./dist/universal/log.d.ts",
|
|
29
33
|
"default": "./dist/universal/log.js"
|
|
@@ -169,6 +173,7 @@
|
|
|
169
173
|
"test:browser": "open tests/browser-test.html",
|
|
170
174
|
"example": "tsx tests/example.ts",
|
|
171
175
|
"update-crypto": "tsx src/universal/currency/download-crypto-list.ts",
|
|
176
|
+
"update-url-rules": "tsx src/universal/url/update-rules.ts",
|
|
172
177
|
"type-check": "tsc --noEmit",
|
|
173
178
|
"lint": "biome lint",
|
|
174
179
|
"format": "biome format",
|
|
@@ -185,7 +190,8 @@
|
|
|
185
190
|
"test:language-picker": "tsx tests/language-picker-test.ts",
|
|
186
191
|
"test:llm": "tsx tests/llm-live-test.ts",
|
|
187
192
|
"test:tg-md": "tsx tests/tg-md-test.ts",
|
|
188
|
-
"test:self-echo": "tsx tests/self-echo-test.ts"
|
|
193
|
+
"test:self-echo": "tsx tests/self-echo-test.ts",
|
|
194
|
+
"test:url": "tsx tests/url-test.ts"
|
|
189
195
|
},
|
|
190
196
|
"keywords": [
|
|
191
197
|
"typescript",
|