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