@adguard/filters-compiler 3.3.0-beta.1 → 3.3.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/dist/index.cjs CHANGED
@@ -17,7 +17,8 @@ var util = require('util');
17
17
  var module$1 = require('module');
18
18
  var jsdom = require('jsdom');
19
19
  var crypto = require('crypto');
20
- var moment = require('moment');
20
+ var dateFns = require('date-fns');
21
+ var utc = require('@date-fns/utc');
21
22
  var fs$1 = require('fs/promises');
22
23
  var tldts = require('tldts');
23
24
  var Ajv = require('ajv');
@@ -1704,7 +1705,7 @@ const makeHeader = function (metadataFile, revisionFile, platformsJsonExpires) {
1704
1705
  `! Title: ${metadata.name}`,
1705
1706
  `! Description: ${metadata.description}`,
1706
1707
  `! Version: ${revision.version}`,
1707
- `! TimeUpdated: ${moment(revision.timeUpdated).format()}`,
1708
+ `! TimeUpdated: ${dateFns.format(revision.timeUpdated, 'yyyy-MM-dd\'T\'HH:mm:ssxxx', { in: utc.utc })}`,
1708
1709
  `! Expires: ${expires} (update frequency)`,
1709
1710
  ];
1710
1711
  };
@@ -2424,8 +2425,8 @@ const loadFilterMetadata = function (filterDir, includedFilterIds, excludedFilte
2424
2425
 
2425
2426
  const result = JSON.parse(metadataString);
2426
2427
  result.version = revision.version;
2427
- result.timeUpdated = moment(revision.timeUpdated).format('YYYY-MM-DDTHH:mm:ssZZ');
2428
- result.timeAdded = moment(result.timeAdded).format('YYYY-MM-DDTHH:mm:ssZZ');
2428
+ result.timeUpdated = dateFns.format(revision.timeUpdated, 'yyyy-MM-dd\'T\'HH:mm:ssxx', { in: utc.utc });
2429
+ result.timeAdded = dateFns.format(result.timeAdded, 'yyyy-MM-dd\'T\'HH:mm:ssxx', { in: utc.utc });
2429
2430
  delete result.disabled;
2430
2431
 
2431
2432
  const { filterId } = result;
@@ -4398,6 +4399,25 @@ const REPLACE_MODIFIER_PATTERNS = [
4398
4399
  '\\$(?!#|(path|domain)=.*]|.*removeparam=).*replace(,|=|$)',
4399
4400
  ];
4400
4401
 
4402
+ /**
4403
+ * Pattern to check if rule contains `$urltransform` modifier
4404
+ * and does not contain non-basic modifiers like `$domain` or `$path`.
4405
+ *
4406
+ * Pattern parts:
4407
+ * - `\\$` — modifiers divider
4408
+ * - `(?!#|(path|domain)=.*]|.*removeparam=).*` — negative lookahead to exclude CSS rules (#$#) and rules like
4409
+ * `[$path=...]##.textad,[urltransform="ads"]` and rules with `$removeparam` modifier like `$removeparam=urltransform`
4410
+ * - `.*urltransform` — urltransform modifier itself
4411
+ * - `(,|=|$)` — end of line or modifiers divider, as `$urltransform` can be followed by other modifiers (`,`),
4412
+ * it may have a value (`=`), or it may be the last modifier in the rule (`$`).
4413
+ *
4414
+ * @example
4415
+ * ```||example.com^$urltransform=/firstpath/secondpath/```
4416
+ */
4417
+ const URLTRANSFORM_MODIFIER_PATTERNS = [
4418
+ '\\$(?!#|(path|domain)=.*]|.*removeparam=).*urltransform(,|=|$)',
4419
+ ];
4420
+
4401
4421
  /* eslint-disable max-len */
4402
4422
 
4403
4423
  /**
@@ -4676,6 +4696,7 @@ const SAFARI_BASED_EXTENSION_PATTERNS = [
4676
4696
  ...REMOVEHEADER_MODIFIER_PATTERNS,
4677
4697
  ...MP4_MODIFIER_PATTERNS,
4678
4698
  ...REPLACE_MODIFIER_PATTERNS,
4699
+ ...URLTRANSFORM_MODIFIER_PATTERNS,
4679
4700
  ...STEALTH_MODIFIER_PATTERNS,
4680
4701
  ...COOKIE_MODIFIER_PATTERNS,
4681
4702
  ...APP_MODIFIER_PATTERNS,
@@ -4939,6 +4960,7 @@ const platformsConfig = {
4939
4960
  ...CSS_RULES_PATTERNS,
4940
4961
  ...MP4_MODIFIER_PATTERNS,
4941
4962
  ...REPLACE_MODIFIER_PATTERNS,
4963
+ ...URLTRANSFORM_MODIFIER_PATTERNS,
4942
4964
  ...STEALTH_MODIFIER_PATTERNS,
4943
4965
  ...COOKIE_MODIFIER_PATTERNS,
4944
4966
  ...EMPTY_MODIFIER_PATTERNS,
@@ -4972,6 +4994,7 @@ const platformsConfig = {
4972
4994
  ...HTML_FILTERING_MODIFIER_PATTERNS,
4973
4995
  ...MP4_MODIFIER_PATTERNS,
4974
4996
  ...REPLACE_MODIFIER_PATTERNS,
4997
+ ...URLTRANSFORM_MODIFIER_PATTERNS,
4975
4998
  ...STEALTH_MODIFIER_PATTERNS,
4976
4999
  ...COOKIE_MODIFIER_PATTERNS,
4977
5000
  ...APP_MODIFIER_PATTERNS,
package/dist/index.js CHANGED
@@ -15,7 +15,8 @@ import { TextEncoder, TextDecoder } from 'util';
15
15
  import { createRequire } from 'module';
16
16
  import { JSDOM } from 'jsdom';
17
17
  import crypto from 'crypto';
18
- import moment from 'moment';
18
+ import { format } from 'date-fns';
19
+ import { utc } from '@date-fns/utc';
19
20
  import fs$1 from 'fs/promises';
20
21
  import { parse as parse$1 } from 'tldts';
21
22
  import Ajv from 'ajv';
@@ -1701,7 +1702,7 @@ const makeHeader = function (metadataFile, revisionFile, platformsJsonExpires) {
1701
1702
  `! Title: ${metadata.name}`,
1702
1703
  `! Description: ${metadata.description}`,
1703
1704
  `! Version: ${revision.version}`,
1704
- `! TimeUpdated: ${moment(revision.timeUpdated).format()}`,
1705
+ `! TimeUpdated: ${format(revision.timeUpdated, 'yyyy-MM-dd\'T\'HH:mm:ssxxx', { in: utc })}`,
1705
1706
  `! Expires: ${expires} (update frequency)`,
1706
1707
  ];
1707
1708
  };
@@ -2421,8 +2422,8 @@ const loadFilterMetadata = function (filterDir, includedFilterIds, excludedFilte
2421
2422
 
2422
2423
  const result = JSON.parse(metadataString);
2423
2424
  result.version = revision.version;
2424
- result.timeUpdated = moment(revision.timeUpdated).format('YYYY-MM-DDTHH:mm:ssZZ');
2425
- result.timeAdded = moment(result.timeAdded).format('YYYY-MM-DDTHH:mm:ssZZ');
2425
+ result.timeUpdated = format(revision.timeUpdated, 'yyyy-MM-dd\'T\'HH:mm:ssxx', { in: utc });
2426
+ result.timeAdded = format(result.timeAdded, 'yyyy-MM-dd\'T\'HH:mm:ssxx', { in: utc });
2426
2427
  delete result.disabled;
2427
2428
 
2428
2429
  const { filterId } = result;
@@ -4395,6 +4396,25 @@ const REPLACE_MODIFIER_PATTERNS = [
4395
4396
  '\\$(?!#|(path|domain)=.*]|.*removeparam=).*replace(,|=|$)',
4396
4397
  ];
4397
4398
 
4399
+ /**
4400
+ * Pattern to check if rule contains `$urltransform` modifier
4401
+ * and does not contain non-basic modifiers like `$domain` or `$path`.
4402
+ *
4403
+ * Pattern parts:
4404
+ * - `\\$` — modifiers divider
4405
+ * - `(?!#|(path|domain)=.*]|.*removeparam=).*` — negative lookahead to exclude CSS rules (#$#) and rules like
4406
+ * `[$path=...]##.textad,[urltransform="ads"]` and rules with `$removeparam` modifier like `$removeparam=urltransform`
4407
+ * - `.*urltransform` — urltransform modifier itself
4408
+ * - `(,|=|$)` — end of line or modifiers divider, as `$urltransform` can be followed by other modifiers (`,`),
4409
+ * it may have a value (`=`), or it may be the last modifier in the rule (`$`).
4410
+ *
4411
+ * @example
4412
+ * ```||example.com^$urltransform=/firstpath/secondpath/```
4413
+ */
4414
+ const URLTRANSFORM_MODIFIER_PATTERNS = [
4415
+ '\\$(?!#|(path|domain)=.*]|.*removeparam=).*urltransform(,|=|$)',
4416
+ ];
4417
+
4398
4418
  /* eslint-disable max-len */
4399
4419
 
4400
4420
  /**
@@ -4673,6 +4693,7 @@ const SAFARI_BASED_EXTENSION_PATTERNS = [
4673
4693
  ...REMOVEHEADER_MODIFIER_PATTERNS,
4674
4694
  ...MP4_MODIFIER_PATTERNS,
4675
4695
  ...REPLACE_MODIFIER_PATTERNS,
4696
+ ...URLTRANSFORM_MODIFIER_PATTERNS,
4676
4697
  ...STEALTH_MODIFIER_PATTERNS,
4677
4698
  ...COOKIE_MODIFIER_PATTERNS,
4678
4699
  ...APP_MODIFIER_PATTERNS,
@@ -4936,6 +4957,7 @@ const platformsConfig = {
4936
4957
  ...CSS_RULES_PATTERNS,
4937
4958
  ...MP4_MODIFIER_PATTERNS,
4938
4959
  ...REPLACE_MODIFIER_PATTERNS,
4960
+ ...URLTRANSFORM_MODIFIER_PATTERNS,
4939
4961
  ...STEALTH_MODIFIER_PATTERNS,
4940
4962
  ...COOKIE_MODIFIER_PATTERNS,
4941
4963
  ...EMPTY_MODIFIER_PATTERNS,
@@ -4969,6 +4991,7 @@ const platformsConfig = {
4969
4991
  ...HTML_FILTERING_MODIFIER_PATTERNS,
4970
4992
  ...MP4_MODIFIER_PATTERNS,
4971
4993
  ...REPLACE_MODIFIER_PATTERNS,
4994
+ ...URLTRANSFORM_MODIFIER_PATTERNS,
4972
4995
  ...STEALTH_MODIFIER_PATTERNS,
4973
4996
  ...COOKIE_MODIFIER_PATTERNS,
4974
4997
  ...APP_MODIFIER_PATTERNS,
@@ -5,6 +5,7 @@
5
5
  ! ##+js
6
6
  ! #$#
7
7
  ! $replace
8
+ ! $urltransform
8
9
  ! #%#
9
10
  ! #@%#
10
11
  !
@@ -9,5 +9,6 @@
9
9
  #%#//scriptlet('trusted-
10
10
  #%#//scriptlet("trusted-
11
11
  $replace
12
+ $urltransform
12
13
  #%#
13
- #@%#
14
+ #@%#
@@ -7,5 +7,6 @@
7
7
  ##+js
8
8
  #$#
9
9
  $replace
10
+ $urltransform
10
11
  #%#
11
- #@%#
12
+ #@%#
package/package.json CHANGED
@@ -21,20 +21,21 @@
21
21
  "pnpm": ">=10.33.4 <11"
22
22
  },
23
23
  "dependencies": {
24
- "@adguard/agtree": "4.1.2",
24
+ "@adguard/agtree": "4.2.1",
25
25
  "@adguard/css-tokenizer": "1.2.0",
26
26
  "@adguard/ecss-tree": "2.0.1",
27
- "@adguard/extended-css": "2.1.1",
27
+ "@adguard/extended-css": "2.2.0",
28
28
  "@adguard/filters-downloader": "2.4.4",
29
29
  "@adguard/logger": "2.0.0",
30
- "@adguard/scriptlets": "2.3.1",
31
- "@adguard/tsurlfilter": "4.0.5",
30
+ "@adguard/scriptlets": "2.5.1",
31
+ "@adguard/tsurlfilter": "6.0.3",
32
+ "@date-fns/utc": "2.1.1",
32
33
  "@eslint/css-tree": "3.6.6",
33
34
  "ajv": "8.17.1",
34
35
  "child_process": "1.0.2",
36
+ "date-fns": "^4.4.0",
35
37
  "jsdom": "21.1.2",
36
38
  "md5": "2.3.0",
37
- "moment": "2.30.1",
38
39
  "tldts": "5.7.112",
39
40
  "utf8": "3.0.0"
40
41
  },
@@ -58,7 +59,7 @@
58
59
  "typescript": "6.0.3",
59
60
  "vitest": "3.0.5"
60
61
  },
61
- "version": "3.3.0-beta.1",
62
+ "version": "3.3.0",
62
63
  "scripts": {
63
64
  "prebuild": "rimraf dist",
64
65
  "build": "rollup --config rollup.config.js --silent",