@opentermsarchive/engine 15.1.0 → 15.2.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/package.json
CHANGED
|
@@ -1,4 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
const DEFAULT_TRACKING_QUERY_PARAMS = Object.freeze([
|
|
2
|
+
'utm_source', // Campaign parameters, see https://en.wikipedia.org/wiki/UTM_parameters
|
|
3
|
+
'utm_medium',
|
|
4
|
+
'utm_campaign',
|
|
5
|
+
'utm_term',
|
|
6
|
+
'utm_content',
|
|
7
|
+
'fbclid', // Click and user identifiers, see https://github.com/privacytests/privacytests/blob/dda473a462e5c37f9f2c8b2367fbc5f834796be4/live/results.js#L31-L65
|
|
8
|
+
'gclid',
|
|
9
|
+
'msclkid',
|
|
10
|
+
'mc_eid',
|
|
11
|
+
'dclid',
|
|
12
|
+
'oly_anon_id',
|
|
13
|
+
'oly_enc_id',
|
|
14
|
+
'_openstat',
|
|
15
|
+
'vero_conv',
|
|
16
|
+
'vero_id',
|
|
17
|
+
'wickedid',
|
|
18
|
+
'yclid',
|
|
19
|
+
'__s',
|
|
20
|
+
'rb_clickid',
|
|
21
|
+
's_cid',
|
|
22
|
+
'ml_subscriber',
|
|
23
|
+
'ml_subscriber_hash',
|
|
24
|
+
'_hsenc',
|
|
25
|
+
'__hssc',
|
|
26
|
+
'__hstc',
|
|
27
|
+
'__hsfp',
|
|
28
|
+
'hsCtaTracking',
|
|
29
|
+
'mkt_tok',
|
|
30
|
+
]);
|
|
31
|
+
|
|
32
|
+
export function removeQueryParams(webPageDOM, paramsToRemove = DEFAULT_TRACKING_QUERY_PARAMS) {
|
|
2
33
|
const normalizedParams = Array.isArray(paramsToRemove) ? paramsToRemove : [paramsToRemove];
|
|
3
34
|
|
|
4
35
|
if (!normalizedParams.length) {
|
|
@@ -51,6 +51,26 @@ describe('exposedFilters', () => {
|
|
|
51
51
|
});
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
+
describe('without parameters', () => {
|
|
55
|
+
let link;
|
|
56
|
+
|
|
57
|
+
before(() => {
|
|
58
|
+
link = webPageDOM.createElement('a');
|
|
59
|
+
link.setAttribute('href', 'https://example.com/page?utm_source=newsletter&utm_campaign=spring&fbclid=abc&gclid=def&mkt_tok=ghi&keep=value');
|
|
60
|
+
webPageDOM.body.appendChild(link);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
after(() => {
|
|
64
|
+
link.remove();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('removes well-known tracking parameters', () => {
|
|
68
|
+
removeQueryParams(webPageDOM);
|
|
69
|
+
|
|
70
|
+
expect(link.getAttribute('href')).to.equal('https://example.com/page?keep=value');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
54
74
|
describe('with string parameter', () => {
|
|
55
75
|
let link;
|
|
56
76
|
|
|
@@ -106,7 +106,7 @@ function createWrappedFilter(baseFunction, filterName, filterParams) {
|
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
if (filterParams) {
|
|
109
|
+
if (filterParams || exposedFilters[filterName]) { // Built-in filters always receive their parameters before the context, even when none are declared
|
|
110
110
|
const wrappedFilter = (webPageDOM, context) => baseFunction(webPageDOM, filterParams, context);
|
|
111
111
|
|
|
112
112
|
Object.defineProperty(wrappedFilter, 'name', { value: filterName });
|
|
@@ -6,6 +6,7 @@ import sinon from 'sinon';
|
|
|
6
6
|
import sinonChai from 'sinon-chai';
|
|
7
7
|
|
|
8
8
|
import expectedServices from '../../../test/fixtures/services.js';
|
|
9
|
+
import createWebPageDOM from '../extract/dom.js';
|
|
9
10
|
import * as exposedFilters from '../extract/exposedFilters.js';
|
|
10
11
|
|
|
11
12
|
import Service from './service.js';
|
|
@@ -272,7 +273,18 @@ describe('Services', () => {
|
|
|
272
273
|
const filterName = filterNames[0];
|
|
273
274
|
const result = getServiceFilters({}, [filterName]);
|
|
274
275
|
|
|
275
|
-
expect(result).to.
|
|
276
|
+
expect(result).to.have.length(1);
|
|
277
|
+
expect(result[0]).to.be.a('function');
|
|
278
|
+
expect(result[0].name).to.equal(filterName);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it('calls exposedFilters with their default parameters when declared by string name', () => {
|
|
282
|
+
const webPageDOM = createWebPageDOM('<!DOCTYPE html><html><body><a href="https://example.com/page?fbclid=abc&keep=value"></a></body></html>', 'https://example.com');
|
|
283
|
+
const [removeQueryParams] = getServiceFilters({}, ['removeQueryParams']);
|
|
284
|
+
|
|
285
|
+
removeQueryParams(webPageDOM, { fetch: 'https://example.com', select: [], remove: [], filter: ['removeQueryParams'] });
|
|
286
|
+
|
|
287
|
+
expect(webPageDOM.querySelector('a').getAttribute('href')).to.equal('https://example.com/page?keep=value');
|
|
276
288
|
});
|
|
277
289
|
|
|
278
290
|
it('returns filters from serviceFilters by string name', () => {
|
|
@@ -371,7 +383,7 @@ describe('Services', () => {
|
|
|
371
383
|
expect(sourceDocument.filters).to.be.an('array');
|
|
372
384
|
expect(sourceDocument.filters).to.have.length(2);
|
|
373
385
|
expect(sourceDocument.filters[0]).to.be.a('function');
|
|
374
|
-
expect(sourceDocument.filters[0]).to.equal(
|
|
386
|
+
expect(sourceDocument.filters[0].name).to.equal(realFilterNames[0]);
|
|
375
387
|
expect(sourceDocument.filters[1]).to.be.a('function');
|
|
376
388
|
expect(sourceDocument.filters[1].name).to.equal('removePrintButton');
|
|
377
389
|
});
|