@adguard/agtree 2.1.3 → 3.0.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.
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 -15741
  733. package/dist/agtree.mjs +0 -15642
  734. package/dist/compatibility-table-data.js +0 -12634
@@ -0,0 +1,453 @@
1
+ /*
2
+ * AGTree v3.0.0 (build date: Tue, 12 Nov 2024 14:05:06 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
+ import { sprintf } from 'sprintf-js';
8
+ import { CosmeticRuleSeparatorUtils } from '../../utils/cosmetic-rule-separator.mjs';
9
+ import { AdblockSyntax } from '../../utils/adblockers.mjs';
10
+ import { DomainListParser } from '../misc/domain-list-parser.mjs';
11
+ import { ModifierListParser } from '../misc/modifier-list.mjs';
12
+ import { OPEN_SQUARE_BRACKET, DOLLAR_SIGN, CLOSE_SQUARE_BRACKET, UBO_SCRIPTLET_MASK, UBO_SCRIPTLET_MASK_LEGACY, ADG_SCRIPTLET_MASK, UBO_HTML_MASK } from '../../utils/constants.mjs';
13
+ import { RuleCategory, CosmeticRuleType } from '../../nodes/index.mjs';
14
+ import { AdblockSyntaxError } from '../../errors/adblock-syntax-error.mjs';
15
+ import { StringUtils } from '../../utils/string.mjs';
16
+ import { CommentParser } from '../comment/comment-parser.mjs';
17
+ import { defaultParserOptions } from '../options.mjs';
18
+ import { UboSelectorParser } from '../css/ubo-selector-parser.mjs';
19
+ import { AdgCssInjectionParser } from '../css/adg-css-injection-parser.mjs';
20
+ import { AbpSnippetInjectionBodyParser } from './body/abp-snippet-injection-body-parser.mjs';
21
+ import { UboScriptletInjectionBodyParser } from './body/ubo-scriptlet-injection-body-parser.mjs';
22
+ import { AdgScriptletInjectionBodyParser } from './body/adg-scriptlet-injection-body-parser.mjs';
23
+ import { BaseParser } from '../base-parser.mjs';
24
+ import { UboPseudoName } from '../../common/ubo-selector-common.mjs';
25
+
26
+ /**
27
+ * Possible error messages for uBO selectors. Formatted with {@link sprintf}.
28
+ */
29
+ const ERROR_MESSAGES = {
30
+ EMPTY_RULE_BODY: 'Empty rule body',
31
+ INVALID_BODY_FOR_SEPARATOR: "Body '%s' is not valid for the '%s' cosmetic rule separator",
32
+ MISSING_ADGUARD_MODIFIER_LIST_END: "Missing '%s' at the end of the AdGuard modifier list in pattern '%s'",
33
+ MISSING_ADGUARD_MODIFIER_LIST_MARKER: "Missing '%s' at the beginning of the AdGuard modifier list in pattern '%s'",
34
+ SYNTAXES_CANNOT_BE_MIXED: "'%s' syntax cannot be mixed with '%s' syntax",
35
+ SYNTAX_DISABLED: "Parsing '%s' syntax is disabled, but the rule uses it",
36
+ };
37
+ const ADG_CSS_INJECTION_PATTERN = /^(?:.+){(?:.+)}$/;
38
+ /**
39
+ * `CosmeticRuleParser` is responsible for parsing cosmetic rules.
40
+ *
41
+ * Where possible, it automatically detects the difference between supported syntaxes:
42
+ * - AdGuard
43
+ * - uBlock Origin
44
+ * - Adblock Plus
45
+ *
46
+ * If the syntax is common / cannot be determined, the parser gives `Common` syntax.
47
+ *
48
+ * Please note that syntactically correct rules are parsed even if they are not actually
49
+ * compatible with the given adblocker. This is a completely natural behavior, meaningful
50
+ * checking of compatibility is not done at the parser level.
51
+ */
52
+ // TODO: Make raw body parsing optional
53
+ // TODO: Split into smaller sections
54
+ class CosmeticRuleParser extends BaseParser {
55
+ /**
56
+ * Determines whether a rule is a cosmetic rule. The rule is considered cosmetic if it
57
+ * contains a cosmetic rule separator.
58
+ *
59
+ * @param raw Raw rule
60
+ * @returns `true` if the rule is a cosmetic rule, `false` otherwise
61
+ */
62
+ static isCosmeticRule(raw) {
63
+ const trimmed = raw.trim();
64
+ if (CommentParser.isCommentRule(trimmed)) {
65
+ return false;
66
+ }
67
+ return CosmeticRuleSeparatorUtils.find(trimmed) !== null;
68
+ }
69
+ /**
70
+ * Parses a cosmetic rule. The structure of the cosmetic rules:
71
+ * - pattern (AdGuard pattern can have modifiers, other syntaxes don't)
72
+ * - separator
73
+ * - body
74
+ *
75
+ * @param raw Raw input to parse.
76
+ * @param options Global parser options.
77
+ * @param baseOffset Starting offset of the input. Node locations are calculated relative to this offset.
78
+ * @returns
79
+ * Parsed cosmetic rule AST or null if it failed to parse based on the known cosmetic rules
80
+ * @throws If the input matches the cosmetic rule pattern but syntactically invalid
81
+ */
82
+ // TODO: Split to smaller functions
83
+ static parse(raw, options = defaultParserOptions, baseOffset = 0) {
84
+ // Find cosmetic rule separator - each cosmetic rule must have it, otherwise it is not a cosmetic rule
85
+ const separatorResult = CosmeticRuleSeparatorUtils.find(raw);
86
+ if (!separatorResult) {
87
+ return null;
88
+ }
89
+ let syntax = AdblockSyntax.Common;
90
+ let modifiers;
91
+ const patternStart = StringUtils.skipWS(raw);
92
+ const patternEnd = StringUtils.skipWSBack(raw, separatorResult.start - 1) + 1;
93
+ const bodyStart = StringUtils.skipWS(raw, separatorResult.end);
94
+ const bodyEnd = StringUtils.skipWSBack(raw) + 1;
95
+ // Note we use '<=' instead of '===' because we have bidirectional trim
96
+ if (bodyEnd <= bodyStart) {
97
+ throw new AdblockSyntaxError(ERROR_MESSAGES.EMPTY_RULE_BODY, baseOffset, baseOffset + raw.length);
98
+ }
99
+ // Step 1. Parse the pattern: it can be a domain list or a domain list with modifiers (AdGuard)
100
+ const rawPattern = raw.slice(patternStart, patternEnd);
101
+ let patternOffset = patternStart;
102
+ if (rawPattern[patternOffset] === OPEN_SQUARE_BRACKET) {
103
+ // Save offset to the beginning of the modifier list for later
104
+ const modifierListStart = patternOffset;
105
+ // Consume opening square bracket
106
+ patternOffset += 1;
107
+ // Skip whitespace after opening square bracket
108
+ patternOffset = StringUtils.skipWS(rawPattern, patternOffset);
109
+ // Open square bracket should be followed by a modifier separator: [$
110
+ if (rawPattern[patternOffset] !== DOLLAR_SIGN) {
111
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.MISSING_ADGUARD_MODIFIER_LIST_MARKER, DOLLAR_SIGN, rawPattern), baseOffset + patternOffset, baseOffset + rawPattern.length);
112
+ }
113
+ // Consume modifier separator
114
+ patternOffset += 1;
115
+ // Skip whitespace after modifier separator
116
+ patternOffset = StringUtils.skipWS(rawPattern, patternOffset);
117
+ // Modifier list ends with the last unescaped square bracket
118
+ // We search for the last unescaped square bracket, because some modifiers can contain square brackets,
119
+ // e.g. [$domain=/example[0-9]\.(com|org)/]##.ad
120
+ const modifierListEnd = StringUtils.findLastUnescapedCharacter(rawPattern, CLOSE_SQUARE_BRACKET);
121
+ if (modifierListEnd === -1) {
122
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.MISSING_ADGUARD_MODIFIER_LIST_END, CLOSE_SQUARE_BRACKET, rawPattern), baseOffset + patternOffset, baseOffset + rawPattern.length);
123
+ }
124
+ // Parse modifier list
125
+ modifiers = ModifierListParser.parse(raw.slice(patternOffset, modifierListEnd), options, baseOffset + patternOffset);
126
+ // Expand modifier list location to include the opening and closing square brackets
127
+ if (options.isLocIncluded) {
128
+ modifiers.start = baseOffset + modifierListStart;
129
+ modifiers.end = baseOffset + modifierListEnd + 1;
130
+ }
131
+ // Consume modifier list
132
+ patternOffset = modifierListEnd + 1;
133
+ // Change the syntax to ADG
134
+ syntax = AdblockSyntax.Adg;
135
+ }
136
+ // Skip whitespace after modifier list
137
+ patternOffset = StringUtils.skipWS(rawPattern, patternOffset);
138
+ // Parse domains
139
+ const domains = DomainListParser.parse(rawPattern.slice(patternOffset), options, baseOffset + patternOffset);
140
+ // Step 2. Parse the separator
141
+ const separator = {
142
+ type: 'Value',
143
+ value: separatorResult.separator,
144
+ };
145
+ if (options.isLocIncluded) {
146
+ separator.start = baseOffset + separatorResult.start;
147
+ separator.end = baseOffset + separatorResult.end;
148
+ }
149
+ const exception = CosmeticRuleSeparatorUtils.isException(separatorResult.separator);
150
+ // Step 3. Parse the rule body
151
+ let rawBody = raw.slice(bodyStart, bodyEnd);
152
+ /**
153
+ * Ensures that the rule syntax is common or the expected one. This function is used to prevent mixing
154
+ * different syntaxes in the same rule.
155
+ *
156
+ * @example
157
+ * The following rule mixes AdGuard and uBO syntaxes, because it uses AdGuard modifier list and uBO
158
+ * CSS injection:
159
+ * ```adblock
160
+ * [$path=/something]example.com##.foo:style(color: red)
161
+ * ```
162
+ * In this case, parser sets syntax to AdGuard, because it detects the AdGuard modifier list, but
163
+ * when parsing the rule body, it detects uBO CSS injection, which is not compatible with AdGuard.
164
+ *
165
+ * @param expectedSyntax Expected syntax
166
+ * @throws If the rule syntax is not common or the expected one
167
+ */
168
+ const expectCommonOrSpecificSyntax = (expectedSyntax) => {
169
+ if (syntax !== AdblockSyntax.Common && syntax !== expectedSyntax) {
170
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAXES_CANNOT_BE_MIXED, expectedSyntax, syntax), baseOffset + patternStart, baseOffset + bodyEnd);
171
+ }
172
+ };
173
+ let uboSelector;
174
+ // Parse UBO rule modifiers
175
+ if (options.parseUboSpecificRules) {
176
+ uboSelector = UboSelectorParser.parse(rawBody, options, baseOffset + bodyStart);
177
+ rawBody = uboSelector.selector.value;
178
+ // Do not allow ADG modifiers and UBO modifiers in the same rule
179
+ if (uboSelector.modifiers && uboSelector.modifiers.children.length > 0) {
180
+ // If modifiers are present, that means that the ADG modifier list was parsed
181
+ expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
182
+ // Change the syntax to uBO
183
+ syntax = AdblockSyntax.Ubo;
184
+ // Store the rule modifiers
185
+ // Please note that not each special uBO modifier is a rule modifier, some of them are
186
+ // used for CSS injection, for example `:style()` and `:remove()`
187
+ for (const modifier of uboSelector.modifiers.children) {
188
+ // TODO: Add support for matches-media and element hiding rules
189
+ // TODO: Improve this condition if new uBO modifiers are added
190
+ if (modifier.name.value === UboPseudoName.MatchesPath) {
191
+ // Prepare the modifier list if it does not exist yet
192
+ if (!modifiers) {
193
+ modifiers = {
194
+ type: 'ModifierList',
195
+ children: [],
196
+ };
197
+ if (options.isLocIncluded) {
198
+ modifiers.start = baseOffset + bodyStart;
199
+ modifiers.end = baseOffset + bodyEnd;
200
+ }
201
+ }
202
+ modifiers.children.push(modifier);
203
+ }
204
+ }
205
+ }
206
+ }
207
+ const raws = {
208
+ text: raw,
209
+ };
210
+ const baseRule = {
211
+ category: RuleCategory.Cosmetic,
212
+ exception,
213
+ modifiers,
214
+ domains,
215
+ separator,
216
+ };
217
+ if (options.includeRaws) {
218
+ baseRule.raws = raws;
219
+ }
220
+ if (options.isLocIncluded) {
221
+ baseRule.start = baseOffset;
222
+ baseRule.end = baseOffset + raw.length;
223
+ }
224
+ const parseUboCssInjection = () => {
225
+ if (!uboSelector || !uboSelector.modifiers || uboSelector.modifiers.children?.length < 1) {
226
+ return null;
227
+ }
228
+ expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
229
+ const selectorList = uboSelector.selector;
230
+ let declarationList;
231
+ let mediaQueryList;
232
+ let remove = false;
233
+ for (const modifier of uboSelector.modifiers.children) {
234
+ switch (modifier.name.value) {
235
+ case UboPseudoName.Style:
236
+ declarationList = modifier.value;
237
+ break;
238
+ case UboPseudoName.Remove:
239
+ declarationList = {
240
+ type: 'Value',
241
+ value: '',
242
+ };
243
+ remove = true;
244
+ break;
245
+ case UboPseudoName.MatchesMedia:
246
+ mediaQueryList = modifier.value;
247
+ break;
248
+ }
249
+ }
250
+ // If neither `:style()` nor `:remove()` is present
251
+ if (!declarationList) {
252
+ return null;
253
+ }
254
+ const body = {
255
+ type: 'CssInjectionRuleBody',
256
+ selectorList,
257
+ declarationList,
258
+ mediaQueryList,
259
+ remove,
260
+ };
261
+ if (options.isLocIncluded) {
262
+ body.start = baseOffset + bodyStart;
263
+ body.end = baseOffset + bodyEnd;
264
+ }
265
+ return {
266
+ syntax: AdblockSyntax.Ubo,
267
+ type: CosmeticRuleType.CssInjectionRule,
268
+ body,
269
+ };
270
+ };
271
+ const parseElementHiding = () => {
272
+ const selectorList = {
273
+ type: 'Value',
274
+ value: rawBody,
275
+ };
276
+ if (options.isLocIncluded) {
277
+ selectorList.start = baseOffset + bodyStart;
278
+ selectorList.end = baseOffset + bodyEnd;
279
+ }
280
+ const body = {
281
+ type: 'ElementHidingRuleBody',
282
+ selectorList,
283
+ };
284
+ if (options.isLocIncluded) {
285
+ body.start = baseOffset + bodyStart;
286
+ body.end = baseOffset + bodyEnd;
287
+ }
288
+ return {
289
+ syntax,
290
+ type: CosmeticRuleType.ElementHidingRule,
291
+ body,
292
+ };
293
+ };
294
+ const parseAdgCssInjection = () => {
295
+ // TODO: Improve this detection. Need to cover the following cases:
296
+ // #$#body { color: red;
297
+ // #$#@media (min-width: 100px) { body { color: red; }
298
+ // ADG CSS injection
299
+ if (!ADG_CSS_INJECTION_PATTERN.test(rawBody)) {
300
+ return null;
301
+ }
302
+ expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
303
+ return {
304
+ syntax: AdblockSyntax.Adg,
305
+ type: CosmeticRuleType.CssInjectionRule,
306
+ body: AdgCssInjectionParser.parse(rawBody, options, baseOffset + bodyStart),
307
+ };
308
+ };
309
+ const parseAbpSnippetInjection = () => {
310
+ if (!options.parseAbpSpecificRules) {
311
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAX_DISABLED, AdblockSyntax.Abp), baseOffset + bodyStart, baseOffset + bodyEnd);
312
+ }
313
+ expectCommonOrSpecificSyntax(AdblockSyntax.Abp);
314
+ const body = AbpSnippetInjectionBodyParser.parse(rawBody, options, baseOffset + bodyStart);
315
+ if (options.isLocIncluded) {
316
+ body.start = baseOffset + bodyStart;
317
+ body.end = baseOffset + bodyEnd;
318
+ }
319
+ return {
320
+ syntax: AdblockSyntax.Abp,
321
+ type: CosmeticRuleType.ScriptletInjectionRule,
322
+ body,
323
+ };
324
+ };
325
+ const parseUboScriptletInjection = () => {
326
+ if (!rawBody.startsWith(UBO_SCRIPTLET_MASK) && !rawBody.startsWith(UBO_SCRIPTLET_MASK_LEGACY)) {
327
+ return null;
328
+ }
329
+ if (!options.parseUboSpecificRules) {
330
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAX_DISABLED, AdblockSyntax.Ubo), baseOffset + bodyStart, baseOffset + bodyEnd);
331
+ }
332
+ expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
333
+ const body = UboScriptletInjectionBodyParser.parse(rawBody, options, baseOffset + bodyStart);
334
+ if (options.isLocIncluded) {
335
+ body.start = baseOffset + bodyStart;
336
+ body.end = baseOffset + bodyEnd;
337
+ }
338
+ return {
339
+ syntax: AdblockSyntax.Ubo,
340
+ type: CosmeticRuleType.ScriptletInjectionRule,
341
+ body,
342
+ };
343
+ };
344
+ const parseAdgScriptletInjection = () => {
345
+ // ADG scriptlet injection
346
+ if (!rawBody.startsWith(ADG_SCRIPTLET_MASK)) {
347
+ return null;
348
+ }
349
+ expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
350
+ const body = AdgScriptletInjectionBodyParser.parse(rawBody, options, baseOffset + bodyStart);
351
+ if (options.isLocIncluded) {
352
+ body.start = baseOffset + bodyStart;
353
+ body.end = baseOffset + bodyEnd;
354
+ }
355
+ return {
356
+ syntax: AdblockSyntax.Adg,
357
+ type: CosmeticRuleType.ScriptletInjectionRule,
358
+ body,
359
+ };
360
+ };
361
+ const parseAdgJsInjection = () => {
362
+ expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
363
+ const body = {
364
+ type: 'Value',
365
+ value: rawBody,
366
+ };
367
+ if (options.isLocIncluded) {
368
+ body.start = baseOffset + bodyStart;
369
+ body.end = baseOffset + bodyEnd;
370
+ }
371
+ return {
372
+ syntax: AdblockSyntax.Adg,
373
+ type: CosmeticRuleType.JsInjectionRule,
374
+ body,
375
+ };
376
+ };
377
+ const parseUboHtmlFiltering = () => {
378
+ if (!rawBody.startsWith(UBO_HTML_MASK)) {
379
+ return null;
380
+ }
381
+ if (!options.parseUboSpecificRules) {
382
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.SYNTAX_DISABLED, AdblockSyntax.Ubo), baseOffset + bodyStart, baseOffset + bodyEnd);
383
+ }
384
+ expectCommonOrSpecificSyntax(AdblockSyntax.Ubo);
385
+ const body = {
386
+ type: 'Value',
387
+ value: rawBody,
388
+ };
389
+ if (options.isLocIncluded) {
390
+ body.start = baseOffset + bodyStart;
391
+ body.end = baseOffset + bodyEnd;
392
+ }
393
+ return {
394
+ syntax: AdblockSyntax.Ubo,
395
+ type: CosmeticRuleType.HtmlFilteringRule,
396
+ body,
397
+ };
398
+ };
399
+ const parseAdgHtmlFiltering = () => {
400
+ expectCommonOrSpecificSyntax(AdblockSyntax.Adg);
401
+ const body = {
402
+ type: 'Value',
403
+ value: rawBody,
404
+ };
405
+ if (options.isLocIncluded) {
406
+ body.start = baseOffset + bodyStart;
407
+ body.end = baseOffset + bodyEnd;
408
+ }
409
+ return {
410
+ syntax: AdblockSyntax.Adg,
411
+ type: CosmeticRuleType.HtmlFilteringRule,
412
+ body,
413
+ };
414
+ };
415
+ // Create a fast lookup table for cosmetic rule separators and their parsing functions.
416
+ // One separator can have multiple parsing functions. If the first function returns null,
417
+ // the next function is called, and so on.
418
+ // If all functions return null, an error should be thrown.
419
+ const separatorMap = {
420
+ '##': [parseUboHtmlFiltering, parseUboScriptletInjection, parseUboCssInjection, parseElementHiding],
421
+ '#@#': [parseUboHtmlFiltering, parseUboScriptletInjection, parseUboCssInjection, parseElementHiding],
422
+ '#?#': [parseUboCssInjection, parseElementHiding],
423
+ '#@?#': [parseUboCssInjection, parseElementHiding],
424
+ '#$#': [parseAdgCssInjection, parseAbpSnippetInjection],
425
+ '#@$#': [parseAdgCssInjection, parseAbpSnippetInjection],
426
+ '#$?#': [parseAdgCssInjection],
427
+ '#@$?#': [parseAdgCssInjection],
428
+ '#%#': [parseAdgScriptletInjection, parseAdgJsInjection],
429
+ '#@%#': [parseAdgScriptletInjection, parseAdgJsInjection],
430
+ $$: [parseAdgHtmlFiltering],
431
+ '$@$': [parseAdgHtmlFiltering],
432
+ };
433
+ const parseFunctions = separatorMap[separatorResult.separator];
434
+ let restProps;
435
+ for (const parseFunction of parseFunctions) {
436
+ restProps = parseFunction();
437
+ if (restProps) {
438
+ break;
439
+ }
440
+ }
441
+ // If none of the parsing functions returned a result, it means that the rule is unknown / invalid.
442
+ if (!restProps) {
443
+ throw new AdblockSyntaxError(sprintf(ERROR_MESSAGES.INVALID_BODY_FOR_SEPARATOR, rawBody, separatorResult.separator), baseOffset + bodyStart, baseOffset + bodyEnd);
444
+ }
445
+ // Combine the base rule with the rest of the properties.
446
+ return {
447
+ ...baseRule,
448
+ ...restProps,
449
+ };
450
+ }
451
+ }
452
+
453
+ export { CosmeticRuleParser, ERROR_MESSAGES };
@@ -0,0 +1,208 @@
1
+ /*
2
+ * AGTree v3.0.0 (build date: Tue, 12 Nov 2024 14:05:06 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
+ import { TokenType } from '@adguard/css-tokenizer';
8
+ import { AdblockSyntaxError } from '../../errors/adblock-syntax-error.mjs';
9
+ import { CSS_MEDIA_MARKER, EMPTY } from '../../utils/constants.mjs';
10
+ import { CssTokenStream } from './css-token-stream.mjs';
11
+ import { defaultParserOptions } from '../options.mjs';
12
+ import { BaseParser } from '../base-parser.mjs';
13
+
14
+ /**
15
+ * @file Parser for AdGuard CSS injections.
16
+ */
17
+ const REMOVE_PROPERTY = 'remove';
18
+ const REMOVE_VALUE = 'true';
19
+ const ERROR_MESSAGES = {
20
+ MEDIA_QUERY_LIST_IS_EMPTY: 'Media query list is empty',
21
+ SELECTOR_LIST_IS_EMPTY: 'Selector list is empty',
22
+ DECLARATION_LIST_IS_EMPTY: 'Declaration list is empty',
23
+ };
24
+ /**
25
+ * Parser for AdGuard CSS injection.
26
+ */
27
+ class AdgCssInjectionParser extends BaseParser {
28
+ /**
29
+ * Parses an AdGuard CSS injection.
30
+ *
31
+ * @param raw Raw input to parse.
32
+ * @param options Global parser options.
33
+ * @param baseOffset Starting offset of the input. Node locations are calculated relative to this offset.
34
+ *
35
+ * @returns Parsed AdGuard CSS injection {@link CssInjectionRuleBody}.
36
+ * @throws An {@link AdblockSyntaxError} if the selector list is syntactically invalid.
37
+ */
38
+ static parse(raw, options = defaultParserOptions, baseOffset = 0) {
39
+ let mediaQueryList;
40
+ const selectorList = { type: 'Value', value: EMPTY };
41
+ const declarationList = { type: 'Value', value: EMPTY };
42
+ const stream = new CssTokenStream(raw, baseOffset);
43
+ // Skip leading whitespace characters
44
+ stream.skipWhitespace();
45
+ // We have two possible CSS injection formats:
46
+ // 1. @media (media-query-list) { selector list { declarations separated by semicolons } }
47
+ // 2. selector list { declarations separated by semicolons }
48
+ // Handle '@media' case:
49
+ let balanceShift = 0;
50
+ if (stream.getOrFail().type === TokenType.AtKeyword) {
51
+ // Currently only '@media' is supported, we should throw an error if we encounter anything else,
52
+ // like '@supports' or '@charset', etc.
53
+ stream.expect(TokenType.AtKeyword, { value: CSS_MEDIA_MARKER, balance: 0 });
54
+ stream.advance();
55
+ // Skip whitespace characters after @media keyword, if any
56
+ // @media (media-query-list) { ...
57
+ // ↑
58
+ // └ this one (if any)
59
+ stream.skipWhitespace();
60
+ const mediaQueryListStart = stream.getOrFail().start;
61
+ // Skip everything until we found the opening curly bracket of the declaration block
62
+ // @media media-query-list { ...
63
+ // ↑
64
+ // └ this one
65
+ let lastNonWsIndex = -1;
66
+ while (!stream.isEof()) {
67
+ const token = stream.getOrFail();
68
+ if (token.type === TokenType.OpenCurlyBracket && token.balance === 1) {
69
+ break;
70
+ }
71
+ if (token.type !== TokenType.Whitespace) {
72
+ lastNonWsIndex = token.end;
73
+ }
74
+ stream.advance();
75
+ }
76
+ // If the skipped tokens count is 0 without leading and trailing whitespace characters, then the media query
77
+ // list is empty
78
+ if (lastNonWsIndex === -1) {
79
+ throw new AdblockSyntaxError(ERROR_MESSAGES.MEDIA_QUERY_LIST_IS_EMPTY, baseOffset + mediaQueryListStart, baseOffset + raw.length);
80
+ }
81
+ // It is safe to use non-null assertion here, because we have already checked previous tokens.
82
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
83
+ const mediaQueryListEnd = lastNonWsIndex;
84
+ mediaQueryList = {
85
+ type: 'Value',
86
+ value: raw.slice(mediaQueryListStart, mediaQueryListEnd),
87
+ };
88
+ if (options.isLocIncluded) {
89
+ mediaQueryList.start = baseOffset + mediaQueryListStart;
90
+ mediaQueryList.end = baseOffset + mediaQueryListEnd;
91
+ }
92
+ // Next token should be an open curly bracket
93
+ // @media (media-query-list) { ...
94
+ // ↑
95
+ // └ this one
96
+ stream.expect(TokenType.OpenCurlyBracket);
97
+ stream.advance();
98
+ // '@media' at-rule wrap increases the balance level by 1 for the rule within the at-rule, because it
99
+ // has its own { ... } block
100
+ balanceShift = 1;
101
+ }
102
+ // Skip leading whitespace before the rule, if any
103
+ // Note: rule = selector list { declarations separated by semicolons }
104
+ stream.skipWhitespace();
105
+ const selectorStart = stream.getOrFail().start;
106
+ // Jump to the opening curly bracket of the declaration block, based on the balance level
107
+ // .selector { padding-top: 10px; padding-bottom: 10px; }
108
+ // ↑
109
+ // └ this one
110
+ const { skippedTrimmed: selectorTokensLength } = stream.skipUntilExt(TokenType.OpenCurlyBracket, balanceShift + 1);
111
+ stream.expect(TokenType.OpenCurlyBracket);
112
+ // If the skipped tokens count is 0 without leading and trailing whitespace characters, then the selector list
113
+ // is empty
114
+ if (selectorTokensLength === 0) {
115
+ throw new AdblockSyntaxError(ERROR_MESSAGES.SELECTOR_LIST_IS_EMPTY, baseOffset + selectorStart, baseOffset + raw.length);
116
+ }
117
+ // It is safe to use non-null assertion here, because we have already checked previous tokens.
118
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
119
+ const selectorEnd = stream.lookbehindForNonWs().end;
120
+ selectorList.value = raw.slice(selectorStart, selectorEnd);
121
+ if (options.isLocIncluded) {
122
+ selectorList.start = baseOffset + selectorStart;
123
+ selectorList.end = baseOffset + selectorEnd;
124
+ }
125
+ // Jump to the next token after the opening curly bracket of the declaration block
126
+ // .selector { padding-top: 10px; padding-bottom: 10px; }
127
+ // ↑
128
+ // └ this one
129
+ stream.advance();
130
+ // Skip whitespace characters after the opening curly bracket of the declaration block, if any
131
+ stream.skipWhitespace();
132
+ // Jump to the closing curly bracket of the declaration block, based on the balance level
133
+ // .selector { padding-top: 10px; padding-bottom: 10px; }
134
+ // ↑
135
+ // └ this one
136
+ const declarationsStart = stream.getOrFail().start;
137
+ const declarations = new Set();
138
+ let declarationsEnd = -1;
139
+ let remove = false;
140
+ let lastNonWsIndex = -1;
141
+ while (!stream.isEof()) {
142
+ const token = stream.getOrFail();
143
+ if (token.type === TokenType.CloseCurlyBracket && stream.getBalance() === balanceShift) {
144
+ declarationsEnd = lastNonWsIndex;
145
+ break;
146
+ }
147
+ if (token.type !== TokenType.Whitespace) {
148
+ lastNonWsIndex = token.end;
149
+ }
150
+ if (token.type === TokenType.Ident && stream.lookahead()?.type === TokenType.Colon) {
151
+ const ident = raw.slice(token.start, token.end);
152
+ declarations.add(ident);
153
+ // Consume ident and colon
154
+ stream.advance();
155
+ stream.advance();
156
+ // only 'remove: true' is allowed
157
+ if (ident === REMOVE_PROPERTY) {
158
+ // Skip whitespace after colon, if any
159
+ stream.skipWhitespace();
160
+ // Next token should be an ident, with value 'true'
161
+ stream.expect(TokenType.Ident, { value: REMOVE_VALUE });
162
+ stream.advance();
163
+ remove = true;
164
+ }
165
+ }
166
+ else {
167
+ stream.advance();
168
+ }
169
+ }
170
+ if (declarationsEnd === -1) {
171
+ throw new AdblockSyntaxError(ERROR_MESSAGES.DECLARATION_LIST_IS_EMPTY, baseOffset + declarationsStart, baseOffset + raw.length);
172
+ }
173
+ declarationList.value = raw.slice(declarationsStart, declarationsEnd);
174
+ if (options.isLocIncluded) {
175
+ declarationList.start = baseOffset + declarationsStart;
176
+ declarationList.end = baseOffset + declarationsEnd;
177
+ }
178
+ // Eat the close curly bracket of the declaration block
179
+ // .selector { padding-top: 10px; padding-bottom: 10px; }
180
+ // ↑
181
+ // └ this one
182
+ stream.expect(TokenType.CloseCurlyBracket);
183
+ stream.advance();
184
+ // Skip whitespace after the rule, if any
185
+ stream.skipWhitespace();
186
+ // If we have a media query, we should have an extra close curly bracket
187
+ if (balanceShift === 1) {
188
+ stream.expect(TokenType.CloseCurlyBracket);
189
+ stream.advance();
190
+ }
191
+ const result = {
192
+ type: 'CssInjectionRuleBody',
193
+ selectorList,
194
+ declarationList,
195
+ remove,
196
+ };
197
+ if (options.isLocIncluded) {
198
+ result.start = baseOffset;
199
+ result.end = baseOffset + raw.length;
200
+ }
201
+ if (mediaQueryList) {
202
+ result.mediaQueryList = mediaQueryList;
203
+ }
204
+ return result;
205
+ }
206
+ }
207
+
208
+ export { AdgCssInjectionParser, ERROR_MESSAGES, REMOVE_PROPERTY, REMOVE_VALUE };