@adguard/agtree 2.1.2 → 3.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (734) hide show
  1. package/dist/cjs/ast-utils/clone.js +65 -0
  2. package/dist/cjs/ast-utils/modifiers.js +56 -0
  3. package/dist/cjs/ast-utils/network-rules.js +43 -0
  4. package/dist/cjs/ast-utils/scriptlets.js +93 -0
  5. package/dist/cjs/common/abp-snippet-injection-body-common.js +18 -0
  6. package/dist/cjs/common/agent-common.js +58 -0
  7. package/dist/cjs/common/ubo-selector-common.js +18 -0
  8. package/dist/cjs/compatibility-tables/base.js +264 -0
  9. package/dist/cjs/compatibility-tables/compatibility-table-data.js +15 -0
  10. package/dist/cjs/compatibility-tables/modifiers.js +57 -0
  11. package/dist/cjs/compatibility-tables/platforms.js +58 -0
  12. package/dist/cjs/compatibility-tables/redirects.js +102 -0
  13. package/dist/cjs/compatibility-tables/schemas/base.js +116 -0
  14. package/dist/cjs/compatibility-tables/schemas/modifier.js +107 -0
  15. package/dist/cjs/compatibility-tables/schemas/platform.js +71 -0
  16. package/dist/cjs/compatibility-tables/schemas/redirect.js +31 -0
  17. package/dist/cjs/compatibility-tables/schemas/resource-type.js +39 -0
  18. package/dist/cjs/compatibility-tables/schemas/scriptlet.js +81 -0
  19. package/dist/cjs/compatibility-tables/scriptlets.js +30 -0
  20. package/dist/cjs/compatibility-tables/utils/platform-helpers.js +112 -0
  21. package/dist/cjs/compatibility-tables/utils/resource-type-helpers.js +64 -0
  22. package/dist/cjs/compatibility-tables/utils/zod-camelcase.js +27 -0
  23. package/dist/cjs/converter/base-interfaces/base-converter.js +61 -0
  24. package/dist/cjs/converter/base-interfaces/conversion-result.js +41 -0
  25. package/dist/cjs/converter/base-interfaces/rule-converter-base.js +62 -0
  26. package/dist/cjs/converter/comment/index.js +56 -0
  27. package/dist/cjs/converter/cosmetic/css.js +71 -0
  28. package/dist/cjs/converter/cosmetic/element-hiding.js +64 -0
  29. package/dist/cjs/converter/cosmetic/header-removal.js +126 -0
  30. package/dist/cjs/converter/cosmetic/html.js +384 -0
  31. package/dist/cjs/converter/cosmetic/index.js +120 -0
  32. package/dist/cjs/converter/cosmetic/rule-modifiers/adg.js +81 -0
  33. package/dist/cjs/converter/cosmetic/scriptlet.js +356 -0
  34. package/dist/cjs/converter/css/index.js +193 -0
  35. package/dist/cjs/converter/data/css.js +133 -0
  36. package/dist/cjs/converter/filter-list.js +90 -0
  37. package/dist/cjs/converter/index.js +15 -0
  38. package/dist/cjs/converter/misc/network-rule-modifier.js +313 -0
  39. package/dist/cjs/converter/network/index.js +101 -0
  40. package/dist/cjs/converter/raw-filter-list.js +58 -0
  41. package/dist/cjs/converter/rule.js +83 -0
  42. package/dist/cjs/deserializer/base-deserializer.js +31 -0
  43. package/dist/cjs/deserializer/comment/agent-comment-deserializer.js +76 -0
  44. package/dist/cjs/deserializer/comment/agent-deserializer.js +67 -0
  45. package/dist/cjs/deserializer/comment/comment-rule-deserializer.js +109 -0
  46. package/dist/cjs/deserializer/comment/config-comment-deserializer.js +113 -0
  47. package/dist/cjs/deserializer/comment/hint-comment-deserializer.js +69 -0
  48. package/dist/cjs/deserializer/comment/hint-deserializer.js +88 -0
  49. package/dist/cjs/deserializer/comment/metadata-comment-deserializer.js +71 -0
  50. package/dist/cjs/deserializer/comment/pre-processor-comment-deserializer.js +114 -0
  51. package/dist/cjs/deserializer/comment/simple-comment-deserializer.js +67 -0
  52. package/dist/cjs/deserializer/cosmetic/cosmetic-rule-deserializer.js +127 -0
  53. package/dist/cjs/deserializer/cosmetic/css-injection-body-deserializer.js +55 -0
  54. package/dist/cjs/deserializer/cosmetic/element-hiding-body-deserializer.js +46 -0
  55. package/dist/cjs/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.js +37 -0
  56. package/dist/cjs/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.js +37 -0
  57. package/dist/cjs/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.js +52 -0
  58. package/dist/cjs/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.js +38 -0
  59. package/dist/cjs/deserializer/empty-rule-deserializer.js +46 -0
  60. package/dist/cjs/deserializer/filterlist-deserializer.js +83 -0
  61. package/dist/cjs/deserializer/index.js +15 -0
  62. package/dist/cjs/deserializer/invalid-rule-deserializer.js +48 -0
  63. package/dist/cjs/deserializer/invalid-rule-error-node-deserializer.js +48 -0
  64. package/dist/cjs/deserializer/misc/domain-list-deserializer.js +66 -0
  65. package/dist/cjs/deserializer/misc/list-item-deserializer.js +65 -0
  66. package/dist/cjs/deserializer/misc/list-items-deserializer.js +28 -0
  67. package/dist/cjs/deserializer/misc/logical-expression-deserializer.js +199 -0
  68. package/dist/cjs/deserializer/misc/modifier-deserializer.js +89 -0
  69. package/dist/cjs/deserializer/misc/modifier-list-deserializer.js +58 -0
  70. package/dist/cjs/deserializer/misc/parameter-list-deserializer.js +62 -0
  71. package/dist/cjs/deserializer/misc/value-deserializer.js +52 -0
  72. package/dist/cjs/deserializer/network/host-rule-deserializer.js +81 -0
  73. package/dist/cjs/deserializer/network/hostname-list-deserializer.js +50 -0
  74. package/dist/cjs/deserializer/network/network-rule-deserializer.js +67 -0
  75. package/dist/cjs/deserializer/rule-deserializer.js +67 -0
  76. package/dist/cjs/deserializer/syntax-deserialization-map.js +23 -0
  77. package/dist/cjs/errors/adblock-syntax-error.js +41 -0
  78. package/dist/cjs/errors/binary-schema-mismatch-error.js +39 -0
  79. package/dist/cjs/errors/not-implemented-error.js +33 -0
  80. package/dist/cjs/errors/rule-conversion-error.js +28 -0
  81. package/dist/cjs/generator/base-generator.js +29 -0
  82. package/dist/cjs/generator/comment/agent-comment-generator.js +30 -0
  83. package/dist/cjs/generator/comment/agent-generator.js +34 -0
  84. package/dist/cjs/generator/comment/comment-rule-generator.js +102 -0
  85. package/dist/cjs/generator/comment/config-comment-generator.js +44 -0
  86. package/dist/cjs/generator/comment/hint-comment-generator.js +27 -0
  87. package/dist/cjs/generator/comment/hint-generator.js +32 -0
  88. package/dist/cjs/generator/comment/metadata-comment-generator.js +32 -0
  89. package/dist/cjs/generator/comment/pre-processor-comment-generator.js +47 -0
  90. package/dist/cjs/generator/comment/simple-comment-generator.js +28 -0
  91. package/dist/cjs/generator/cosmetic/body/abp-snippet-injection-body-generator.js +36 -0
  92. package/dist/cjs/generator/cosmetic/body/adg-scriptlet-injection-body-generator.js +41 -0
  93. package/dist/cjs/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.js +43 -0
  94. package/dist/cjs/generator/cosmetic/cosmetic-rule-body-generator.js +92 -0
  95. package/dist/cjs/generator/cosmetic/cosmetic-rule-generator.js +66 -0
  96. package/dist/cjs/generator/cosmetic/cosmetic-rule-pattern-generator.js +41 -0
  97. package/dist/cjs/generator/css/adg-css-injection-generator.js +41 -0
  98. package/dist/cjs/generator/filterlist-generator.js +57 -0
  99. package/dist/cjs/generator/index.js +17 -0
  100. package/dist/cjs/generator/misc/domain-list-generator.js +25 -0
  101. package/dist/cjs/generator/misc/list-items-generator.js +38 -0
  102. package/dist/cjs/generator/misc/logical-expression-generator.js +47 -0
  103. package/dist/cjs/generator/misc/modifier-generator.js +33 -0
  104. package/dist/cjs/generator/misc/modifier-list-generator.js +28 -0
  105. package/dist/cjs/generator/misc/parameter-list-generator.js +41 -0
  106. package/dist/cjs/generator/misc/value-generator.js +23 -0
  107. package/dist/cjs/generator/network/host-rule-generator.js +38 -0
  108. package/dist/cjs/generator/network/network-rule-generator.js +37 -0
  109. package/dist/cjs/generator/rule-generator.js +64 -0
  110. package/dist/cjs/index.js +201 -0
  111. package/dist/cjs/marshalling-utils/comment/agent-comment-common.js +22 -0
  112. package/dist/cjs/marshalling-utils/comment/agent-common.js +43 -0
  113. package/dist/cjs/marshalling-utils/comment/config-comment-common.js +58 -0
  114. package/dist/cjs/marshalling-utils/comment/hint-comment-common.js +23 -0
  115. package/dist/cjs/marshalling-utils/comment/hint-common.js +60 -0
  116. package/dist/cjs/marshalling-utils/comment/metadata-comment-common.js +44 -0
  117. package/dist/cjs/marshalling-utils/comment/pre-processor-comment-common.js +63 -0
  118. package/dist/cjs/marshalling-utils/comment/simple-comment-common.js +23 -0
  119. package/dist/cjs/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.js +64 -0
  120. package/dist/cjs/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.js +68 -0
  121. package/dist/cjs/marshalling-utils/cosmetic/body/css-injection-body-common.js +25 -0
  122. package/dist/cjs/marshalling-utils/cosmetic/body/element-hiding-body-common.js +22 -0
  123. package/dist/cjs/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.js +116 -0
  124. package/dist/cjs/marshalling-utils/cosmetic/cosmetic-rule-common.js +51 -0
  125. package/dist/cjs/marshalling-utils/empty-rule-common.js +21 -0
  126. package/dist/cjs/marshalling-utils/filter-list-common.js +22 -0
  127. package/dist/cjs/marshalling-utils/invalid-rule-common.js +22 -0
  128. package/dist/cjs/marshalling-utils/invalid-rule-error-node-common.js +23 -0
  129. package/dist/cjs/marshalling-utils/misc/binary-type-common.js +67 -0
  130. package/dist/cjs/marshalling-utils/misc/domain-list-common.js +39 -0
  131. package/dist/cjs/marshalling-utils/misc/host-rule-common.js +26 -0
  132. package/dist/cjs/marshalling-utils/misc/hostname-list-common.js +22 -0
  133. package/dist/cjs/marshalling-utils/misc/list-item-common.js +23 -0
  134. package/dist/cjs/marshalling-utils/misc/logical-expression-common.js +89 -0
  135. package/dist/cjs/marshalling-utils/misc/modifier-common.js +236 -0
  136. package/dist/cjs/marshalling-utils/misc/modifier-list-common.js +22 -0
  137. package/dist/cjs/marshalling-utils/misc/parameter-list-common.js +22 -0
  138. package/dist/cjs/marshalling-utils/misc/value-common.js +23 -0
  139. package/dist/cjs/marshalling-utils/network/network-rule-common.js +26 -0
  140. package/dist/cjs/marshalling-utils/syntax-serialization-map.js +32 -0
  141. package/dist/cjs/nodes/index.js +180 -0
  142. package/dist/cjs/package.json.js +11 -0
  143. package/dist/cjs/parser/base-parser.js +32 -0
  144. package/dist/cjs/parser/comment/agent-comment-parser.js +121 -0
  145. package/dist/cjs/parser/comment/agent-parser.js +111 -0
  146. package/dist/cjs/parser/comment/comment-parser.js +110 -0
  147. package/dist/cjs/parser/comment/config-comment-parser.js +139 -0
  148. package/dist/cjs/parser/comment/hint-comment-parser.js +119 -0
  149. package/dist/cjs/parser/comment/hint-parser.js +131 -0
  150. package/dist/cjs/parser/comment/metadata-comment-parser.js +131 -0
  151. package/dist/cjs/parser/comment/preprocessor-parser.js +201 -0
  152. package/dist/cjs/parser/comment/simple-comment-parser.js +108 -0
  153. package/dist/cjs/parser/cosmetic/body/abp-snippet-injection-body-parser.js +81 -0
  154. package/dist/cjs/parser/cosmetic/body/adg-scriptlet-injection-body-parser.js +151 -0
  155. package/dist/cjs/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.js +112 -0
  156. package/dist/cjs/parser/cosmetic/cosmetic-rule-parser.js +456 -0
  157. package/dist/cjs/parser/css/adg-css-injection-parser.js +213 -0
  158. package/dist/cjs/parser/css/balancing.js +97 -0
  159. package/dist/cjs/parser/css/constants.js +21 -0
  160. package/dist/cjs/parser/css/css-token-stream.js +345 -0
  161. package/dist/cjs/parser/css/ubo-selector-parser.js +373 -0
  162. package/dist/cjs/parser/filterlist-parser.js +104 -0
  163. package/dist/cjs/parser/index.js +21 -0
  164. package/dist/cjs/parser/misc/app-list-parser.js +47 -0
  165. package/dist/cjs/parser/misc/domain-list-parser.js +54 -0
  166. package/dist/cjs/parser/misc/list-items-parser.js +116 -0
  167. package/dist/cjs/parser/misc/logical-expression-parser.js +283 -0
  168. package/dist/cjs/parser/misc/method-list-parser.js +48 -0
  169. package/dist/cjs/parser/misc/modifier-list.js +72 -0
  170. package/dist/cjs/parser/misc/modifier-parser.js +91 -0
  171. package/dist/cjs/parser/misc/parameter-list-parser.js +74 -0
  172. package/dist/cjs/parser/misc/stealth-option-list-parser.js +48 -0
  173. package/dist/cjs/parser/misc/ubo-parameter-list-parser.js +148 -0
  174. package/dist/cjs/parser/misc/value-parser.js +39 -0
  175. package/dist/cjs/parser/network/host-rule-parser.js +151 -0
  176. package/dist/cjs/parser/network/network-rule-parser.js +113 -0
  177. package/dist/cjs/parser/options.js +25 -0
  178. package/dist/cjs/parser/rule-parser.js +194 -0
  179. package/dist/cjs/serializer/base-serializer.js +31 -0
  180. package/dist/cjs/serializer/comment/agent-comment-serializer.js +73 -0
  181. package/dist/cjs/serializer/comment/agent-serializer.js +70 -0
  182. package/dist/cjs/serializer/comment/comment-rule-serializer.js +107 -0
  183. package/dist/cjs/serializer/comment/config-comment-serializer.js +84 -0
  184. package/dist/cjs/serializer/comment/hint-comment-serializer.js +64 -0
  185. package/dist/cjs/serializer/comment/hint-serializer.js +56 -0
  186. package/dist/cjs/serializer/comment/metadata-comment-serializer.js +75 -0
  187. package/dist/cjs/serializer/comment/pre-processor-comment-serializer.js +73 -0
  188. package/dist/cjs/serializer/comment/simple-comment-serializer.js +54 -0
  189. package/dist/cjs/serializer/cosmetic/body/abp-snippet-injection-body-serializer.js +38 -0
  190. package/dist/cjs/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.js +38 -0
  191. package/dist/cjs/serializer/cosmetic/body/scriptlet-body-serializer.js +49 -0
  192. package/dist/cjs/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.js +38 -0
  193. package/dist/cjs/serializer/cosmetic/cosmetic-rule-serializer.js +131 -0
  194. package/dist/cjs/serializer/cosmetic/css-injection-body-serializer.js +50 -0
  195. package/dist/cjs/serializer/cosmetic/element-hiding-body-serializer.js +39 -0
  196. package/dist/cjs/serializer/empty-rule-serializer.js +36 -0
  197. package/dist/cjs/serializer/filterlist-serializer.js +48 -0
  198. package/dist/cjs/serializer/index.js +13 -0
  199. package/dist/cjs/serializer/invalid-rule-error-node-serializer.js +40 -0
  200. package/dist/cjs/serializer/invalid-rule-serializer.js +39 -0
  201. package/dist/cjs/serializer/misc/domain-list-serializer.js +66 -0
  202. package/dist/cjs/serializer/misc/list-item-serializer.js +57 -0
  203. package/dist/cjs/serializer/misc/list-items-serializer.js +28 -0
  204. package/dist/cjs/serializer/misc/logical-expression-serializer.js +138 -0
  205. package/dist/cjs/serializer/misc/modifier-list-serializer.js +57 -0
  206. package/dist/cjs/serializer/misc/modifier-serializer.js +51 -0
  207. package/dist/cjs/serializer/misc/parameter-list-serializer.js +51 -0
  208. package/dist/cjs/serializer/misc/value-serializer.js +52 -0
  209. package/dist/cjs/serializer/network/host-rule-serializer.js +72 -0
  210. package/dist/cjs/serializer/network/hostname-list-serializer.js +49 -0
  211. package/dist/cjs/serializer/network/network-rule-serializer.js +56 -0
  212. package/dist/cjs/serializer/rule-serializer.js +63 -0
  213. package/dist/cjs/utils/adblockers.js +57 -0
  214. package/dist/cjs/utils/binary-schema-version.js +19 -0
  215. package/dist/cjs/utils/byte-buffer.js +93 -0
  216. package/dist/cjs/utils/categorizer.js +46 -0
  217. package/dist/cjs/utils/clone.js +30 -0
  218. package/dist/cjs/utils/constants.js +380 -0
  219. package/dist/cjs/utils/cosmetic-rule-separator.js +129 -0
  220. package/dist/cjs/utils/deep-freeze.js +34 -0
  221. package/dist/cjs/utils/domain.js +60 -0
  222. package/dist/cjs/utils/error.js +51 -0
  223. package/dist/cjs/utils/index.js +69 -0
  224. package/dist/cjs/utils/input-byte-buffer.js +259 -0
  225. package/dist/cjs/utils/is-chromium.js +22 -0
  226. package/dist/cjs/utils/logical-expression.js +94 -0
  227. package/dist/cjs/utils/multi-value-map.js +35 -0
  228. package/dist/cjs/utils/output-byte-buffer.js +225 -0
  229. package/dist/cjs/utils/position-provider.js +75 -0
  230. package/dist/cjs/utils/quotes.js +218 -0
  231. package/dist/cjs/utils/regexp.js +190 -0
  232. package/dist/cjs/utils/string.js +560 -0
  233. package/dist/cjs/utils/text-decoder-polyfill.js +109 -0
  234. package/dist/cjs/utils/text-encoder-polyfill.js +80 -0
  235. package/dist/cjs/utils/type-guards.js +52 -0
  236. package/dist/cjs/validator/constants.js +222 -0
  237. package/dist/cjs/validator/helpers.js +49 -0
  238. package/dist/cjs/validator/index.js +176 -0
  239. package/dist/cjs/validator/value.js +565 -0
  240. package/dist/cjs/version.js +20 -0
  241. package/dist/esm/ast-utils/clone.mjs +61 -0
  242. package/dist/esm/ast-utils/modifiers.mjs +53 -0
  243. package/dist/esm/ast-utils/network-rules.mjs +41 -0
  244. package/dist/esm/ast-utils/scriptlets.mjs +87 -0
  245. package/dist/esm/common/abp-snippet-injection-body-common.mjs +16 -0
  246. package/dist/esm/common/agent-common.mjs +56 -0
  247. package/dist/esm/common/ubo-selector-common.mjs +18 -0
  248. package/dist/esm/compatibility-tables/base.mjs +262 -0
  249. package/dist/esm/compatibility-tables/compatibility-table-data.mjs +11 -0
  250. package/dist/esm/compatibility-tables/modifiers.mjs +55 -0
  251. package/dist/esm/compatibility-tables/platforms.mjs +58 -0
  252. package/dist/esm/compatibility-tables/redirects.mjs +100 -0
  253. package/dist/esm/compatibility-tables/schemas/base.mjs +111 -0
  254. package/dist/esm/compatibility-tables/schemas/modifier.mjs +105 -0
  255. package/dist/esm/compatibility-tables/schemas/platform.mjs +69 -0
  256. package/dist/esm/compatibility-tables/schemas/redirect.mjs +29 -0
  257. package/dist/esm/compatibility-tables/schemas/resource-type.mjs +37 -0
  258. package/dist/esm/compatibility-tables/schemas/scriptlet.mjs +79 -0
  259. package/dist/esm/compatibility-tables/scriptlets.mjs +28 -0
  260. package/dist/esm/compatibility-tables/utils/platform-helpers.mjs +105 -0
  261. package/dist/esm/compatibility-tables/utils/resource-type-helpers.mjs +61 -0
  262. package/dist/esm/compatibility-tables/utils/zod-camelcase.mjs +25 -0
  263. package/dist/esm/converter/base-interfaces/base-converter.mjs +59 -0
  264. package/dist/esm/converter/base-interfaces/conversion-result.mjs +38 -0
  265. package/dist/esm/converter/base-interfaces/rule-converter-base.mjs +60 -0
  266. package/dist/esm/converter/comment/index.mjs +54 -0
  267. package/dist/esm/converter/cosmetic/css.mjs +69 -0
  268. package/dist/esm/converter/cosmetic/element-hiding.mjs +62 -0
  269. package/dist/esm/converter/cosmetic/header-removal.mjs +123 -0
  270. package/dist/esm/converter/cosmetic/html.mjs +381 -0
  271. package/dist/esm/converter/cosmetic/index.mjs +118 -0
  272. package/dist/esm/converter/cosmetic/rule-modifiers/adg.mjs +79 -0
  273. package/dist/esm/converter/cosmetic/scriptlet.mjs +354 -0
  274. package/dist/esm/converter/css/index.mjs +190 -0
  275. package/dist/esm/converter/data/css.mjs +126 -0
  276. package/dist/esm/converter/filter-list.mjs +88 -0
  277. package/dist/esm/converter/index.mjs +8 -0
  278. package/dist/esm/converter/misc/network-rule-modifier.mjs +311 -0
  279. package/dist/esm/converter/network/index.mjs +99 -0
  280. package/dist/esm/converter/raw-filter-list.mjs +56 -0
  281. package/dist/esm/converter/rule.mjs +81 -0
  282. package/dist/esm/deserializer/base-deserializer.mjs +29 -0
  283. package/dist/esm/deserializer/comment/agent-comment-deserializer.mjs +74 -0
  284. package/dist/esm/deserializer/comment/agent-deserializer.mjs +65 -0
  285. package/dist/esm/deserializer/comment/comment-rule-deserializer.mjs +107 -0
  286. package/dist/esm/deserializer/comment/config-comment-deserializer.mjs +111 -0
  287. package/dist/esm/deserializer/comment/hint-comment-deserializer.mjs +67 -0
  288. package/dist/esm/deserializer/comment/hint-deserializer.mjs +85 -0
  289. package/dist/esm/deserializer/comment/metadata-comment-deserializer.mjs +69 -0
  290. package/dist/esm/deserializer/comment/pre-processor-comment-deserializer.mjs +112 -0
  291. package/dist/esm/deserializer/comment/simple-comment-deserializer.mjs +65 -0
  292. package/dist/esm/deserializer/cosmetic/cosmetic-rule-deserializer.mjs +125 -0
  293. package/dist/esm/deserializer/cosmetic/css-injection-body-deserializer.mjs +53 -0
  294. package/dist/esm/deserializer/cosmetic/element-hiding-body-deserializer.mjs +44 -0
  295. package/dist/esm/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.mjs +35 -0
  296. package/dist/esm/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.mjs +35 -0
  297. package/dist/esm/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.mjs +50 -0
  298. package/dist/esm/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.mjs +35 -0
  299. package/dist/esm/deserializer/empty-rule-deserializer.mjs +44 -0
  300. package/dist/esm/deserializer/filterlist-deserializer.mjs +81 -0
  301. package/dist/esm/deserializer/index.mjs +8 -0
  302. package/dist/esm/deserializer/invalid-rule-deserializer.mjs +46 -0
  303. package/dist/esm/deserializer/invalid-rule-error-node-deserializer.mjs +46 -0
  304. package/dist/esm/deserializer/misc/domain-list-deserializer.mjs +64 -0
  305. package/dist/esm/deserializer/misc/list-item-deserializer.mjs +63 -0
  306. package/dist/esm/deserializer/misc/list-items-deserializer.mjs +26 -0
  307. package/dist/esm/deserializer/misc/logical-expression-deserializer.mjs +196 -0
  308. package/dist/esm/deserializer/misc/modifier-deserializer.mjs +87 -0
  309. package/dist/esm/deserializer/misc/modifier-list-deserializer.mjs +56 -0
  310. package/dist/esm/deserializer/misc/parameter-list-deserializer.mjs +60 -0
  311. package/dist/esm/deserializer/misc/value-deserializer.mjs +50 -0
  312. package/dist/esm/deserializer/network/host-rule-deserializer.mjs +79 -0
  313. package/dist/esm/deserializer/network/hostname-list-deserializer.mjs +48 -0
  314. package/dist/esm/deserializer/network/network-rule-deserializer.mjs +65 -0
  315. package/dist/esm/deserializer/rule-deserializer.mjs +65 -0
  316. package/dist/esm/deserializer/syntax-deserialization-map.mjs +21 -0
  317. package/dist/esm/errors/adblock-syntax-error.mjs +39 -0
  318. package/dist/esm/errors/binary-schema-mismatch-error.mjs +37 -0
  319. package/dist/esm/errors/not-implemented-error.mjs +31 -0
  320. package/dist/esm/errors/rule-conversion-error.mjs +26 -0
  321. package/dist/esm/generator/base-generator.mjs +27 -0
  322. package/dist/esm/generator/comment/agent-comment-generator.mjs +28 -0
  323. package/dist/esm/generator/comment/agent-generator.mjs +32 -0
  324. package/dist/esm/generator/comment/comment-rule-generator.mjs +100 -0
  325. package/dist/esm/generator/comment/config-comment-generator.mjs +42 -0
  326. package/dist/esm/generator/comment/hint-comment-generator.mjs +25 -0
  327. package/dist/esm/generator/comment/hint-generator.mjs +30 -0
  328. package/dist/esm/generator/comment/metadata-comment-generator.mjs +30 -0
  329. package/dist/esm/generator/comment/pre-processor-comment-generator.mjs +45 -0
  330. package/dist/esm/generator/comment/simple-comment-generator.mjs +26 -0
  331. package/dist/esm/generator/cosmetic/body/abp-snippet-injection-body-generator.mjs +34 -0
  332. package/dist/esm/generator/cosmetic/body/adg-scriptlet-injection-body-generator.mjs +39 -0
  333. package/dist/esm/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.mjs +41 -0
  334. package/dist/esm/generator/cosmetic/cosmetic-rule-body-generator.mjs +90 -0
  335. package/dist/esm/generator/cosmetic/cosmetic-rule-generator.mjs +64 -0
  336. package/dist/esm/generator/cosmetic/cosmetic-rule-pattern-generator.mjs +39 -0
  337. package/dist/esm/generator/css/adg-css-injection-generator.mjs +39 -0
  338. package/dist/esm/generator/filterlist-generator.mjs +55 -0
  339. package/dist/esm/generator/index.mjs +9 -0
  340. package/dist/esm/generator/misc/domain-list-generator.mjs +23 -0
  341. package/dist/esm/generator/misc/list-items-generator.mjs +36 -0
  342. package/dist/esm/generator/misc/logical-expression-generator.mjs +45 -0
  343. package/dist/esm/generator/misc/modifier-generator.mjs +31 -0
  344. package/dist/esm/generator/misc/modifier-list-generator.mjs +26 -0
  345. package/dist/esm/generator/misc/parameter-list-generator.mjs +39 -0
  346. package/dist/esm/generator/misc/value-generator.mjs +21 -0
  347. package/dist/esm/generator/network/host-rule-generator.mjs +36 -0
  348. package/dist/esm/generator/network/network-rule-generator.mjs +35 -0
  349. package/dist/esm/generator/rule-generator.mjs +62 -0
  350. package/dist/esm/index.mjs +70 -0
  351. package/dist/esm/marshalling-utils/comment/agent-comment-common.mjs +22 -0
  352. package/dist/esm/marshalling-utils/comment/agent-common.mjs +41 -0
  353. package/dist/esm/marshalling-utils/comment/config-comment-common.mjs +56 -0
  354. package/dist/esm/marshalling-utils/comment/hint-comment-common.mjs +23 -0
  355. package/dist/esm/marshalling-utils/comment/hint-common.mjs +57 -0
  356. package/dist/esm/marshalling-utils/comment/metadata-comment-common.mjs +42 -0
  357. package/dist/esm/marshalling-utils/comment/pre-processor-comment-common.mjs +60 -0
  358. package/dist/esm/marshalling-utils/comment/simple-comment-common.mjs +23 -0
  359. package/dist/esm/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.mjs +62 -0
  360. package/dist/esm/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.mjs +66 -0
  361. package/dist/esm/marshalling-utils/cosmetic/body/css-injection-body-common.mjs +25 -0
  362. package/dist/esm/marshalling-utils/cosmetic/body/element-hiding-body-common.mjs +22 -0
  363. package/dist/esm/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.mjs +114 -0
  364. package/dist/esm/marshalling-utils/cosmetic/cosmetic-rule-common.mjs +49 -0
  365. package/dist/esm/marshalling-utils/empty-rule-common.mjs +21 -0
  366. package/dist/esm/marshalling-utils/filter-list-common.mjs +22 -0
  367. package/dist/esm/marshalling-utils/invalid-rule-common.mjs +22 -0
  368. package/dist/esm/marshalling-utils/invalid-rule-error-node-common.mjs +23 -0
  369. package/dist/esm/marshalling-utils/misc/binary-type-common.mjs +67 -0
  370. package/dist/esm/marshalling-utils/misc/domain-list-common.mjs +37 -0
  371. package/dist/esm/marshalling-utils/misc/host-rule-common.mjs +26 -0
  372. package/dist/esm/marshalling-utils/misc/hostname-list-common.mjs +22 -0
  373. package/dist/esm/marshalling-utils/misc/list-item-common.mjs +23 -0
  374. package/dist/esm/marshalling-utils/misc/logical-expression-common.mjs +86 -0
  375. package/dist/esm/marshalling-utils/misc/modifier-common.mjs +232 -0
  376. package/dist/esm/marshalling-utils/misc/modifier-list-common.mjs +22 -0
  377. package/dist/esm/marshalling-utils/misc/parameter-list-common.mjs +22 -0
  378. package/dist/esm/marshalling-utils/misc/value-common.mjs +23 -0
  379. package/dist/esm/marshalling-utils/network/network-rule-common.mjs +26 -0
  380. package/dist/esm/marshalling-utils/syntax-serialization-map.mjs +30 -0
  381. package/dist/esm/nodes/index.mjs +180 -0
  382. package/dist/esm/package.json.mjs +9 -0
  383. package/dist/esm/parser/base-parser.mjs +30 -0
  384. package/dist/esm/parser/comment/agent-comment-parser.mjs +119 -0
  385. package/dist/esm/parser/comment/agent-parser.mjs +109 -0
  386. package/dist/esm/parser/comment/comment-parser.mjs +108 -0
  387. package/dist/esm/parser/comment/config-comment-parser.mjs +137 -0
  388. package/dist/esm/parser/comment/hint-comment-parser.mjs +117 -0
  389. package/dist/esm/parser/comment/hint-parser.mjs +129 -0
  390. package/dist/esm/parser/comment/metadata-comment-parser.mjs +129 -0
  391. package/dist/esm/parser/comment/preprocessor-parser.mjs +199 -0
  392. package/dist/esm/parser/comment/simple-comment-parser.mjs +106 -0
  393. package/dist/esm/parser/cosmetic/body/abp-snippet-injection-body-parser.mjs +79 -0
  394. package/dist/esm/parser/cosmetic/body/adg-scriptlet-injection-body-parser.mjs +149 -0
  395. package/dist/esm/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.mjs +110 -0
  396. package/dist/esm/parser/cosmetic/cosmetic-rule-parser.mjs +453 -0
  397. package/dist/esm/parser/css/adg-css-injection-parser.mjs +208 -0
  398. package/dist/esm/parser/css/balancing.mjs +94 -0
  399. package/dist/esm/parser/css/constants.mjs +18 -0
  400. package/dist/esm/parser/css/css-token-stream.mjs +343 -0
  401. package/dist/esm/parser/css/ubo-selector-parser.mjs +369 -0
  402. package/dist/esm/parser/filterlist-parser.mjs +102 -0
  403. package/dist/esm/parser/index.mjs +11 -0
  404. package/dist/esm/parser/misc/app-list-parser.mjs +45 -0
  405. package/dist/esm/parser/misc/domain-list-parser.mjs +52 -0
  406. package/dist/esm/parser/misc/list-items-parser.mjs +113 -0
  407. package/dist/esm/parser/misc/logical-expression-parser.mjs +281 -0
  408. package/dist/esm/parser/misc/method-list-parser.mjs +46 -0
  409. package/dist/esm/parser/misc/modifier-list.mjs +70 -0
  410. package/dist/esm/parser/misc/modifier-parser.mjs +89 -0
  411. package/dist/esm/parser/misc/parameter-list-parser.mjs +72 -0
  412. package/dist/esm/parser/misc/stealth-option-list-parser.mjs +46 -0
  413. package/dist/esm/parser/misc/ubo-parameter-list-parser.mjs +146 -0
  414. package/dist/esm/parser/misc/value-parser.mjs +37 -0
  415. package/dist/esm/parser/network/host-rule-parser.mjs +130 -0
  416. package/dist/esm/parser/network/network-rule-parser.mjs +111 -0
  417. package/dist/esm/parser/options.mjs +23 -0
  418. package/dist/esm/parser/rule-parser.mjs +192 -0
  419. package/dist/esm/serializer/base-serializer.mjs +29 -0
  420. package/dist/esm/serializer/comment/agent-comment-serializer.mjs +71 -0
  421. package/dist/esm/serializer/comment/agent-serializer.mjs +68 -0
  422. package/dist/esm/serializer/comment/comment-rule-serializer.mjs +105 -0
  423. package/dist/esm/serializer/comment/config-comment-serializer.mjs +82 -0
  424. package/dist/esm/serializer/comment/hint-comment-serializer.mjs +62 -0
  425. package/dist/esm/serializer/comment/hint-serializer.mjs +54 -0
  426. package/dist/esm/serializer/comment/metadata-comment-serializer.mjs +73 -0
  427. package/dist/esm/serializer/comment/pre-processor-comment-serializer.mjs +71 -0
  428. package/dist/esm/serializer/comment/simple-comment-serializer.mjs +52 -0
  429. package/dist/esm/serializer/cosmetic/body/abp-snippet-injection-body-serializer.mjs +36 -0
  430. package/dist/esm/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.mjs +36 -0
  431. package/dist/esm/serializer/cosmetic/body/scriptlet-body-serializer.mjs +47 -0
  432. package/dist/esm/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.mjs +36 -0
  433. package/dist/esm/serializer/cosmetic/cosmetic-rule-serializer.mjs +129 -0
  434. package/dist/esm/serializer/cosmetic/css-injection-body-serializer.mjs +48 -0
  435. package/dist/esm/serializer/cosmetic/element-hiding-body-serializer.mjs +37 -0
  436. package/dist/esm/serializer/empty-rule-serializer.mjs +34 -0
  437. package/dist/esm/serializer/filterlist-serializer.mjs +46 -0
  438. package/dist/esm/serializer/index.mjs +7 -0
  439. package/dist/esm/serializer/invalid-rule-error-node-serializer.mjs +38 -0
  440. package/dist/esm/serializer/invalid-rule-serializer.mjs +37 -0
  441. package/dist/esm/serializer/misc/domain-list-serializer.mjs +64 -0
  442. package/dist/esm/serializer/misc/list-item-serializer.mjs +55 -0
  443. package/dist/esm/serializer/misc/list-items-serializer.mjs +26 -0
  444. package/dist/esm/serializer/misc/logical-expression-serializer.mjs +136 -0
  445. package/dist/esm/serializer/misc/modifier-list-serializer.mjs +55 -0
  446. package/dist/esm/serializer/misc/modifier-serializer.mjs +49 -0
  447. package/dist/esm/serializer/misc/parameter-list-serializer.mjs +49 -0
  448. package/dist/esm/serializer/misc/value-serializer.mjs +50 -0
  449. package/dist/esm/serializer/network/host-rule-serializer.mjs +70 -0
  450. package/dist/esm/serializer/network/hostname-list-serializer.mjs +47 -0
  451. package/dist/esm/serializer/network/network-rule-serializer.mjs +54 -0
  452. package/dist/esm/serializer/rule-serializer.mjs +61 -0
  453. package/dist/esm/utils/adblockers.mjs +57 -0
  454. package/dist/esm/utils/binary-schema-version.mjs +17 -0
  455. package/dist/esm/utils/byte-buffer.mjs +91 -0
  456. package/dist/esm/utils/categorizer.mjs +44 -0
  457. package/dist/esm/utils/clone.mjs +28 -0
  458. package/dist/esm/utils/constants.mjs +249 -0
  459. package/dist/esm/utils/cosmetic-rule-separator.mjs +127 -0
  460. package/dist/esm/utils/deep-freeze.mjs +32 -0
  461. package/dist/esm/utils/domain.mjs +56 -0
  462. package/dist/esm/utils/error.mjs +49 -0
  463. package/dist/esm/utils/index.mjs +21 -0
  464. package/dist/esm/utils/input-byte-buffer.mjs +257 -0
  465. package/dist/esm/utils/is-chromium.mjs +20 -0
  466. package/dist/esm/utils/logical-expression.mjs +92 -0
  467. package/dist/esm/utils/multi-value-map.mjs +33 -0
  468. package/dist/esm/utils/output-byte-buffer.mjs +223 -0
  469. package/dist/esm/utils/position-provider.mjs +73 -0
  470. package/dist/esm/utils/quotes.mjs +215 -0
  471. package/dist/esm/utils/regexp.mjs +176 -0
  472. package/dist/esm/utils/string.mjs +556 -0
  473. package/dist/esm/utils/text-decoder-polyfill.mjs +107 -0
  474. package/dist/esm/utils/text-encoder-polyfill.mjs +78 -0
  475. package/dist/esm/utils/type-guards.mjs +47 -0
  476. package/dist/esm/validator/constants.mjs +210 -0
  477. package/dist/esm/validator/helpers.mjs +45 -0
  478. package/dist/esm/validator/index.mjs +174 -0
  479. package/dist/esm/validator/value.mjs +563 -0
  480. package/dist/esm/version.mjs +18 -0
  481. package/dist/types/ast-utils/clone.d.ts +26 -0
  482. package/dist/types/ast-utils/filter-list.d.ts +11 -0
  483. package/dist/types/ast-utils/modifiers.d.ts +20 -0
  484. package/dist/types/ast-utils/network-rules.d.ts +15 -0
  485. package/dist/types/ast-utils/scriptlets.d.ts +52 -0
  486. package/dist/types/common/abp-snippet-injection-body-common.d.ts +8 -0
  487. package/dist/types/common/agent-common.d.ts +10 -0
  488. package/dist/types/common/ubo-selector-common.d.ts +9 -0
  489. package/dist/types/compatibility-tables/base.d.ts +157 -0
  490. package/dist/types/compatibility-tables/compatibility-table-data.d.ts +67 -0
  491. package/dist/types/compatibility-tables/index.d.ts +13 -0
  492. package/dist/types/compatibility-tables/modifiers.d.ts +22 -0
  493. package/dist/types/compatibility-tables/platforms.d.ts +47 -0
  494. package/dist/types/compatibility-tables/redirects.d.ts +33 -0
  495. package/dist/types/compatibility-tables/schemas/base.d.ts +135 -0
  496. package/dist/types/compatibility-tables/schemas/index.d.ts +8 -0
  497. package/dist/types/compatibility-tables/schemas/modifier.d.ts +31 -0
  498. package/dist/types/compatibility-tables/schemas/platform.d.ts +16 -0
  499. package/dist/types/compatibility-tables/schemas/redirect.d.ts +25 -0
  500. package/dist/types/compatibility-tables/schemas/resource-type.d.ts +27 -0
  501. package/dist/types/compatibility-tables/schemas/scriptlet.d.ts +31 -0
  502. package/dist/types/compatibility-tables/scriptlets.d.ts +15 -0
  503. package/dist/types/compatibility-tables/types.d.ts +34 -0
  504. package/dist/types/compatibility-tables/utils/platform-helpers.d.ts +44 -0
  505. package/dist/types/compatibility-tables/utils/resource-type-helpers.d.ts +20 -0
  506. package/dist/types/compatibility-tables/utils/zod-camelcase.d.ts +15 -0
  507. package/dist/types/converter/base-interfaces/base-converter.d.ts +42 -0
  508. package/dist/types/converter/base-interfaces/conversion-result.d.ts +43 -0
  509. package/dist/types/converter/base-interfaces/rule-converter-base.d.ts +44 -0
  510. package/dist/types/converter/comment/index.d.ts +23 -0
  511. package/dist/types/converter/cosmetic/css.d.ts +23 -0
  512. package/dist/types/converter/cosmetic/element-hiding.d.ts +23 -0
  513. package/dist/types/converter/cosmetic/header-removal.d.ts +37 -0
  514. package/dist/types/converter/cosmetic/html.d.ts +54 -0
  515. package/dist/types/converter/cosmetic/index.d.ts +33 -0
  516. package/dist/types/converter/cosmetic/rule-modifiers/adg.d.ts +21 -0
  517. package/dist/types/converter/cosmetic/scriptlet.d.ts +33 -0
  518. package/dist/types/converter/css/index.d.ts +23 -0
  519. package/dist/types/converter/data/css.d.ts +48 -0
  520. package/dist/types/converter/filter-list.d.ts +31 -0
  521. package/dist/types/converter/index.d.ts +5 -0
  522. package/dist/types/converter/misc/network-rule-modifier.d.ts +35 -0
  523. package/dist/types/converter/network/index.d.ts +33 -0
  524. package/dist/types/converter/raw-filter-list.d.ts +31 -0
  525. package/dist/types/converter/raw-rule.d.ts +28 -0
  526. package/dist/types/converter/rule.d.ts +37 -0
  527. package/dist/types/deserializer/base-deserializer.d.ts +15 -0
  528. package/dist/types/deserializer/comment/agent-comment-deserializer.d.ts +34 -0
  529. package/dist/types/deserializer/comment/agent-deserializer.d.ts +25 -0
  530. package/dist/types/deserializer/comment/comment-rule-deserializer.d.ts +69 -0
  531. package/dist/types/deserializer/comment/config-comment-deserializer.d.ts +27 -0
  532. package/dist/types/deserializer/comment/hint-comment-deserializer.d.ts +24 -0
  533. package/dist/types/deserializer/comment/hint-deserializer.d.ts +26 -0
  534. package/dist/types/deserializer/comment/metadata-comment-deserializer.d.ts +26 -0
  535. package/dist/types/deserializer/comment/pre-processor-comment-deserializer.d.ts +29 -0
  536. package/dist/types/deserializer/comment/simple-comment-deserializer.d.ts +26 -0
  537. package/dist/types/deserializer/cosmetic/cosmetic-rule-deserializer.d.ts +12 -0
  538. package/dist/types/deserializer/cosmetic/css-injection-body-deserializer.d.ts +12 -0
  539. package/dist/types/deserializer/cosmetic/element-hiding-body-deserializer.d.ts +12 -0
  540. package/dist/types/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.d.ts +13 -0
  541. package/dist/types/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.d.ts +13 -0
  542. package/dist/types/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.d.ts +15 -0
  543. package/dist/types/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.d.ts +14 -0
  544. package/dist/types/deserializer/empty-rule-deserializer.d.ts +12 -0
  545. package/dist/types/deserializer/filterlist-deserializer.d.ts +30 -0
  546. package/dist/types/deserializer/index.d.ts +2 -0
  547. package/dist/types/deserializer/invalid-rule-deserializer.d.ts +12 -0
  548. package/dist/types/deserializer/invalid-rule-error-node-deserializer.d.ts +12 -0
  549. package/dist/types/deserializer/misc/domain-list-deserializer.d.ts +15 -0
  550. package/dist/types/deserializer/misc/list-item-deserializer.d.ts +13 -0
  551. package/dist/types/deserializer/misc/list-items-deserializer.d.ts +12 -0
  552. package/dist/types/deserializer/misc/logical-expression-deserializer.d.ts +55 -0
  553. package/dist/types/deserializer/misc/modifier-deserializer.d.ts +18 -0
  554. package/dist/types/deserializer/misc/modifier-list-deserializer.d.ts +20 -0
  555. package/dist/types/deserializer/misc/parameter-list-deserializer.d.ts +14 -0
  556. package/dist/types/deserializer/misc/value-deserializer.d.ts +17 -0
  557. package/dist/types/deserializer/network/host-rule-deserializer.d.ts +30 -0
  558. package/dist/types/deserializer/network/hostname-list-deserializer.d.ts +12 -0
  559. package/dist/types/deserializer/network/network-rule-deserializer.d.ts +18 -0
  560. package/dist/types/deserializer/rule-deserializer.d.ts +17 -0
  561. package/dist/types/deserializer/syntax-deserialization-map.d.ts +2 -0
  562. package/dist/types/errors/adblock-syntax-error.d.ts +25 -0
  563. package/dist/types/errors/binary-schema-mismatch-error.d.ts +23 -0
  564. package/dist/types/errors/not-implemented-error.d.ts +14 -0
  565. package/dist/types/errors/rule-conversion-error.d.ts +14 -0
  566. package/dist/types/generator/base-generator.d.ts +12 -0
  567. package/dist/types/generator/comment/agent-comment-generator.d.ts +11 -0
  568. package/dist/types/generator/comment/agent-generator.d.ts +11 -0
  569. package/dist/types/generator/comment/comment-rule-generator.d.ts +67 -0
  570. package/dist/types/generator/comment/config-comment-generator.d.ts +11 -0
  571. package/dist/types/generator/comment/hint-comment-generator.d.ts +11 -0
  572. package/dist/types/generator/comment/hint-generator.d.ts +11 -0
  573. package/dist/types/generator/comment/index.d.ts +2 -0
  574. package/dist/types/generator/comment/metadata-comment-generator.d.ts +11 -0
  575. package/dist/types/generator/comment/pre-processor-comment-generator.d.ts +11 -0
  576. package/dist/types/generator/comment/simple-comment-generator.d.ts +11 -0
  577. package/dist/types/generator/cosmetic/body/abp-snippet-injection-body-generator.d.ts +11 -0
  578. package/dist/types/generator/cosmetic/body/adg-scriptlet-injection-body-generator.d.ts +17 -0
  579. package/dist/types/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.d.ts +17 -0
  580. package/dist/types/generator/cosmetic/cosmetic-rule-body-generator.d.ts +15 -0
  581. package/dist/types/generator/cosmetic/cosmetic-rule-generator.d.ts +36 -0
  582. package/dist/types/generator/cosmetic/cosmetic-rule-pattern-generator.d.ts +15 -0
  583. package/dist/types/generator/cosmetic/index.d.ts +1 -0
  584. package/dist/types/generator/css/adg-css-injection-generator.d.ts +12 -0
  585. package/dist/types/generator/css/ubo-selector-generator.d.ts +11 -0
  586. package/dist/types/generator/filterlist-generator.d.ts +17 -0
  587. package/dist/types/generator/index.d.ts +3 -0
  588. package/dist/types/generator/misc/domain-list-generator.d.ts +12 -0
  589. package/dist/types/generator/misc/list-items-generator.d.ts +22 -0
  590. package/dist/types/generator/misc/logical-expression-generator.d.ts +11 -0
  591. package/dist/types/generator/misc/modifier-generator.d.ts +11 -0
  592. package/dist/types/generator/misc/modifier-list-generator.d.ts +11 -0
  593. package/dist/types/generator/misc/parameter-list-generator.d.ts +12 -0
  594. package/dist/types/generator/misc/value-generator.d.ts +11 -0
  595. package/dist/types/generator/network/host-rule-generator.d.ts +11 -0
  596. package/dist/types/generator/network/index.d.ts +2 -0
  597. package/dist/types/generator/network/network-rule-generator.d.ts +11 -0
  598. package/dist/types/generator/rule-generator.d.ts +21 -0
  599. package/dist/types/index.d.ts +55 -0
  600. package/dist/types/marshalling-utils/comment/agent-comment-common.d.ts +13 -0
  601. package/dist/types/marshalling-utils/comment/agent-common.d.ts +19 -0
  602. package/dist/types/marshalling-utils/comment/config-comment-common.d.ts +40 -0
  603. package/dist/types/marshalling-utils/comment/hint-comment-common.d.ts +14 -0
  604. package/dist/types/marshalling-utils/comment/hint-common.d.ts +32 -0
  605. package/dist/types/marshalling-utils/comment/metadata-comment-common.d.ts +20 -0
  606. package/dist/types/marshalling-utils/comment/pre-processor-comment-common.d.ts +36 -0
  607. package/dist/types/marshalling-utils/comment/simple-comment-common.d.ts +14 -0
  608. package/dist/types/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.d.ts +22 -0
  609. package/dist/types/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.d.ts +9 -0
  610. package/dist/types/marshalling-utils/cosmetic/body/css-injection-body-common.d.ts +16 -0
  611. package/dist/types/marshalling-utils/cosmetic/body/element-hiding-body-common.d.ts +13 -0
  612. package/dist/types/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.d.ts +9 -0
  613. package/dist/types/marshalling-utils/cosmetic/cosmetic-rule-common.d.ts +27 -0
  614. package/dist/types/marshalling-utils/empty-rule-common.d.ts +12 -0
  615. package/dist/types/marshalling-utils/filter-list-common.d.ts +13 -0
  616. package/dist/types/marshalling-utils/invalid-rule-common.d.ts +13 -0
  617. package/dist/types/marshalling-utils/invalid-rule-error-node-common.d.ts +14 -0
  618. package/dist/types/marshalling-utils/misc/binary-type-common.d.ts +56 -0
  619. package/dist/types/marshalling-utils/misc/domain-list-common.d.ts +23 -0
  620. package/dist/types/marshalling-utils/misc/host-rule-common.d.ts +17 -0
  621. package/dist/types/marshalling-utils/misc/hostname-list-common.d.ts +13 -0
  622. package/dist/types/marshalling-utils/misc/list-item-common.d.ts +14 -0
  623. package/dist/types/marshalling-utils/misc/logical-expression-common.d.ts +44 -0
  624. package/dist/types/marshalling-utils/misc/modifier-common.d.ts +40 -0
  625. package/dist/types/marshalling-utils/misc/modifier-list-common.d.ts +13 -0
  626. package/dist/types/marshalling-utils/misc/parameter-list-common.d.ts +13 -0
  627. package/dist/types/marshalling-utils/misc/value-common.d.ts +14 -0
  628. package/dist/types/marshalling-utils/network/network-rule-common.d.ts +17 -0
  629. package/dist/types/marshalling-utils/syntax-serialization-map.d.ts +2 -0
  630. package/dist/types/nodes/index.d.ts +1177 -0
  631. package/dist/types/parser/base-parser.d.ts +16 -0
  632. package/dist/types/parser/comment/agent-comment-parser.d.ts +42 -0
  633. package/dist/types/parser/comment/agent-parser.d.ts +33 -0
  634. package/dist/types/parser/comment/comment-parser.d.ts +76 -0
  635. package/dist/types/parser/comment/config-comment-parser.d.ts +31 -0
  636. package/dist/types/parser/comment/hint-comment-parser.d.ts +33 -0
  637. package/dist/types/parser/comment/hint-parser.d.ts +30 -0
  638. package/dist/types/parser/comment/metadata-comment-parser.d.ts +29 -0
  639. package/dist/types/parser/comment/preprocessor-parser.d.ts +43 -0
  640. package/dist/types/parser/comment/simple-comment-parser.d.ts +33 -0
  641. package/dist/types/parser/cosmetic/body/abp-snippet-injection-body-parser.d.ts +34 -0
  642. package/dist/types/parser/cosmetic/body/adg-scriptlet-injection-body-parser.d.ts +47 -0
  643. package/dist/types/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.d.ts +44 -0
  644. package/dist/types/parser/cosmetic/cosmetic-rule-parser.d.ts +51 -0
  645. package/dist/types/parser/css/adg-css-injection-parser.d.ts +28 -0
  646. package/dist/types/parser/css/balancing.d.ts +36 -0
  647. package/dist/types/parser/css/constants.d.ts +10 -0
  648. package/dist/types/parser/css/css-token-stream.d.ts +210 -0
  649. package/dist/types/parser/css/ubo-selector-parser.d.ts +46 -0
  650. package/dist/types/parser/filterlist-parser.d.ts +29 -0
  651. package/dist/types/parser/index.d.ts +5 -0
  652. package/dist/types/parser/misc/app-list-parser.d.ts +22 -0
  653. package/dist/types/parser/misc/domain-list-parser.d.ts +26 -0
  654. package/dist/types/parser/misc/list-items-parser.d.ts +34 -0
  655. package/dist/types/parser/misc/logical-expression-parser.d.ts +41 -0
  656. package/dist/types/parser/misc/method-list-parser.d.ts +22 -0
  657. package/dist/types/parser/misc/modifier-list.d.ts +24 -0
  658. package/dist/types/parser/misc/modifier-parser.d.ts +21 -0
  659. package/dist/types/parser/misc/parameter-list-parser.d.ts +14 -0
  660. package/dist/types/parser/misc/stealth-option-list-parser.d.ts +22 -0
  661. package/dist/types/parser/misc/ubo-parameter-list-parser.d.ts +18 -0
  662. package/dist/types/parser/misc/value-parser.d.ts +18 -0
  663. package/dist/types/parser/network/host-rule-parser.d.ts +35 -0
  664. package/dist/types/parser/network/network-rule-parser.d.ts +31 -0
  665. package/dist/types/parser/options.d.ts +41 -0
  666. package/dist/types/parser/rule-parser.d.ts +78 -0
  667. package/dist/types/serializer/base-serializer.d.ts +15 -0
  668. package/dist/types/serializer/comment/agent-comment-serializer.d.ts +34 -0
  669. package/dist/types/serializer/comment/agent-serializer.d.ts +24 -0
  670. package/dist/types/serializer/comment/comment-rule-serializer.d.ts +68 -0
  671. package/dist/types/serializer/comment/config-comment-serializer.d.ts +25 -0
  672. package/dist/types/serializer/comment/hint-comment-serializer.d.ts +23 -0
  673. package/dist/types/serializer/comment/hint-serializer.d.ts +24 -0
  674. package/dist/types/serializer/comment/metadata-comment-serializer.d.ts +25 -0
  675. package/dist/types/serializer/comment/pre-processor-comment-serializer.d.ts +28 -0
  676. package/dist/types/serializer/comment/simple-comment-serializer.d.ts +24 -0
  677. package/dist/types/serializer/cosmetic/body/abp-snippet-injection-body-serializer.d.ts +25 -0
  678. package/dist/types/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.d.ts +25 -0
  679. package/dist/types/serializer/cosmetic/body/scriptlet-body-serializer.d.ts +14 -0
  680. package/dist/types/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.d.ts +25 -0
  681. package/dist/types/serializer/cosmetic/cosmetic-rule-serializer.d.ts +26 -0
  682. package/dist/types/serializer/cosmetic/css-injection-body-serializer.d.ts +12 -0
  683. package/dist/types/serializer/cosmetic/element-hiding-body-serializer.d.ts +12 -0
  684. package/dist/types/serializer/empty-rule-serializer.d.ts +12 -0
  685. package/dist/types/serializer/filterlist-serializer.d.ts +16 -0
  686. package/dist/types/serializer/index.d.ts +1 -0
  687. package/dist/types/serializer/invalid-rule-error-node-serializer.d.ts +12 -0
  688. package/dist/types/serializer/invalid-rule-serializer.d.ts +12 -0
  689. package/dist/types/serializer/misc/domain-list-serializer.d.ts +21 -0
  690. package/dist/types/serializer/misc/list-item-serializer.d.ts +13 -0
  691. package/dist/types/serializer/misc/list-items-serializer.d.ts +12 -0
  692. package/dist/types/serializer/misc/logical-expression-serializer.d.ts +51 -0
  693. package/dist/types/serializer/misc/modifier-list-serializer.d.ts +20 -0
  694. package/dist/types/serializer/misc/modifier-serializer.d.ts +18 -0
  695. package/dist/types/serializer/misc/parameter-list-serializer.d.ts +14 -0
  696. package/dist/types/serializer/misc/value-serializer.d.ts +17 -0
  697. package/dist/types/serializer/network/host-rule-serializer.d.ts +30 -0
  698. package/dist/types/serializer/network/hostname-list-serializer.d.ts +12 -0
  699. package/dist/types/serializer/network/network-rule-serializer.d.ts +18 -0
  700. package/dist/types/serializer/rule-serializer.d.ts +17 -0
  701. package/dist/types/utils/adblockers.d.ts +48 -0
  702. package/dist/types/utils/binary-schema-version.d.ts +9 -0
  703. package/dist/types/utils/byte-buffer.d.ts +54 -0
  704. package/dist/types/utils/categorizer.d.ts +14 -0
  705. package/dist/types/utils/clone.d.ts +15 -0
  706. package/dist/types/utils/constants.d.ts +188 -0
  707. package/dist/types/utils/cosmetic-rule-separator.d.ts +45 -0
  708. package/dist/types/utils/deep-freeze.d.ts +13 -0
  709. package/dist/types/utils/domain.d.ts +26 -0
  710. package/dist/types/utils/error.d.ts +8 -0
  711. package/dist/types/utils/index.d.ts +15 -0
  712. package/dist/types/utils/input-byte-buffer.d.ts +140 -0
  713. package/dist/types/utils/is-chromium.d.ts +7 -0
  714. package/dist/types/utils/logical-expression.d.ts +45 -0
  715. package/dist/types/utils/multi-value-map.d.ts +16 -0
  716. package/dist/types/utils/output-byte-buffer.d.ts +126 -0
  717. package/dist/types/utils/position-provider.d.ts +46 -0
  718. package/dist/types/utils/quotes.d.ts +93 -0
  719. package/dist/types/utils/regexp.d.ts +54 -0
  720. package/dist/types/utils/storage-interface.d.ts +23 -0
  721. package/dist/types/utils/string.d.ts +277 -0
  722. package/dist/types/utils/text-decoder-polyfill.d.ts +14 -0
  723. package/dist/types/utils/text-encoder-polyfill.d.ts +18 -0
  724. package/dist/types/utils/type-guards.d.ts +47 -0
  725. package/dist/types/validator/constants.d.ts +89 -0
  726. package/dist/types/validator/helpers.d.ts +37 -0
  727. package/dist/types/validator/index.d.ts +38 -0
  728. package/dist/types/validator/value.d.ts +11 -0
  729. package/dist/types/version.d.ts +5 -0
  730. package/package.json +91 -37
  731. package/dist/agtree.d.ts +0 -4152
  732. package/dist/agtree.js +0 -15710
  733. package/dist/agtree.mjs +0 -15611
  734. package/dist/compatibility-table-data.js +0 -12634
@@ -0,0 +1,81 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ 'use strict';
8
+
9
+ var ruleConversionError = require('../../../errors/rule-conversion-error.js');
10
+ var modifiers = require('../../../ast-utils/modifiers.js');
11
+ var regexp = require('../../../utils/regexp.js');
12
+ var constants = require('../../../utils/constants.js');
13
+ var string = require('../../../utils/string.js');
14
+ var multiValueMap = require('../../../utils/multi-value-map.js');
15
+ var clone = require('../../../utils/clone.js');
16
+ var conversionResult = require('../../base-interfaces/conversion-result.js');
17
+
18
+ /**
19
+ * @file Cosmetic rule modifier converter from uBO to ADG
20
+ */
21
+ const UBO_MATCHES_PATH_OPERATOR = 'matches-path';
22
+ const ADG_PATH_MODIFIER = 'path';
23
+ /**
24
+ * Special characters in modifier regexps that should be escaped
25
+ */
26
+ const SPECIAL_MODIFIER_REGEX_CHARS = new Set([
27
+ constants.OPEN_SQUARE_BRACKET,
28
+ constants.CLOSE_SQUARE_BRACKET,
29
+ constants.COMMA,
30
+ constants.ESCAPE_CHARACTER,
31
+ ]);
32
+ /**
33
+ * Helper class for converting cosmetic rule modifiers from uBO to ADG
34
+ */
35
+ class AdgCosmeticRuleModifierConverter {
36
+ /**
37
+ * Converts a uBO cosmetic rule modifier list to ADG, if possible.
38
+ *
39
+ * @param modifierList Cosmetic rule modifier list node to convert
40
+ * @returns An object which follows the {@link ConversionResult} interface. Its `result` property contains
41
+ * the converted node, and its `isConverted` flag indicates whether the original node was converted.
42
+ * If the node was not converted, the result will contain the original node with the same object reference
43
+ * @throws If the modifier list cannot be converted
44
+ * @see {@link https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#cosmetic-filter-operators}
45
+ */
46
+ static convertFromUbo(modifierList) {
47
+ const conversionMap = new multiValueMap.MultiValueMap();
48
+ modifierList.children.forEach((modifier, index) => {
49
+ // :matches-path
50
+ if (modifier.name.value === UBO_MATCHES_PATH_OPERATOR) {
51
+ if (!modifier.value) {
52
+ throw new ruleConversionError.RuleConversionError(`'${UBO_MATCHES_PATH_OPERATOR}' operator requires a value`);
53
+ }
54
+ const value = regexp.RegExpUtils.isRegexPattern(modifier.value.value)
55
+ ? string.StringUtils.escapeCharacters(modifier.value.value, SPECIAL_MODIFIER_REGEX_CHARS)
56
+ : modifier.value.value;
57
+ // Convert uBO's `:matches-path(...)` operator to ADG's `$path=...` modifier
58
+ conversionMap.add(index, modifiers.createModifierNode(ADG_PATH_MODIFIER,
59
+ // We should negate the regexp if the modifier is an exception
60
+ modifier.exception
61
+ // eslint-disable-next-line max-len
62
+ ? `${constants.REGEX_MARKER}${regexp.RegExpUtils.negateRegexPattern(regexp.RegExpUtils.patternToRegexp(value))}${constants.REGEX_MARKER}`
63
+ : value));
64
+ }
65
+ });
66
+ // Check if we have any converted modifiers
67
+ if (conversionMap.size) {
68
+ const modifierListClone = clone.clone(modifierList);
69
+ // Replace the original modifiers with the converted ones
70
+ modifierListClone.children = modifierListClone.children.map((modifier, index) => {
71
+ const convertedModifier = conversionMap.get(index);
72
+ return convertedModifier ?? modifier;
73
+ }).flat();
74
+ return conversionResult.createConversionResult(modifierListClone, true);
75
+ }
76
+ // Otherwise, just return the original modifier list
77
+ return conversionResult.createConversionResult(modifierList, false);
78
+ }
79
+ }
80
+
81
+ exports.AdgCosmeticRuleModifierConverter = AdgCosmeticRuleModifierConverter;
@@ -0,0 +1,356 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ 'use strict';
8
+
9
+ var index = require('../../nodes/index.js');
10
+ var ruleConverterBase = require('../base-interfaces/rule-converter-base.js');
11
+ var adblockers = require('../../utils/adblockers.js');
12
+ var quotes = require('../../utils/quotes.js');
13
+ var constants = require('../../utils/constants.js');
14
+ var scriptlets = require('../../ast-utils/scriptlets.js');
15
+ var conversionResult = require('../base-interfaces/conversion-result.js');
16
+ var clone = require('../../ast-utils/clone.js');
17
+ require('../../compatibility-tables/modifiers.js');
18
+ require('../../compatibility-tables/redirects.js');
19
+ var scriptlets$1 = require('../../compatibility-tables/scriptlets.js');
20
+ var platforms = require('../../compatibility-tables/platforms.js');
21
+ require('../../compatibility-tables/schemas/base.js');
22
+ require('../../compatibility-tables/schemas/modifier.js');
23
+ require('../../compatibility-tables/schemas/redirect.js');
24
+ require('../../compatibility-tables/schemas/scriptlet.js');
25
+ require('../../compatibility-tables/schemas/platform.js');
26
+ require('../../compatibility-tables/utils/platform-helpers.js');
27
+ require('../../compatibility-tables/schemas/resource-type.js');
28
+ require('../../compatibility-tables/utils/resource-type-helpers.js');
29
+ var typeGuards = require('../../utils/type-guards.js');
30
+
31
+ /**
32
+ * @file Scriptlet injection rule converter
33
+ */
34
+ const ABP_SCRIPTLET_PREFIX = 'abp-';
35
+ const UBO_SCRIPTLET_PREFIX = 'ubo-';
36
+ const UBO_SCRIPTLET_PREFIX_LENGTH = UBO_SCRIPTLET_PREFIX.length;
37
+ const UBO_SCRIPTLET_JS_SUFFIX = '.js';
38
+ const UBO_SCRIPTLET_JS_SUFFIX_LENGTH = UBO_SCRIPTLET_JS_SUFFIX.length;
39
+ const COMMA_SEPARATOR = ',';
40
+ const ADG_SET_CONSTANT_NAME = 'set-constant';
41
+ const ADG_SET_CONSTANT_EMPTY_STRING = '';
42
+ const ADG_SET_CONSTANT_EMPTY_ARRAY = 'emptyArr';
43
+ const ADG_SET_CONSTANT_EMPTY_OBJECT = 'emptyObj';
44
+ const UBO_SET_CONSTANT_EMPTY_STRING = '\'\'';
45
+ const UBO_SET_CONSTANT_EMPTY_ARRAY = '[]';
46
+ const UBO_SET_CONSTANT_EMPTY_OBJECT = '{}';
47
+ const ADG_PREVENT_FETCH_NAME = 'prevent-fetch';
48
+ const ADG_PREVENT_FETCH_EMPTY_STRING = '';
49
+ const ADG_PREVENT_FETCH_WILDCARD = '*';
50
+ const UBO_NO_FETCH_IF_WILDCARD = '/^/';
51
+ const UBO_REMOVE_CLASS_NAME = 'remove-class.js';
52
+ const UBO_REMOVE_ATTR_NAME = 'remove-attr.js';
53
+ const setConstantAdgToUboMap = {
54
+ [ADG_SET_CONSTANT_EMPTY_STRING]: UBO_SET_CONSTANT_EMPTY_STRING,
55
+ [ADG_SET_CONSTANT_EMPTY_ARRAY]: UBO_SET_CONSTANT_EMPTY_ARRAY,
56
+ [ADG_SET_CONSTANT_EMPTY_OBJECT]: UBO_SET_CONSTANT_EMPTY_OBJECT,
57
+ };
58
+ const REMOVE_ATTR_CLASS_APPLYING = new Set([
59
+ 'asap',
60
+ 'stay',
61
+ 'complete',
62
+ ]);
63
+ /**
64
+ * Scriptlet injection rule converter class
65
+ *
66
+ * @todo Implement `convertToUbo` and `convertToAbp`
67
+ */
68
+ class ScriptletRuleConverter extends ruleConverterBase.RuleConverterBase {
69
+ /**
70
+ * Converts a scriptlet injection rule to AdGuard format, if possible.
71
+ *
72
+ * @param rule Rule node to convert
73
+ * @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
74
+ * the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
75
+ * If the rule was not converted, the result array will contain the original node with the same object reference
76
+ * @throws If the rule is invalid or cannot be converted
77
+ */
78
+ static convertToAdg(rule) {
79
+ // Ignore AdGuard rules
80
+ if (rule.syntax === adblockers.AdblockSyntax.Adg) {
81
+ return conversionResult.createNodeConversionResult([rule], false);
82
+ }
83
+ const separator = rule.separator.value;
84
+ let convertedSeparator = separator;
85
+ convertedSeparator = rule.exception
86
+ ? index.CosmeticRuleSeparator.AdgJsInjectionException
87
+ : index.CosmeticRuleSeparator.AdgJsInjection;
88
+ const convertedScriptlets = [];
89
+ for (const scriptlet of rule.body.children) {
90
+ // Clone the node to avoid any side effects
91
+ const scriptletClone = clone.cloneScriptletRuleNode(scriptlet);
92
+ // Remove possible quotes just to make it easier to work with the scriptlet name
93
+ const scriptletName = quotes.QuoteUtils.setStringQuoteType(scriptlets.getScriptletName(scriptletClone), quotes.QuoteType.None);
94
+ // Add prefix if it's not already there
95
+ let prefix;
96
+ // In uBO / ABP syntax, if a parameter contains the separator character, it should be escaped,
97
+ // but during the conversion, we need to unescape them, because AdGuard syntax uses quotes to
98
+ // distinguish between parameters.
99
+ let charToUnescape;
100
+ switch (rule.syntax) {
101
+ case adblockers.AdblockSyntax.Abp:
102
+ prefix = ABP_SCRIPTLET_PREFIX;
103
+ charToUnescape = constants.SPACE;
104
+ break;
105
+ case adblockers.AdblockSyntax.Ubo:
106
+ prefix = UBO_SCRIPTLET_PREFIX;
107
+ charToUnescape = COMMA_SEPARATOR;
108
+ break;
109
+ default:
110
+ prefix = constants.EMPTY;
111
+ }
112
+ if (!scriptletName.startsWith(prefix)) {
113
+ scriptlets.setScriptletName(scriptletClone, `${prefix}${scriptletName}`);
114
+ }
115
+ if (!typeGuards.isUndefined(charToUnescape)) {
116
+ scriptlets.transformAllScriptletArguments(scriptletClone, (value) => {
117
+ if (!typeGuards.isNull(value)) {
118
+ return quotes.QuoteUtils.unescapeSingleEscapedOccurrences(value, charToUnescape);
119
+ }
120
+ return value;
121
+ });
122
+ }
123
+ if (rule.syntax === adblockers.AdblockSyntax.Ubo) {
124
+ const scriptletData = scriptlets$1.scriptletsCompatibilityTable.getFirst(scriptletName, platforms.GenericPlatform.UboAny);
125
+ // Some scriptlets have special values that need to be converted
126
+ if (scriptletData
127
+ && (scriptletData.name === UBO_REMOVE_CLASS_NAME
128
+ || scriptletData.name === UBO_REMOVE_ATTR_NAME)
129
+ && scriptletClone.children.length > 2) {
130
+ const selectors = [];
131
+ let applying = null;
132
+ let lastArg = scriptletClone.children.pop();
133
+ // The very last argument might be the 'applying' parameter
134
+ if (lastArg) {
135
+ if (REMOVE_ATTR_CLASS_APPLYING.has(lastArg.value)) {
136
+ applying = lastArg.value;
137
+ }
138
+ else {
139
+ selectors.push(lastArg.value);
140
+ }
141
+ }
142
+ while (scriptletClone.children.length > 2) {
143
+ lastArg = scriptletClone.children.pop();
144
+ if (lastArg) {
145
+ selectors.push(lastArg.value.trim());
146
+ }
147
+ }
148
+ // Set last arg to be the combined selectors (in reverse order, because we popped them)
149
+ if (selectors.length > 0) {
150
+ scriptletClone.children.push({
151
+ type: 'Value',
152
+ value: selectors.reverse().join(', '),
153
+ });
154
+ }
155
+ // Push back the 'applying' parameter if it was found previously
156
+ if (!typeGuards.isNull(applying)) {
157
+ // If we don't have any selectors,
158
+ // we need to add an empty parameter before the 'applying' one
159
+ if (selectors.length === 0) {
160
+ scriptletClone.children.push({
161
+ type: 'Value',
162
+ value: constants.EMPTY,
163
+ });
164
+ }
165
+ scriptletClone.children.push({
166
+ type: 'Value',
167
+ value: applying,
168
+ });
169
+ }
170
+ }
171
+ }
172
+ // ADG scriptlet parameters should be quoted, and single quoted are preferred
173
+ scriptlets.setScriptletQuoteType(scriptletClone, quotes.QuoteType.Single);
174
+ convertedScriptlets.push(scriptletClone);
175
+ }
176
+ if (rule.body.children.length === 0) {
177
+ const convertedScriptletNode = {
178
+ category: rule.category,
179
+ type: rule.type,
180
+ syntax: adblockers.AdblockSyntax.Adg,
181
+ exception: rule.exception,
182
+ domains: clone.cloneDomainListNode(rule.domains),
183
+ separator: {
184
+ type: 'Value',
185
+ value: convertedSeparator,
186
+ },
187
+ body: {
188
+ type: rule.body.type,
189
+ children: [],
190
+ },
191
+ };
192
+ if (rule.modifiers) {
193
+ convertedScriptletNode.modifiers = clone.cloneModifierListNode(rule.modifiers);
194
+ }
195
+ return conversionResult.createNodeConversionResult([convertedScriptletNode], true);
196
+ }
197
+ return conversionResult.createNodeConversionResult(convertedScriptlets.map((scriptlet) => {
198
+ const res = {
199
+ category: rule.category,
200
+ type: rule.type,
201
+ syntax: adblockers.AdblockSyntax.Adg,
202
+ exception: rule.exception,
203
+ domains: clone.cloneDomainListNode(rule.domains),
204
+ separator: {
205
+ type: 'Value',
206
+ value: convertedSeparator,
207
+ },
208
+ body: {
209
+ type: rule.body.type,
210
+ children: [scriptlet],
211
+ },
212
+ };
213
+ if (rule.modifiers) {
214
+ res.modifiers = clone.cloneModifierListNode(rule.modifiers);
215
+ }
216
+ return res;
217
+ }), true);
218
+ }
219
+ /**
220
+ * Converts a scriptlet injection rule to uBlock format, if possible.
221
+ *
222
+ * @param rule Rule node to convert
223
+ * @returns An object which follows the {@link NodeConversionResult} interface. Its `result` property contains
224
+ * the array of converted rule nodes, and its `isConverted` flag indicates whether the original rule was converted.
225
+ * If the rule was not converted, the result array will contain the original node with the same object reference
226
+ * @throws If the rule is invalid or cannot be converted
227
+ */
228
+ static convertToUbo(rule) {
229
+ // Ignore uBlock rules
230
+ if (rule.syntax === adblockers.AdblockSyntax.Ubo) {
231
+ return conversionResult.createNodeConversionResult([rule], false);
232
+ }
233
+ const separator = rule.separator.value;
234
+ let convertedSeparator = separator;
235
+ convertedSeparator = rule.exception
236
+ ? index.CosmeticRuleSeparator.ElementHidingException
237
+ : index.CosmeticRuleSeparator.ElementHiding;
238
+ const convertedScriptlets = [];
239
+ for (const scriptlet of rule.body.children) {
240
+ // Clone the node to avoid any side effects
241
+ const scriptletClone = clone.cloneScriptletRuleNode(scriptlet);
242
+ // Remove possible quotes just to make it easier to work with the scriptlet name
243
+ const scriptletName = quotes.QuoteUtils.setStringQuoteType(scriptlets.getScriptletName(scriptletClone), quotes.QuoteType.None);
244
+ let uboScriptletName;
245
+ if (rule.syntax === adblockers.AdblockSyntax.Adg && scriptletName.startsWith(UBO_SCRIPTLET_PREFIX)) {
246
+ // Special case: AdGuard syntax 'preserves' the original scriptlet name,
247
+ // so we need to convert it back by removing the uBO prefix
248
+ uboScriptletName = scriptletName.slice(UBO_SCRIPTLET_PREFIX_LENGTH);
249
+ }
250
+ else {
251
+ // Otherwise, try to find the corresponding uBO scriptlet name, or use the original one if not found
252
+ const uboScriptlet = scriptlets$1.scriptletsCompatibilityTable.getFirst(scriptletName, platforms.GenericPlatform.UboAny);
253
+ uboScriptletName = uboScriptlet?.name ?? scriptletName;
254
+ }
255
+ // Remove the '.js' suffix if it's there - its presence is not mandatory
256
+ if (uboScriptletName.endsWith(UBO_SCRIPTLET_JS_SUFFIX)) {
257
+ uboScriptletName = uboScriptletName.slice(0, -UBO_SCRIPTLET_JS_SUFFIX_LENGTH);
258
+ }
259
+ scriptlets.setScriptletName(scriptletClone, uboScriptletName);
260
+ scriptlets.setScriptletQuoteType(scriptletClone, quotes.QuoteType.None);
261
+ // Escape unescaped commas in parameters, because uBlock Origin uses them as separators.
262
+ // For example, the following AdGuard rule:
263
+ //
264
+ // example.com#%#//scriptlet('spoof-css', '.adsbygoogle, #ads', 'visibility', 'visible')
265
+ //
266
+ // ↓↓ should be converted to ↓↓
267
+ //
268
+ // example.com##+js(spoof-css.js, .adsbygoogle\, #ads, visibility, visible)
269
+ // ------------ ------------------- ---------- -------
270
+ // arg 0 arg 1 arg 2 arg 3
271
+ //
272
+ // and we need to escape the comma in the second argument to prevent it from being treated
273
+ // as two separate arguments.
274
+ scriptlets.transformAllScriptletArguments(scriptletClone, (value) => {
275
+ if (!typeGuards.isNull(value)) {
276
+ return quotes.QuoteUtils.escapeUnescapedOccurrences(value, COMMA_SEPARATOR);
277
+ }
278
+ return value;
279
+ });
280
+ // Unescape spaces in parameters, because uBlock Origin doesn't treat them as separators.
281
+ if (rule.syntax === adblockers.AdblockSyntax.Abp) {
282
+ scriptlets.transformAllScriptletArguments(scriptletClone, (value) => {
283
+ if (!typeGuards.isNull(value)) {
284
+ return quotes.QuoteUtils.unescapeSingleEscapedOccurrences(value, constants.SPACE);
285
+ }
286
+ return value;
287
+ });
288
+ }
289
+ // Some scriptlets have special values that need to be converted
290
+ switch (scriptletName) {
291
+ case ADG_SET_CONSTANT_NAME:
292
+ scriptlets.transformNthScriptletArgument(scriptletClone, 2, (value) => {
293
+ if (!typeGuards.isNull(value)) {
294
+ return setConstantAdgToUboMap[value] ?? value;
295
+ }
296
+ return value;
297
+ });
298
+ break;
299
+ case ADG_PREVENT_FETCH_NAME:
300
+ scriptlets.transformNthScriptletArgument(scriptletClone, 1, (value) => {
301
+ if (value === ADG_PREVENT_FETCH_EMPTY_STRING || value === ADG_PREVENT_FETCH_WILDCARD) {
302
+ return UBO_NO_FETCH_IF_WILDCARD;
303
+ }
304
+ return value;
305
+ });
306
+ break;
307
+ }
308
+ convertedScriptlets.push(scriptletClone);
309
+ }
310
+ // TODO: Refactor redundant code
311
+ if (rule.body.children.length === 0) {
312
+ const convertedScriptletNode = {
313
+ category: rule.category,
314
+ type: rule.type,
315
+ syntax: adblockers.AdblockSyntax.Ubo,
316
+ exception: rule.exception,
317
+ domains: clone.cloneDomainListNode(rule.domains),
318
+ separator: {
319
+ type: 'Value',
320
+ value: convertedSeparator,
321
+ },
322
+ body: {
323
+ type: rule.body.type,
324
+ children: [],
325
+ },
326
+ };
327
+ if (rule.modifiers) {
328
+ convertedScriptletNode.modifiers = clone.cloneModifierListNode(rule.modifiers);
329
+ }
330
+ return conversionResult.createNodeConversionResult([convertedScriptletNode], true);
331
+ }
332
+ return conversionResult.createNodeConversionResult(convertedScriptlets.map((scriptlet) => {
333
+ const res = {
334
+ category: rule.category,
335
+ type: rule.type,
336
+ syntax: adblockers.AdblockSyntax.Ubo,
337
+ exception: rule.exception,
338
+ domains: clone.cloneDomainListNode(rule.domains),
339
+ separator: {
340
+ type: 'Value',
341
+ value: convertedSeparator,
342
+ },
343
+ body: {
344
+ type: rule.body.type,
345
+ children: [scriptlet],
346
+ },
347
+ };
348
+ if (rule.modifiers) {
349
+ res.modifiers = clone.cloneModifierListNode(rule.modifiers);
350
+ }
351
+ return res;
352
+ }), true);
353
+ }
354
+ }
355
+
356
+ exports.ScriptletRuleConverter = ScriptletRuleConverter;
@@ -0,0 +1,193 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.1 (build date: Tue, 12 Nov 2024 16:11:58 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ 'use strict';
8
+
9
+ var cssTokenizer = require('@adguard/css-tokenizer');
10
+ var sprintfJs = require('sprintf-js');
11
+ var constants = require('../../utils/constants.js');
12
+ var css = require('../data/css.js');
13
+ var baseConverter = require('../base-interfaces/base-converter.js');
14
+ var conversionResult = require('../base-interfaces/conversion-result.js');
15
+ var cssTokenStream = require('../../parser/css/css-token-stream.js');
16
+
17
+ const ERROR_MESSAGES = {
18
+ // eslint-disable-next-line max-len
19
+ INVALID_ATTRIBUTE_VALUE: `Expected '${cssTokenizer.getFormattedTokenName(cssTokenizer.TokenType.Ident)}' or '${cssTokenizer.getFormattedTokenName(cssTokenizer.TokenType.String)}' as attribute value, but got '%s' with value '%s`,
20
+ };
21
+ var PseudoClasses;
22
+ (function (PseudoClasses) {
23
+ PseudoClasses["AbpContains"] = "-abp-contains";
24
+ PseudoClasses["AbpHas"] = "-abp-has";
25
+ PseudoClasses["Contains"] = "contains";
26
+ PseudoClasses["Has"] = "has";
27
+ PseudoClasses["HasText"] = "has-text";
28
+ PseudoClasses["MatchesCss"] = "matches-css";
29
+ PseudoClasses["MatchesCssAfter"] = "matches-css-after";
30
+ PseudoClasses["MatchesCssBefore"] = "matches-css-before";
31
+ PseudoClasses["Not"] = "not";
32
+ })(PseudoClasses || (PseudoClasses = {}));
33
+ var PseudoElements;
34
+ (function (PseudoElements) {
35
+ PseudoElements["After"] = "after";
36
+ PseudoElements["Before"] = "before";
37
+ })(PseudoElements || (PseudoElements = {}));
38
+ const PSEUDO_ELEMENT_NAMES = new Set([
39
+ PseudoElements.After,
40
+ PseudoElements.Before,
41
+ ]);
42
+ /**
43
+ * CSS selector converter
44
+ *
45
+ * @todo Implement `convertToUbo` and `convertToAbp`
46
+ */
47
+ class CssSelectorConverter extends baseConverter.BaseConverter {
48
+ /**
49
+ * Converts Extended CSS elements to AdGuard-compatible ones
50
+ *
51
+ * @param selectorList Selector list to convert
52
+ * @returns An object which follows the {@link ConversionResult} interface. Its `result` property contains
53
+ * the converted node, and its `isConverted` flag indicates whether the original node was converted.
54
+ * If the node was not converted, the result will contain the original node with the same object reference
55
+ * @throws If the rule is invalid or incompatible
56
+ */
57
+ static convertToAdg(selectorList) {
58
+ const stream = selectorList instanceof cssTokenStream.CssTokenStream
59
+ ? selectorList
60
+ : new cssTokenStream.CssTokenStream(selectorList);
61
+ const converted = [];
62
+ const convertAndPushPseudo = (pseudo) => {
63
+ switch (pseudo) {
64
+ case PseudoClasses.AbpContains:
65
+ case PseudoClasses.HasText:
66
+ converted.push(PseudoClasses.Contains);
67
+ converted.push(constants.OPEN_PARENTHESIS);
68
+ break;
69
+ case PseudoClasses.AbpHas:
70
+ converted.push(PseudoClasses.Has);
71
+ converted.push(constants.OPEN_PARENTHESIS);
72
+ break;
73
+ // a bit special case:
74
+ // - `:matches-css-before(...)` → `:matches-css(before, ...)`
75
+ // - `:matches-css-after(...)` → `:matches-css(after, ...)`
76
+ case PseudoClasses.MatchesCssBefore:
77
+ case PseudoClasses.MatchesCssAfter:
78
+ converted.push(PseudoClasses.MatchesCss);
79
+ converted.push(constants.OPEN_PARENTHESIS);
80
+ converted.push(pseudo.substring(PseudoClasses.MatchesCss.length + 1));
81
+ converted.push(constants.COMMA);
82
+ break;
83
+ default:
84
+ converted.push(pseudo);
85
+ converted.push(constants.OPEN_PARENTHESIS);
86
+ break;
87
+ }
88
+ };
89
+ while (!stream.isEof()) {
90
+ const token = stream.getOrFail();
91
+ if (token.type === cssTokenizer.TokenType.Colon) {
92
+ // Advance colon
93
+ stream.advance();
94
+ converted.push(constants.COLON);
95
+ const tempToken = stream.getOrFail();
96
+ // Double colon is a pseudo-element
97
+ if (tempToken.type === cssTokenizer.TokenType.Colon) {
98
+ stream.advance();
99
+ converted.push(constants.COLON);
100
+ continue;
101
+ }
102
+ if (tempToken.type === cssTokenizer.TokenType.Ident) {
103
+ const name = stream.source.slice(tempToken.start, tempToken.end);
104
+ if (PSEUDO_ELEMENT_NAMES.has(name)) {
105
+ // Add an extra colon to the name
106
+ converted.push(constants.COLON);
107
+ converted.push(name);
108
+ }
109
+ else {
110
+ // Add the name as is
111
+ converted.push(name);
112
+ }
113
+ // Advance the names
114
+ stream.advance();
115
+ }
116
+ else if (tempToken.type === cssTokenizer.TokenType.Function) {
117
+ const name = stream.source.slice(tempToken.start, tempToken.end - 1); // omit the last parenthesis
118
+ // :-abp-contains(...) → :contains(...)
119
+ // :has-text(...) → :contains(...)
120
+ // :-abp-has(...) → :has(...)
121
+ convertAndPushPseudo(name);
122
+ // Advance the function name
123
+ stream.advance();
124
+ }
125
+ }
126
+ else if (token.type === cssTokenizer.TokenType.OpenSquareBracket) {
127
+ let tempToken;
128
+ const { start } = token;
129
+ stream.advance();
130
+ // Converts legacy Extended CSS selectors to the modern Extended CSS syntax.
131
+ // For example:
132
+ // - `[-ext-has=...]` → `:has(...)`
133
+ // - `[-ext-contains=...]` → `:contains(...)`
134
+ // - `[-ext-matches-css-before=...]` → `:matches-css(before, ...)`
135
+ stream.skipWhitespace();
136
+ stream.expect(cssTokenizer.TokenType.Ident);
137
+ tempToken = stream.getOrFail();
138
+ let attr = stream.source.slice(tempToken.start, tempToken.end);
139
+ // Skip if the attribute name is not a legacy Extended CSS one
140
+ if (!(attr.startsWith(css.LEGACY_EXT_CSS_ATTRIBUTE_PREFIX) || attr.startsWith(css.ABP_EXT_CSS_PREFIX))) {
141
+ converted.push(stream.source.slice(start, tempToken.end));
142
+ stream.advance();
143
+ continue;
144
+ }
145
+ if (attr.startsWith(css.LEGACY_EXT_CSS_ATTRIBUTE_PREFIX)) {
146
+ attr = attr.slice(css.LEGACY_EXT_CSS_ATTRIBUTE_PREFIX.length);
147
+ }
148
+ stream.advance();
149
+ stream.skipWhitespace();
150
+ // Next token should be an equality operator (=), because Extended CSS attribute selectors
151
+ // do not support other operators
152
+ stream.expect(cssTokenizer.TokenType.Delim, { value: constants.EQUALS });
153
+ stream.advance();
154
+ // Skip optional whitespace after the operator
155
+ stream.skipWhitespace();
156
+ // Parse attribute value
157
+ tempToken = stream.getOrFail();
158
+ // According to the spec, attribute value should be an identifier or a string
159
+ if (tempToken.type !== cssTokenizer.TokenType.Ident && tempToken.type !== cssTokenizer.TokenType.String) {
160
+ throw new Error(sprintfJs.sprintf(ERROR_MESSAGES.INVALID_ATTRIBUTE_VALUE, cssTokenizer.getFormattedTokenName(tempToken.type), stream.source.slice(tempToken.start, tempToken.end)));
161
+ }
162
+ const value = stream.source.slice(tempToken.start, tempToken.end);
163
+ // Advance the attribute value
164
+ stream.advance();
165
+ // Skip optional whitespace after the attribute value
166
+ stream.skipWhitespace();
167
+ // Next character should be a closing square bracket
168
+ // We don't allow flags for Extended CSS attribute selectors
169
+ stream.expect(cssTokenizer.TokenType.CloseSquareBracket);
170
+ stream.advance();
171
+ converted.push(constants.COLON);
172
+ convertAndPushPseudo(attr);
173
+ let processedValue = value.slice(1, -1); // omit the quotes
174
+ if (attr === PseudoClasses.Has) {
175
+ // TODO: Optimize this to avoid double tokenization
176
+ processedValue = CssSelectorConverter.convertToAdg(processedValue).result;
177
+ }
178
+ converted.push(processedValue);
179
+ converted.push(constants.CLOSE_PARENTHESIS);
180
+ }
181
+ else {
182
+ converted.push(stream.source.slice(token.start, token.end));
183
+ // Advance the token
184
+ stream.advance();
185
+ }
186
+ }
187
+ const convertedSelectorList = converted.join(constants.EMPTY);
188
+ return conversionResult.createConversionResult(convertedSelectorList, stream.source !== convertedSelectorList);
189
+ }
190
+ }
191
+
192
+ exports.CssSelectorConverter = CssSelectorConverter;
193
+ exports.ERROR_MESSAGES = ERROR_MESSAGES;