urlpurify 1.0.0 → 1.1.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 +4 -3
- package/dist/clean.d.ts +2 -2
- package/dist/clean.js +18 -9
- package/dist/defaults.d.ts +5 -3
- package/dist/defaults.js +4 -2
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -3
- package/dist/tracking/literals.d.ts +4 -0
- package/dist/{params.js → tracking/literals.js} +3 -3
- package/dist/tracking/patterns.d.ts +4 -0
- package/dist/tracking/patterns.js +19 -0
- package/dist/types.d.ts +3 -2
- package/package.json +1 -1
- package/dist/params.d.ts +0 -4
package/README.md
CHANGED
|
@@ -35,8 +35,9 @@ import { cleanUrl, defaultUnwrappers, unwrapWebArchive } from 'urlpurify'
|
|
|
35
35
|
const cleaned = cleanUrl(url, {
|
|
36
36
|
// Unwrappers to apply, first match wins per pass (omit to use defaults).
|
|
37
37
|
unwrappers: [...defaultUnwrappers, unwrapWebArchive],
|
|
38
|
-
//
|
|
39
|
-
|
|
38
|
+
// Param names (matched case-insensitively) or anchored regexes tested against the
|
|
39
|
+
// lowercased name (omit to use defaults).
|
|
40
|
+
trackingParams: ['fbclid', /^utm_[a-z0-9_-]+$/],
|
|
40
41
|
// Maximum number of unwrap passes for nested wrappers. Defaults to 3.
|
|
41
42
|
maxUnwrapDepth: 3,
|
|
42
43
|
})
|
|
@@ -69,7 +70,7 @@ For wrappers that encode the target (base64 path segments, custom escaping), wri
|
|
|
69
70
|
|
|
70
71
|
### Defaults
|
|
71
72
|
|
|
72
|
-
`defaultTrackingParams`
|
|
73
|
+
`defaultTrackingParams` is the combined default list for `cleanUrl` and `stripTrackingParams`: literal names plus family regexes like `/^utm_[a-z0-9_-]+$/` that cover vendor namespaces where new variants keep appearing. Its parts are exported separately as `trackingParamsLiterals` (strings only, for consumers that need a plain string list) and `trackingParamsPatterns`. `defaultUnwrappers` is exported alongside. `defaultUnwrappers` enables a conservative subset of the catalog (search-engine redirects and social-platform shims); everything else is exported individually for explicit opt-in.
|
|
73
74
|
|
|
74
75
|
## Unwrappers
|
|
75
76
|
|
package/dist/clean.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { CleanUrlOptions, UrlUnwrapper } from "./types.js";
|
|
1
|
+
import { CleanUrlOptions, TrackingParam, UrlUnwrapper } from "./types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/clean.d.ts
|
|
4
4
|
declare const unwrapUrl: (url: string, unwrappers?: Array<UrlUnwrapper>) => string | undefined;
|
|
5
|
-
declare const stripTrackingParams: (url: string, trackingParams?: Array<
|
|
5
|
+
declare const stripTrackingParams: (url: string, trackingParams?: Array<TrackingParam>) => string;
|
|
6
6
|
declare const cleanUrl: (url: string, options?: CleanUrlOptions) => string;
|
|
7
7
|
//#endregion
|
|
8
8
|
export { cleanUrl, stripTrackingParams, unwrapUrl };
|
package/dist/clean.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { defaultTrackingParams } from "./
|
|
2
|
-
import { defaultUnwrappers } from "./defaults.js";
|
|
1
|
+
import { defaultTrackingParams, defaultUnwrappers } from "./defaults.js";
|
|
3
2
|
//#region src/clean.ts
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
let cached =
|
|
3
|
+
const trackingMatcherCache = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
const getTrackingMatcher = (params) => {
|
|
5
|
+
let cached = trackingMatcherCache.get(params);
|
|
7
6
|
if (!cached) {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const literals = /* @__PURE__ */ new Set();
|
|
8
|
+
const patterns = [];
|
|
9
|
+
for (const param of params) if (param instanceof RegExp) patterns.push(param);
|
|
10
|
+
else literals.add(param.toLowerCase());
|
|
11
|
+
cached = {
|
|
12
|
+
literals,
|
|
13
|
+
patterns
|
|
14
|
+
};
|
|
15
|
+
trackingMatcherCache.set(params, cached);
|
|
10
16
|
}
|
|
11
17
|
return cached;
|
|
12
18
|
};
|
|
@@ -17,9 +23,12 @@ const parseUrl = (url) => {
|
|
|
17
23
|
};
|
|
18
24
|
const deleteTrackingParams = (url, trackingParams) => {
|
|
19
25
|
if (!url.search) return false;
|
|
20
|
-
const
|
|
26
|
+
const matcher = getTrackingMatcher(trackingParams);
|
|
21
27
|
const keysToDelete = [];
|
|
22
|
-
for (const key of url.searchParams.keys())
|
|
28
|
+
for (const key of url.searchParams.keys()) {
|
|
29
|
+
const name = key.toLowerCase();
|
|
30
|
+
if (matcher.literals.has(name) || matcher.patterns.some((pattern) => pattern.test(name))) keysToDelete.push(key);
|
|
31
|
+
}
|
|
23
32
|
for (const key of keysToDelete) url.searchParams.delete(key);
|
|
24
33
|
return keysToDelete.length > 0;
|
|
25
34
|
};
|
package/dist/defaults.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { UrlUnwrapper } from "./types.js";
|
|
2
|
-
import {
|
|
1
|
+
import { TrackingParam, UrlUnwrapper } from "./types.js";
|
|
2
|
+
import { trackingParamsLiterals } from "./tracking/literals.js";
|
|
3
|
+
import { trackingParamsPatterns } from "./tracking/patterns.js";
|
|
3
4
|
|
|
4
5
|
//#region src/defaults.d.ts
|
|
6
|
+
declare const defaultTrackingParams: Array<TrackingParam>;
|
|
5
7
|
declare const defaultUnwrappers: Array<UrlUnwrapper>;
|
|
6
8
|
//#endregion
|
|
7
|
-
export { defaultUnwrappers };
|
|
9
|
+
export { defaultTrackingParams, defaultUnwrappers };
|
package/dist/defaults.js
CHANGED
|
@@ -10,8 +10,10 @@ import { unwrapRedditOut } from "./unwraps/redditOut.js";
|
|
|
10
10
|
import { unwrapVkAway } from "./unwraps/vkAway.js";
|
|
11
11
|
import { unwrapYahooSearch } from "./unwraps/yahooSearch.js";
|
|
12
12
|
import { unwrapYouTube } from "./unwraps/youtube.js";
|
|
13
|
-
import "./
|
|
13
|
+
import { trackingParamsLiterals } from "./tracking/literals.js";
|
|
14
|
+
import { trackingParamsPatterns } from "./tracking/patterns.js";
|
|
14
15
|
//#region src/defaults.ts
|
|
16
|
+
const defaultTrackingParams = [...trackingParamsLiterals, ...trackingParamsPatterns];
|
|
15
17
|
const defaultUnwrappers = [
|
|
16
18
|
unwrapBing,
|
|
17
19
|
unwrapGoogle,
|
|
@@ -27,4 +29,4 @@ const defaultUnwrappers = [
|
|
|
27
29
|
unwrapRedditOut
|
|
28
30
|
];
|
|
29
31
|
//#endregion
|
|
30
|
-
export { defaultUnwrappers };
|
|
32
|
+
export { defaultTrackingParams, defaultUnwrappers };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { CleanUrlOptions, UrlUnwrapper } from "./types.js";
|
|
1
|
+
import { CleanUrlOptions, TrackingParam, UrlUnwrapper } from "./types.js";
|
|
2
2
|
import { cleanUrl, stripTrackingParams, unwrapUrl } from "./clean.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { trackingParamsLiterals } from "./tracking/literals.js";
|
|
4
|
+
import { trackingParamsPatterns } from "./tracking/patterns.js";
|
|
5
|
+
import { defaultTrackingParams, defaultUnwrappers } from "./defaults.js";
|
|
5
6
|
import { unwrapAceml } from "./unwraps/aceml.js";
|
|
6
7
|
import { unwrapAdjust } from "./unwraps/adjust.js";
|
|
7
8
|
import { unwrapAmazonAffiliate } from "./unwraps/amazonAffiliate.js";
|
|
@@ -77,4 +78,4 @@ import { unwrapYandexTurbo } from "./unwraps/yandexTurbo.js";
|
|
|
77
78
|
import { unwrapYouTube } from "./unwraps/youtube.js";
|
|
78
79
|
import { unwrapZhihu } from "./unwraps/zhihu.js";
|
|
79
80
|
import { ParamExtractorConfig, createParamExtractor } from "./utils.js";
|
|
80
|
-
export { type CleanUrlOptions, type ParamExtractorConfig, type UrlUnwrapper, cleanUrl, createParamExtractor, defaultTrackingParams, defaultUnwrappers, stripTrackingParams, unwrapAceml, unwrapAdjust, unwrapAmazonAffiliate, unwrapAmpCache, unwrapAwin, unwrapBing, unwrapCjNetwork, unwrapDigidip, unwrapDisqus, unwrapDouban, unwrapDuckduckgo, unwrapEbayRover, unwrapEffiliation, unwrapEmbedly, unwrapFacebookShim, unwrapFeedsportal, unwrapFirebaseDynamicLinks, unwrapFlipboard, unwrapGateSc, unwrapGeoriot, unwrapGitee, unwrapGoogle, unwrapGoogleAmpViewer, unwrapGoogleNews, unwrapGoogleNewsModern, unwrapGoogleScholar, unwrapGoogleTranslate, unwrapHashnode, unwrapIcptrack, unwrapIdealoPartner, unwrapInstagramShim, unwrapJianshuGo, unwrapJuejin, unwrapLeverAnalytics, unwrapLinksynergy, unwrapMailchimp, unwrapMailpanion, unwrapMailpgn, unwrapMailtrack, unwrapMedium, unwrapMimecast, unwrapMozillaOutgoing, unwrapNarrativ, unwrapNicoMs, unwrapOutlookSafelinks, unwrapPartnerAds, unwrapPocket, unwrapPostmark, unwrapProofpointV1, unwrapProofpointV2, unwrapProofpointV3, unwrapPxf, unwrapRecruitics, unwrapRedditOut, unwrapRedirectingat, unwrapSegmentfault, unwrapShareasale, unwrapSjv, unwrapSkimlinks, unwrapSlack, unwrapSmartredirect, unwrapSspai, unwrapSteamLinkfilter, unwrapTelegramIv, unwrapTradedoubler, unwrapTumblr, unwrapUrl, unwrapValuecommerce, unwrapViglink, unwrapVkAway, unwrapWebArchive, unwrapYahooSearch, unwrapYandexTurbo, unwrapYouTube, unwrapZhihu };
|
|
81
|
+
export { type CleanUrlOptions, type ParamExtractorConfig, type TrackingParam, type UrlUnwrapper, cleanUrl, createParamExtractor, defaultTrackingParams, defaultUnwrappers, stripTrackingParams, trackingParamsLiterals, trackingParamsPatterns, unwrapAceml, unwrapAdjust, unwrapAmazonAffiliate, unwrapAmpCache, unwrapAwin, unwrapBing, unwrapCjNetwork, unwrapDigidip, unwrapDisqus, unwrapDouban, unwrapDuckduckgo, unwrapEbayRover, unwrapEffiliation, unwrapEmbedly, unwrapFacebookShim, unwrapFeedsportal, unwrapFirebaseDynamicLinks, unwrapFlipboard, unwrapGateSc, unwrapGeoriot, unwrapGitee, unwrapGoogle, unwrapGoogleAmpViewer, unwrapGoogleNews, unwrapGoogleNewsModern, unwrapGoogleScholar, unwrapGoogleTranslate, unwrapHashnode, unwrapIcptrack, unwrapIdealoPartner, unwrapInstagramShim, unwrapJianshuGo, unwrapJuejin, unwrapLeverAnalytics, unwrapLinksynergy, unwrapMailchimp, unwrapMailpanion, unwrapMailpgn, unwrapMailtrack, unwrapMedium, unwrapMimecast, unwrapMozillaOutgoing, unwrapNarrativ, unwrapNicoMs, unwrapOutlookSafelinks, unwrapPartnerAds, unwrapPocket, unwrapPostmark, unwrapProofpointV1, unwrapProofpointV2, unwrapProofpointV3, unwrapPxf, unwrapRecruitics, unwrapRedditOut, unwrapRedirectingat, unwrapSegmentfault, unwrapShareasale, unwrapSjv, unwrapSkimlinks, unwrapSlack, unwrapSmartredirect, unwrapSspai, unwrapSteamLinkfilter, unwrapTelegramIv, unwrapTradedoubler, unwrapTumblr, unwrapUrl, unwrapValuecommerce, unwrapViglink, unwrapVkAway, unwrapWebArchive, unwrapYahooSearch, unwrapYandexTurbo, unwrapYouTube, unwrapZhihu };
|
package/dist/index.js
CHANGED
|
@@ -11,8 +11,9 @@ import { unwrapRedditOut } from "./unwraps/redditOut.js";
|
|
|
11
11
|
import { unwrapVkAway } from "./unwraps/vkAway.js";
|
|
12
12
|
import { unwrapYahooSearch } from "./unwraps/yahooSearch.js";
|
|
13
13
|
import { unwrapYouTube } from "./unwraps/youtube.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { trackingParamsLiterals } from "./tracking/literals.js";
|
|
15
|
+
import { trackingParamsPatterns } from "./tracking/patterns.js";
|
|
16
|
+
import { defaultTrackingParams, defaultUnwrappers } from "./defaults.js";
|
|
16
17
|
import { cleanUrl, stripTrackingParams, unwrapUrl } from "./clean.js";
|
|
17
18
|
import { unwrapAceml } from "./unwraps/aceml.js";
|
|
18
19
|
import { unwrapAdjust } from "./unwraps/adjust.js";
|
|
@@ -76,4 +77,4 @@ import { unwrapViglink } from "./unwraps/viglink.js";
|
|
|
76
77
|
import { unwrapWebArchive } from "./unwraps/webArchive.js";
|
|
77
78
|
import { unwrapYandexTurbo } from "./unwraps/yandexTurbo.js";
|
|
78
79
|
import { unwrapZhihu } from "./unwraps/zhihu.js";
|
|
79
|
-
export { cleanUrl, createParamExtractor, defaultTrackingParams, defaultUnwrappers, stripTrackingParams, unwrapAceml, unwrapAdjust, unwrapAmazonAffiliate, unwrapAmpCache, unwrapAwin, unwrapBing, unwrapCjNetwork, unwrapDigidip, unwrapDisqus, unwrapDouban, unwrapDuckduckgo, unwrapEbayRover, unwrapEffiliation, unwrapEmbedly, unwrapFacebookShim, unwrapFeedsportal, unwrapFirebaseDynamicLinks, unwrapFlipboard, unwrapGateSc, unwrapGeoriot, unwrapGitee, unwrapGoogle, unwrapGoogleAmpViewer, unwrapGoogleNews, unwrapGoogleNewsModern, unwrapGoogleScholar, unwrapGoogleTranslate, unwrapHashnode, unwrapIcptrack, unwrapIdealoPartner, unwrapInstagramShim, unwrapJianshuGo, unwrapJuejin, unwrapLeverAnalytics, unwrapLinksynergy, unwrapMailchimp, unwrapMailpanion, unwrapMailpgn, unwrapMailtrack, unwrapMedium, unwrapMimecast, unwrapMozillaOutgoing, unwrapNarrativ, unwrapNicoMs, unwrapOutlookSafelinks, unwrapPartnerAds, unwrapPocket, unwrapPostmark, unwrapProofpointV1, unwrapProofpointV2, unwrapProofpointV3, unwrapPxf, unwrapRecruitics, unwrapRedditOut, unwrapRedirectingat, unwrapSegmentfault, unwrapShareasale, unwrapSjv, unwrapSkimlinks, unwrapSlack, unwrapSmartredirect, unwrapSspai, unwrapSteamLinkfilter, unwrapTelegramIv, unwrapTradedoubler, unwrapTumblr, unwrapUrl, unwrapValuecommerce, unwrapViglink, unwrapVkAway, unwrapWebArchive, unwrapYahooSearch, unwrapYandexTurbo, unwrapYouTube, unwrapZhihu };
|
|
80
|
+
export { cleanUrl, createParamExtractor, defaultTrackingParams, defaultUnwrappers, stripTrackingParams, trackingParamsLiterals, trackingParamsPatterns, unwrapAceml, unwrapAdjust, unwrapAmazonAffiliate, unwrapAmpCache, unwrapAwin, unwrapBing, unwrapCjNetwork, unwrapDigidip, unwrapDisqus, unwrapDouban, unwrapDuckduckgo, unwrapEbayRover, unwrapEffiliation, unwrapEmbedly, unwrapFacebookShim, unwrapFeedsportal, unwrapFirebaseDynamicLinks, unwrapFlipboard, unwrapGateSc, unwrapGeoriot, unwrapGitee, unwrapGoogle, unwrapGoogleAmpViewer, unwrapGoogleNews, unwrapGoogleNewsModern, unwrapGoogleScholar, unwrapGoogleTranslate, unwrapHashnode, unwrapIcptrack, unwrapIdealoPartner, unwrapInstagramShim, unwrapJianshuGo, unwrapJuejin, unwrapLeverAnalytics, unwrapLinksynergy, unwrapMailchimp, unwrapMailpanion, unwrapMailpgn, unwrapMailtrack, unwrapMedium, unwrapMimecast, unwrapMozillaOutgoing, unwrapNarrativ, unwrapNicoMs, unwrapOutlookSafelinks, unwrapPartnerAds, unwrapPocket, unwrapPostmark, unwrapProofpointV1, unwrapProofpointV2, unwrapProofpointV3, unwrapPxf, unwrapRecruitics, unwrapRedditOut, unwrapRedirectingat, unwrapSegmentfault, unwrapShareasale, unwrapSjv, unwrapSkimlinks, unwrapSlack, unwrapSmartredirect, unwrapSspai, unwrapSteamLinkfilter, unwrapTelegramIv, unwrapTradedoubler, unwrapTumblr, unwrapUrl, unwrapValuecommerce, unwrapViglink, unwrapVkAway, unwrapWebArchive, unwrapYahooSearch, unwrapYandexTurbo, unwrapYouTube, unwrapZhihu };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//#region src/
|
|
2
|
-
const
|
|
1
|
+
//#region src/tracking/literals.ts
|
|
2
|
+
const trackingParamsLiterals = [
|
|
3
3
|
"utm_source",
|
|
4
4
|
"utm_medium",
|
|
5
5
|
"utm_campaign",
|
|
@@ -154,4 +154,4 @@ const defaultTrackingParams = [
|
|
|
154
154
|
"xtor"
|
|
155
155
|
];
|
|
156
156
|
//#endregion
|
|
157
|
-
export {
|
|
157
|
+
export { trackingParamsLiterals };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/tracking/patterns.ts
|
|
2
|
+
const trackingParamsPatterns = [
|
|
3
|
+
/^utm_[a-z0-9_-]+$/,
|
|
4
|
+
/^stm_[a-z0-9_-]+$/,
|
|
5
|
+
/^hsa_[a-z0-9_]+$/,
|
|
6
|
+
/^mtm_[a-z0-9_]+$/,
|
|
7
|
+
/^pk_[a-z0-9_]+$/,
|
|
8
|
+
/^piwik_[a-z0-9_]+$/,
|
|
9
|
+
/^itm_[a-z0-9_]+$/,
|
|
10
|
+
/^int_[a-z0-9_]+$/,
|
|
11
|
+
/^at_[a-z0-9_]+$/,
|
|
12
|
+
/^g2i_[a-z0-9_]+$/,
|
|
13
|
+
/^bsft_[a-z0-9_]+$/,
|
|
14
|
+
/^sfmc_[a-z0-9_]+$/,
|
|
15
|
+
/^oft_[a-z0-9_]+$/,
|
|
16
|
+
/^cm_mmca?\d*$/
|
|
17
|
+
];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { trackingParamsPatterns };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
//#region src/types.d.ts
|
|
2
2
|
type UrlUnwrapper = (url: URL) => string | undefined;
|
|
3
|
+
type TrackingParam = string | RegExp;
|
|
3
4
|
type CleanUrlOptions = {
|
|
4
5
|
unwrappers?: Array<UrlUnwrapper>;
|
|
5
|
-
trackingParams?: Array<
|
|
6
|
+
trackingParams?: Array<TrackingParam>;
|
|
6
7
|
maxUnwrapDepth?: number;
|
|
7
8
|
};
|
|
8
9
|
//#endregion
|
|
9
|
-
export { CleanUrlOptions, UrlUnwrapper };
|
|
10
|
+
export { CleanUrlOptions, TrackingParam, UrlUnwrapper };
|
package/package.json
CHANGED
package/dist/params.d.ts
DELETED