@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
@@ -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 { BaseSerializer } from './base-serializer.js';
8
+ import { isUndefined } from '../utils/type-guards.js';
9
+ import { NULL } from '../utils/constants.js';
10
+ import { InvalidRuleErrorNodeMarshallingMap } from '../marshalling-utils/invalid-rule-error-node-common.js';
11
+ import { BinaryTypeMarshallingMap } from '../marshalling-utils/misc/binary-type-common.js';
12
+
13
+ /**
14
+ * Serializer for invalid rule error nodes.
15
+ */
16
+ class InvalidRuleErrorNodeSerializer extends BaseSerializer {
17
+ /**
18
+ * Serializes an invalid rule error node to binary format.
19
+ *
20
+ * @param node Node to serialize.
21
+ * @param buffer ByteBuffer for writing binary data.
22
+ */
23
+ static serialize(node, buffer) {
24
+ buffer.writeUint8(BinaryTypeMarshallingMap.InvalidRuleErrorNode);
25
+ buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.Name);
26
+ buffer.writeString(node.name);
27
+ buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.Message);
28
+ buffer.writeString(node.message);
29
+ if (!isUndefined(node.start)) {
30
+ buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.Start);
31
+ buffer.writeUint32(node.start);
32
+ }
33
+ if (!isUndefined(node.end)) {
34
+ buffer.writeUint8(InvalidRuleErrorNodeMarshallingMap.End);
35
+ buffer.writeUint32(node.end);
36
+ }
37
+ buffer.writeUint8(NULL);
38
+ }
39
+ }
40
+
41
+ export { InvalidRuleErrorNodeSerializer };
@@ -0,0 +1,40 @@
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 { BaseSerializer } from './base-serializer.js';
8
+ import { isUndefined } from '../utils/type-guards.js';
9
+ import { NULL } from '../utils/constants.js';
10
+ import { InvalidRuleErrorNodeSerializer } from './invalid-rule-error-node-serializer.js';
11
+ import { InvalidRuleMarshallingMap } from '../marshalling-utils/invalid-rule-common.js';
12
+ import { BinaryTypeMarshallingMap } from '../marshalling-utils/misc/binary-type-common.js';
13
+
14
+ /**
15
+ * Serializer for invalid rule nodes.
16
+ */
17
+ class InvalidRuleSerializer extends BaseSerializer {
18
+ /**
19
+ * Serializes an invalid rule node to binary format.
20
+ *
21
+ * @param node Node to serialize.
22
+ * @param buffer ByteBuffer for writing binary data.
23
+ */
24
+ static serialize(node, buffer) {
25
+ buffer.writeUint8(BinaryTypeMarshallingMap.InvalidRule);
26
+ buffer.writeUint8(InvalidRuleMarshallingMap.Error);
27
+ InvalidRuleErrorNodeSerializer.serialize(node.error, buffer);
28
+ if (!isUndefined(node.start)) {
29
+ buffer.writeUint8(InvalidRuleMarshallingMap.Start);
30
+ buffer.writeUint32(node.start);
31
+ }
32
+ if (!isUndefined(node.end)) {
33
+ buffer.writeUint8(InvalidRuleMarshallingMap.End);
34
+ buffer.writeUint32(node.end);
35
+ }
36
+ buffer.writeUint8(NULL);
37
+ }
38
+ }
39
+
40
+ export { InvalidRuleSerializer };
@@ -0,0 +1,64 @@
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 { NULL, COMMA, PIPE } from '../../utils/constants.js';
8
+ import { isUndefined } from '../../utils/type-guards.js';
9
+ import { BaseSerializer } from '../base-serializer.js';
10
+ import { ListItemsSerializer } from './list-items-serializer.js';
11
+ import { DomainListMarshallingMap } from '../../marshalling-utils/misc/domain-list-common.js';
12
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
13
+
14
+ /**
15
+ * Value map for binary serialization. This helps to reduce the size of the serialized data,
16
+ * as it allows us to use a single byte to represent frequently used values.
17
+ *
18
+ * ! IMPORTANT: If you change values here, please update the {@link BINARY_SCHEMA_VERSION}!
19
+ *
20
+ * @note Only 256 values can be represented this way.
21
+ */
22
+ const SEPARATOR_SERIALIZATION_MAP = new Map([
23
+ [COMMA, 0],
24
+ [PIPE, 1],
25
+ ]);
26
+ /**
27
+ * `DomainListSerializer` is responsible for serializing a domain list.
28
+ *
29
+ * @example
30
+ * - If the rule is `example.com,~example.net##.ads`, the domain list is `example.com,~example.net`.
31
+ * - If the rule is `ads.js^$script,domains=example.com|~example.org`, the domain list is `example.com|~example.org`.
32
+ * This serializer is responsible for serializing these domain lists.
33
+ * @see {@link https://help.eyeo.com/adblockplus/how-to-write-filters#elemhide_domains}
34
+ */
35
+ class DomainListSerializer extends BaseSerializer {
36
+ /**
37
+ * Serializes a domain list node to binary format.
38
+ *
39
+ * @param node Node to serialize.
40
+ * @param buffer ByteBuffer for writing binary data.
41
+ */
42
+ static serialize(node, buffer) {
43
+ buffer.writeUint8(BinaryTypeMarshallingMap.DomainListNode);
44
+ const separator = SEPARATOR_SERIALIZATION_MAP.get(node.separator);
45
+ if (isUndefined(separator)) {
46
+ throw new Error(`Invalid separator: ${node.separator}`);
47
+ }
48
+ buffer.writeUint8(DomainListMarshallingMap.Separator);
49
+ buffer.writeUint8(separator);
50
+ buffer.writeUint8(DomainListMarshallingMap.Children);
51
+ ListItemsSerializer.serialize(node.children, buffer);
52
+ if (!isUndefined(node.start)) {
53
+ buffer.writeUint8(DomainListMarshallingMap.Start);
54
+ buffer.writeUint32(node.start);
55
+ }
56
+ if (!isUndefined(node.end)) {
57
+ buffer.writeUint8(DomainListMarshallingMap.End);
58
+ buffer.writeUint32(node.end);
59
+ }
60
+ buffer.writeUint8(NULL);
61
+ }
62
+ }
63
+
64
+ export { DomainListSerializer };
@@ -0,0 +1,58 @@
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 { BaseSerializer } from '../base-serializer.js';
8
+ import { ListItemNodeType } from '../../nodes/index.js';
9
+ import { isUndefined } from '../../utils/type-guards.js';
10
+ import { NULL } from '../../utils/constants.js';
11
+ import { ListItemMarshallingMap } from '../../marshalling-utils/misc/list-item-common.js';
12
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
13
+
14
+ /**
15
+ * Serializer for list item nodes.
16
+ */
17
+ class ListItemSerializer extends BaseSerializer {
18
+ /**
19
+ * Serializes a list item to binary format.
20
+ *
21
+ * @param item List item to serialize.
22
+ * @param buffer Output byte buffer.
23
+ * @template T Type of the list item.
24
+ */
25
+ static serialize(item, buffer) {
26
+ switch (item.type) {
27
+ case ListItemNodeType.App:
28
+ buffer.writeUint8(BinaryTypeMarshallingMap.AppNode);
29
+ break;
30
+ case ListItemNodeType.Domain:
31
+ buffer.writeUint8(BinaryTypeMarshallingMap.DomainNode);
32
+ break;
33
+ case ListItemNodeType.Method:
34
+ buffer.writeUint8(BinaryTypeMarshallingMap.MethodNode);
35
+ break;
36
+ case ListItemNodeType.StealthOption:
37
+ buffer.writeUint8(BinaryTypeMarshallingMap.StealthOptionNode);
38
+ break;
39
+ default:
40
+ throw new Error(`Invalid list item type: ${item.type}`);
41
+ }
42
+ buffer.writeUint8(ListItemMarshallingMap.Exception);
43
+ buffer.writeUint8(item.exception ? 1 : 0);
44
+ buffer.writeUint8(ListItemMarshallingMap.Value);
45
+ buffer.writeString(item.value);
46
+ if (!isUndefined(item.start)) {
47
+ buffer.writeUint8(ListItemMarshallingMap.Start);
48
+ buffer.writeUint32(item.start);
49
+ }
50
+ if (!isUndefined(item.end)) {
51
+ buffer.writeUint8(ListItemMarshallingMap.End);
52
+ buffer.writeUint32(item.end);
53
+ }
54
+ buffer.writeUint8(NULL);
55
+ }
56
+ }
57
+
58
+ export { ListItemSerializer };
@@ -0,0 +1,29 @@
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 { ListItemSerializer } from './list-item-serializer.js';
8
+
9
+ /**
10
+ * Serializer for list items.
11
+ */
12
+ class ListItemsSerializer {
13
+ /**
14
+ * Serializes a list of items to binary format.
15
+ *
16
+ * @param items List of items to serialize.
17
+ * @param buffer Output byte buffer.
18
+ * @template T Type of the list items.
19
+ */
20
+ static serialize(items, buffer) {
21
+ const { length } = items;
22
+ buffer.writeUint16(length);
23
+ for (let i = 0; i < length; i += 1) {
24
+ ListItemSerializer.serialize(items[i], buffer);
25
+ }
26
+ }
27
+ }
28
+
29
+ export { ListItemsSerializer };
@@ -0,0 +1,136 @@
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 { NULL } from '../../utils/constants.js';
8
+ import { isUndefined } from '../../utils/type-guards.js';
9
+ import { BaseSerializer } from '../base-serializer.js';
10
+ import { KNOWN_VARIABLES_SERIALIZATION_MAP, VariableNodeBinaryPropMarshallingMap, ParenthesisNodeBinaryPropMarshallingMap, OperatorNodeBinaryPropMarshallingMap, LOGICAL_EXPRESSION_OPERATOR_SERIALISATION_MAP } from '../../marshalling-utils/misc/logical-expression-common.js';
11
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
12
+
13
+ /**
14
+ * Possible node types in the logical expression.
15
+ */
16
+ const NodeType = {
17
+ Variable: 'Variable',
18
+ Operator: 'Operator',
19
+ Parenthesis: 'Parenthesis',
20
+ };
21
+ /**
22
+ * `LogicalExpressionSerializer` is responsible for serializing logical expressions.
23
+ *
24
+ * @example
25
+ * From the following rule:
26
+ * ```adblock
27
+ * !#if (adguard_ext_android_cb || adguard_ext_safari)
28
+ * ```
29
+ * this parser will parse the expression `(adguard_ext_android_cb || adguard_ext_safari)`.
30
+ */
31
+ // TODO: Refactor this class
32
+ class LogicalExpressionSerializer extends BaseSerializer {
33
+ /**
34
+ * Serializes a variable node to binary format.
35
+ *
36
+ * @param node Node to serialize.
37
+ * @param buffer ByteBuffer for writing binary data.
38
+ */
39
+ // TODO: create a common serialize / deserialize interface for such nodes (Variable, Value, Parameter, etc.)
40
+ static serializeVariableNode(node, buffer) {
41
+ buffer.writeUint8(BinaryTypeMarshallingMap.ExpressionVariableNode);
42
+ const frequentName = KNOWN_VARIABLES_SERIALIZATION_MAP.get(node.name);
43
+ if (!isUndefined(frequentName)) {
44
+ buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.FrequentName);
45
+ buffer.writeUint8(frequentName);
46
+ }
47
+ else {
48
+ buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.Name);
49
+ buffer.writeString(node.name);
50
+ }
51
+ if (!isUndefined(node.start)) {
52
+ buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.Start);
53
+ buffer.writeUint32(node.start);
54
+ }
55
+ if (!isUndefined(node.end)) {
56
+ buffer.writeUint8(VariableNodeBinaryPropMarshallingMap.End);
57
+ buffer.writeUint32(node.end);
58
+ }
59
+ buffer.writeUint8(NULL);
60
+ }
61
+ /**
62
+ * Serializes a parenthesis node to binary format.
63
+ *
64
+ * @param node Node to serialize.
65
+ * @param buffer ByteBuffer for writing binary data.
66
+ */
67
+ static serializeParenthesisNode(node, buffer) {
68
+ buffer.writeUint8(BinaryTypeMarshallingMap.ExpressionParenthesisNode);
69
+ buffer.writeUint8(ParenthesisNodeBinaryPropMarshallingMap.Expression);
70
+ LogicalExpressionSerializer.serialize(node.expression, buffer);
71
+ if (!isUndefined(node.start)) {
72
+ buffer.writeUint8(ParenthesisNodeBinaryPropMarshallingMap.Start);
73
+ buffer.writeUint32(node.start);
74
+ }
75
+ if (!isUndefined(node.end)) {
76
+ buffer.writeUint8(ParenthesisNodeBinaryPropMarshallingMap.End);
77
+ buffer.writeUint32(node.end);
78
+ }
79
+ buffer.writeUint8(NULL);
80
+ }
81
+ /**
82
+ * Serializes an operator node to binary format.
83
+ *
84
+ * @param node Node to serialize.
85
+ * @param buffer ByteBuffer for writing binary data.
86
+ */
87
+ static serializeOperatorNode(node, buffer) {
88
+ buffer.writeUint8(BinaryTypeMarshallingMap.ExpressionOperatorNode);
89
+ buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Operator);
90
+ const operatorBinary = LOGICAL_EXPRESSION_OPERATOR_SERIALISATION_MAP.get(node.operator);
91
+ if (isUndefined(operatorBinary)) {
92
+ throw new Error(`Unknown operator: ${node.operator}`);
93
+ }
94
+ buffer.writeUint8(operatorBinary);
95
+ buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Left);
96
+ LogicalExpressionSerializer.serialize(node.left, buffer);
97
+ if (node.right) {
98
+ buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Right);
99
+ LogicalExpressionSerializer.serialize(node.right, buffer);
100
+ }
101
+ if (!isUndefined(node.start)) {
102
+ buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.Start);
103
+ buffer.writeUint32(node.start);
104
+ }
105
+ if (!isUndefined(node.end)) {
106
+ buffer.writeUint8(OperatorNodeBinaryPropMarshallingMap.End);
107
+ buffer.writeUint32(node.end);
108
+ }
109
+ buffer.writeUint8(NULL);
110
+ }
111
+ /**
112
+ * Serializes a logical expression node to binary format.
113
+ *
114
+ * @param node Node to serialize.
115
+ * @param buffer ByteBuffer for writing binary data.
116
+ */
117
+ static serialize(node, buffer) {
118
+ switch (node.type) {
119
+ case NodeType.Variable:
120
+ LogicalExpressionSerializer.serializeVariableNode(node, buffer);
121
+ break;
122
+ case NodeType.Operator:
123
+ LogicalExpressionSerializer.serializeOperatorNode(node, buffer);
124
+ break;
125
+ case NodeType.Parenthesis:
126
+ LogicalExpressionSerializer.serializeParenthesisNode(node, buffer);
127
+ break;
128
+ default:
129
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
+ throw new Error(`Unexpected node type: ${node.type}`);
131
+ }
132
+ buffer.writeUint8(NULL);
133
+ }
134
+ }
135
+
136
+ export { LogicalExpressionSerializer, NodeType };
@@ -0,0 +1,58 @@
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 { UINT16_MAX, NULL } from '../../utils/constants.js';
8
+ import { isUndefined } from '../../utils/type-guards.js';
9
+ import { BaseSerializer } from '../base-serializer.js';
10
+ import { ModifierSerializer } from './modifier-serializer.js';
11
+ import { ModifierListNodeMarshallingMap } from '../../marshalling-utils/misc/modifier-list-common.js';
12
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
13
+
14
+ /**
15
+ * `ModifierListSerializer` is responsible for serializing modifier lists. Please note that the name is not
16
+ * uniform, "modifiers" are also known as "options".
17
+ *
18
+ * @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#basic-rules-modifiers}
19
+ * @see {@link https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#non-basic-rules-modifiers}
20
+ * @see {@link https://help.eyeo.com/adblockplus/how-to-write-filters#options}
21
+ */
22
+ class ModifierListSerializer extends BaseSerializer {
23
+ /**
24
+ * Serializes a modifier list node to binary format.
25
+ *
26
+ * @param node Node to serialize.
27
+ * @param buffer ByteBuffer for writing binary data.
28
+ */
29
+ static serialize(node, buffer) {
30
+ buffer.writeUint8(BinaryTypeMarshallingMap.ModifierListNode);
31
+ const count = node.children.length;
32
+ // If there are no children, we do not write any data related to them, to avoid using unnecessary storage,
33
+ // but children is a required field, so during deserialization we should initialize it as an empty array,
34
+ // if there are no children in the binary data.
35
+ if (count) {
36
+ buffer.writeUint8(ModifierListNodeMarshallingMap.Children);
37
+ // note: we store the count, because re-construction of the array is faster if we know the length
38
+ if (count > UINT16_MAX) {
39
+ throw new Error(`Too many modifiers: ${count}, the limit is ${UINT16_MAX}`);
40
+ }
41
+ buffer.writeUint16(count);
42
+ for (let i = 0; i < count; i += 1) {
43
+ ModifierSerializer.serialize(node.children[i], buffer);
44
+ }
45
+ }
46
+ if (!isUndefined(node.start)) {
47
+ buffer.writeUint8(ModifierListNodeMarshallingMap.Start);
48
+ buffer.writeUint32(node.start);
49
+ }
50
+ if (!isUndefined(node.end)) {
51
+ buffer.writeUint8(ModifierListNodeMarshallingMap.End);
52
+ buffer.writeUint32(node.end);
53
+ }
54
+ buffer.writeUint8(NULL);
55
+ }
56
+ }
57
+
58
+ export { ModifierListSerializer };
@@ -0,0 +1,49 @@
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 { NULL } from '../../utils/constants.js';
8
+ import { ValueSerializer } from './value-serializer.js';
9
+ import { isUndefined } from '../../utils/type-guards.js';
10
+ import { BaseSerializer } from '../base-serializer.js';
11
+ import { ModifierNodeMarshallingMap, FREQUENT_MODIFIERS_SERIALIZATION_MAP, FREQUENT_REDIRECT_MODIFIERS_SERIALIZATION_MAP } from '../../marshalling-utils/misc/modifier-common.js';
12
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
13
+
14
+ /**
15
+ * `ModifierSerializer` is responsible for serializing modifiers.
16
+ *
17
+ * @example
18
+ * `match-case`, `~third-party`, `domain=example.com|~example.org`
19
+ */
20
+ class ModifierSerializer extends BaseSerializer {
21
+ /**
22
+ * Serializes a modifier node to binary format.
23
+ *
24
+ * @param node Node to serialize.
25
+ * @param buffer ByteBuffer for writing binary data.
26
+ */
27
+ static serialize(node, buffer) {
28
+ buffer.writeUint8(BinaryTypeMarshallingMap.ModifierNode);
29
+ buffer.writeUint8(ModifierNodeMarshallingMap.Name);
30
+ ValueSerializer.serialize(node.name, buffer, FREQUENT_MODIFIERS_SERIALIZATION_MAP);
31
+ if (!isUndefined(node.value)) {
32
+ buffer.writeUint8(ModifierNodeMarshallingMap.Value);
33
+ ValueSerializer.serialize(node.value, buffer, FREQUENT_REDIRECT_MODIFIERS_SERIALIZATION_MAP.get(node.name.value));
34
+ }
35
+ buffer.writeUint8(ModifierNodeMarshallingMap.Exception);
36
+ buffer.writeUint8(node.exception ? 1 : 0);
37
+ if (!isUndefined(node.start)) {
38
+ buffer.writeUint8(ModifierNodeMarshallingMap.Start);
39
+ buffer.writeUint32(node.start);
40
+ }
41
+ if (!isUndefined(node.end)) {
42
+ buffer.writeUint8(ModifierNodeMarshallingMap.End);
43
+ buffer.writeUint32(node.end);
44
+ }
45
+ buffer.writeUint8(NULL);
46
+ }
47
+ }
48
+
49
+ export { ModifierSerializer };
@@ -0,0 +1,52 @@
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 { NULL } from '../../utils/constants.js';
8
+ import { ValueSerializer } from './value-serializer.js';
9
+ import { isNull, isUndefined } from '../../utils/type-guards.js';
10
+ import { BaseSerializer } from '../base-serializer.js';
11
+ import { ParameterListNodeMarshallingMap } from '../../marshalling-utils/misc/parameter-list-common.js';
12
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
13
+
14
+ /**
15
+ * Serializer for parameter list nodes.
16
+ */
17
+ class ParameterListSerializer extends BaseSerializer {
18
+ /**
19
+ * Serializes a parameter list node to binary format.
20
+ *
21
+ * @param node Node to serialize.
22
+ * @param buffer ByteBuffer for writing binary data.
23
+ * @param frequentValuesMap Optional map of frequent values.
24
+ * @param toLower Whether to lowercase the value before the frequent value match (defaults to `false`).
25
+ */
26
+ static serialize(node, buffer, frequentValuesMap, toLower = false) {
27
+ buffer.writeUint8(BinaryTypeMarshallingMap.ParameterListNode);
28
+ const count = node.children.length;
29
+ buffer.writeUint8(ParameterListNodeMarshallingMap.Children);
30
+ // note: we store the count, because re-construction of the array is faster if we know the length
31
+ buffer.writeUint32(count);
32
+ for (let i = 0; i < count; i += 1) {
33
+ const child = node.children[i];
34
+ if (isNull(child)) {
35
+ buffer.writeUint8(BinaryTypeMarshallingMap.Null);
36
+ continue;
37
+ }
38
+ ValueSerializer.serialize(child, buffer, frequentValuesMap, toLower);
39
+ }
40
+ if (!isUndefined(node.start)) {
41
+ buffer.writeUint8(ParameterListNodeMarshallingMap.Start);
42
+ buffer.writeUint32(node.start);
43
+ }
44
+ if (!isUndefined(node.end)) {
45
+ buffer.writeUint8(ParameterListNodeMarshallingMap.End);
46
+ buffer.writeUint32(node.end);
47
+ }
48
+ buffer.writeUint8(NULL);
49
+ }
50
+ }
51
+
52
+ export { ParameterListSerializer };
@@ -0,0 +1,50 @@
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 { NULL } from '../../utils/constants.js';
8
+ import { isUndefined } from '../../utils/type-guards.js';
9
+ import { BaseSerializer } from '../base-serializer.js';
10
+ import { ValueNodeMarshallingMap } from '../../marshalling-utils/misc/value-common.js';
11
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
12
+
13
+ /**
14
+ * Value serializer.
15
+ */
16
+ class ValueSerializer extends BaseSerializer {
17
+ /**
18
+ * Serializes a value node to binary format.
19
+ *
20
+ * @param node Node to serialize.
21
+ * @param buffer ByteBuffer for writing binary data.
22
+ * @param frequentValuesMap Optional map of frequent values.
23
+ * @param toLower Whether to lowercase the value before the frequent value match (defaults to `false`).
24
+ */
25
+ static serialize(node, buffer, frequentValuesMap, toLower = false) {
26
+ buffer.writeUint8(BinaryTypeMarshallingMap.ValueNode);
27
+ const frequentValue = frequentValuesMap?.get(toLower ? node.value.toLowerCase() : node.value);
28
+ // note: do not use just `if (frequentValue)` because it can be 0
29
+ if (!isUndefined(frequentValue)) {
30
+ buffer.writeUint8(ValueNodeMarshallingMap.FrequentValue);
31
+ buffer.writeUint8(frequentValue);
32
+ }
33
+ else {
34
+ buffer.writeUint8(ValueNodeMarshallingMap.Value);
35
+ buffer.writeString(node.value);
36
+ }
37
+ // note: do not use just `if (node.start)` because it can be 0
38
+ if (!isUndefined(node.start)) {
39
+ buffer.writeUint8(ValueNodeMarshallingMap.Start);
40
+ buffer.writeUint32(node.start);
41
+ }
42
+ if (!isUndefined(node.end)) {
43
+ buffer.writeUint8(ValueNodeMarshallingMap.End);
44
+ buffer.writeUint32(node.end);
45
+ }
46
+ buffer.writeUint8(NULL);
47
+ }
48
+ }
49
+
50
+ export { ValueSerializer };
@@ -0,0 +1,70 @@
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 { NULL } from '../../utils/constants.js';
8
+ import { ValueSerializer } from '../misc/value-serializer.js';
9
+ import { isUndefined } from '../../utils/type-guards.js';
10
+ import { HostnameListSerializer } from './hostname-list-serializer.js';
11
+ import { BaseSerializer } from '../base-serializer.js';
12
+ import { HostRuleMarshallingMap } from '../../marshalling-utils/misc/host-rule-common.js';
13
+ import { BinaryTypeMarshallingMap } from '../../marshalling-utils/misc/binary-type-common.js';
14
+ import { getSyntaxSerializationMap } from '../../marshalling-utils/syntax-serialization-map.js';
15
+
16
+ /**
17
+ * `HostRuleSerializer` is responsible for serializing hosts-like rules.
18
+ *
19
+ * HostRule is a structure for simple host-level rules (i.e. /etc/hosts syntax).
20
+ * It also supports "just domain" syntax. In this case, the IP will be set to 0.0.0.0.
21
+ *
22
+ * Rules syntax looks like this:
23
+ * ```text
24
+ * IP_address canonical_hostname [aliases...]
25
+ * ```
26
+ *
27
+ * @example
28
+ * `192.168.1.13 bar.mydomain.org bar` -- ipv4
29
+ * `ff02::1 ip6-allnodes` -- ipv6
30
+ * `::1 localhost ip6-localhost ip6-loopback` -- ipv6 aliases
31
+ * `example.org` -- "just domain" syntax
32
+ * @see {@link http://man7.org/linux/man-pages/man5/hosts.5.html}
33
+ */
34
+ class HostRuleSerializer extends BaseSerializer {
35
+ /**
36
+ * Serializes a host rule node to binary format.
37
+ *
38
+ * @param node Node to serialize.
39
+ * @param buffer ByteBuffer for writing binary data.
40
+ */
41
+ // TODO: add support for raws, if ever needed
42
+ static serialize(node, buffer) {
43
+ buffer.writeUint8(BinaryTypeMarshallingMap.HostRuleNode);
44
+ buffer.writeUint8(HostRuleMarshallingMap.Syntax);
45
+ buffer.writeUint8(getSyntaxSerializationMap().get(node.syntax) ?? 0);
46
+ if (node.ip) {
47
+ buffer.writeUint8(HostRuleMarshallingMap.Ip);
48
+ ValueSerializer.serialize(node.ip, buffer);
49
+ }
50
+ if (node.hostnames) {
51
+ buffer.writeUint8(HostRuleMarshallingMap.HostnameList);
52
+ HostnameListSerializer.serialize(node.hostnames, buffer);
53
+ }
54
+ if (node.comment) {
55
+ buffer.writeUint8(HostRuleMarshallingMap.Comment);
56
+ ValueSerializer.serialize(node.comment, buffer);
57
+ }
58
+ if (!isUndefined(node.start)) {
59
+ buffer.writeUint8(HostRuleMarshallingMap.Start);
60
+ buffer.writeUint32(node.start);
61
+ }
62
+ if (!isUndefined(node.end)) {
63
+ buffer.writeUint8(HostRuleMarshallingMap.End);
64
+ buffer.writeUint32(node.end);
65
+ }
66
+ buffer.writeUint8(NULL);
67
+ }
68
+ }
69
+
70
+ export { HostRuleSerializer };