@adguard/agtree 2.1.2 → 3.0.0-alpha.1

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.
Files changed (734) hide show
  1. package/dist/cjs/ast-utils/clone.js +65 -0
  2. package/dist/cjs/ast-utils/modifiers.js +56 -0
  3. package/dist/cjs/ast-utils/network-rules.js +43 -0
  4. package/dist/cjs/ast-utils/scriptlets.js +93 -0
  5. package/dist/cjs/common/abp-snippet-injection-body-common.js +18 -0
  6. package/dist/cjs/common/agent-common.js +58 -0
  7. package/dist/cjs/common/ubo-selector-common.js +18 -0
  8. package/dist/cjs/compatibility-tables/base.js +264 -0
  9. package/dist/cjs/compatibility-tables/compatibility-table-data.js +15 -0
  10. package/dist/cjs/compatibility-tables/modifiers.js +57 -0
  11. package/dist/cjs/compatibility-tables/platforms.js +58 -0
  12. package/dist/cjs/compatibility-tables/redirects.js +102 -0
  13. package/dist/cjs/compatibility-tables/schemas/base.js +116 -0
  14. package/dist/cjs/compatibility-tables/schemas/modifier.js +107 -0
  15. package/dist/cjs/compatibility-tables/schemas/platform.js +71 -0
  16. package/dist/cjs/compatibility-tables/schemas/redirect.js +31 -0
  17. package/dist/cjs/compatibility-tables/schemas/resource-type.js +39 -0
  18. package/dist/cjs/compatibility-tables/schemas/scriptlet.js +81 -0
  19. package/dist/cjs/compatibility-tables/scriptlets.js +30 -0
  20. package/dist/cjs/compatibility-tables/utils/platform-helpers.js +112 -0
  21. package/dist/cjs/compatibility-tables/utils/resource-type-helpers.js +64 -0
  22. package/dist/cjs/compatibility-tables/utils/zod-camelcase.js +27 -0
  23. package/dist/cjs/converter/base-interfaces/base-converter.js +61 -0
  24. package/dist/cjs/converter/base-interfaces/conversion-result.js +41 -0
  25. package/dist/cjs/converter/base-interfaces/rule-converter-base.js +62 -0
  26. package/dist/cjs/converter/comment/index.js +56 -0
  27. package/dist/cjs/converter/cosmetic/css.js +71 -0
  28. package/dist/cjs/converter/cosmetic/element-hiding.js +64 -0
  29. package/dist/cjs/converter/cosmetic/header-removal.js +126 -0
  30. package/dist/cjs/converter/cosmetic/html.js +384 -0
  31. package/dist/cjs/converter/cosmetic/index.js +120 -0
  32. package/dist/cjs/converter/cosmetic/rule-modifiers/adg.js +81 -0
  33. package/dist/cjs/converter/cosmetic/scriptlet.js +356 -0
  34. package/dist/cjs/converter/css/index.js +193 -0
  35. package/dist/cjs/converter/data/css.js +133 -0
  36. package/dist/cjs/converter/filter-list.js +90 -0
  37. package/dist/cjs/converter/index.js +15 -0
  38. package/dist/cjs/converter/misc/network-rule-modifier.js +313 -0
  39. package/dist/cjs/converter/network/index.js +101 -0
  40. package/dist/cjs/converter/raw-filter-list.js +58 -0
  41. package/dist/cjs/converter/rule.js +83 -0
  42. package/dist/cjs/deserializer/base-deserializer.js +31 -0
  43. package/dist/cjs/deserializer/comment/agent-comment-deserializer.js +76 -0
  44. package/dist/cjs/deserializer/comment/agent-deserializer.js +67 -0
  45. package/dist/cjs/deserializer/comment/comment-rule-deserializer.js +109 -0
  46. package/dist/cjs/deserializer/comment/config-comment-deserializer.js +113 -0
  47. package/dist/cjs/deserializer/comment/hint-comment-deserializer.js +69 -0
  48. package/dist/cjs/deserializer/comment/hint-deserializer.js +88 -0
  49. package/dist/cjs/deserializer/comment/metadata-comment-deserializer.js +71 -0
  50. package/dist/cjs/deserializer/comment/pre-processor-comment-deserializer.js +114 -0
  51. package/dist/cjs/deserializer/comment/simple-comment-deserializer.js +67 -0
  52. package/dist/cjs/deserializer/cosmetic/cosmetic-rule-deserializer.js +127 -0
  53. package/dist/cjs/deserializer/cosmetic/css-injection-body-deserializer.js +55 -0
  54. package/dist/cjs/deserializer/cosmetic/element-hiding-body-deserializer.js +46 -0
  55. package/dist/cjs/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.js +37 -0
  56. package/dist/cjs/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.js +37 -0
  57. package/dist/cjs/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.js +52 -0
  58. package/dist/cjs/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.js +38 -0
  59. package/dist/cjs/deserializer/empty-rule-deserializer.js +46 -0
  60. package/dist/cjs/deserializer/filterlist-deserializer.js +83 -0
  61. package/dist/cjs/deserializer/index.js +15 -0
  62. package/dist/cjs/deserializer/invalid-rule-deserializer.js +48 -0
  63. package/dist/cjs/deserializer/invalid-rule-error-node-deserializer.js +48 -0
  64. package/dist/cjs/deserializer/misc/domain-list-deserializer.js +66 -0
  65. package/dist/cjs/deserializer/misc/list-item-deserializer.js +65 -0
  66. package/dist/cjs/deserializer/misc/list-items-deserializer.js +28 -0
  67. package/dist/cjs/deserializer/misc/logical-expression-deserializer.js +199 -0
  68. package/dist/cjs/deserializer/misc/modifier-deserializer.js +89 -0
  69. package/dist/cjs/deserializer/misc/modifier-list-deserializer.js +58 -0
  70. package/dist/cjs/deserializer/misc/parameter-list-deserializer.js +62 -0
  71. package/dist/cjs/deserializer/misc/value-deserializer.js +52 -0
  72. package/dist/cjs/deserializer/network/host-rule-deserializer.js +81 -0
  73. package/dist/cjs/deserializer/network/hostname-list-deserializer.js +50 -0
  74. package/dist/cjs/deserializer/network/network-rule-deserializer.js +67 -0
  75. package/dist/cjs/deserializer/rule-deserializer.js +67 -0
  76. package/dist/cjs/deserializer/syntax-deserialization-map.js +23 -0
  77. package/dist/cjs/errors/adblock-syntax-error.js +41 -0
  78. package/dist/cjs/errors/binary-schema-mismatch-error.js +39 -0
  79. package/dist/cjs/errors/not-implemented-error.js +33 -0
  80. package/dist/cjs/errors/rule-conversion-error.js +28 -0
  81. package/dist/cjs/generator/base-generator.js +29 -0
  82. package/dist/cjs/generator/comment/agent-comment-generator.js +30 -0
  83. package/dist/cjs/generator/comment/agent-generator.js +34 -0
  84. package/dist/cjs/generator/comment/comment-rule-generator.js +102 -0
  85. package/dist/cjs/generator/comment/config-comment-generator.js +44 -0
  86. package/dist/cjs/generator/comment/hint-comment-generator.js +27 -0
  87. package/dist/cjs/generator/comment/hint-generator.js +32 -0
  88. package/dist/cjs/generator/comment/metadata-comment-generator.js +32 -0
  89. package/dist/cjs/generator/comment/pre-processor-comment-generator.js +47 -0
  90. package/dist/cjs/generator/comment/simple-comment-generator.js +28 -0
  91. package/dist/cjs/generator/cosmetic/body/abp-snippet-injection-body-generator.js +36 -0
  92. package/dist/cjs/generator/cosmetic/body/adg-scriptlet-injection-body-generator.js +41 -0
  93. package/dist/cjs/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.js +43 -0
  94. package/dist/cjs/generator/cosmetic/cosmetic-rule-body-generator.js +92 -0
  95. package/dist/cjs/generator/cosmetic/cosmetic-rule-generator.js +66 -0
  96. package/dist/cjs/generator/cosmetic/cosmetic-rule-pattern-generator.js +41 -0
  97. package/dist/cjs/generator/css/adg-css-injection-generator.js +41 -0
  98. package/dist/cjs/generator/filterlist-generator.js +57 -0
  99. package/dist/cjs/generator/index.js +17 -0
  100. package/dist/cjs/generator/misc/domain-list-generator.js +25 -0
  101. package/dist/cjs/generator/misc/list-items-generator.js +38 -0
  102. package/dist/cjs/generator/misc/logical-expression-generator.js +47 -0
  103. package/dist/cjs/generator/misc/modifier-generator.js +33 -0
  104. package/dist/cjs/generator/misc/modifier-list-generator.js +28 -0
  105. package/dist/cjs/generator/misc/parameter-list-generator.js +41 -0
  106. package/dist/cjs/generator/misc/value-generator.js +23 -0
  107. package/dist/cjs/generator/network/host-rule-generator.js +38 -0
  108. package/dist/cjs/generator/network/network-rule-generator.js +37 -0
  109. package/dist/cjs/generator/rule-generator.js +64 -0
  110. package/dist/cjs/index.js +201 -0
  111. package/dist/cjs/marshalling-utils/comment/agent-comment-common.js +22 -0
  112. package/dist/cjs/marshalling-utils/comment/agent-common.js +43 -0
  113. package/dist/cjs/marshalling-utils/comment/config-comment-common.js +58 -0
  114. package/dist/cjs/marshalling-utils/comment/hint-comment-common.js +23 -0
  115. package/dist/cjs/marshalling-utils/comment/hint-common.js +60 -0
  116. package/dist/cjs/marshalling-utils/comment/metadata-comment-common.js +44 -0
  117. package/dist/cjs/marshalling-utils/comment/pre-processor-comment-common.js +63 -0
  118. package/dist/cjs/marshalling-utils/comment/simple-comment-common.js +23 -0
  119. package/dist/cjs/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.js +64 -0
  120. package/dist/cjs/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.js +68 -0
  121. package/dist/cjs/marshalling-utils/cosmetic/body/css-injection-body-common.js +25 -0
  122. package/dist/cjs/marshalling-utils/cosmetic/body/element-hiding-body-common.js +22 -0
  123. package/dist/cjs/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.js +116 -0
  124. package/dist/cjs/marshalling-utils/cosmetic/cosmetic-rule-common.js +51 -0
  125. package/dist/cjs/marshalling-utils/empty-rule-common.js +21 -0
  126. package/dist/cjs/marshalling-utils/filter-list-common.js +22 -0
  127. package/dist/cjs/marshalling-utils/invalid-rule-common.js +22 -0
  128. package/dist/cjs/marshalling-utils/invalid-rule-error-node-common.js +23 -0
  129. package/dist/cjs/marshalling-utils/misc/binary-type-common.js +67 -0
  130. package/dist/cjs/marshalling-utils/misc/domain-list-common.js +39 -0
  131. package/dist/cjs/marshalling-utils/misc/host-rule-common.js +26 -0
  132. package/dist/cjs/marshalling-utils/misc/hostname-list-common.js +22 -0
  133. package/dist/cjs/marshalling-utils/misc/list-item-common.js +23 -0
  134. package/dist/cjs/marshalling-utils/misc/logical-expression-common.js +89 -0
  135. package/dist/cjs/marshalling-utils/misc/modifier-common.js +236 -0
  136. package/dist/cjs/marshalling-utils/misc/modifier-list-common.js +22 -0
  137. package/dist/cjs/marshalling-utils/misc/parameter-list-common.js +22 -0
  138. package/dist/cjs/marshalling-utils/misc/value-common.js +23 -0
  139. package/dist/cjs/marshalling-utils/network/network-rule-common.js +26 -0
  140. package/dist/cjs/marshalling-utils/syntax-serialization-map.js +32 -0
  141. package/dist/cjs/nodes/index.js +180 -0
  142. package/dist/cjs/package.json.js +11 -0
  143. package/dist/cjs/parser/base-parser.js +32 -0
  144. package/dist/cjs/parser/comment/agent-comment-parser.js +121 -0
  145. package/dist/cjs/parser/comment/agent-parser.js +111 -0
  146. package/dist/cjs/parser/comment/comment-parser.js +110 -0
  147. package/dist/cjs/parser/comment/config-comment-parser.js +139 -0
  148. package/dist/cjs/parser/comment/hint-comment-parser.js +119 -0
  149. package/dist/cjs/parser/comment/hint-parser.js +131 -0
  150. package/dist/cjs/parser/comment/metadata-comment-parser.js +131 -0
  151. package/dist/cjs/parser/comment/preprocessor-parser.js +201 -0
  152. package/dist/cjs/parser/comment/simple-comment-parser.js +108 -0
  153. package/dist/cjs/parser/cosmetic/body/abp-snippet-injection-body-parser.js +81 -0
  154. package/dist/cjs/parser/cosmetic/body/adg-scriptlet-injection-body-parser.js +151 -0
  155. package/dist/cjs/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.js +112 -0
  156. package/dist/cjs/parser/cosmetic/cosmetic-rule-parser.js +456 -0
  157. package/dist/cjs/parser/css/adg-css-injection-parser.js +213 -0
  158. package/dist/cjs/parser/css/balancing.js +97 -0
  159. package/dist/cjs/parser/css/constants.js +21 -0
  160. package/dist/cjs/parser/css/css-token-stream.js +345 -0
  161. package/dist/cjs/parser/css/ubo-selector-parser.js +373 -0
  162. package/dist/cjs/parser/filterlist-parser.js +104 -0
  163. package/dist/cjs/parser/index.js +21 -0
  164. package/dist/cjs/parser/misc/app-list-parser.js +47 -0
  165. package/dist/cjs/parser/misc/domain-list-parser.js +54 -0
  166. package/dist/cjs/parser/misc/list-items-parser.js +116 -0
  167. package/dist/cjs/parser/misc/logical-expression-parser.js +283 -0
  168. package/dist/cjs/parser/misc/method-list-parser.js +48 -0
  169. package/dist/cjs/parser/misc/modifier-list.js +72 -0
  170. package/dist/cjs/parser/misc/modifier-parser.js +91 -0
  171. package/dist/cjs/parser/misc/parameter-list-parser.js +74 -0
  172. package/dist/cjs/parser/misc/stealth-option-list-parser.js +48 -0
  173. package/dist/cjs/parser/misc/ubo-parameter-list-parser.js +148 -0
  174. package/dist/cjs/parser/misc/value-parser.js +39 -0
  175. package/dist/cjs/parser/network/host-rule-parser.js +151 -0
  176. package/dist/cjs/parser/network/network-rule-parser.js +113 -0
  177. package/dist/cjs/parser/options.js +25 -0
  178. package/dist/cjs/parser/rule-parser.js +194 -0
  179. package/dist/cjs/serializer/base-serializer.js +31 -0
  180. package/dist/cjs/serializer/comment/agent-comment-serializer.js +73 -0
  181. package/dist/cjs/serializer/comment/agent-serializer.js +70 -0
  182. package/dist/cjs/serializer/comment/comment-rule-serializer.js +107 -0
  183. package/dist/cjs/serializer/comment/config-comment-serializer.js +84 -0
  184. package/dist/cjs/serializer/comment/hint-comment-serializer.js +64 -0
  185. package/dist/cjs/serializer/comment/hint-serializer.js +56 -0
  186. package/dist/cjs/serializer/comment/metadata-comment-serializer.js +75 -0
  187. package/dist/cjs/serializer/comment/pre-processor-comment-serializer.js +73 -0
  188. package/dist/cjs/serializer/comment/simple-comment-serializer.js +54 -0
  189. package/dist/cjs/serializer/cosmetic/body/abp-snippet-injection-body-serializer.js +38 -0
  190. package/dist/cjs/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.js +38 -0
  191. package/dist/cjs/serializer/cosmetic/body/scriptlet-body-serializer.js +49 -0
  192. package/dist/cjs/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.js +38 -0
  193. package/dist/cjs/serializer/cosmetic/cosmetic-rule-serializer.js +131 -0
  194. package/dist/cjs/serializer/cosmetic/css-injection-body-serializer.js +50 -0
  195. package/dist/cjs/serializer/cosmetic/element-hiding-body-serializer.js +39 -0
  196. package/dist/cjs/serializer/empty-rule-serializer.js +36 -0
  197. package/dist/cjs/serializer/filterlist-serializer.js +48 -0
  198. package/dist/cjs/serializer/index.js +13 -0
  199. package/dist/cjs/serializer/invalid-rule-error-node-serializer.js +40 -0
  200. package/dist/cjs/serializer/invalid-rule-serializer.js +39 -0
  201. package/dist/cjs/serializer/misc/domain-list-serializer.js +66 -0
  202. package/dist/cjs/serializer/misc/list-item-serializer.js +57 -0
  203. package/dist/cjs/serializer/misc/list-items-serializer.js +28 -0
  204. package/dist/cjs/serializer/misc/logical-expression-serializer.js +138 -0
  205. package/dist/cjs/serializer/misc/modifier-list-serializer.js +57 -0
  206. package/dist/cjs/serializer/misc/modifier-serializer.js +51 -0
  207. package/dist/cjs/serializer/misc/parameter-list-serializer.js +51 -0
  208. package/dist/cjs/serializer/misc/value-serializer.js +52 -0
  209. package/dist/cjs/serializer/network/host-rule-serializer.js +72 -0
  210. package/dist/cjs/serializer/network/hostname-list-serializer.js +49 -0
  211. package/dist/cjs/serializer/network/network-rule-serializer.js +56 -0
  212. package/dist/cjs/serializer/rule-serializer.js +63 -0
  213. package/dist/cjs/utils/adblockers.js +57 -0
  214. package/dist/cjs/utils/binary-schema-version.js +19 -0
  215. package/dist/cjs/utils/byte-buffer.js +93 -0
  216. package/dist/cjs/utils/categorizer.js +46 -0
  217. package/dist/cjs/utils/clone.js +30 -0
  218. package/dist/cjs/utils/constants.js +380 -0
  219. package/dist/cjs/utils/cosmetic-rule-separator.js +129 -0
  220. package/dist/cjs/utils/deep-freeze.js +34 -0
  221. package/dist/cjs/utils/domain.js +60 -0
  222. package/dist/cjs/utils/error.js +51 -0
  223. package/dist/cjs/utils/index.js +69 -0
  224. package/dist/cjs/utils/input-byte-buffer.js +259 -0
  225. package/dist/cjs/utils/is-chromium.js +22 -0
  226. package/dist/cjs/utils/logical-expression.js +94 -0
  227. package/dist/cjs/utils/multi-value-map.js +35 -0
  228. package/dist/cjs/utils/output-byte-buffer.js +225 -0
  229. package/dist/cjs/utils/position-provider.js +75 -0
  230. package/dist/cjs/utils/quotes.js +218 -0
  231. package/dist/cjs/utils/regexp.js +190 -0
  232. package/dist/cjs/utils/string.js +560 -0
  233. package/dist/cjs/utils/text-decoder-polyfill.js +109 -0
  234. package/dist/cjs/utils/text-encoder-polyfill.js +80 -0
  235. package/dist/cjs/utils/type-guards.js +52 -0
  236. package/dist/cjs/validator/constants.js +222 -0
  237. package/dist/cjs/validator/helpers.js +49 -0
  238. package/dist/cjs/validator/index.js +176 -0
  239. package/dist/cjs/validator/value.js +565 -0
  240. package/dist/cjs/version.js +20 -0
  241. package/dist/esm/ast-utils/clone.mjs +61 -0
  242. package/dist/esm/ast-utils/modifiers.mjs +53 -0
  243. package/dist/esm/ast-utils/network-rules.mjs +41 -0
  244. package/dist/esm/ast-utils/scriptlets.mjs +87 -0
  245. package/dist/esm/common/abp-snippet-injection-body-common.mjs +16 -0
  246. package/dist/esm/common/agent-common.mjs +56 -0
  247. package/dist/esm/common/ubo-selector-common.mjs +18 -0
  248. package/dist/esm/compatibility-tables/base.mjs +262 -0
  249. package/dist/esm/compatibility-tables/compatibility-table-data.mjs +11 -0
  250. package/dist/esm/compatibility-tables/modifiers.mjs +55 -0
  251. package/dist/esm/compatibility-tables/platforms.mjs +58 -0
  252. package/dist/esm/compatibility-tables/redirects.mjs +100 -0
  253. package/dist/esm/compatibility-tables/schemas/base.mjs +111 -0
  254. package/dist/esm/compatibility-tables/schemas/modifier.mjs +105 -0
  255. package/dist/esm/compatibility-tables/schemas/platform.mjs +69 -0
  256. package/dist/esm/compatibility-tables/schemas/redirect.mjs +29 -0
  257. package/dist/esm/compatibility-tables/schemas/resource-type.mjs +37 -0
  258. package/dist/esm/compatibility-tables/schemas/scriptlet.mjs +79 -0
  259. package/dist/esm/compatibility-tables/scriptlets.mjs +28 -0
  260. package/dist/esm/compatibility-tables/utils/platform-helpers.mjs +105 -0
  261. package/dist/esm/compatibility-tables/utils/resource-type-helpers.mjs +61 -0
  262. package/dist/esm/compatibility-tables/utils/zod-camelcase.mjs +25 -0
  263. package/dist/esm/converter/base-interfaces/base-converter.mjs +59 -0
  264. package/dist/esm/converter/base-interfaces/conversion-result.mjs +38 -0
  265. package/dist/esm/converter/base-interfaces/rule-converter-base.mjs +60 -0
  266. package/dist/esm/converter/comment/index.mjs +54 -0
  267. package/dist/esm/converter/cosmetic/css.mjs +69 -0
  268. package/dist/esm/converter/cosmetic/element-hiding.mjs +62 -0
  269. package/dist/esm/converter/cosmetic/header-removal.mjs +123 -0
  270. package/dist/esm/converter/cosmetic/html.mjs +381 -0
  271. package/dist/esm/converter/cosmetic/index.mjs +118 -0
  272. package/dist/esm/converter/cosmetic/rule-modifiers/adg.mjs +79 -0
  273. package/dist/esm/converter/cosmetic/scriptlet.mjs +354 -0
  274. package/dist/esm/converter/css/index.mjs +190 -0
  275. package/dist/esm/converter/data/css.mjs +126 -0
  276. package/dist/esm/converter/filter-list.mjs +88 -0
  277. package/dist/esm/converter/index.mjs +8 -0
  278. package/dist/esm/converter/misc/network-rule-modifier.mjs +311 -0
  279. package/dist/esm/converter/network/index.mjs +99 -0
  280. package/dist/esm/converter/raw-filter-list.mjs +56 -0
  281. package/dist/esm/converter/rule.mjs +81 -0
  282. package/dist/esm/deserializer/base-deserializer.mjs +29 -0
  283. package/dist/esm/deserializer/comment/agent-comment-deserializer.mjs +74 -0
  284. package/dist/esm/deserializer/comment/agent-deserializer.mjs +65 -0
  285. package/dist/esm/deserializer/comment/comment-rule-deserializer.mjs +107 -0
  286. package/dist/esm/deserializer/comment/config-comment-deserializer.mjs +111 -0
  287. package/dist/esm/deserializer/comment/hint-comment-deserializer.mjs +67 -0
  288. package/dist/esm/deserializer/comment/hint-deserializer.mjs +85 -0
  289. package/dist/esm/deserializer/comment/metadata-comment-deserializer.mjs +69 -0
  290. package/dist/esm/deserializer/comment/pre-processor-comment-deserializer.mjs +112 -0
  291. package/dist/esm/deserializer/comment/simple-comment-deserializer.mjs +65 -0
  292. package/dist/esm/deserializer/cosmetic/cosmetic-rule-deserializer.mjs +125 -0
  293. package/dist/esm/deserializer/cosmetic/css-injection-body-deserializer.mjs +53 -0
  294. package/dist/esm/deserializer/cosmetic/element-hiding-body-deserializer.mjs +44 -0
  295. package/dist/esm/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.mjs +35 -0
  296. package/dist/esm/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.mjs +35 -0
  297. package/dist/esm/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.mjs +50 -0
  298. package/dist/esm/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.mjs +35 -0
  299. package/dist/esm/deserializer/empty-rule-deserializer.mjs +44 -0
  300. package/dist/esm/deserializer/filterlist-deserializer.mjs +81 -0
  301. package/dist/esm/deserializer/index.mjs +8 -0
  302. package/dist/esm/deserializer/invalid-rule-deserializer.mjs +46 -0
  303. package/dist/esm/deserializer/invalid-rule-error-node-deserializer.mjs +46 -0
  304. package/dist/esm/deserializer/misc/domain-list-deserializer.mjs +64 -0
  305. package/dist/esm/deserializer/misc/list-item-deserializer.mjs +63 -0
  306. package/dist/esm/deserializer/misc/list-items-deserializer.mjs +26 -0
  307. package/dist/esm/deserializer/misc/logical-expression-deserializer.mjs +196 -0
  308. package/dist/esm/deserializer/misc/modifier-deserializer.mjs +87 -0
  309. package/dist/esm/deserializer/misc/modifier-list-deserializer.mjs +56 -0
  310. package/dist/esm/deserializer/misc/parameter-list-deserializer.mjs +60 -0
  311. package/dist/esm/deserializer/misc/value-deserializer.mjs +50 -0
  312. package/dist/esm/deserializer/network/host-rule-deserializer.mjs +79 -0
  313. package/dist/esm/deserializer/network/hostname-list-deserializer.mjs +48 -0
  314. package/dist/esm/deserializer/network/network-rule-deserializer.mjs +65 -0
  315. package/dist/esm/deserializer/rule-deserializer.mjs +65 -0
  316. package/dist/esm/deserializer/syntax-deserialization-map.mjs +21 -0
  317. package/dist/esm/errors/adblock-syntax-error.mjs +39 -0
  318. package/dist/esm/errors/binary-schema-mismatch-error.mjs +37 -0
  319. package/dist/esm/errors/not-implemented-error.mjs +31 -0
  320. package/dist/esm/errors/rule-conversion-error.mjs +26 -0
  321. package/dist/esm/generator/base-generator.mjs +27 -0
  322. package/dist/esm/generator/comment/agent-comment-generator.mjs +28 -0
  323. package/dist/esm/generator/comment/agent-generator.mjs +32 -0
  324. package/dist/esm/generator/comment/comment-rule-generator.mjs +100 -0
  325. package/dist/esm/generator/comment/config-comment-generator.mjs +42 -0
  326. package/dist/esm/generator/comment/hint-comment-generator.mjs +25 -0
  327. package/dist/esm/generator/comment/hint-generator.mjs +30 -0
  328. package/dist/esm/generator/comment/metadata-comment-generator.mjs +30 -0
  329. package/dist/esm/generator/comment/pre-processor-comment-generator.mjs +45 -0
  330. package/dist/esm/generator/comment/simple-comment-generator.mjs +26 -0
  331. package/dist/esm/generator/cosmetic/body/abp-snippet-injection-body-generator.mjs +34 -0
  332. package/dist/esm/generator/cosmetic/body/adg-scriptlet-injection-body-generator.mjs +39 -0
  333. package/dist/esm/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.mjs +41 -0
  334. package/dist/esm/generator/cosmetic/cosmetic-rule-body-generator.mjs +90 -0
  335. package/dist/esm/generator/cosmetic/cosmetic-rule-generator.mjs +64 -0
  336. package/dist/esm/generator/cosmetic/cosmetic-rule-pattern-generator.mjs +39 -0
  337. package/dist/esm/generator/css/adg-css-injection-generator.mjs +39 -0
  338. package/dist/esm/generator/filterlist-generator.mjs +55 -0
  339. package/dist/esm/generator/index.mjs +9 -0
  340. package/dist/esm/generator/misc/domain-list-generator.mjs +23 -0
  341. package/dist/esm/generator/misc/list-items-generator.mjs +36 -0
  342. package/dist/esm/generator/misc/logical-expression-generator.mjs +45 -0
  343. package/dist/esm/generator/misc/modifier-generator.mjs +31 -0
  344. package/dist/esm/generator/misc/modifier-list-generator.mjs +26 -0
  345. package/dist/esm/generator/misc/parameter-list-generator.mjs +39 -0
  346. package/dist/esm/generator/misc/value-generator.mjs +21 -0
  347. package/dist/esm/generator/network/host-rule-generator.mjs +36 -0
  348. package/dist/esm/generator/network/network-rule-generator.mjs +35 -0
  349. package/dist/esm/generator/rule-generator.mjs +62 -0
  350. package/dist/esm/index.mjs +70 -0
  351. package/dist/esm/marshalling-utils/comment/agent-comment-common.mjs +22 -0
  352. package/dist/esm/marshalling-utils/comment/agent-common.mjs +41 -0
  353. package/dist/esm/marshalling-utils/comment/config-comment-common.mjs +56 -0
  354. package/dist/esm/marshalling-utils/comment/hint-comment-common.mjs +23 -0
  355. package/dist/esm/marshalling-utils/comment/hint-common.mjs +57 -0
  356. package/dist/esm/marshalling-utils/comment/metadata-comment-common.mjs +42 -0
  357. package/dist/esm/marshalling-utils/comment/pre-processor-comment-common.mjs +60 -0
  358. package/dist/esm/marshalling-utils/comment/simple-comment-common.mjs +23 -0
  359. package/dist/esm/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.mjs +62 -0
  360. package/dist/esm/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.mjs +66 -0
  361. package/dist/esm/marshalling-utils/cosmetic/body/css-injection-body-common.mjs +25 -0
  362. package/dist/esm/marshalling-utils/cosmetic/body/element-hiding-body-common.mjs +22 -0
  363. package/dist/esm/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.mjs +114 -0
  364. package/dist/esm/marshalling-utils/cosmetic/cosmetic-rule-common.mjs +49 -0
  365. package/dist/esm/marshalling-utils/empty-rule-common.mjs +21 -0
  366. package/dist/esm/marshalling-utils/filter-list-common.mjs +22 -0
  367. package/dist/esm/marshalling-utils/invalid-rule-common.mjs +22 -0
  368. package/dist/esm/marshalling-utils/invalid-rule-error-node-common.mjs +23 -0
  369. package/dist/esm/marshalling-utils/misc/binary-type-common.mjs +67 -0
  370. package/dist/esm/marshalling-utils/misc/domain-list-common.mjs +37 -0
  371. package/dist/esm/marshalling-utils/misc/host-rule-common.mjs +26 -0
  372. package/dist/esm/marshalling-utils/misc/hostname-list-common.mjs +22 -0
  373. package/dist/esm/marshalling-utils/misc/list-item-common.mjs +23 -0
  374. package/dist/esm/marshalling-utils/misc/logical-expression-common.mjs +86 -0
  375. package/dist/esm/marshalling-utils/misc/modifier-common.mjs +232 -0
  376. package/dist/esm/marshalling-utils/misc/modifier-list-common.mjs +22 -0
  377. package/dist/esm/marshalling-utils/misc/parameter-list-common.mjs +22 -0
  378. package/dist/esm/marshalling-utils/misc/value-common.mjs +23 -0
  379. package/dist/esm/marshalling-utils/network/network-rule-common.mjs +26 -0
  380. package/dist/esm/marshalling-utils/syntax-serialization-map.mjs +30 -0
  381. package/dist/esm/nodes/index.mjs +180 -0
  382. package/dist/esm/package.json.mjs +9 -0
  383. package/dist/esm/parser/base-parser.mjs +30 -0
  384. package/dist/esm/parser/comment/agent-comment-parser.mjs +119 -0
  385. package/dist/esm/parser/comment/agent-parser.mjs +109 -0
  386. package/dist/esm/parser/comment/comment-parser.mjs +108 -0
  387. package/dist/esm/parser/comment/config-comment-parser.mjs +137 -0
  388. package/dist/esm/parser/comment/hint-comment-parser.mjs +117 -0
  389. package/dist/esm/parser/comment/hint-parser.mjs +129 -0
  390. package/dist/esm/parser/comment/metadata-comment-parser.mjs +129 -0
  391. package/dist/esm/parser/comment/preprocessor-parser.mjs +199 -0
  392. package/dist/esm/parser/comment/simple-comment-parser.mjs +106 -0
  393. package/dist/esm/parser/cosmetic/body/abp-snippet-injection-body-parser.mjs +79 -0
  394. package/dist/esm/parser/cosmetic/body/adg-scriptlet-injection-body-parser.mjs +149 -0
  395. package/dist/esm/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.mjs +110 -0
  396. package/dist/esm/parser/cosmetic/cosmetic-rule-parser.mjs +453 -0
  397. package/dist/esm/parser/css/adg-css-injection-parser.mjs +208 -0
  398. package/dist/esm/parser/css/balancing.mjs +94 -0
  399. package/dist/esm/parser/css/constants.mjs +18 -0
  400. package/dist/esm/parser/css/css-token-stream.mjs +343 -0
  401. package/dist/esm/parser/css/ubo-selector-parser.mjs +369 -0
  402. package/dist/esm/parser/filterlist-parser.mjs +102 -0
  403. package/dist/esm/parser/index.mjs +11 -0
  404. package/dist/esm/parser/misc/app-list-parser.mjs +45 -0
  405. package/dist/esm/parser/misc/domain-list-parser.mjs +52 -0
  406. package/dist/esm/parser/misc/list-items-parser.mjs +113 -0
  407. package/dist/esm/parser/misc/logical-expression-parser.mjs +281 -0
  408. package/dist/esm/parser/misc/method-list-parser.mjs +46 -0
  409. package/dist/esm/parser/misc/modifier-list.mjs +70 -0
  410. package/dist/esm/parser/misc/modifier-parser.mjs +89 -0
  411. package/dist/esm/parser/misc/parameter-list-parser.mjs +72 -0
  412. package/dist/esm/parser/misc/stealth-option-list-parser.mjs +46 -0
  413. package/dist/esm/parser/misc/ubo-parameter-list-parser.mjs +146 -0
  414. package/dist/esm/parser/misc/value-parser.mjs +37 -0
  415. package/dist/esm/parser/network/host-rule-parser.mjs +130 -0
  416. package/dist/esm/parser/network/network-rule-parser.mjs +111 -0
  417. package/dist/esm/parser/options.mjs +23 -0
  418. package/dist/esm/parser/rule-parser.mjs +192 -0
  419. package/dist/esm/serializer/base-serializer.mjs +29 -0
  420. package/dist/esm/serializer/comment/agent-comment-serializer.mjs +71 -0
  421. package/dist/esm/serializer/comment/agent-serializer.mjs +68 -0
  422. package/dist/esm/serializer/comment/comment-rule-serializer.mjs +105 -0
  423. package/dist/esm/serializer/comment/config-comment-serializer.mjs +82 -0
  424. package/dist/esm/serializer/comment/hint-comment-serializer.mjs +62 -0
  425. package/dist/esm/serializer/comment/hint-serializer.mjs +54 -0
  426. package/dist/esm/serializer/comment/metadata-comment-serializer.mjs +73 -0
  427. package/dist/esm/serializer/comment/pre-processor-comment-serializer.mjs +71 -0
  428. package/dist/esm/serializer/comment/simple-comment-serializer.mjs +52 -0
  429. package/dist/esm/serializer/cosmetic/body/abp-snippet-injection-body-serializer.mjs +36 -0
  430. package/dist/esm/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.mjs +36 -0
  431. package/dist/esm/serializer/cosmetic/body/scriptlet-body-serializer.mjs +47 -0
  432. package/dist/esm/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.mjs +36 -0
  433. package/dist/esm/serializer/cosmetic/cosmetic-rule-serializer.mjs +129 -0
  434. package/dist/esm/serializer/cosmetic/css-injection-body-serializer.mjs +48 -0
  435. package/dist/esm/serializer/cosmetic/element-hiding-body-serializer.mjs +37 -0
  436. package/dist/esm/serializer/empty-rule-serializer.mjs +34 -0
  437. package/dist/esm/serializer/filterlist-serializer.mjs +46 -0
  438. package/dist/esm/serializer/index.mjs +7 -0
  439. package/dist/esm/serializer/invalid-rule-error-node-serializer.mjs +38 -0
  440. package/dist/esm/serializer/invalid-rule-serializer.mjs +37 -0
  441. package/dist/esm/serializer/misc/domain-list-serializer.mjs +64 -0
  442. package/dist/esm/serializer/misc/list-item-serializer.mjs +55 -0
  443. package/dist/esm/serializer/misc/list-items-serializer.mjs +26 -0
  444. package/dist/esm/serializer/misc/logical-expression-serializer.mjs +136 -0
  445. package/dist/esm/serializer/misc/modifier-list-serializer.mjs +55 -0
  446. package/dist/esm/serializer/misc/modifier-serializer.mjs +49 -0
  447. package/dist/esm/serializer/misc/parameter-list-serializer.mjs +49 -0
  448. package/dist/esm/serializer/misc/value-serializer.mjs +50 -0
  449. package/dist/esm/serializer/network/host-rule-serializer.mjs +70 -0
  450. package/dist/esm/serializer/network/hostname-list-serializer.mjs +47 -0
  451. package/dist/esm/serializer/network/network-rule-serializer.mjs +54 -0
  452. package/dist/esm/serializer/rule-serializer.mjs +61 -0
  453. package/dist/esm/utils/adblockers.mjs +57 -0
  454. package/dist/esm/utils/binary-schema-version.mjs +17 -0
  455. package/dist/esm/utils/byte-buffer.mjs +91 -0
  456. package/dist/esm/utils/categorizer.mjs +44 -0
  457. package/dist/esm/utils/clone.mjs +28 -0
  458. package/dist/esm/utils/constants.mjs +249 -0
  459. package/dist/esm/utils/cosmetic-rule-separator.mjs +127 -0
  460. package/dist/esm/utils/deep-freeze.mjs +32 -0
  461. package/dist/esm/utils/domain.mjs +56 -0
  462. package/dist/esm/utils/error.mjs +49 -0
  463. package/dist/esm/utils/index.mjs +21 -0
  464. package/dist/esm/utils/input-byte-buffer.mjs +257 -0
  465. package/dist/esm/utils/is-chromium.mjs +20 -0
  466. package/dist/esm/utils/logical-expression.mjs +92 -0
  467. package/dist/esm/utils/multi-value-map.mjs +33 -0
  468. package/dist/esm/utils/output-byte-buffer.mjs +223 -0
  469. package/dist/esm/utils/position-provider.mjs +73 -0
  470. package/dist/esm/utils/quotes.mjs +215 -0
  471. package/dist/esm/utils/regexp.mjs +176 -0
  472. package/dist/esm/utils/string.mjs +556 -0
  473. package/dist/esm/utils/text-decoder-polyfill.mjs +107 -0
  474. package/dist/esm/utils/text-encoder-polyfill.mjs +78 -0
  475. package/dist/esm/utils/type-guards.mjs +47 -0
  476. package/dist/esm/validator/constants.mjs +210 -0
  477. package/dist/esm/validator/helpers.mjs +45 -0
  478. package/dist/esm/validator/index.mjs +174 -0
  479. package/dist/esm/validator/value.mjs +563 -0
  480. package/dist/esm/version.mjs +18 -0
  481. package/dist/types/ast-utils/clone.d.ts +26 -0
  482. package/dist/types/ast-utils/filter-list.d.ts +11 -0
  483. package/dist/types/ast-utils/modifiers.d.ts +20 -0
  484. package/dist/types/ast-utils/network-rules.d.ts +15 -0
  485. package/dist/types/ast-utils/scriptlets.d.ts +52 -0
  486. package/dist/types/common/abp-snippet-injection-body-common.d.ts +8 -0
  487. package/dist/types/common/agent-common.d.ts +10 -0
  488. package/dist/types/common/ubo-selector-common.d.ts +9 -0
  489. package/dist/types/compatibility-tables/base.d.ts +157 -0
  490. package/dist/types/compatibility-tables/compatibility-table-data.d.ts +67 -0
  491. package/dist/types/compatibility-tables/index.d.ts +13 -0
  492. package/dist/types/compatibility-tables/modifiers.d.ts +22 -0
  493. package/dist/types/compatibility-tables/platforms.d.ts +47 -0
  494. package/dist/types/compatibility-tables/redirects.d.ts +33 -0
  495. package/dist/types/compatibility-tables/schemas/base.d.ts +135 -0
  496. package/dist/types/compatibility-tables/schemas/index.d.ts +8 -0
  497. package/dist/types/compatibility-tables/schemas/modifier.d.ts +31 -0
  498. package/dist/types/compatibility-tables/schemas/platform.d.ts +16 -0
  499. package/dist/types/compatibility-tables/schemas/redirect.d.ts +25 -0
  500. package/dist/types/compatibility-tables/schemas/resource-type.d.ts +27 -0
  501. package/dist/types/compatibility-tables/schemas/scriptlet.d.ts +31 -0
  502. package/dist/types/compatibility-tables/scriptlets.d.ts +15 -0
  503. package/dist/types/compatibility-tables/types.d.ts +34 -0
  504. package/dist/types/compatibility-tables/utils/platform-helpers.d.ts +44 -0
  505. package/dist/types/compatibility-tables/utils/resource-type-helpers.d.ts +20 -0
  506. package/dist/types/compatibility-tables/utils/zod-camelcase.d.ts +15 -0
  507. package/dist/types/converter/base-interfaces/base-converter.d.ts +42 -0
  508. package/dist/types/converter/base-interfaces/conversion-result.d.ts +43 -0
  509. package/dist/types/converter/base-interfaces/rule-converter-base.d.ts +44 -0
  510. package/dist/types/converter/comment/index.d.ts +23 -0
  511. package/dist/types/converter/cosmetic/css.d.ts +23 -0
  512. package/dist/types/converter/cosmetic/element-hiding.d.ts +23 -0
  513. package/dist/types/converter/cosmetic/header-removal.d.ts +37 -0
  514. package/dist/types/converter/cosmetic/html.d.ts +54 -0
  515. package/dist/types/converter/cosmetic/index.d.ts +33 -0
  516. package/dist/types/converter/cosmetic/rule-modifiers/adg.d.ts +21 -0
  517. package/dist/types/converter/cosmetic/scriptlet.d.ts +33 -0
  518. package/dist/types/converter/css/index.d.ts +23 -0
  519. package/dist/types/converter/data/css.d.ts +48 -0
  520. package/dist/types/converter/filter-list.d.ts +31 -0
  521. package/dist/types/converter/index.d.ts +5 -0
  522. package/dist/types/converter/misc/network-rule-modifier.d.ts +35 -0
  523. package/dist/types/converter/network/index.d.ts +33 -0
  524. package/dist/types/converter/raw-filter-list.d.ts +31 -0
  525. package/dist/types/converter/raw-rule.d.ts +28 -0
  526. package/dist/types/converter/rule.d.ts +37 -0
  527. package/dist/types/deserializer/base-deserializer.d.ts +15 -0
  528. package/dist/types/deserializer/comment/agent-comment-deserializer.d.ts +34 -0
  529. package/dist/types/deserializer/comment/agent-deserializer.d.ts +25 -0
  530. package/dist/types/deserializer/comment/comment-rule-deserializer.d.ts +69 -0
  531. package/dist/types/deserializer/comment/config-comment-deserializer.d.ts +27 -0
  532. package/dist/types/deserializer/comment/hint-comment-deserializer.d.ts +24 -0
  533. package/dist/types/deserializer/comment/hint-deserializer.d.ts +26 -0
  534. package/dist/types/deserializer/comment/metadata-comment-deserializer.d.ts +26 -0
  535. package/dist/types/deserializer/comment/pre-processor-comment-deserializer.d.ts +29 -0
  536. package/dist/types/deserializer/comment/simple-comment-deserializer.d.ts +26 -0
  537. package/dist/types/deserializer/cosmetic/cosmetic-rule-deserializer.d.ts +12 -0
  538. package/dist/types/deserializer/cosmetic/css-injection-body-deserializer.d.ts +12 -0
  539. package/dist/types/deserializer/cosmetic/element-hiding-body-deserializer.d.ts +12 -0
  540. package/dist/types/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.d.ts +13 -0
  541. package/dist/types/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.d.ts +13 -0
  542. package/dist/types/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.d.ts +15 -0
  543. package/dist/types/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.d.ts +14 -0
  544. package/dist/types/deserializer/empty-rule-deserializer.d.ts +12 -0
  545. package/dist/types/deserializer/filterlist-deserializer.d.ts +30 -0
  546. package/dist/types/deserializer/index.d.ts +2 -0
  547. package/dist/types/deserializer/invalid-rule-deserializer.d.ts +12 -0
  548. package/dist/types/deserializer/invalid-rule-error-node-deserializer.d.ts +12 -0
  549. package/dist/types/deserializer/misc/domain-list-deserializer.d.ts +15 -0
  550. package/dist/types/deserializer/misc/list-item-deserializer.d.ts +13 -0
  551. package/dist/types/deserializer/misc/list-items-deserializer.d.ts +12 -0
  552. package/dist/types/deserializer/misc/logical-expression-deserializer.d.ts +55 -0
  553. package/dist/types/deserializer/misc/modifier-deserializer.d.ts +18 -0
  554. package/dist/types/deserializer/misc/modifier-list-deserializer.d.ts +20 -0
  555. package/dist/types/deserializer/misc/parameter-list-deserializer.d.ts +14 -0
  556. package/dist/types/deserializer/misc/value-deserializer.d.ts +17 -0
  557. package/dist/types/deserializer/network/host-rule-deserializer.d.ts +30 -0
  558. package/dist/types/deserializer/network/hostname-list-deserializer.d.ts +12 -0
  559. package/dist/types/deserializer/network/network-rule-deserializer.d.ts +18 -0
  560. package/dist/types/deserializer/rule-deserializer.d.ts +17 -0
  561. package/dist/types/deserializer/syntax-deserialization-map.d.ts +2 -0
  562. package/dist/types/errors/adblock-syntax-error.d.ts +25 -0
  563. package/dist/types/errors/binary-schema-mismatch-error.d.ts +23 -0
  564. package/dist/types/errors/not-implemented-error.d.ts +14 -0
  565. package/dist/types/errors/rule-conversion-error.d.ts +14 -0
  566. package/dist/types/generator/base-generator.d.ts +12 -0
  567. package/dist/types/generator/comment/agent-comment-generator.d.ts +11 -0
  568. package/dist/types/generator/comment/agent-generator.d.ts +11 -0
  569. package/dist/types/generator/comment/comment-rule-generator.d.ts +67 -0
  570. package/dist/types/generator/comment/config-comment-generator.d.ts +11 -0
  571. package/dist/types/generator/comment/hint-comment-generator.d.ts +11 -0
  572. package/dist/types/generator/comment/hint-generator.d.ts +11 -0
  573. package/dist/types/generator/comment/index.d.ts +2 -0
  574. package/dist/types/generator/comment/metadata-comment-generator.d.ts +11 -0
  575. package/dist/types/generator/comment/pre-processor-comment-generator.d.ts +11 -0
  576. package/dist/types/generator/comment/simple-comment-generator.d.ts +11 -0
  577. package/dist/types/generator/cosmetic/body/abp-snippet-injection-body-generator.d.ts +11 -0
  578. package/dist/types/generator/cosmetic/body/adg-scriptlet-injection-body-generator.d.ts +17 -0
  579. package/dist/types/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.d.ts +17 -0
  580. package/dist/types/generator/cosmetic/cosmetic-rule-body-generator.d.ts +15 -0
  581. package/dist/types/generator/cosmetic/cosmetic-rule-generator.d.ts +36 -0
  582. package/dist/types/generator/cosmetic/cosmetic-rule-pattern-generator.d.ts +15 -0
  583. package/dist/types/generator/cosmetic/index.d.ts +1 -0
  584. package/dist/types/generator/css/adg-css-injection-generator.d.ts +12 -0
  585. package/dist/types/generator/css/ubo-selector-generator.d.ts +11 -0
  586. package/dist/types/generator/filterlist-generator.d.ts +17 -0
  587. package/dist/types/generator/index.d.ts +3 -0
  588. package/dist/types/generator/misc/domain-list-generator.d.ts +12 -0
  589. package/dist/types/generator/misc/list-items-generator.d.ts +22 -0
  590. package/dist/types/generator/misc/logical-expression-generator.d.ts +11 -0
  591. package/dist/types/generator/misc/modifier-generator.d.ts +11 -0
  592. package/dist/types/generator/misc/modifier-list-generator.d.ts +11 -0
  593. package/dist/types/generator/misc/parameter-list-generator.d.ts +12 -0
  594. package/dist/types/generator/misc/value-generator.d.ts +11 -0
  595. package/dist/types/generator/network/host-rule-generator.d.ts +11 -0
  596. package/dist/types/generator/network/index.d.ts +2 -0
  597. package/dist/types/generator/network/network-rule-generator.d.ts +11 -0
  598. package/dist/types/generator/rule-generator.d.ts +21 -0
  599. package/dist/types/index.d.ts +55 -0
  600. package/dist/types/marshalling-utils/comment/agent-comment-common.d.ts +13 -0
  601. package/dist/types/marshalling-utils/comment/agent-common.d.ts +19 -0
  602. package/dist/types/marshalling-utils/comment/config-comment-common.d.ts +40 -0
  603. package/dist/types/marshalling-utils/comment/hint-comment-common.d.ts +14 -0
  604. package/dist/types/marshalling-utils/comment/hint-common.d.ts +32 -0
  605. package/dist/types/marshalling-utils/comment/metadata-comment-common.d.ts +20 -0
  606. package/dist/types/marshalling-utils/comment/pre-processor-comment-common.d.ts +36 -0
  607. package/dist/types/marshalling-utils/comment/simple-comment-common.d.ts +14 -0
  608. package/dist/types/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.d.ts +22 -0
  609. package/dist/types/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.d.ts +9 -0
  610. package/dist/types/marshalling-utils/cosmetic/body/css-injection-body-common.d.ts +16 -0
  611. package/dist/types/marshalling-utils/cosmetic/body/element-hiding-body-common.d.ts +13 -0
  612. package/dist/types/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.d.ts +9 -0
  613. package/dist/types/marshalling-utils/cosmetic/cosmetic-rule-common.d.ts +27 -0
  614. package/dist/types/marshalling-utils/empty-rule-common.d.ts +12 -0
  615. package/dist/types/marshalling-utils/filter-list-common.d.ts +13 -0
  616. package/dist/types/marshalling-utils/invalid-rule-common.d.ts +13 -0
  617. package/dist/types/marshalling-utils/invalid-rule-error-node-common.d.ts +14 -0
  618. package/dist/types/marshalling-utils/misc/binary-type-common.d.ts +56 -0
  619. package/dist/types/marshalling-utils/misc/domain-list-common.d.ts +23 -0
  620. package/dist/types/marshalling-utils/misc/host-rule-common.d.ts +17 -0
  621. package/dist/types/marshalling-utils/misc/hostname-list-common.d.ts +13 -0
  622. package/dist/types/marshalling-utils/misc/list-item-common.d.ts +14 -0
  623. package/dist/types/marshalling-utils/misc/logical-expression-common.d.ts +44 -0
  624. package/dist/types/marshalling-utils/misc/modifier-common.d.ts +40 -0
  625. package/dist/types/marshalling-utils/misc/modifier-list-common.d.ts +13 -0
  626. package/dist/types/marshalling-utils/misc/parameter-list-common.d.ts +13 -0
  627. package/dist/types/marshalling-utils/misc/value-common.d.ts +14 -0
  628. package/dist/types/marshalling-utils/network/network-rule-common.d.ts +17 -0
  629. package/dist/types/marshalling-utils/syntax-serialization-map.d.ts +2 -0
  630. package/dist/types/nodes/index.d.ts +1177 -0
  631. package/dist/types/parser/base-parser.d.ts +16 -0
  632. package/dist/types/parser/comment/agent-comment-parser.d.ts +42 -0
  633. package/dist/types/parser/comment/agent-parser.d.ts +33 -0
  634. package/dist/types/parser/comment/comment-parser.d.ts +76 -0
  635. package/dist/types/parser/comment/config-comment-parser.d.ts +31 -0
  636. package/dist/types/parser/comment/hint-comment-parser.d.ts +33 -0
  637. package/dist/types/parser/comment/hint-parser.d.ts +30 -0
  638. package/dist/types/parser/comment/metadata-comment-parser.d.ts +29 -0
  639. package/dist/types/parser/comment/preprocessor-parser.d.ts +43 -0
  640. package/dist/types/parser/comment/simple-comment-parser.d.ts +33 -0
  641. package/dist/types/parser/cosmetic/body/abp-snippet-injection-body-parser.d.ts +34 -0
  642. package/dist/types/parser/cosmetic/body/adg-scriptlet-injection-body-parser.d.ts +47 -0
  643. package/dist/types/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.d.ts +44 -0
  644. package/dist/types/parser/cosmetic/cosmetic-rule-parser.d.ts +51 -0
  645. package/dist/types/parser/css/adg-css-injection-parser.d.ts +28 -0
  646. package/dist/types/parser/css/balancing.d.ts +36 -0
  647. package/dist/types/parser/css/constants.d.ts +10 -0
  648. package/dist/types/parser/css/css-token-stream.d.ts +210 -0
  649. package/dist/types/parser/css/ubo-selector-parser.d.ts +46 -0
  650. package/dist/types/parser/filterlist-parser.d.ts +29 -0
  651. package/dist/types/parser/index.d.ts +5 -0
  652. package/dist/types/parser/misc/app-list-parser.d.ts +22 -0
  653. package/dist/types/parser/misc/domain-list-parser.d.ts +26 -0
  654. package/dist/types/parser/misc/list-items-parser.d.ts +34 -0
  655. package/dist/types/parser/misc/logical-expression-parser.d.ts +41 -0
  656. package/dist/types/parser/misc/method-list-parser.d.ts +22 -0
  657. package/dist/types/parser/misc/modifier-list.d.ts +24 -0
  658. package/dist/types/parser/misc/modifier-parser.d.ts +21 -0
  659. package/dist/types/parser/misc/parameter-list-parser.d.ts +14 -0
  660. package/dist/types/parser/misc/stealth-option-list-parser.d.ts +22 -0
  661. package/dist/types/parser/misc/ubo-parameter-list-parser.d.ts +18 -0
  662. package/dist/types/parser/misc/value-parser.d.ts +18 -0
  663. package/dist/types/parser/network/host-rule-parser.d.ts +35 -0
  664. package/dist/types/parser/network/network-rule-parser.d.ts +31 -0
  665. package/dist/types/parser/options.d.ts +41 -0
  666. package/dist/types/parser/rule-parser.d.ts +78 -0
  667. package/dist/types/serializer/base-serializer.d.ts +15 -0
  668. package/dist/types/serializer/comment/agent-comment-serializer.d.ts +34 -0
  669. package/dist/types/serializer/comment/agent-serializer.d.ts +24 -0
  670. package/dist/types/serializer/comment/comment-rule-serializer.d.ts +68 -0
  671. package/dist/types/serializer/comment/config-comment-serializer.d.ts +25 -0
  672. package/dist/types/serializer/comment/hint-comment-serializer.d.ts +23 -0
  673. package/dist/types/serializer/comment/hint-serializer.d.ts +24 -0
  674. package/dist/types/serializer/comment/metadata-comment-serializer.d.ts +25 -0
  675. package/dist/types/serializer/comment/pre-processor-comment-serializer.d.ts +28 -0
  676. package/dist/types/serializer/comment/simple-comment-serializer.d.ts +24 -0
  677. package/dist/types/serializer/cosmetic/body/abp-snippet-injection-body-serializer.d.ts +25 -0
  678. package/dist/types/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.d.ts +25 -0
  679. package/dist/types/serializer/cosmetic/body/scriptlet-body-serializer.d.ts +14 -0
  680. package/dist/types/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.d.ts +25 -0
  681. package/dist/types/serializer/cosmetic/cosmetic-rule-serializer.d.ts +26 -0
  682. package/dist/types/serializer/cosmetic/css-injection-body-serializer.d.ts +12 -0
  683. package/dist/types/serializer/cosmetic/element-hiding-body-serializer.d.ts +12 -0
  684. package/dist/types/serializer/empty-rule-serializer.d.ts +12 -0
  685. package/dist/types/serializer/filterlist-serializer.d.ts +16 -0
  686. package/dist/types/serializer/index.d.ts +1 -0
  687. package/dist/types/serializer/invalid-rule-error-node-serializer.d.ts +12 -0
  688. package/dist/types/serializer/invalid-rule-serializer.d.ts +12 -0
  689. package/dist/types/serializer/misc/domain-list-serializer.d.ts +21 -0
  690. package/dist/types/serializer/misc/list-item-serializer.d.ts +13 -0
  691. package/dist/types/serializer/misc/list-items-serializer.d.ts +12 -0
  692. package/dist/types/serializer/misc/logical-expression-serializer.d.ts +51 -0
  693. package/dist/types/serializer/misc/modifier-list-serializer.d.ts +20 -0
  694. package/dist/types/serializer/misc/modifier-serializer.d.ts +18 -0
  695. package/dist/types/serializer/misc/parameter-list-serializer.d.ts +14 -0
  696. package/dist/types/serializer/misc/value-serializer.d.ts +17 -0
  697. package/dist/types/serializer/network/host-rule-serializer.d.ts +30 -0
  698. package/dist/types/serializer/network/hostname-list-serializer.d.ts +12 -0
  699. package/dist/types/serializer/network/network-rule-serializer.d.ts +18 -0
  700. package/dist/types/serializer/rule-serializer.d.ts +17 -0
  701. package/dist/types/utils/adblockers.d.ts +48 -0
  702. package/dist/types/utils/binary-schema-version.d.ts +9 -0
  703. package/dist/types/utils/byte-buffer.d.ts +54 -0
  704. package/dist/types/utils/categorizer.d.ts +14 -0
  705. package/dist/types/utils/clone.d.ts +15 -0
  706. package/dist/types/utils/constants.d.ts +188 -0
  707. package/dist/types/utils/cosmetic-rule-separator.d.ts +45 -0
  708. package/dist/types/utils/deep-freeze.d.ts +13 -0
  709. package/dist/types/utils/domain.d.ts +26 -0
  710. package/dist/types/utils/error.d.ts +8 -0
  711. package/dist/types/utils/index.d.ts +15 -0
  712. package/dist/types/utils/input-byte-buffer.d.ts +140 -0
  713. package/dist/types/utils/is-chromium.d.ts +7 -0
  714. package/dist/types/utils/logical-expression.d.ts +45 -0
  715. package/dist/types/utils/multi-value-map.d.ts +16 -0
  716. package/dist/types/utils/output-byte-buffer.d.ts +126 -0
  717. package/dist/types/utils/position-provider.d.ts +46 -0
  718. package/dist/types/utils/quotes.d.ts +93 -0
  719. package/dist/types/utils/regexp.d.ts +54 -0
  720. package/dist/types/utils/storage-interface.d.ts +23 -0
  721. package/dist/types/utils/string.d.ts +277 -0
  722. package/dist/types/utils/text-decoder-polyfill.d.ts +14 -0
  723. package/dist/types/utils/text-encoder-polyfill.d.ts +18 -0
  724. package/dist/types/utils/type-guards.d.ts +47 -0
  725. package/dist/types/validator/constants.d.ts +89 -0
  726. package/dist/types/validator/helpers.d.ts +37 -0
  727. package/dist/types/validator/index.d.ts +38 -0
  728. package/dist/types/validator/value.d.ts +11 -0
  729. package/dist/types/version.d.ts +5 -0
  730. package/package.json +91 -37
  731. package/dist/agtree.d.ts +0 -4152
  732. package/dist/agtree.js +0 -15710
  733. package/dist/agtree.mjs +0 -15611
  734. package/dist/compatibility-table-data.js +0 -12634
@@ -0,0 +1,126 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ 'use strict';
8
+
9
+ var cssTokenizer = require('@adguard/css-tokenizer');
10
+ var sprintfJs = require('sprintf-js');
11
+ var ruleConversionError = require('../../errors/rule-conversion-error.js');
12
+ var index = require('../../nodes/index.js');
13
+ var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
14
+ var modifiers = require('../../ast-utils/modifiers.js');
15
+ var constants = require('../../utils/constants.js');
16
+ var regexp = require('../../utils/regexp.js');
17
+ var networkRules = require('../../ast-utils/network-rules.js');
18
+ var adblockers = require('../../utils/adblockers.js');
19
+ var conversionResult = require('../base-interfaces/conversion-result.js');
20
+ var cssTokenStream = require('../../parser/css/css-token-stream.js');
21
+
22
+ /**
23
+ * @file Converter for request header removal rules
24
+ */
25
+ const UBO_RESPONSEHEADER_FN = 'responseheader';
26
+ const ADG_REMOVEHEADER_MODIFIER = 'removeheader';
27
+ const ERROR_MESSAGES = {
28
+ EMPTY_PARAMETER: `Empty parameter for '${UBO_RESPONSEHEADER_FN}' function`,
29
+ EXPECTED_END_OF_RULE: "Expected end of rule, but got '%s'",
30
+ MULTIPLE_DOMAINS_NOT_SUPPORTED: 'Multiple domains are not supported yet',
31
+ };
32
+ /**
33
+ * Converter for request header removal rules
34
+ *
35
+ * @todo Implement `convertToUbo` (ABP currently doesn't support header removal rules)
36
+ */
37
+ class HeaderRemovalRuleConverter extends ruleConverterBase.RuleConverterBase {
38
+ /**
39
+ * Converts a header removal rule to AdGuard syntax, if possible.
40
+ *
41
+ * @param rule Rule node to convert
42
+ * @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
43
+ * the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
44
+ * If the rule was not converted, the result array will contain the original node with the same object reference
45
+ * @throws If the rule is invalid or cannot be converted
46
+ * @example
47
+ * If the input rule is:
48
+ * ```adblock
49
+ * example.com##^responseheader(header-name)
50
+ * ```
51
+ * The output will be:
52
+ * ```adblock
53
+ * ||example.com^$removeheader=header-name
54
+ * ```
55
+ */
56
+ static convertToAdg(rule) {
57
+ // TODO: Add support for ABP syntax once it starts supporting header removal rules
58
+ // Leave the rule as is if it's not a header removal rule
59
+ if (rule.category !== index.RuleCategory.Cosmetic || rule.type !== index.CosmeticRuleType.HtmlFilteringRule) {
60
+ return conversionResult.createNodeConversionResult([rule], false);
61
+ }
62
+ const stream = new cssTokenStream.CssTokenStream(rule.body.value);
63
+ let token;
64
+ // Skip leading whitespace
65
+ stream.skipWhitespace();
66
+ // Next token should be the `^` followed by a `responseheader` function
67
+ token = stream.get();
68
+ if (!token || token.type !== cssTokenizer.TokenType.Delim || rule.body.value[token.start] !== constants.UBO_HTML_MASK) {
69
+ return conversionResult.createNodeConversionResult([rule], false);
70
+ }
71
+ stream.advance();
72
+ token = stream.get();
73
+ if (!token) {
74
+ return conversionResult.createNodeConversionResult([rule], false);
75
+ }
76
+ const functionName = rule.body.value.slice(token.start, token.end - 1);
77
+ if (functionName !== UBO_RESPONSEHEADER_FN) {
78
+ return conversionResult.createNodeConversionResult([rule], false);
79
+ }
80
+ // Parse the parameter
81
+ const paramStart = token.end;
82
+ stream.skipUntilBalanced();
83
+ const paramEnd = stream.getOrFail().end;
84
+ const param = rule.body.value.slice(paramStart, paramEnd - 1).trim();
85
+ // Do not allow empty parameter
86
+ if (param.length === 0) {
87
+ throw new ruleConversionError.RuleConversionError(ERROR_MESSAGES.EMPTY_PARAMETER);
88
+ }
89
+ stream.expect(cssTokenizer.TokenType.CloseParenthesis);
90
+ stream.advance();
91
+ // Skip trailing whitespace after the function call
92
+ stream.skipWhitespace();
93
+ // Expect the end of the rule - so nothing should be left in the stream
94
+ if (!stream.isEof()) {
95
+ token = stream.getOrFail();
96
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.EXPECTED_END_OF_RULE, cssTokenizer.getFormattedTokenName(token.type)));
97
+ }
98
+ // Prepare network rule pattern
99
+ const pattern = [];
100
+ if (rule.domains.children.length === 1) {
101
+ // If the rule has only one domain, we can use a simple network rule pattern:
102
+ // ||single-domain-from-the-rule^
103
+ pattern.push(regexp.ADBLOCK_URL_START, rule.domains.children[0].value, regexp.ADBLOCK_URL_SEPARATOR);
104
+ }
105
+ else if (rule.domains.children.length > 1) {
106
+ // TODO: Add support for multiple domains, for example:
107
+ // example.com,example.org,example.net##^responseheader(header-name)
108
+ // We should consider allowing $domain with $removeheader modifier,
109
+ // for example:
110
+ // $removeheader=header-name,domain=example.com|example.org|example.net
111
+ throw new ruleConversionError.RuleConversionError(ERROR_MESSAGES.MULTIPLE_DOMAINS_NOT_SUPPORTED);
112
+ }
113
+ // Prepare network rule modifiers
114
+ const modifiers$1 = modifiers.createModifierListNode();
115
+ modifiers$1.children.push(modifiers.createModifierNode(ADG_REMOVEHEADER_MODIFIER, param));
116
+ // Construct the network rule
117
+ return conversionResult.createNodeConversionResult([
118
+ networkRules.createNetworkRuleNode(pattern.join(constants.EMPTY), modifiers$1,
119
+ // Copy the exception flag
120
+ rule.exception, adblockers.AdblockSyntax.Adg),
121
+ ], true);
122
+ }
123
+ }
124
+
125
+ exports.ERROR_MESSAGES = ERROR_MESSAGES;
126
+ exports.HeaderRemovalRuleConverter = HeaderRemovalRuleConverter;
@@ -0,0 +1,384 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ 'use strict';
8
+
9
+ var cssTokenizer = require('@adguard/css-tokenizer');
10
+ var sprintfJs = require('sprintf-js');
11
+ var index = require('../../nodes/index.js');
12
+ var adblockers = require('../../utils/adblockers.js');
13
+ var ruleConversionError = require('../../errors/rule-conversion-error.js');
14
+ var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
15
+ var regexp = require('../../utils/regexp.js');
16
+ var conversionResult = require('../base-interfaces/conversion-result.js');
17
+ var clone = require('../../ast-utils/clone.js');
18
+ var cssTokenStream = require('../../parser/css/css-token-stream.js');
19
+ var constants = require('../../utils/constants.js');
20
+ var string = require('../../utils/string.js');
21
+
22
+ /**
23
+ * @file HTML filtering rule converter
24
+ */
25
+ /**
26
+ * From the AdGuard docs:
27
+ * Specifies the maximum length for content of HTML element. If this parameter is
28
+ * set and the content length exceeds the value, a rule does not apply to the element.
29
+ * If this parameter is not specified, the max-length is considered to be 8192 (8 KB).
30
+ * When converting from other formats, we set the max-length to 262144 (256 KB).
31
+ *
32
+ * @see {@link https://adguard.com/kb/general/ad-filtering/create-own-filters/#html-filtering-rules}
33
+ */
34
+ const ADG_HTML_DEFAULT_MAX_LENGTH = 8192;
35
+ const ADG_HTML_CONVERSION_MAX_LENGTH = ADG_HTML_DEFAULT_MAX_LENGTH * 32;
36
+ const NOT_SPECIFIED = -1;
37
+ var PseudoClasses;
38
+ (function (PseudoClasses) {
39
+ PseudoClasses["Contains"] = "contains";
40
+ PseudoClasses["HasText"] = "has-text";
41
+ PseudoClasses["MinTextLength"] = "min-text-length";
42
+ })(PseudoClasses || (PseudoClasses = {}));
43
+ var AttributeSelectors;
44
+ (function (AttributeSelectors) {
45
+ AttributeSelectors["MaxLength"] = "max-length";
46
+ AttributeSelectors["MinLength"] = "min-length";
47
+ AttributeSelectors["TagContent"] = "tag-content";
48
+ AttributeSelectors["Wildcard"] = "wildcard";
49
+ })(AttributeSelectors || (AttributeSelectors = {}));
50
+ const SUPPORTED_UBO_PSEUDO_CLASSES = new Set([
51
+ PseudoClasses.Contains,
52
+ PseudoClasses.HasText,
53
+ PseudoClasses.MinTextLength,
54
+ ]);
55
+ const ERROR_MESSAGES = {
56
+ ABP_NOT_SUPPORTED: 'Invalid rule, ABP does not support HTML filtering rules',
57
+ TAG_SHOULD_BE_FIRST_CHILD: "Unexpected token '%s' with value '%s', tag selector should be the first child",
58
+ EXPECTED_BUT_GOT_WITH_VALUE: "Expected '%s', but got '%s' with value '%s'",
59
+ INVALID_ATTRIBUTE_NAME: "Attribute name should be an identifier, but got '%s' with value '%s'",
60
+ // eslint-disable-next-line max-len
61
+ INVALID_ATTRIBUTE_VALUE: `Expected '${cssTokenizer.getFormattedTokenName(cssTokenizer.TokenType.Ident)}' or '${cssTokenizer.getFormattedTokenName(cssTokenizer.TokenType.String)}' as attribute value, but got '%s' with value '%s`,
62
+ INVALID_FLAG: "Unsupported attribute selector flag '%s'",
63
+ INVALID_OPERATOR_FOR_ATTR: "Unsupported operator '%s' for '%s' attribute",
64
+ VALUE_FOR_ATTR_SHOULD_BE_INT: "Value for '%s' attribute should be an integer, but got '%s'",
65
+ INVALID_PSEUDO_CLASS: "Unsupported pseudo class '%s'",
66
+ VALUE_FOR_PSEUDO_CLASS_SHOULD_BE_INT: "Value for '%s' pseudo class should be an integer, but got '%s'",
67
+ // eslint-disable-next-line max-len
68
+ REGEXP_NOT_SUPPORTED: "Cannot convert RegExp parameter '%s' from '%s' pseudo class, because converting RegExp patterns are not supported yet",
69
+ ATTRIBUTE_SELECTOR_REQUIRES_VALUE: "Attribute selector '%s' requires a value",
70
+ INVALID_ATTRIBUTE_SELECTOR_OPERATOR: "Unsupported attribute selector operator '%s'",
71
+ VALUE_SHOULD_BE_SPECIFIED: 'Value should be specified if operator is specified',
72
+ OPERATOR_SHOULD_BE_SPECIFIED: 'Operator should be specified if value is specified',
73
+ UNEXPECTED_TOKEN_WITH_VALUE: "Unexpected token '%s' with value '%s'",
74
+ FLAGS_NOT_SUPPORTED: 'Flags are not supported for attribute selectors',
75
+ };
76
+ /**
77
+ * Convert `""` to `\"` within strings, because it does not compatible with the standard CSS syntax.
78
+ *
79
+ * @param selector CSS selector string
80
+ * @returns Escaped CSS selector
81
+ * @note In the legacy syntax, `""` is used to escape double quotes, but it cannot be used in the standard CSS syntax,
82
+ * so we use conversion functions to handle this.
83
+ * @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#tag-content}
84
+ */
85
+ function escapeDoubleQuotes(selector) {
86
+ let withinString = false;
87
+ const buffer = [];
88
+ for (let i = 0; i < selector.length; i += 1) {
89
+ if (!withinString && selector[i] === string.DOUBLE_QUOTE_MARKER) {
90
+ withinString = true;
91
+ buffer.push(selector[i]);
92
+ }
93
+ else if (withinString && selector[i] === string.DOUBLE_QUOTE_MARKER && selector[i + 1] === string.DOUBLE_QUOTE_MARKER) {
94
+ buffer.push(constants.ESCAPE_CHARACTER);
95
+ buffer.push(string.DOUBLE_QUOTE_MARKER);
96
+ i += 1;
97
+ }
98
+ else if (withinString && selector[i] === string.DOUBLE_QUOTE_MARKER && selector[i + 1] !== string.DOUBLE_QUOTE_MARKER) {
99
+ buffer.push(string.DOUBLE_QUOTE_MARKER);
100
+ withinString = false;
101
+ }
102
+ else {
103
+ buffer.push(selector[i]);
104
+ }
105
+ }
106
+ return buffer.join(constants.EMPTY);
107
+ }
108
+ /**
109
+ * Convert escaped double quotes `\"` to `""` within strings.
110
+ *
111
+ * @param selector CSS selector string
112
+ * @returns Unescaped CSS selector
113
+ * @note In the legacy syntax, `""` is used to escape double quotes, but it cannot be used in the standard CSS syntax,
114
+ * so we use conversion functions to handle this.
115
+ * @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#tag-content}
116
+ */
117
+ function unescapeDoubleQuotes(selector) {
118
+ let withinString = false;
119
+ const buffer = [];
120
+ for (let i = 0; i < selector.length; i += 1) {
121
+ if (selector[i] === string.DOUBLE_QUOTE_MARKER && selector[i - 1] !== constants.ESCAPE_CHARACTER) {
122
+ withinString = !withinString;
123
+ buffer.push(selector[i]);
124
+ }
125
+ else if (withinString && selector[i] === constants.ESCAPE_CHARACTER && selector[i + 1] === string.DOUBLE_QUOTE_MARKER) {
126
+ buffer.push(string.DOUBLE_QUOTE_MARKER);
127
+ }
128
+ else {
129
+ buffer.push(selector[i]);
130
+ }
131
+ }
132
+ return buffer.join(constants.EMPTY);
133
+ }
134
+ /**
135
+ * Helper function to render an attribute selector
136
+ *
137
+ * @param attr Attribute name
138
+ * @param op Operator (optional)
139
+ * @param value Attribute value (optional)
140
+ * @param flags Attribute flags (optional)
141
+ * @returns Rendered attribute selector string
142
+ */
143
+ function renderAttrSelector(attr, op, value, flags) {
144
+ const result = [];
145
+ result.push(constants.OPEN_SQUARE_BRACKET);
146
+ result.push(attr);
147
+ {
148
+ if (value === undefined) {
149
+ throw new Error(ERROR_MESSAGES.VALUE_SHOULD_BE_SPECIFIED);
150
+ }
151
+ result.push(op);
152
+ }
153
+ if (value !== undefined) {
154
+ result.push(string.DOUBLE_QUOTE_MARKER);
155
+ result.push(value);
156
+ result.push(string.DOUBLE_QUOTE_MARKER);
157
+ }
158
+ result.push(constants.CLOSE_SQUARE_BRACKET);
159
+ return result.join(constants.EMPTY);
160
+ }
161
+ /**
162
+ * HTML filtering rule converter class
163
+ *
164
+ * @todo Implement `convertToUbo` (ABP currently doesn't support HTML filtering rules)
165
+ */
166
+ class HtmlRuleConverter extends ruleConverterBase.RuleConverterBase {
167
+ /**
168
+ * Converts a HTML rule to AdGuard syntax, if possible. Also can be used to convert
169
+ * AdGuard rules to AdGuard syntax to validate them.
170
+ *
171
+ * _Note:_ uBlock Origin supports multiple selectors within a single rule, but AdGuard doesn't,
172
+ * so the following rule
173
+ * ```
174
+ * example.com##^div[attr1="value1"][attr2="value2"], script:has-text(value)
175
+ * ```
176
+ * will be converted to multiple AdGuard rules:
177
+ * ```
178
+ * example.com$$div[attr1="value1"][attr2="value2"][max-length="262144"]
179
+ * example.com$$script[tag-content="value"][max-length="262144"]
180
+ * ```
181
+ *
182
+ * @param rule Rule node to convert
183
+ * @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
184
+ * the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
185
+ * If the rule was not converted, the result array will contain the original node with the same object reference
186
+ * @throws If the rule is invalid or cannot be converted
187
+ */
188
+ static convertToAdg(rule) {
189
+ // Ignore AdGuard rules
190
+ if (rule.syntax === adblockers.AdblockSyntax.Adg) {
191
+ return conversionResult.createNodeConversionResult([rule], false);
192
+ }
193
+ if (rule.syntax === adblockers.AdblockSyntax.Abp) {
194
+ throw new ruleConversionError.RuleConversionError(ERROR_MESSAGES.ABP_NOT_SUPPORTED);
195
+ }
196
+ const source = escapeDoubleQuotes(rule.body.value);
197
+ const stream = new cssTokenStream.CssTokenStream(source);
198
+ const convertedSelector = [];
199
+ const convertedSelectorList = [];
200
+ let minLen = NOT_SPECIFIED;
201
+ let maxLen = NOT_SPECIFIED;
202
+ // Skip leading whitespace
203
+ stream.skipWhitespace();
204
+ // Skip ^
205
+ stream.expect(cssTokenizer.TokenType.Delim, { value: constants.UBO_HTML_MASK });
206
+ stream.advance();
207
+ while (!stream.isEof()) {
208
+ const token = stream.getOrFail();
209
+ if (token.type === cssTokenizer.TokenType.Ident) {
210
+ // Tag selector should be the first child, if present, but whitespace is allowed before it
211
+ if (convertedSelector.length !== 0 && stream.lookbehindForNonWs() !== undefined) {
212
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.TAG_SHOULD_BE_FIRST_CHILD, cssTokenizer.getFormattedTokenName(token.type), source.slice(token.start, token.end)));
213
+ }
214
+ convertedSelector.push(source.slice(token.start, token.end));
215
+ stream.advance();
216
+ }
217
+ else if (token.type === cssTokenizer.TokenType.OpenSquareBracket) {
218
+ // Attribute selectors: https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors#syntax
219
+ const { start } = token;
220
+ let tempToken;
221
+ // Advance opening square bracket
222
+ stream.advance();
223
+ // Skip optional whitespace after the opening square bracket
224
+ stream.skipWhitespace();
225
+ // Parse attribute name
226
+ tempToken = stream.getOrFail();
227
+ if (tempToken.type !== cssTokenizer.TokenType.Ident) {
228
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_NAME, cssTokenizer.getFormattedTokenName(tempToken.type), source.slice(tempToken.start, tempToken.end)));
229
+ }
230
+ const attr = source.slice(tempToken.start, tempToken.end);
231
+ stream.advance();
232
+ // Skip optional whitespace after the attribute name
233
+ stream.skipWhitespace();
234
+ // Maybe attribute selector ends here, because value is not required, like in '[disabled]'
235
+ tempToken = stream.getOrFail();
236
+ // So check if the next non whitespace token is a closing square bracket
237
+ if (tempToken.type === cssTokenizer.TokenType.CloseSquareBracket) {
238
+ const { end } = tempToken;
239
+ stream.advance();
240
+ // Special case for min-length and max-length attributes
241
+ if (attr === AttributeSelectors.MinLength || attr === AttributeSelectors.MaxLength) {
242
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.ATTRIBUTE_SELECTOR_REQUIRES_VALUE, attr));
243
+ }
244
+ convertedSelector.push(source.slice(start, end));
245
+ continue;
246
+ }
247
+ // Next token should be a valid attribute selector operator
248
+ // Only '=' operator is supported
249
+ stream.expect(cssTokenizer.TokenType.Delim, { value: constants.EQUALS });
250
+ // Advance the operator
251
+ stream.advance();
252
+ // Skip optional whitespace after the operator
253
+ stream.skipWhitespace();
254
+ // Parse attribute value
255
+ tempToken = stream.getOrFail();
256
+ // According to the spec, attribute value should be an identifier or a string
257
+ if (tempToken.type !== cssTokenizer.TokenType.Ident && tempToken.type !== cssTokenizer.TokenType.String) {
258
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_VALUE, cssTokenizer.getFormattedTokenName(tempToken.type), source.slice(tempToken.start, tempToken.end)));
259
+ }
260
+ const value = source.slice(tempToken.start, tempToken.end);
261
+ // Advance the attribute value
262
+ stream.advance();
263
+ // Skip optional whitespace after the attribute value
264
+ stream.skipWhitespace();
265
+ // Attribute selector may have flags - but AdGuard HTML filtering does not support them
266
+ tempToken = stream.getOrFail();
267
+ if (tempToken.type === cssTokenizer.TokenType.Ident) {
268
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.FLAGS_NOT_SUPPORTED));
269
+ }
270
+ // Next token should be a closing square bracket
271
+ stream.expect(cssTokenizer.TokenType.CloseSquareBracket);
272
+ const { end } = stream.getOrFail();
273
+ stream.advance();
274
+ if (attr === AttributeSelectors.MinLength) {
275
+ // Min length attribute
276
+ const parsed = parseInt(value, 10);
277
+ if (Number.isNaN(parsed)) {
278
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.VALUE_FOR_ATTR_SHOULD_BE_INT, attr, value));
279
+ }
280
+ minLen = parsed;
281
+ }
282
+ else if (attr === AttributeSelectors.MaxLength) {
283
+ // Max length attribute
284
+ const parsed = parseInt(value, 10);
285
+ if (Number.isNaN(parsed)) {
286
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.VALUE_FOR_ATTR_SHOULD_BE_INT, attr, value));
287
+ }
288
+ maxLen = parsed;
289
+ }
290
+ else {
291
+ convertedSelector.push(source.slice(start, end));
292
+ }
293
+ }
294
+ else if (token.type === cssTokenizer.TokenType.Colon) {
295
+ let tempToken;
296
+ // Pseudo classes: https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#syntax
297
+ stream.advance();
298
+ // Next token should be a pseudo class name
299
+ stream.expect(cssTokenizer.TokenType.Function);
300
+ tempToken = stream.getOrFail();
301
+ const fn = source.slice(tempToken.start, tempToken.end - 1); // do not include '('
302
+ // Pseudo class should be supported
303
+ if (!SUPPORTED_UBO_PSEUDO_CLASSES.has(fn)) {
304
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_PSEUDO_CLASS, fn));
305
+ }
306
+ const paramStart = tempToken.end;
307
+ // Find the closing paren
308
+ stream.skipUntilBalanced();
309
+ tempToken = stream.getOrFail();
310
+ const paramEnd = tempToken.end;
311
+ // Get the parameter
312
+ const param = source.slice(paramStart, paramEnd - 1);
313
+ if (fn === PseudoClasses.MinTextLength) {
314
+ // Min text length pseudo class
315
+ // Parameter should be parsed as an integer
316
+ const parsed = parseInt(param, 10);
317
+ if (Number.isNaN(parsed)) {
318
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.VALUE_FOR_PSEUDO_CLASS_SHOULD_BE_INT, fn, param));
319
+ }
320
+ minLen = parsed;
321
+ }
322
+ else if (fn === PseudoClasses.Contains || fn === PseudoClasses.HasText) {
323
+ // Contains and has-text pseudo classes
324
+ // Check if the argument is a RegExp
325
+ if (regexp.RegExpUtils.isRegexPattern(param)) {
326
+ // TODO: Add some support for RegExp patterns later
327
+ // Need to find a way to convert some RegExp patterns to glob patterns
328
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.REGEXP_NOT_SUPPORTED, param, fn));
329
+ }
330
+ // Escape unescaped double quotes in the parameter
331
+ const paramEscaped = string.StringUtils.escapeCharacter(param, string.DOUBLE_QUOTE_MARKER);
332
+ convertedSelector.push(renderAttrSelector(AttributeSelectors.TagContent, constants.EQUALS, paramEscaped));
333
+ }
334
+ stream.advance();
335
+ }
336
+ else if (token.type === cssTokenizer.TokenType.Comma && token.balance === 0) {
337
+ if (minLen !== NOT_SPECIFIED) {
338
+ convertedSelector.push(renderAttrSelector(AttributeSelectors.MinLength, constants.EQUALS, minLen.toString()));
339
+ }
340
+ convertedSelector.push(renderAttrSelector(AttributeSelectors.MaxLength, constants.EQUALS, maxLen !== NOT_SPECIFIED ? maxLen.toString() : ADG_HTML_CONVERSION_MAX_LENGTH.toString()));
341
+ convertedSelectorList.push(convertedSelector.join(constants.EMPTY));
342
+ convertedSelector.length = 0;
343
+ stream.advance();
344
+ }
345
+ else if (token.type === cssTokenizer.TokenType.Whitespace) {
346
+ stream.advance();
347
+ }
348
+ else {
349
+ throw new ruleConversionError.RuleConversionError(sprintfJs.sprintf(ERROR_MESSAGES.UNEXPECTED_TOKEN_WITH_VALUE, cssTokenizer.getFormattedTokenName(token.type), source.slice(token.start, token.end)));
350
+ }
351
+ }
352
+ if (convertedSelector.length !== 0) {
353
+ if (minLen !== NOT_SPECIFIED) {
354
+ convertedSelector.push(renderAttrSelector(AttributeSelectors.MinLength, constants.EQUALS, minLen.toString()));
355
+ }
356
+ convertedSelector.push(renderAttrSelector(AttributeSelectors.MaxLength, constants.EQUALS, maxLen !== NOT_SPECIFIED ? maxLen.toString() : ADG_HTML_CONVERSION_MAX_LENGTH.toString()));
357
+ convertedSelectorList.push(convertedSelector.join(constants.EMPTY));
358
+ }
359
+ return conversionResult.createNodeConversionResult(
360
+ // Since AdGuard HTML filtering rules do not support multiple selectors, we need to split each selector
361
+ // into a separate rule node.
362
+ convertedSelectorList.map((selector) => ({
363
+ category: index.RuleCategory.Cosmetic,
364
+ type: index.CosmeticRuleType.HtmlFilteringRule,
365
+ syntax: adblockers.AdblockSyntax.Adg,
366
+ exception: rule.exception,
367
+ domains: clone.cloneDomainListNode(rule.domains),
368
+ // Convert the separator based on the exception status
369
+ separator: {
370
+ type: 'Value',
371
+ value: rule.exception
372
+ ? index.CosmeticRuleSeparator.AdgHtmlFilteringException
373
+ : index.CosmeticRuleSeparator.AdgHtmlFiltering,
374
+ },
375
+ body: {
376
+ type: 'Value',
377
+ value: unescapeDoubleQuotes(selector),
378
+ },
379
+ })), true);
380
+ }
381
+ }
382
+
383
+ exports.ERROR_MESSAGES = ERROR_MESSAGES;
384
+ exports.HtmlRuleConverter = HtmlRuleConverter;
@@ -0,0 +1,120 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ 'use strict';
8
+
9
+ var index = require('../../nodes/index.js');
10
+ var adblockers = require('../../utils/adblockers.js');
11
+ var html = require('./html.js');
12
+ var scriptlet = require('./scriptlet.js');
13
+ var ruleConversionError = require('../../errors/rule-conversion-error.js');
14
+ var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
15
+ var adg = require('./rule-modifiers/adg.js');
16
+ var css = require('./css.js');
17
+ var elementHiding = require('./element-hiding.js');
18
+ var headerRemoval = require('./header-removal.js');
19
+ var conversionResult = require('../base-interfaces/conversion-result.js');
20
+
21
+ /**
22
+ * @file Cosmetic rule converter
23
+ */
24
+ /**
25
+ * Cosmetic rule converter class (also known as "non-basic rule converter")
26
+ *
27
+ * @todo Implement `convertToUbo` and `convertToAbp`
28
+ */
29
+ class CosmeticRuleConverter extends ruleConverterBase.RuleConverterBase {
30
+ /**
31
+ * Converts a cosmetic rule to AdGuard syntax, if possible.
32
+ *
33
+ * @param rule Rule node to convert
34
+ * @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
35
+ * the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
36
+ * If the rule was not converted, the result array will contain the original node with the same object reference
37
+ * @throws If the rule is invalid or cannot be converted
38
+ */
39
+ static convertToAdg(rule) {
40
+ let subconverterResult;
41
+ // Convert cosmetic rule based on its type
42
+ switch (rule.type) {
43
+ case index.CosmeticRuleType.ElementHidingRule:
44
+ subconverterResult = elementHiding.ElementHidingRuleConverter.convertToAdg(rule);
45
+ break;
46
+ case index.CosmeticRuleType.ScriptletInjectionRule:
47
+ subconverterResult = scriptlet.ScriptletRuleConverter.convertToAdg(rule);
48
+ break;
49
+ case index.CosmeticRuleType.CssInjectionRule:
50
+ subconverterResult = css.CssInjectionRuleConverter.convertToAdg(rule);
51
+ break;
52
+ case index.CosmeticRuleType.HtmlFilteringRule:
53
+ // Handle special case: uBO response header filtering rule
54
+ // TODO: Optimize double CSS tokenization here
55
+ subconverterResult = headerRemoval.HeaderRemovalRuleConverter.convertToAdg(rule);
56
+ if (subconverterResult.isConverted) {
57
+ break;
58
+ }
59
+ subconverterResult = html.HtmlRuleConverter.convertToAdg(rule);
60
+ break;
61
+ // Note: Currently, only ADG supports JS injection rules, so we don't need to convert them
62
+ case index.CosmeticRuleType.JsInjectionRule:
63
+ subconverterResult = conversionResult.createNodeConversionResult([rule], false);
64
+ break;
65
+ default:
66
+ throw new ruleConversionError.RuleConversionError('Unsupported cosmetic rule type');
67
+ }
68
+ let convertedModifiers;
69
+ // Convert cosmetic rule modifiers, if any
70
+ if (rule.modifiers) {
71
+ if (rule.syntax === adblockers.AdblockSyntax.Ubo) {
72
+ // uBO doesn't support this rule:
73
+ // example.com##+js(set-constant.js, foo, bar):matches-path(/baz)
74
+ if (rule.type === index.CosmeticRuleType.ScriptletInjectionRule) {
75
+ throw new ruleConversionError.RuleConversionError('uBO scriptlet injection rules don\'t support cosmetic rule modifiers');
76
+ }
77
+ convertedModifiers = adg.AdgCosmeticRuleModifierConverter.convertFromUbo(rule.modifiers);
78
+ }
79
+ else if (rule.syntax === adblockers.AdblockSyntax.Abp) {
80
+ // TODO: Implement once ABP starts supporting cosmetic rule modifiers
81
+ throw new ruleConversionError.RuleConversionError('ABP don\'t support cosmetic rule modifiers');
82
+ }
83
+ }
84
+ if ((subconverterResult.result.length > 1 || subconverterResult.isConverted)
85
+ || (convertedModifiers && convertedModifiers.isConverted)) {
86
+ // Add modifier list to the subconverter result rules
87
+ subconverterResult.result.forEach((subconverterRule) => {
88
+ if (convertedModifiers && subconverterRule.category === index.RuleCategory.Cosmetic) {
89
+ // eslint-disable-next-line no-param-reassign
90
+ subconverterRule.modifiers = convertedModifiers.result;
91
+ }
92
+ });
93
+ return subconverterResult;
94
+ }
95
+ return conversionResult.createNodeConversionResult([rule], false);
96
+ }
97
+ /**
98
+ * Converts a cosmetic rule to uBlock Origin syntax, if possible.
99
+ *
100
+ * @param rule Rule node to convert
101
+ * @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
102
+ * the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
103
+ * If the rule was not converted, the result array will contain the original node with the same object reference
104
+ * @throws If the rule is invalid or cannot be converted
105
+ */
106
+ // TODO: Add support for other cosmetic rule types
107
+ static convertToUbo(rule) {
108
+ // Convert cosmetic rule based on its type
109
+ if (rule.type === index.CosmeticRuleType.ScriptletInjectionRule) {
110
+ if (rule.syntax === adblockers.AdblockSyntax.Adg && rule.modifiers?.children.length) {
111
+ // e.g. example.com##+js(set-constant.js, foo, bar):matches-path(/baz)
112
+ throw new ruleConversionError.RuleConversionError('uBO scriptlet injection rules do not support cosmetic rule modifiers');
113
+ }
114
+ return scriptlet.ScriptletRuleConverter.convertToUbo(rule);
115
+ }
116
+ return conversionResult.createNodeConversionResult([rule], false);
117
+ }
118
+ }
119
+
120
+ exports.CosmeticRuleConverter = CosmeticRuleConverter;