@adguard/agtree 2.2.0 → 3.0.0-alpha.2

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 (495) hide show
  1. package/README.md +1 -1
  2. package/dist/ast-utils/clone.js +61 -0
  3. package/dist/ast-utils/modifiers.js +53 -0
  4. package/dist/ast-utils/network-rules.js +41 -0
  5. package/dist/ast-utils/scriptlets.js +87 -0
  6. package/dist/common/abp-snippet-injection-body-common.js +23 -0
  7. package/dist/common/agent-common.js +56 -0
  8. package/dist/common/ubo-selector-common.js +17 -0
  9. package/dist/compatibility-tables/base.js +262 -0
  10. package/dist/compatibility-tables/compatibility-table-data.js +11 -0
  11. package/dist/compatibility-tables/modifiers.js +55 -0
  12. package/dist/compatibility-tables/platforms.js +76 -0
  13. package/dist/compatibility-tables/redirects.js +100 -0
  14. package/dist/compatibility-tables/schemas/base.js +111 -0
  15. package/dist/compatibility-tables/schemas/modifier.js +129 -0
  16. package/dist/compatibility-tables/schemas/platform.js +69 -0
  17. package/dist/compatibility-tables/schemas/redirect.js +29 -0
  18. package/dist/compatibility-tables/schemas/resource-type.js +36 -0
  19. package/dist/compatibility-tables/schemas/scriptlet.js +79 -0
  20. package/dist/compatibility-tables/scriptlets.js +28 -0
  21. package/dist/compatibility-tables/utils/platform-helpers.js +105 -0
  22. package/dist/compatibility-tables/utils/resource-type-helpers.js +61 -0
  23. package/dist/compatibility-tables/utils/zod-camelcase.js +25 -0
  24. package/dist/converter/base-interfaces/base-converter.js +59 -0
  25. package/dist/converter/base-interfaces/conversion-result.js +38 -0
  26. package/dist/converter/base-interfaces/rule-converter-base.js +60 -0
  27. package/dist/converter/comment/index.js +54 -0
  28. package/dist/converter/cosmetic/css.js +69 -0
  29. package/dist/converter/cosmetic/element-hiding.js +62 -0
  30. package/dist/converter/cosmetic/header-removal.js +123 -0
  31. package/dist/converter/cosmetic/html.js +379 -0
  32. package/dist/converter/cosmetic/index.js +118 -0
  33. package/dist/converter/cosmetic/rule-modifiers/adg.js +79 -0
  34. package/dist/converter/cosmetic/scriptlet.js +354 -0
  35. package/dist/converter/css/index.js +188 -0
  36. package/dist/converter/data/css.js +126 -0
  37. package/dist/converter/filter-list.js +88 -0
  38. package/dist/converter/index.js +8 -0
  39. package/dist/converter/misc/network-rule-modifier.js +311 -0
  40. package/dist/converter/network/index.js +99 -0
  41. package/dist/converter/raw-filter-list.js +56 -0
  42. package/dist/converter/rule.js +81 -0
  43. package/dist/deserializer/base-deserializer.js +29 -0
  44. package/dist/deserializer/comment/agent-comment-deserializer.js +79 -0
  45. package/dist/deserializer/comment/agent-deserializer.js +65 -0
  46. package/dist/deserializer/comment/comment-rule-deserializer.js +54 -0
  47. package/dist/deserializer/comment/config-comment-deserializer.js +111 -0
  48. package/dist/deserializer/comment/hint-comment-deserializer.js +72 -0
  49. package/dist/deserializer/comment/hint-deserializer.js +85 -0
  50. package/dist/deserializer/comment/metadata-comment-deserializer.js +69 -0
  51. package/dist/deserializer/comment/pre-processor-comment-deserializer.js +112 -0
  52. package/dist/deserializer/comment/simple-comment-deserializer.js +65 -0
  53. package/dist/deserializer/cosmetic/cosmetic-rule-deserializer.js +131 -0
  54. package/dist/deserializer/cosmetic/css-injection-body-deserializer.js +56 -0
  55. package/dist/deserializer/cosmetic/element-hiding-body-deserializer.js +48 -0
  56. package/dist/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.js +39 -0
  57. package/dist/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.js +40 -0
  58. package/dist/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.js +54 -0
  59. package/dist/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.js +38 -0
  60. package/dist/deserializer/empty-rule-deserializer.js +48 -0
  61. package/dist/deserializer/filterlist-deserializer.js +85 -0
  62. package/dist/deserializer/index.js +8 -0
  63. package/dist/deserializer/invalid-rule-deserializer.js +50 -0
  64. package/dist/deserializer/invalid-rule-error-node-deserializer.js +50 -0
  65. package/dist/deserializer/misc/domain-list-deserializer.js +64 -0
  66. package/dist/deserializer/misc/list-item-deserializer.js +69 -0
  67. package/dist/deserializer/misc/list-items-deserializer.js +30 -0
  68. package/dist/deserializer/misc/logical-expression-deserializer.js +196 -0
  69. package/dist/deserializer/misc/modifier-deserializer.js +87 -0
  70. package/dist/deserializer/misc/modifier-list-deserializer.js +61 -0
  71. package/dist/deserializer/misc/parameter-list-deserializer.js +64 -0
  72. package/dist/deserializer/misc/value-deserializer.js +50 -0
  73. package/dist/deserializer/network/host-rule-deserializer.js +67 -0
  74. package/dist/deserializer/network/hostname-list-deserializer.js +56 -0
  75. package/dist/deserializer/network/network-rule-deserializer.js +65 -0
  76. package/dist/deserializer/rule-deserializer.js +65 -0
  77. package/dist/deserializer/syntax-deserialization-map.js +21 -0
  78. package/dist/errors/adblock-syntax-error.js +39 -0
  79. package/dist/errors/binary-schema-mismatch-error.js +37 -0
  80. package/dist/errors/not-implemented-error.js +31 -0
  81. package/dist/errors/rule-conversion-error.js +26 -0
  82. package/dist/generator/base-generator.js +27 -0
  83. package/dist/generator/comment/agent-comment-generator.js +31 -0
  84. package/dist/generator/comment/agent-generator.js +36 -0
  85. package/dist/generator/comment/comment-rule-generator.js +47 -0
  86. package/dist/generator/comment/config-comment-generator.js +45 -0
  87. package/dist/generator/comment/hint-comment-generator.js +28 -0
  88. package/dist/generator/comment/hint-generator.js +33 -0
  89. package/dist/generator/comment/metadata-comment-generator.js +33 -0
  90. package/dist/generator/comment/pre-processor-comment-generator.js +48 -0
  91. package/dist/generator/comment/simple-comment-generator.js +29 -0
  92. package/dist/generator/cosmetic/body/abp-snippet-injection-body-generator.js +38 -0
  93. package/dist/generator/cosmetic/body/adg-scriptlet-injection-body-generator.js +43 -0
  94. package/dist/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.js +45 -0
  95. package/dist/generator/cosmetic/cosmetic-rule-body-generator.js +94 -0
  96. package/dist/generator/cosmetic/cosmetic-rule-generator.js +54 -0
  97. package/dist/generator/cosmetic/cosmetic-rule-pattern-generator.js +42 -0
  98. package/dist/generator/css/adg-css-injection-generator.js +42 -0
  99. package/dist/generator/filterlist-generator.js +67 -0
  100. package/dist/generator/index.js +9 -0
  101. package/dist/generator/misc/domain-list-generator.js +26 -0
  102. package/dist/generator/misc/list-items-generator.js +39 -0
  103. package/dist/generator/misc/logical-expression-generator.js +48 -0
  104. package/dist/generator/misc/modifier-generator.js +34 -0
  105. package/dist/generator/misc/modifier-list-generator.js +29 -0
  106. package/dist/generator/misc/parameter-list-generator.js +41 -0
  107. package/dist/generator/misc/value-generator.js +24 -0
  108. package/dist/generator/network/host-rule-generator.js +39 -0
  109. package/dist/generator/network/network-rule-generator.js +38 -0
  110. package/dist/generator/rule-generator.js +65 -0
  111. package/dist/index.js +70 -0
  112. package/dist/marshalling-utils/comment/agent-comment-common.js +21 -0
  113. package/dist/marshalling-utils/comment/agent-common.js +40 -0
  114. package/dist/marshalling-utils/comment/config-comment-common.js +54 -0
  115. package/dist/marshalling-utils/comment/hint-comment-common.js +22 -0
  116. package/dist/marshalling-utils/comment/hint-common.js +56 -0
  117. package/dist/marshalling-utils/comment/metadata-comment-common.js +41 -0
  118. package/dist/marshalling-utils/comment/pre-processor-comment-common.js +59 -0
  119. package/dist/marshalling-utils/comment/simple-comment-common.js +22 -0
  120. package/dist/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.js +61 -0
  121. package/dist/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.js +66 -0
  122. package/dist/marshalling-utils/cosmetic/body/css-injection-body-common.js +24 -0
  123. package/dist/marshalling-utils/cosmetic/body/element-hiding-body-common.js +21 -0
  124. package/dist/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.js +114 -0
  125. package/dist/marshalling-utils/cosmetic/cosmetic-rule-common.js +48 -0
  126. package/dist/marshalling-utils/empty-rule-common.js +20 -0
  127. package/dist/marshalling-utils/filter-list-common.js +21 -0
  128. package/dist/marshalling-utils/invalid-rule-common.js +21 -0
  129. package/dist/marshalling-utils/invalid-rule-error-node-common.js +22 -0
  130. package/dist/marshalling-utils/misc/binary-type-common.js +66 -0
  131. package/dist/marshalling-utils/misc/domain-list-common.js +36 -0
  132. package/dist/marshalling-utils/misc/host-rule-common.js +25 -0
  133. package/dist/marshalling-utils/misc/hostname-list-common.js +21 -0
  134. package/dist/marshalling-utils/misc/list-item-common.js +22 -0
  135. package/dist/marshalling-utils/misc/logical-expression-common.js +83 -0
  136. package/dist/marshalling-utils/misc/modifier-common.js +231 -0
  137. package/dist/marshalling-utils/misc/modifier-list-common.js +21 -0
  138. package/dist/marshalling-utils/misc/parameter-list-common.js +21 -0
  139. package/dist/marshalling-utils/misc/value-common.js +22 -0
  140. package/dist/marshalling-utils/network/network-rule-common.js +25 -0
  141. package/dist/marshalling-utils/syntax-serialization-map.js +30 -0
  142. package/dist/nodes/index.js +168 -0
  143. package/dist/package.json.js +9 -0
  144. package/dist/parser/base-parser.js +30 -0
  145. package/dist/parser/comment/agent-comment-parser.js +119 -0
  146. package/dist/parser/comment/agent-parser.js +110 -0
  147. package/dist/parser/comment/comment-parser.js +108 -0
  148. package/dist/parser/comment/config-comment-parser.js +137 -0
  149. package/dist/parser/comment/hint-comment-parser.js +117 -0
  150. package/dist/parser/comment/hint-parser.js +129 -0
  151. package/dist/parser/comment/metadata-comment-parser.js +129 -0
  152. package/dist/parser/comment/preprocessor-parser.js +199 -0
  153. package/dist/parser/comment/simple-comment-parser.js +106 -0
  154. package/dist/parser/cosmetic/body/abp-snippet-injection-body-parser.js +79 -0
  155. package/dist/parser/cosmetic/body/adg-scriptlet-injection-body-parser.js +149 -0
  156. package/dist/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.js +110 -0
  157. package/dist/parser/cosmetic/cosmetic-rule-parser.js +453 -0
  158. package/dist/parser/css/adg-css-injection-parser.js +208 -0
  159. package/dist/parser/css/balancing.js +94 -0
  160. package/dist/parser/css/constants.js +18 -0
  161. package/dist/parser/css/css-token-stream.js +343 -0
  162. package/dist/parser/css/ubo-selector-parser.js +369 -0
  163. package/dist/parser/filterlist-parser.js +102 -0
  164. package/dist/parser/index.js +12 -0
  165. package/dist/parser/misc/app-list-parser.js +45 -0
  166. package/dist/parser/misc/domain-list-parser.js +52 -0
  167. package/dist/parser/misc/list-items-parser.js +116 -0
  168. package/dist/parser/misc/logical-expression-parser.js +279 -0
  169. package/dist/parser/misc/method-list-parser.js +46 -0
  170. package/dist/parser/misc/modifier-list.js +70 -0
  171. package/dist/parser/misc/modifier-parser.js +89 -0
  172. package/dist/parser/misc/parameter-list-parser.js +75 -0
  173. package/dist/parser/misc/stealth-option-list-parser.js +46 -0
  174. package/dist/parser/misc/ubo-parameter-list-parser.js +149 -0
  175. package/dist/parser/misc/value-parser.js +37 -0
  176. package/dist/parser/network/host-rule-parser.js +130 -0
  177. package/dist/parser/network/network-rule-parser.js +117 -0
  178. package/dist/parser/options.js +23 -0
  179. package/dist/parser/rule-parser.js +192 -0
  180. package/dist/serializer/base-serializer.js +29 -0
  181. package/dist/serializer/comment/agent-comment-serializer.js +74 -0
  182. package/dist/serializer/comment/agent-serializer.js +59 -0
  183. package/dist/serializer/comment/comment-rule-serializer.js +105 -0
  184. package/dist/serializer/comment/config-comment-serializer.js +82 -0
  185. package/dist/serializer/comment/hint-comment-serializer.js +65 -0
  186. package/dist/serializer/comment/hint-serializer.js +54 -0
  187. package/dist/serializer/comment/metadata-comment-serializer.js +73 -0
  188. package/dist/serializer/comment/pre-processor-comment-serializer.js +71 -0
  189. package/dist/serializer/comment/simple-comment-serializer.js +52 -0
  190. package/dist/serializer/cosmetic/body/abp-snippet-injection-body-serializer.js +36 -0
  191. package/dist/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.js +36 -0
  192. package/dist/serializer/cosmetic/body/scriptlet-body-serializer.js +50 -0
  193. package/dist/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.js +36 -0
  194. package/dist/serializer/cosmetic/cosmetic-rule-serializer.js +120 -0
  195. package/dist/serializer/cosmetic/css-injection-body-serializer.js +51 -0
  196. package/dist/serializer/cosmetic/element-hiding-body-serializer.js +40 -0
  197. package/dist/serializer/empty-rule-serializer.js +37 -0
  198. package/dist/serializer/filterlist-serializer.js +45 -0
  199. package/dist/serializer/index.js +7 -0
  200. package/dist/serializer/invalid-rule-error-node-serializer.js +41 -0
  201. package/dist/serializer/invalid-rule-serializer.js +40 -0
  202. package/dist/serializer/misc/domain-list-serializer.js +64 -0
  203. package/dist/serializer/misc/list-item-serializer.js +58 -0
  204. package/dist/serializer/misc/list-items-serializer.js +29 -0
  205. package/dist/serializer/misc/logical-expression-serializer.js +136 -0
  206. package/dist/serializer/misc/modifier-list-serializer.js +58 -0
  207. package/dist/serializer/misc/modifier-serializer.js +49 -0
  208. package/dist/serializer/misc/parameter-list-serializer.js +52 -0
  209. package/dist/serializer/misc/value-serializer.js +50 -0
  210. package/dist/serializer/network/host-rule-serializer.js +70 -0
  211. package/dist/serializer/network/hostname-list-serializer.js +53 -0
  212. package/dist/serializer/network/network-rule-serializer.js +54 -0
  213. package/dist/serializer/rule-serializer.js +61 -0
  214. package/dist/types/ast-utils/clone.d.ts +26 -0
  215. package/dist/types/ast-utils/filter-list.d.ts +11 -0
  216. package/dist/types/ast-utils/modifiers.d.ts +20 -0
  217. package/dist/types/ast-utils/network-rules.d.ts +15 -0
  218. package/dist/types/ast-utils/scriptlets.d.ts +52 -0
  219. package/dist/types/common/abp-snippet-injection-body-common.d.ts +15 -0
  220. package/dist/types/common/agent-common.d.ts +10 -0
  221. package/dist/types/common/ubo-selector-common.d.ts +10 -0
  222. package/dist/types/compatibility-tables/base.d.ts +157 -0
  223. package/dist/types/compatibility-tables/compatibility-table-data.d.ts +68 -0
  224. package/dist/types/compatibility-tables/index.d.ts +13 -0
  225. package/dist/types/compatibility-tables/modifiers.d.ts +22 -0
  226. package/dist/types/compatibility-tables/platforms.d.ts +49 -0
  227. package/dist/types/compatibility-tables/redirects.d.ts +33 -0
  228. package/dist/types/compatibility-tables/schemas/base.d.ts +124 -0
  229. package/dist/types/compatibility-tables/schemas/index.d.ts +8 -0
  230. package/dist/types/compatibility-tables/schemas/modifier.d.ts +36 -0
  231. package/dist/types/compatibility-tables/schemas/platform.d.ts +16 -0
  232. package/dist/types/compatibility-tables/schemas/redirect.d.ts +25 -0
  233. package/dist/types/compatibility-tables/schemas/resource-type.d.ts +41 -0
  234. package/dist/types/compatibility-tables/schemas/scriptlet.d.ts +31 -0
  235. package/dist/types/compatibility-tables/scriptlets.d.ts +15 -0
  236. package/dist/types/compatibility-tables/types.d.ts +34 -0
  237. package/dist/types/compatibility-tables/utils/platform-helpers.d.ts +44 -0
  238. package/dist/types/compatibility-tables/utils/resource-type-helpers.d.ts +20 -0
  239. package/dist/types/compatibility-tables/utils/zod-camelcase.d.ts +15 -0
  240. package/dist/types/converter/base-interfaces/base-converter.d.ts +42 -0
  241. package/dist/types/converter/base-interfaces/conversion-result.d.ts +43 -0
  242. package/dist/types/converter/base-interfaces/rule-converter-base.d.ts +44 -0
  243. package/dist/types/converter/comment/index.d.ts +23 -0
  244. package/dist/types/converter/cosmetic/css.d.ts +23 -0
  245. package/dist/types/converter/cosmetic/element-hiding.d.ts +23 -0
  246. package/dist/types/converter/cosmetic/header-removal.d.ts +37 -0
  247. package/dist/types/converter/cosmetic/html.d.ts +54 -0
  248. package/dist/types/converter/cosmetic/index.d.ts +33 -0
  249. package/dist/types/converter/cosmetic/rule-modifiers/adg.d.ts +21 -0
  250. package/dist/types/converter/cosmetic/scriptlet.d.ts +33 -0
  251. package/dist/types/converter/css/index.d.ts +40 -0
  252. package/dist/types/converter/data/css.d.ts +48 -0
  253. package/dist/types/converter/filter-list.d.ts +31 -0
  254. package/dist/types/converter/index.d.ts +5 -0
  255. package/dist/types/converter/misc/network-rule-modifier.d.ts +35 -0
  256. package/dist/types/converter/network/index.d.ts +33 -0
  257. package/dist/types/converter/raw-filter-list.d.ts +31 -0
  258. package/dist/types/converter/raw-rule.d.ts +28 -0
  259. package/dist/types/converter/rule.d.ts +37 -0
  260. package/dist/types/deserializer/base-deserializer.d.ts +15 -0
  261. package/dist/types/deserializer/comment/agent-comment-deserializer.d.ts +34 -0
  262. package/dist/types/deserializer/comment/agent-deserializer.d.ts +25 -0
  263. package/dist/types/deserializer/comment/comment-rule-deserializer.d.ts +16 -0
  264. package/dist/types/deserializer/comment/config-comment-deserializer.d.ts +27 -0
  265. package/dist/types/deserializer/comment/hint-comment-deserializer.d.ts +24 -0
  266. package/dist/types/deserializer/comment/hint-deserializer.d.ts +26 -0
  267. package/dist/types/deserializer/comment/metadata-comment-deserializer.d.ts +26 -0
  268. package/dist/types/deserializer/comment/pre-processor-comment-deserializer.d.ts +29 -0
  269. package/dist/types/deserializer/comment/simple-comment-deserializer.d.ts +26 -0
  270. package/dist/types/deserializer/cosmetic/cosmetic-rule-deserializer.d.ts +18 -0
  271. package/dist/types/deserializer/cosmetic/css-injection-body-deserializer.d.ts +15 -0
  272. package/dist/types/deserializer/cosmetic/element-hiding-body-deserializer.d.ts +16 -0
  273. package/dist/types/deserializer/cosmetic/scriptlet-body/abp-snippet-injection-body-deserializer.d.ts +17 -0
  274. package/dist/types/deserializer/cosmetic/scriptlet-body/adg-scriptlet-injection-body-deserializer.d.ts +18 -0
  275. package/dist/types/deserializer/cosmetic/scriptlet-body/scriptlet-body-deserializer.d.ts +19 -0
  276. package/dist/types/deserializer/cosmetic/scriptlet-body/ubo-scriptlet-injection-body-deserializer.d.ts +17 -0
  277. package/dist/types/deserializer/empty-rule-deserializer.d.ts +16 -0
  278. package/dist/types/deserializer/filterlist-deserializer.d.ts +34 -0
  279. package/dist/types/deserializer/index.d.ts +2 -0
  280. package/dist/types/deserializer/invalid-rule-deserializer.d.ts +16 -0
  281. package/dist/types/deserializer/invalid-rule-error-node-deserializer.d.ts +16 -0
  282. package/dist/types/deserializer/misc/domain-list-deserializer.d.ts +15 -0
  283. package/dist/types/deserializer/misc/list-item-deserializer.d.ts +19 -0
  284. package/dist/types/deserializer/misc/list-items-deserializer.d.ts +16 -0
  285. package/dist/types/deserializer/misc/logical-expression-deserializer.d.ts +55 -0
  286. package/dist/types/deserializer/misc/modifier-deserializer.d.ts +18 -0
  287. package/dist/types/deserializer/misc/modifier-list-deserializer.d.ts +20 -0
  288. package/dist/types/deserializer/misc/parameter-list-deserializer.d.ts +18 -0
  289. package/dist/types/deserializer/misc/value-deserializer.d.ts +17 -0
  290. package/dist/types/deserializer/network/host-rule-deserializer.d.ts +18 -0
  291. package/dist/types/deserializer/network/hostname-list-deserializer.d.ts +15 -0
  292. package/dist/types/deserializer/network/network-rule-deserializer.d.ts +18 -0
  293. package/dist/types/deserializer/rule-deserializer.d.ts +17 -0
  294. package/dist/types/deserializer/syntax-deserialization-map.d.ts +2 -0
  295. package/dist/types/errors/adblock-syntax-error.d.ts +25 -0
  296. package/dist/types/errors/binary-schema-mismatch-error.d.ts +23 -0
  297. package/dist/types/errors/not-implemented-error.d.ts +14 -0
  298. package/dist/types/errors/rule-conversion-error.d.ts +14 -0
  299. package/dist/types/generator/base-generator.d.ts +12 -0
  300. package/dist/types/generator/comment/agent-comment-generator.d.ts +14 -0
  301. package/dist/types/generator/comment/agent-generator.d.ts +15 -0
  302. package/dist/types/generator/comment/comment-rule-generator.d.ts +14 -0
  303. package/dist/types/generator/comment/config-comment-generator.d.ts +14 -0
  304. package/dist/types/generator/comment/hint-comment-generator.d.ts +14 -0
  305. package/dist/types/generator/comment/hint-generator.d.ts +14 -0
  306. package/dist/types/generator/comment/index.d.ts +1 -0
  307. package/dist/types/generator/comment/metadata-comment-generator.d.ts +14 -0
  308. package/dist/types/generator/comment/pre-processor-comment-generator.d.ts +14 -0
  309. package/dist/types/generator/comment/simple-comment-generator.d.ts +14 -0
  310. package/dist/types/generator/cosmetic/body/abp-snippet-injection-body-generator.d.ts +15 -0
  311. package/dist/types/generator/cosmetic/body/adg-scriptlet-injection-body-generator.d.ts +21 -0
  312. package/dist/types/generator/cosmetic/body/ubo-scriptlet-injection-body-generator.d.ts +21 -0
  313. package/dist/types/generator/cosmetic/cosmetic-rule-body-generator.d.ts +20 -0
  314. package/dist/types/generator/cosmetic/cosmetic-rule-generator.d.ts +28 -0
  315. package/dist/types/generator/cosmetic/cosmetic-rule-pattern-generator.d.ts +18 -0
  316. package/dist/types/generator/cosmetic/index.d.ts +1 -0
  317. package/dist/types/generator/css/adg-css-injection-generator.d.ts +15 -0
  318. package/dist/types/generator/css/ubo-selector-generator.d.ts +14 -0
  319. package/dist/types/generator/filterlist-generator.d.ts +18 -0
  320. package/dist/types/generator/index.d.ts +3 -0
  321. package/dist/types/generator/misc/domain-list-generator.d.ts +15 -0
  322. package/dist/types/generator/misc/list-items-generator.d.ts +25 -0
  323. package/dist/types/generator/misc/logical-expression-generator.d.ts +14 -0
  324. package/dist/types/generator/misc/modifier-generator.d.ts +14 -0
  325. package/dist/types/generator/misc/modifier-list-generator.d.ts +14 -0
  326. package/dist/types/generator/misc/parameter-list-generator.d.ts +15 -0
  327. package/dist/types/generator/misc/value-generator.d.ts +14 -0
  328. package/dist/types/generator/network/host-rule-generator.d.ts +14 -0
  329. package/dist/types/generator/network/index.d.ts +2 -0
  330. package/dist/types/generator/network/network-rule-generator.d.ts +14 -0
  331. package/dist/types/generator/rule-generator.d.ts +24 -0
  332. package/dist/types/index.d.ts +55 -0
  333. package/dist/types/marshalling-utils/comment/agent-comment-common.d.ts +14 -0
  334. package/dist/types/marshalling-utils/comment/agent-common.d.ts +20 -0
  335. package/dist/types/marshalling-utils/comment/config-comment-common.d.ts +42 -0
  336. package/dist/types/marshalling-utils/comment/hint-comment-common.d.ts +15 -0
  337. package/dist/types/marshalling-utils/comment/hint-common.d.ts +33 -0
  338. package/dist/types/marshalling-utils/comment/metadata-comment-common.d.ts +21 -0
  339. package/dist/types/marshalling-utils/comment/pre-processor-comment-common.d.ts +37 -0
  340. package/dist/types/marshalling-utils/comment/simple-comment-common.d.ts +15 -0
  341. package/dist/types/marshalling-utils/cosmetic/body/abp-snippet-injection-body-common.d.ts +23 -0
  342. package/dist/types/marshalling-utils/cosmetic/body/adg-scriptlet-injection-body-common.d.ts +9 -0
  343. package/dist/types/marshalling-utils/cosmetic/body/css-injection-body-common.d.ts +17 -0
  344. package/dist/types/marshalling-utils/cosmetic/body/element-hiding-body-common.d.ts +14 -0
  345. package/dist/types/marshalling-utils/cosmetic/body/ubo-scriptlet-injection-body-common.d.ts +9 -0
  346. package/dist/types/marshalling-utils/cosmetic/cosmetic-rule-common.d.ts +28 -0
  347. package/dist/types/marshalling-utils/empty-rule-common.d.ts +13 -0
  348. package/dist/types/marshalling-utils/filter-list-common.d.ts +14 -0
  349. package/dist/types/marshalling-utils/invalid-rule-common.d.ts +14 -0
  350. package/dist/types/marshalling-utils/invalid-rule-error-node-common.d.ts +15 -0
  351. package/dist/types/marshalling-utils/misc/binary-type-common.d.ts +57 -0
  352. package/dist/types/marshalling-utils/misc/domain-list-common.d.ts +24 -0
  353. package/dist/types/marshalling-utils/misc/host-rule-common.d.ts +18 -0
  354. package/dist/types/marshalling-utils/misc/hostname-list-common.d.ts +14 -0
  355. package/dist/types/marshalling-utils/misc/list-item-common.d.ts +15 -0
  356. package/dist/types/marshalling-utils/misc/logical-expression-common.d.ts +47 -0
  357. package/dist/types/marshalling-utils/misc/modifier-common.d.ts +41 -0
  358. package/dist/types/marshalling-utils/misc/modifier-list-common.d.ts +14 -0
  359. package/dist/types/marshalling-utils/misc/parameter-list-common.d.ts +14 -0
  360. package/dist/types/marshalling-utils/misc/value-common.d.ts +15 -0
  361. package/dist/types/marshalling-utils/network/network-rule-common.d.ts +18 -0
  362. package/dist/types/marshalling-utils/syntax-serialization-map.d.ts +2 -0
  363. package/dist/types/nodes/index.d.ts +1183 -0
  364. package/dist/types/parser/base-parser.d.ts +16 -0
  365. package/dist/types/parser/comment/agent-comment-parser.d.ts +42 -0
  366. package/dist/types/parser/comment/agent-parser.d.ts +33 -0
  367. package/dist/types/parser/comment/comment-parser.d.ts +76 -0
  368. package/dist/types/parser/comment/config-comment-parser.d.ts +31 -0
  369. package/dist/types/parser/comment/hint-comment-parser.d.ts +33 -0
  370. package/dist/types/parser/comment/hint-parser.d.ts +30 -0
  371. package/dist/types/parser/comment/metadata-comment-parser.d.ts +29 -0
  372. package/dist/types/parser/comment/preprocessor-parser.d.ts +43 -0
  373. package/dist/types/parser/comment/simple-comment-parser.d.ts +33 -0
  374. package/dist/types/parser/cosmetic/body/abp-snippet-injection-body-parser.d.ts +34 -0
  375. package/dist/types/parser/cosmetic/body/adg-scriptlet-injection-body-parser.d.ts +47 -0
  376. package/dist/types/parser/cosmetic/body/ubo-scriptlet-injection-body-parser.d.ts +44 -0
  377. package/dist/types/parser/cosmetic/cosmetic-rule-parser.d.ts +51 -0
  378. package/dist/types/parser/css/adg-css-injection-parser.d.ts +28 -0
  379. package/dist/types/parser/css/balancing.d.ts +36 -0
  380. package/dist/types/parser/css/constants.d.ts +10 -0
  381. package/dist/types/parser/css/css-token-stream.d.ts +210 -0
  382. package/dist/types/parser/css/ubo-selector-parser.d.ts +46 -0
  383. package/dist/types/parser/filterlist-parser.d.ts +29 -0
  384. package/dist/types/parser/index.d.ts +6 -0
  385. package/dist/types/parser/misc/app-list-parser.d.ts +22 -0
  386. package/dist/types/parser/misc/domain-list-parser.d.ts +26 -0
  387. package/dist/types/parser/misc/list-items-parser.d.ts +37 -0
  388. package/dist/types/parser/misc/logical-expression-parser.d.ts +42 -0
  389. package/dist/types/parser/misc/method-list-parser.d.ts +22 -0
  390. package/dist/types/parser/misc/modifier-list.d.ts +24 -0
  391. package/dist/types/parser/misc/modifier-parser.d.ts +21 -0
  392. package/dist/types/parser/misc/parameter-list-parser.d.ts +17 -0
  393. package/dist/types/parser/misc/stealth-option-list-parser.d.ts +22 -0
  394. package/dist/types/parser/misc/ubo-parameter-list-parser.d.ts +21 -0
  395. package/dist/types/parser/misc/value-parser.d.ts +18 -0
  396. package/dist/types/parser/network/host-rule-parser.d.ts +35 -0
  397. package/dist/types/parser/network/network-rule-parser.d.ts +31 -0
  398. package/dist/types/parser/options.d.ts +41 -0
  399. package/dist/types/parser/rule-parser.d.ts +78 -0
  400. package/dist/types/serializer/base-serializer.d.ts +15 -0
  401. package/dist/types/serializer/comment/agent-comment-serializer.d.ts +34 -0
  402. package/dist/types/serializer/comment/agent-serializer.d.ts +15 -0
  403. package/dist/types/serializer/comment/comment-rule-serializer.d.ts +68 -0
  404. package/dist/types/serializer/comment/config-comment-serializer.d.ts +25 -0
  405. package/dist/types/serializer/comment/hint-comment-serializer.d.ts +23 -0
  406. package/dist/types/serializer/comment/hint-serializer.d.ts +24 -0
  407. package/dist/types/serializer/comment/metadata-comment-serializer.d.ts +25 -0
  408. package/dist/types/serializer/comment/pre-processor-comment-serializer.d.ts +28 -0
  409. package/dist/types/serializer/comment/simple-comment-serializer.d.ts +24 -0
  410. package/dist/types/serializer/cosmetic/body/abp-snippet-injection-body-serializer.d.ts +25 -0
  411. package/dist/types/serializer/cosmetic/body/adg-scriptlet-injection-body-serializer.d.ts +25 -0
  412. package/dist/types/serializer/cosmetic/body/scriptlet-body-serializer.d.ts +17 -0
  413. package/dist/types/serializer/cosmetic/body/ubo-scriptlet-injection-body-serializer.d.ts +25 -0
  414. package/dist/types/serializer/cosmetic/cosmetic-rule-serializer.d.ts +19 -0
  415. package/dist/types/serializer/cosmetic/css-injection-body-serializer.d.ts +15 -0
  416. package/dist/types/serializer/cosmetic/element-hiding-body-serializer.d.ts +15 -0
  417. package/dist/types/serializer/empty-rule-serializer.d.ts +15 -0
  418. package/dist/types/serializer/filterlist-serializer.d.ts +15 -0
  419. package/dist/types/serializer/index.d.ts +1 -0
  420. package/dist/types/serializer/invalid-rule-error-node-serializer.d.ts +15 -0
  421. package/dist/types/serializer/invalid-rule-serializer.d.ts +15 -0
  422. package/dist/types/serializer/misc/domain-list-serializer.d.ts +21 -0
  423. package/dist/types/serializer/misc/list-item-serializer.d.ts +16 -0
  424. package/dist/types/serializer/misc/list-items-serializer.d.ts +15 -0
  425. package/dist/types/serializer/misc/logical-expression-serializer.d.ts +52 -0
  426. package/dist/types/serializer/misc/modifier-list-serializer.d.ts +20 -0
  427. package/dist/types/serializer/misc/modifier-serializer.d.ts +18 -0
  428. package/dist/types/serializer/misc/parameter-list-serializer.d.ts +17 -0
  429. package/dist/types/serializer/misc/value-serializer.d.ts +17 -0
  430. package/dist/types/serializer/network/host-rule-serializer.d.ts +30 -0
  431. package/dist/types/serializer/network/hostname-list-serializer.d.ts +15 -0
  432. package/dist/types/serializer/network/network-rule-serializer.d.ts +18 -0
  433. package/dist/types/serializer/rule-serializer.d.ts +17 -0
  434. package/dist/types/utils/adblockers.d.ts +49 -0
  435. package/dist/types/utils/binary-schema-version.d.ts +9 -0
  436. package/dist/types/utils/byte-buffer.d.ts +54 -0
  437. package/dist/types/utils/categorizer.d.ts +14 -0
  438. package/dist/types/utils/clone.d.ts +15 -0
  439. package/dist/types/utils/constants.d.ts +188 -0
  440. package/dist/types/utils/cosmetic-rule-separator.d.ts +45 -0
  441. package/dist/types/utils/deep-freeze.d.ts +13 -0
  442. package/dist/types/utils/domain.d.ts +29 -0
  443. package/dist/types/utils/error.d.ts +8 -0
  444. package/dist/types/utils/index.d.ts +15 -0
  445. package/dist/types/utils/input-byte-buffer.d.ts +146 -0
  446. package/dist/types/utils/is-chromium.d.ts +7 -0
  447. package/dist/types/utils/logical-expression.d.ts +45 -0
  448. package/dist/types/utils/multi-value-map.d.ts +16 -0
  449. package/dist/types/utils/output-byte-buffer.d.ts +132 -0
  450. package/dist/types/utils/position-provider.d.ts +46 -0
  451. package/dist/types/utils/quotes.d.ts +94 -0
  452. package/dist/types/utils/regexp.d.ts +54 -0
  453. package/dist/types/utils/storage-interface.d.ts +23 -0
  454. package/dist/types/utils/string.d.ts +280 -0
  455. package/dist/types/utils/text-decoder-polyfill.d.ts +14 -0
  456. package/dist/types/utils/text-encoder-polyfill.d.ts +18 -0
  457. package/dist/types/utils/type-guards.d.ts +47 -0
  458. package/dist/types/validator/constants.d.ts +89 -0
  459. package/dist/types/validator/helpers.d.ts +37 -0
  460. package/dist/types/validator/index.d.ts +38 -0
  461. package/dist/types/validator/value.d.ts +12 -0
  462. package/dist/types/version.d.ts +5 -0
  463. package/dist/utils/adblockers.js +56 -0
  464. package/dist/utils/binary-schema-version.js +17 -0
  465. package/dist/utils/byte-buffer.js +91 -0
  466. package/dist/utils/categorizer.js +44 -0
  467. package/dist/utils/clone.js +28 -0
  468. package/dist/utils/constants.js +249 -0
  469. package/dist/utils/cosmetic-rule-separator.js +127 -0
  470. package/dist/utils/deep-freeze.js +32 -0
  471. package/dist/utils/domain.js +59 -0
  472. package/dist/utils/error.js +49 -0
  473. package/dist/utils/index.js +21 -0
  474. package/dist/utils/input-byte-buffer.js +265 -0
  475. package/dist/utils/is-chromium.js +20 -0
  476. package/dist/utils/logical-expression.js +92 -0
  477. package/dist/utils/multi-value-map.js +33 -0
  478. package/dist/utils/output-byte-buffer.js +231 -0
  479. package/dist/utils/position-provider.js +73 -0
  480. package/dist/utils/quotes.js +214 -0
  481. package/dist/utils/regexp.js +176 -0
  482. package/dist/utils/string.js +559 -0
  483. package/dist/utils/text-decoder-polyfill.js +107 -0
  484. package/dist/utils/text-encoder-polyfill.js +78 -0
  485. package/dist/utils/type-guards.js +47 -0
  486. package/dist/validator/constants.js +210 -0
  487. package/dist/validator/helpers.js +45 -0
  488. package/dist/validator/index.js +174 -0
  489. package/dist/validator/value.js +568 -0
  490. package/dist/version.js +18 -0
  491. package/package.json +61 -39
  492. package/dist/agtree.d.ts +0 -4155
  493. package/dist/agtree.js +0 -15819
  494. package/dist/agtree.mjs +0 -15720
  495. package/dist/compatibility-table-data.js +0 -12782
package/README.md CHANGED
@@ -39,7 +39,7 @@ You can install the library using
39
39
  - [PNPM][pnpm-pkg-manager-url]: `pnpm add @adguard/agtree`
40
40
 
41
41
  > [!IMPORTANT]
42
- > AGTree requires Node.js version 18 or higher.
42
+ > AGTree is an ESM-only package and requires Node.js version 18 or higher.
43
43
 
44
44
  [yarn-pkg-manager-url]: https://yarnpkg.com/en/docs/install
45
45
  [npm-pkg-manager-url]: https://www.npmjs.com/get-npm
@@ -0,0 +1,61 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { isNull } from '../utils/type-guards.js';
8
+
9
+ /**
10
+ * @file Custom clone functions for AST nodes, this is probably the most efficient way to clone AST nodes.
11
+ * @todo Maybe move them to parser classes as 'clone' methods
12
+ */
13
+ /**
14
+ * Clones a scriptlet rule node.
15
+ *
16
+ * @param node Node to clone
17
+ * @returns Cloned node
18
+ */
19
+ function cloneScriptletRuleNode(node) {
20
+ return {
21
+ type: node.type,
22
+ children: node.children.map((child) => (isNull(child) ? null : { ...child })),
23
+ };
24
+ }
25
+ /**
26
+ * Clones a domain list node.
27
+ *
28
+ * @param node Node to clone
29
+ * @returns Cloned node
30
+ */
31
+ function cloneDomainListNode(node) {
32
+ return {
33
+ type: node.type,
34
+ separator: node.separator,
35
+ children: node.children.map((domain) => ({ ...domain })),
36
+ };
37
+ }
38
+ /**
39
+ * Clones a modifier list node.
40
+ *
41
+ * @param node Node to clone
42
+ * @returns Cloned node
43
+ */
44
+ function cloneModifierListNode(node) {
45
+ return {
46
+ type: node.type,
47
+ children: node.children.map((modifier) => {
48
+ const res = {
49
+ type: modifier.type,
50
+ exception: modifier.exception,
51
+ name: { ...modifier.name },
52
+ };
53
+ if (modifier.value) {
54
+ res.value = { ...modifier.value };
55
+ }
56
+ return res;
57
+ }),
58
+ };
59
+ }
60
+
61
+ export { cloneDomainListNode, cloneModifierListNode, cloneScriptletRuleNode };
@@ -0,0 +1,53 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { isUndefined } from '../utils/type-guards.js';
8
+ import { clone } from '../utils/clone.js';
9
+
10
+ /**
11
+ * @file Utility functions for working with modifier nodes
12
+ */
13
+ /**
14
+ * Creates a modifier node
15
+ *
16
+ * @param name Name of the modifier
17
+ * @param value Value of the modifier
18
+ * @param exception Whether the modifier is an exception
19
+ * @returns Modifier node
20
+ */
21
+ function createModifierNode(name, value = undefined, exception = false) {
22
+ const result = {
23
+ type: 'Modifier',
24
+ exception,
25
+ name: {
26
+ type: 'Value',
27
+ value: name,
28
+ },
29
+ };
30
+ if (!isUndefined(value)) {
31
+ result.value = {
32
+ type: 'Value',
33
+ value,
34
+ };
35
+ }
36
+ return result;
37
+ }
38
+ /**
39
+ * Creates a modifier list node
40
+ *
41
+ * @param modifiers Modifiers to put in the list (optional, defaults to an empty list)
42
+ * @returns Modifier list node
43
+ */
44
+ function createModifierListNode(modifiers = []) {
45
+ const result = {
46
+ type: 'ModifierList',
47
+ // We need to clone the modifiers to avoid side effects
48
+ children: modifiers.length ? clone(modifiers) : [],
49
+ };
50
+ return result;
51
+ }
52
+
53
+ export { createModifierListNode, createModifierNode };
@@ -0,0 +1,41 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { isUndefined } from '../utils/type-guards.js';
8
+ import { RuleCategory, NetworkRuleType } from '../nodes/index.js';
9
+ import { AdblockSyntax } from '../utils/adblockers.js';
10
+ import { clone } from '../utils/clone.js';
11
+
12
+ /**
13
+ * @file Utility functions for working with network rule nodes
14
+ */
15
+ /**
16
+ * Creates a network rule node
17
+ *
18
+ * @param pattern Rule pattern
19
+ * @param modifiers Rule modifiers (optional, default: undefined)
20
+ * @param exception Exception rule flag (optional, default: false)
21
+ * @param syntax Adblock syntax (optional, default: Common)
22
+ * @returns Network rule node
23
+ */
24
+ function createNetworkRuleNode(pattern, modifiers = undefined, exception = false, syntax = AdblockSyntax.Common) {
25
+ const result = {
26
+ category: RuleCategory.Network,
27
+ type: NetworkRuleType.NetworkRule,
28
+ syntax,
29
+ exception,
30
+ pattern: {
31
+ type: 'Value',
32
+ value: pattern,
33
+ },
34
+ };
35
+ if (!isUndefined(modifiers)) {
36
+ result.modifiers = clone(modifiers);
37
+ }
38
+ return result;
39
+ }
40
+
41
+ export { createNetworkRuleNode };
@@ -0,0 +1,87 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { EMPTY } from '../utils/constants.js';
8
+ import { QuoteUtils } from '../utils/quotes.js';
9
+ import { isUndefined, isNull } from '../utils/type-guards.js';
10
+
11
+ /**
12
+ * @file Utility functions for working with scriptlet nodes
13
+ */
14
+ /**
15
+ * Get name of the scriptlet from the scriptlet node
16
+ *
17
+ * @param scriptletNode Scriptlet node to get name of
18
+ * @returns Name of the scriptlet
19
+ * @throws If the scriptlet is empty
20
+ */
21
+ function getScriptletName(scriptletNode) {
22
+ if (scriptletNode.children.length === 0) {
23
+ throw new Error('Empty scriptlet');
24
+ }
25
+ return scriptletNode.children[0]?.value ?? EMPTY;
26
+ }
27
+ /**
28
+ * Transform the nth argument of the scriptlet node
29
+ *
30
+ * @param scriptletNode Scriptlet node to transform argument of
31
+ * @param index Index of the argument to transform (index 0 is the scriptlet name)
32
+ * @param transform Function to transform the argument
33
+ */
34
+ function transformNthScriptletArgument(scriptletNode, index, transform) {
35
+ const child = scriptletNode.children[index];
36
+ if (!isUndefined(child)) {
37
+ const transformed = transform(child?.value ?? null);
38
+ if (isNull(transformed)) {
39
+ // eslint-disable-next-line no-param-reassign
40
+ scriptletNode.children[index] = null;
41
+ return;
42
+ }
43
+ if (isNull(child)) {
44
+ // eslint-disable-next-line no-param-reassign
45
+ scriptletNode.children[index] = {
46
+ type: 'Value',
47
+ value: transformed,
48
+ };
49
+ return;
50
+ }
51
+ child.value = transformed;
52
+ }
53
+ }
54
+ /**
55
+ * Transform all arguments of the scriptlet node
56
+ *
57
+ * @param scriptletNode Scriptlet node to transform arguments of
58
+ * @param transform Function to transform the arguments
59
+ */
60
+ function transformAllScriptletArguments(scriptletNode, transform) {
61
+ for (let i = 0; i < scriptletNode.children.length; i += 1) {
62
+ transformNthScriptletArgument(scriptletNode, i, transform);
63
+ }
64
+ }
65
+ /**
66
+ * Set name of the scriptlet.
67
+ * Modifies input `scriptletNode` if needed.
68
+ *
69
+ * @param scriptletNode Scriptlet node to set name of
70
+ * @param name Name to set
71
+ */
72
+ function setScriptletName(scriptletNode, name) {
73
+ transformNthScriptletArgument(scriptletNode, 0, () => name);
74
+ }
75
+ /**
76
+ * Set quote type of the scriptlet parameters
77
+ *
78
+ * @param scriptletNode Scriptlet node to set quote type of
79
+ * @param quoteType Preferred quote type
80
+ */
81
+ function setScriptletQuoteType(scriptletNode, quoteType) {
82
+ // null is a special value that means "no value", but we can't change its quote type,
83
+ // so we need to convert it to empty string
84
+ transformAllScriptletArguments(scriptletNode, (value) => QuoteUtils.setStringQuoteType(value ?? EMPTY, quoteType));
85
+ }
86
+
87
+ export { getScriptletName, setScriptletName, setScriptletQuoteType, transformAllScriptletArguments, transformNthScriptletArgument };
@@ -0,0 +1,23 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 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
+ /**
8
+ * Common class for the ABP snippet injection body.
9
+ * This class contains shared constants and utilities for handling ABP snippet injection bodies.
10
+ */
11
+ class AbpSnippetInjectionBodyCommon {
12
+ /**
13
+ * Error messages used by the parser and generator.
14
+ */
15
+ static ERROR_MESSAGES = {
16
+ /**
17
+ * Error message indicating that an ABP snippet call is empty.
18
+ */
19
+ EMPTY_SCRIPTLET_CALL: 'Empty ABP snippet call',
20
+ };
21
+ }
22
+
23
+ export { AbpSnippetInjectionBodyCommon };
@@ -0,0 +1,56 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { AdblockSyntax } from '../utils/adblockers.js';
8
+
9
+ /**
10
+ * Possible AdGuard agent markers.
11
+ */
12
+ const ADG_NAME_MARKERS = new Set([
13
+ 'adguard',
14
+ 'adg',
15
+ ]);
16
+ /**
17
+ * Possible uBlock Origin agent markers.
18
+ */
19
+ const UBO_NAME_MARKERS = new Set([
20
+ 'ublock',
21
+ 'ublock origin',
22
+ 'ubo',
23
+ ]);
24
+ /**
25
+ * Possible Adblock Plus agent markers.
26
+ */
27
+ const ABP_NAME_MARKERS = new Set([
28
+ 'adblock',
29
+ 'adblock plus',
30
+ 'adblockplus',
31
+ 'abp',
32
+ ]);
33
+ /**
34
+ * Returns the adblock syntax based on the adblock name parsed from the agent type comment.
35
+ * Needed for modifiers validation of network rules by AGLint.
36
+ *
37
+ * @param name Adblock name.
38
+ *
39
+ * @returns Adblock syntax.
40
+ */
41
+ const getAdblockSyntax = (name) => {
42
+ let syntax = AdblockSyntax.Common;
43
+ const lowerCaseName = name.toLowerCase();
44
+ if (ADG_NAME_MARKERS.has(lowerCaseName)) {
45
+ syntax = AdblockSyntax.Adg;
46
+ }
47
+ else if (UBO_NAME_MARKERS.has(lowerCaseName)) {
48
+ syntax = AdblockSyntax.Ubo;
49
+ }
50
+ else if (ABP_NAME_MARKERS.has(lowerCaseName)) {
51
+ syntax = AdblockSyntax.Abp;
52
+ }
53
+ return syntax;
54
+ };
55
+
56
+ export { getAdblockSyntax };
@@ -0,0 +1,17 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 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
+ /**
8
+ * Known uBO-specific pseudo-class names.
9
+ */
10
+ const UboPseudoName = {
11
+ MatchesMedia: 'matches-media',
12
+ MatchesPath: 'matches-path',
13
+ Remove: 'remove',
14
+ Style: 'style',
15
+ };
16
+
17
+ export { UboPseudoName };
@@ -0,0 +1,262 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { GenericPlatform } from './platforms.js';
8
+ import { isUndefined } from '../utils/type-guards.js';
9
+ import { isGenericPlatform } from './utils/platform-helpers.js';
10
+ import { AdblockSyntax } from '../utils/adblockers.js';
11
+
12
+ /* eslint-disable no-bitwise */
13
+ /**
14
+ * @file Provides common compatibility table methods.
15
+ */
16
+ /**
17
+ * Base compatibility table class which provides common methods to work with compatibility data.
18
+ *
19
+ * @template T Compatibility data schema.
20
+ */
21
+ class CompatibilityTableBase {
22
+ /**
23
+ * Compatibility table data.
24
+ */
25
+ data;
26
+ /**
27
+ * Optional name transformer function. If provided,
28
+ * it will be called in all methods before processing compatibility data names.
29
+ */
30
+ nameTransformer;
31
+ /**
32
+ * Creates a new instance of the common compatibility table.
33
+ *
34
+ * @param data Compatibility table data.
35
+ * @param nameTransformer Optional name transformer function.
36
+ */
37
+ constructor(data, nameTransformer = null) {
38
+ this.data = data;
39
+ this.nameTransformer = nameTransformer;
40
+ }
41
+ /**
42
+ * Helper method to get a 'row' from the compatibility table data by name.
43
+ *
44
+ * @param name Compatibility data name.
45
+ * @returns Compatibility table row storage or `null` if not found.
46
+ */
47
+ getRowStorage(name) {
48
+ const idx = this.data.map[name];
49
+ if (isUndefined(idx)) {
50
+ return null;
51
+ }
52
+ return this.data.shared[idx];
53
+ }
54
+ /**
55
+ * Checks whether a compatibility data `name` exists for any platform.
56
+ *
57
+ * @note Technically, do the same as `exists()` method with generic platform _any_
58
+ * but it is faster because it does not apply complex logic.
59
+ *
60
+ * @param name Compatibility data name.
61
+ *
62
+ * @returns True if the compatibility data exists, false otherwise.
63
+ */
64
+ existsAny(name) {
65
+ const normalizedName = this.nameTransformer ? this.nameTransformer(name) : name;
66
+ return !isUndefined(this.data.map[normalizedName]);
67
+ }
68
+ /**
69
+ * Checks whether a compatibility data `name` exists for a specified platform.
70
+ *
71
+ * @param name Compatibility data name.
72
+ * @param platform Specific or generic platform.
73
+ *
74
+ * @returns True if the compatibility data exists, false otherwise.
75
+ */
76
+ exists(name, platform) {
77
+ const normalizedName = this.nameTransformer ? this.nameTransformer(name) : name;
78
+ const data = this.getRowStorage(normalizedName);
79
+ if (!data) {
80
+ return false;
81
+ }
82
+ const isMatch = (idx) => {
83
+ const el = data.shared[idx];
84
+ return !isUndefined(el) && (el.name === normalizedName || !!el.aliases?.includes(normalizedName));
85
+ };
86
+ if (isGenericPlatform(platform)) {
87
+ // Since indexes are specific platforms in the compatibility table data,
88
+ // we can't index them directly if the platform is generic (union of specific platforms).
89
+ // In this case, we need to iterate over the keys and return true on the first match.
90
+ const keys = Object.keys(data.map);
91
+ for (let i = 0; i < keys.length; i += 1) {
92
+ const key = Number(keys[i]);
93
+ if (platform & key) {
94
+ const idx = data.map[key];
95
+ if (isMatch(idx)) {
96
+ return true;
97
+ }
98
+ }
99
+ }
100
+ return false;
101
+ }
102
+ const idx = data.map[platform];
103
+ return isMatch(idx);
104
+ }
105
+ /**
106
+ * Returns a compatibility data by name and specific platform.
107
+ *
108
+ * @param name The name of the compatibility data.
109
+ * @param platform The specific platform.
110
+ *
111
+ * @returns A single compatibility data or `null` if not found.
112
+ */
113
+ getSingle(name, platform) {
114
+ const normalizedName = this.nameTransformer ? this.nameTransformer(name) : name;
115
+ const data = this.getRowStorage(normalizedName);
116
+ if (!data) {
117
+ return null;
118
+ }
119
+ const idx = data.map[platform];
120
+ return isUndefined(idx) ? null : data.shared[idx];
121
+ }
122
+ /**
123
+ * Returns all compatibility data records for name and specified platform.
124
+ *
125
+ * @param name Compatibility data name.
126
+ * @param platform Specific or generic platform.
127
+ *
128
+ * @returns Multiple records grouped by platforms.
129
+ * Technically, it is an object where keys are platform enums values and values are compatibility data records.
130
+ *
131
+ * @note Platform enum values can be converted to string names using {@link getSpecificPlatformName} on demand.
132
+ */
133
+ getMultiple(name, platform) {
134
+ const normalizedName = this.nameTransformer ? this.nameTransformer(name) : name;
135
+ const data = this.getRowStorage(normalizedName);
136
+ if (!data) {
137
+ return null;
138
+ }
139
+ if (isGenericPlatform(platform)) {
140
+ const result = {};
141
+ const keys = Object.keys(data.map);
142
+ for (let i = 0; i < keys.length; i += 1) {
143
+ const key = Number(keys[i]);
144
+ if (platform & key) {
145
+ const idx = data.map[key];
146
+ if (!isUndefined(idx)) {
147
+ result[key] = data.shared[idx];
148
+ }
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ const idx = data.map[platform];
154
+ if (isUndefined(idx)) {
155
+ return null;
156
+ }
157
+ return { key: data.shared[idx] };
158
+ }
159
+ /**
160
+ * Returns all compatibility data records for the specified platform.
161
+ *
162
+ * @param platform Specific or generic platform.
163
+ *
164
+ * @returns Array of multiple records grouped by platforms.
165
+ */
166
+ getAllMultiple(platform) {
167
+ const result = [];
168
+ for (let i = 0; i < this.data.shared.length; i += 1) {
169
+ const data = this.data.shared[i];
170
+ const names = new Set(data.shared.map(({ name }) => name));
171
+ names.forEach((name) => {
172
+ const multipleRecords = this.getMultiple(name, platform);
173
+ if (multipleRecords) {
174
+ result.push(multipleRecords);
175
+ }
176
+ });
177
+ }
178
+ return result;
179
+ }
180
+ /**
181
+ * Returns the first compatibility data record for name and specified platform.
182
+ *
183
+ * @param name Compatibility data name.
184
+ * @param platform Specific or generic platform.
185
+ *
186
+ * @returns First found compatibility data record or `null` if not found.
187
+ */
188
+ getFirst(name, platform) {
189
+ const normalizedName = this.nameTransformer ? this.nameTransformer(name) : name;
190
+ const data = this.getRowStorage(normalizedName);
191
+ if (!data) {
192
+ return null;
193
+ }
194
+ if (isGenericPlatform(platform)) {
195
+ const keys = Object.keys(data.map);
196
+ for (let i = 0; i < keys.length; i += 1) {
197
+ const key = Number(keys[i]);
198
+ if (platform & key) {
199
+ const idx = data.map[key];
200
+ if (!isUndefined(idx)) {
201
+ // return the first found record
202
+ return data.shared[idx];
203
+ }
204
+ }
205
+ }
206
+ return null;
207
+ }
208
+ const idx = data.map[platform];
209
+ if (isUndefined(idx)) {
210
+ return null;
211
+ }
212
+ return data.shared[idx];
213
+ }
214
+ /**
215
+ * Returns all compatibility data records for the specified name.
216
+ *
217
+ * @param name Compatibility data name.
218
+ *
219
+ * @returns Array of multiple records grouped by platforms.
220
+ */
221
+ getRow(name) {
222
+ const normalizedName = this.nameTransformer ? this.nameTransformer(name) : name;
223
+ const data = this.getRowStorage(normalizedName);
224
+ if (!data) {
225
+ return [];
226
+ }
227
+ return data.shared;
228
+ }
229
+ /**
230
+ * Returns all compatibility data grouped by products.
231
+ *
232
+ * @returns Array of multiple records grouped by products.
233
+ */
234
+ getRowsByProduct() {
235
+ const result = [];
236
+ for (let i = 0; i < this.data.shared.length; i += 1) {
237
+ const data = this.data.shared[i];
238
+ const keys = Object.keys(data.map);
239
+ const row = {
240
+ [AdblockSyntax.Adg]: {},
241
+ [AdblockSyntax.Ubo]: {},
242
+ [AdblockSyntax.Abp]: {},
243
+ };
244
+ for (let j = 0; j < keys.length; j += 1) {
245
+ const key = Number(keys[j]);
246
+ if (key & GenericPlatform.AdgAny) {
247
+ row[AdblockSyntax.Adg][key] = data.shared[data.map[key]];
248
+ }
249
+ else if (key & GenericPlatform.UboAny) {
250
+ row[AdblockSyntax.Ubo][key] = data.shared[data.map[key]];
251
+ }
252
+ else if (key & GenericPlatform.AbpAny) {
253
+ row[AdblockSyntax.Abp][key] = data.shared[data.map[key]];
254
+ }
255
+ }
256
+ result.push(row);
257
+ }
258
+ return result;
259
+ }
260
+ }
261
+
262
+ export { CompatibilityTableBase };