@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,21 @@
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
+ export { ADG_SCRIPTLET_MASK, AGLINT_COMMAND_PREFIX, COMMA_DOMAIN_LIST_SEPARATOR, HINT_MARKER, IF, INCLUDE, MODIFIERS_SEPARATOR, MODIFIER_ASSIGN_OPERATOR, NEGATION_MARKER, NETWORK_RULE_EXCEPTION_MARKER, NETWORK_RULE_SEPARATOR, PIPE_MODIFIER_SEPARATOR, PREPROCESSOR_MARKER, SAFARI_CB_AFFINITY, UBO_SCRIPTLET_MASK } from './constants.js';
8
+ export { BINARY_SCHEMA_VERSION } from './binary-schema-version.js';
9
+ export { AdblockSyntax } from './adblockers.js';
10
+ export { CosmeticRuleSeparatorUtils } from './cosmetic-rule-separator.js';
11
+ export { DomainUtils } from './domain.js';
12
+ export { LogicalExpressionUtils } from './logical-expression.js';
13
+ export { ADBLOCK_URL_SEPARATOR, ADBLOCK_URL_SEPARATOR_REGEX, ADBLOCK_URL_START, ADBLOCK_URL_START_REGEX, ADBLOCK_WILDCARD, ADBLOCK_WILDCARD_REGEX, RegExpUtils, SPECIAL_REGEX_SYMBOLS } from './regexp.js';
14
+ export { QuoteType, QuoteUtils } from './quotes.js';
15
+ export { PositionProvider } from './position-provider.js';
16
+ export { OutputByteBuffer } from './output-byte-buffer.js';
17
+ export { InputByteBuffer } from './input-byte-buffer.js';
18
+ export { ByteBuffer } from './byte-buffer.js';
19
+ export { encodeIntoPolyfill } from './text-encoder-polyfill.js';
20
+ export { decodeTextPolyfill } from './text-decoder-polyfill.js';
21
+ export { RuleCategorizer } from './categorizer.js';
@@ -0,0 +1,265 @@
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 { ByteBuffer } from './byte-buffer.js';
8
+ import { isArrayOfUint8Arrays } from './type-guards.js';
9
+ import { isChromium } from './is-chromium.js';
10
+ import { decodeTextPolyfill } from './text-decoder-polyfill.js';
11
+ import { BINARY_SCHEMA_VERSION } from './binary-schema-version.js';
12
+ import { BinarySchemaMismatchError } from '../errors/binary-schema-mismatch-error.js';
13
+
14
+ /* eslint-disable max-len */
15
+ /* eslint-disable no-plusplus */
16
+ /* eslint-disable no-bitwise */
17
+ /**
18
+ * @file Input byte buffer for reading binary data.
19
+ */
20
+ /**
21
+ * Input byte buffer for reading binary data.
22
+ *
23
+ * @note Internally, this class uses a {@link ByteBuffer} instance, just providing a convenient API for reading data.
24
+ */
25
+ class InputByteBuffer extends ByteBuffer {
26
+ /**
27
+ * Current offset in the buffer for reading.
28
+ */
29
+ offset;
30
+ /**
31
+ * Shared native decoder for decoding strings.
32
+ */
33
+ sharedNativeDecoder;
34
+ /**
35
+ * Flag indicating if the current environment is Chromium.
36
+ * This is used for performance optimizations, because Chromium's TextEncoder/TextDecoder has a relatively
37
+ * large marshalling overhead for small strings.
38
+ */
39
+ isChromium;
40
+ /**
41
+ * Constructs a new `InputByteBuffer` instance.
42
+ *
43
+ * @param chunks Array of chunks to initialize the ByteBuffer with.
44
+ * @param cloneChunks Flag indicating if the chunks should be cloned. For performance reasons,
45
+ * its default value is `false`. If the original chunks are guaranteed not to change,
46
+ * leave this flag as `false` to avoid unnecessary copying.
47
+ * @param initialOffset Initial offset in the buffer for reading.
48
+ *
49
+ * @throws If the specified chunks array is empty.
50
+ * @throws If the binary schema version in the buffer is not equal to the expected version.
51
+ * @throws If the initial offset is out of bounds.
52
+ */
53
+ constructor(chunks, cloneChunks = false, initialOffset = 0) {
54
+ super(chunks, cloneChunks);
55
+ // Check binary schema version
56
+ if (chunks.length === 0) {
57
+ throw new Error('No data in the buffer');
58
+ }
59
+ const actualVersion = this.readSchemaVersion();
60
+ if (actualVersion !== BINARY_SCHEMA_VERSION) {
61
+ throw new BinarySchemaMismatchError(BINARY_SCHEMA_VERSION, actualVersion);
62
+ }
63
+ // Throw an error if the initial offset is out of bounds
64
+ if (initialOffset < 0 || initialOffset > this.chunks.length * ByteBuffer.CHUNK_SIZE) {
65
+ throw new Error(`Invalid offset: ${initialOffset}`);
66
+ }
67
+ // Schema version is always stored at the beginning of the buffer - skip it, because it is already processed
68
+ this.offset = Math.max(4, initialOffset);
69
+ this.sharedNativeDecoder = new TextDecoder();
70
+ this.isChromium = isChromium();
71
+ }
72
+ /**
73
+ * Creates a new InputByteBuffer instance from a Storage instance by reading chunks from the storage.
74
+ *
75
+ * @param storage Storage instance.
76
+ * @param key Key to read from the storage.
77
+ * @returns New InputByteBuffer instance.
78
+ * @note For performance reasons, chunks are passed by reference and not copied.
79
+ */
80
+ static async createFromStorage(storage, key) {
81
+ const chunks = await storage.get(key);
82
+ if (!isArrayOfUint8Arrays(chunks)) {
83
+ throw new Error('The data from storage is not an array of Uint8Arrays');
84
+ }
85
+ return new InputByteBuffer(chunks);
86
+ }
87
+ /**
88
+ * Reads a 8-bit unsigned integer from the buffer.
89
+ *
90
+ * @returns 8-bit unsigned integer from the buffer.
91
+ */
92
+ readUint8() {
93
+ const result = this.readByte(this.offset++) ?? 0;
94
+ return result;
95
+ }
96
+ /**
97
+ * Reads a 16-bit unsigned integer from the buffer.
98
+ *
99
+ * @returns 16-bit unsigned integer from the buffer.
100
+ */
101
+ readUint16() {
102
+ const result = (((this.readByte(this.offset++) ?? 0) << 8)
103
+ | ((this.readByte(this.offset++) ?? 0))) >>> 0;
104
+ return result;
105
+ }
106
+ /**
107
+ * Reads a 32-bit unsigned integer from the buffer at the specified index.
108
+ *
109
+ * @param index Index to read the 32-bit unsigned integer from.
110
+ *
111
+ * @returns 32-bit unsigned integer from the buffer.
112
+ */
113
+ readUint32FromIndex(index) {
114
+ const result = (((this.readByte(index) ?? 0) << 24)
115
+ | ((this.readByte(index + 1) ?? 0) << 16)
116
+ | ((this.readByte(index + 2) ?? 0) << 8)
117
+ | ((this.readByte(index + 3) ?? 0))) >>> 0;
118
+ return result;
119
+ }
120
+ /**
121
+ * Reads a 32-bit unsigned integer from the buffer.
122
+ *
123
+ * @returns 32-bit unsigned integer from the buffer.
124
+ */
125
+ readUint32() {
126
+ const result = this.readUint32FromIndex(this.offset);
127
+ this.offset += 4;
128
+ return result;
129
+ }
130
+ /**
131
+ * Reads schema version from the buffer.
132
+ *
133
+ * @returns 32-bit unsigned integer from the buffer.
134
+ * @note Schema version is always stored at the beginning of the buffer.
135
+ */
136
+ readSchemaVersion() {
137
+ return this.readUint32FromIndex(0);
138
+ }
139
+ /**
140
+ * Reads a 32-bit signed integer from the buffer.
141
+ *
142
+ * @returns 32-bit signed integer from the buffer.
143
+ */
144
+ readInt32() {
145
+ const result = this.readUint32();
146
+ return result > 0x7fffffff ? result - 0x100000000 : result;
147
+ }
148
+ /**
149
+ * Reads an optimized unsigned integer from the buffer.
150
+ * 'Optimized' means that the integer is stored in a variable number of bytes, depending on its value,
151
+ * so that smaller numbers occupy less space.
152
+ *
153
+ * @returns Decoded unsigned integer from the buffer.
154
+ */
155
+ readOptimizedUint() {
156
+ let result = 0;
157
+ let shift = 0;
158
+ while (shift <= 28) {
159
+ const byteValue = this.readByte(this.offset++) ?? 0;
160
+ result |= (byteValue & 0x7F) << shift;
161
+ shift += 7;
162
+ if ((byteValue & 0x80) === 0) {
163
+ break;
164
+ }
165
+ }
166
+ return result;
167
+ }
168
+ /**
169
+ * Reads a string from the buffer.
170
+ *
171
+ * @returns Decoded string from the buffer.
172
+ */
173
+ readString() {
174
+ const length = this.readOptimizedUint();
175
+ let chunkIndex = this.offset >>> 0x000F;
176
+ const chunkOffset = this.offset & 0x7FFF; // offset is only relevant for the first chunk
177
+ const endOffset = chunkOffset + length;
178
+ // In most cases, the string is stored in the current chunk
179
+ if (endOffset < ByteBuffer.CHUNK_SIZE) {
180
+ this.offset += length;
181
+ if (this.isChromium) {
182
+ return decodeTextPolyfill(this.chunks[chunkIndex], chunkOffset, endOffset);
183
+ }
184
+ return this.sharedNativeDecoder.decode(this.chunks[chunkIndex].subarray(chunkOffset, endOffset));
185
+ }
186
+ const result = [];
187
+ result.push(this.sharedNativeDecoder.decode(this.chunks[chunkIndex++].subarray(chunkOffset), { stream: true }));
188
+ let remaining = length - (ByteBuffer.CHUNK_SIZE - chunkOffset);
189
+ while (remaining) {
190
+ const chunk = this.chunks[chunkIndex];
191
+ if (!chunk) {
192
+ break;
193
+ }
194
+ const toRead = Math.min(remaining, ByteBuffer.CHUNK_SIZE);
195
+ result.push(this.sharedNativeDecoder.decode(chunk.subarray(0, toRead), { stream: true }));
196
+ remaining -= toRead;
197
+ chunkIndex += 1;
198
+ }
199
+ // Finish decoding, if something is left
200
+ result.push(this.sharedNativeDecoder.decode());
201
+ this.offset += length;
202
+ return result.join('');
203
+ }
204
+ /**
205
+ * Reads a 8-bit unsigned integer from the buffer without advancing the offset.
206
+ *
207
+ * @returns 8-bit unsigned integer from the buffer.
208
+ */
209
+ peekUint8() {
210
+ return this.readByte(this.offset) ?? 0;
211
+ }
212
+ /**
213
+ * Helper method for asserting the next 8-bit unsigned integer in the buffer.
214
+ *
215
+ * @param value Expected value.
216
+ * @throws If the next value in the buffer is not equal to the expected value.
217
+ */
218
+ assertUint8(value) {
219
+ const result = this.readUint8();
220
+ if (result !== value) {
221
+ throw new Error(`Expected ${value}, but got ${result}`);
222
+ }
223
+ }
224
+ /**
225
+ * Creates a new `InputByteBuffer` instance with the given initial offset.
226
+ *
227
+ * @param initialOffset Initial offset for the new buffer.
228
+ * @param cloneChunks Flag indicating if the chunks should be cloned. For performance reasons,
229
+ * its default value is `false`. If the original chunks are guaranteed not to change,
230
+ * leave this flag as `false` to avoid unnecessary copying.
231
+ *
232
+ * @returns New `InputByteBuffer` instance with the given initial offset.
233
+ *
234
+ * @note This method is useful if you want to read some data from a specific index.
235
+ */
236
+ createCopyWithOffset(initialOffset, cloneChunks = false) {
237
+ return new InputByteBuffer(this.chunks, cloneChunks, initialOffset);
238
+ }
239
+ /**
240
+ * Gets the current offset in the buffer for reading.
241
+ *
242
+ * @returns Current offset in the buffer for reading.
243
+ */
244
+ get currentOffset() {
245
+ return this.offset;
246
+ }
247
+ /**
248
+ * Gets the capacity of the buffer.
249
+ *
250
+ * @returns Capacity of the buffer.
251
+ */
252
+ get capacity() {
253
+ return this.chunks.length * ByteBuffer.CHUNK_SIZE;
254
+ }
255
+ /**
256
+ * Gets the chunks of the buffer.
257
+ *
258
+ * @returns Chunks of the buffer.
259
+ */
260
+ getChunks() {
261
+ return this.chunks;
262
+ }
263
+ }
264
+
265
+ export { InputByteBuffer };
@@ -0,0 +1,20 @@
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
+ * A simple function to check if the current browser is Chromium-based.
9
+ *
10
+ * @returns `true` if the current browser is Chromium-based, `false` otherwise.
11
+ * @see {@link https://stackoverflow.com/a/62797156}
12
+ */
13
+ const isChromium = () => {
14
+ return typeof window !== 'undefined'
15
+ && (Object.prototype.hasOwnProperty.call(window, 'chrome')
16
+ || (typeof window.navigator !== 'undefined'
17
+ && /chrome/i.test(window.navigator.userAgent)));
18
+ };
19
+
20
+ export { isChromium };
@@ -0,0 +1,92 @@
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 { OperatorValue } from '../nodes/index.js';
8
+ import { NodeType } from '../parser/misc/logical-expression-parser.js';
9
+
10
+ /**
11
+ * @file Utility functions for logical expression node.
12
+ */
13
+ const ERROR_PREFIX = {
14
+ UNEXPECTED_NODE_TYPE: 'Unexpected node type',
15
+ UNEXPECTED_OPERATOR: 'Unexpected operator',
16
+ };
17
+ /**
18
+ * Utility functions for logical expression node.
19
+ */
20
+ class LogicalExpressionUtils {
21
+ /**
22
+ * Get all variables in the expression.
23
+ *
24
+ * @param node Logical expression node
25
+ * @returns List of variables in the expression (nodes)
26
+ * @example
27
+ * If the expression is `a && b || c`, the returned list will be
28
+ * nodes for `a`, `b`, and `c`.
29
+ */
30
+ static getVariables(node) {
31
+ if (node.type === NodeType.Variable) {
32
+ return [node];
33
+ }
34
+ if (node.type === NodeType.Operator) {
35
+ const leftVars = LogicalExpressionUtils.getVariables(node.left);
36
+ const rightVars = node.right ? LogicalExpressionUtils.getVariables(node.right) : [];
37
+ return [...leftVars, ...rightVars];
38
+ }
39
+ if (node.type === NodeType.Parenthesis) {
40
+ return LogicalExpressionUtils.getVariables(node.expression);
41
+ }
42
+ throw new Error(ERROR_PREFIX.UNEXPECTED_NODE_TYPE);
43
+ }
44
+ /**
45
+ * Evaluate the parsed logical expression. You'll need to provide a
46
+ * variable table.
47
+ *
48
+ * @param node Logical expression node
49
+ * @param table Variable table (key: variable name, value: boolean)
50
+ * @returns Evaluation result
51
+ * @example
52
+ * If the expression is `a && b`, and the variable table is
53
+ * `{ a: true, b: false }`, the result will be `false`.
54
+ *
55
+ * Example code:
56
+ * ```js
57
+ * LogicalExpressionUtils.evaluate(
58
+ * LogicalExpressionParser.parse('a && b'),
59
+ * { a: true, b: false }
60
+ * );
61
+ * ```
62
+ */
63
+ static evaluate(node, table) {
64
+ if (node.type === NodeType.Variable) {
65
+ return !!table[node.name];
66
+ }
67
+ if (node.type === NodeType.Operator) {
68
+ if (node.operator === OperatorValue.And || node.operator === OperatorValue.Or) {
69
+ if (!node.right) {
70
+ throw new Error(`${ERROR_PREFIX.UNEXPECTED_OPERATOR} '${node.operator}'`);
71
+ }
72
+ if (node.operator === OperatorValue.And) {
73
+ // eslint-disable-next-line max-len
74
+ return LogicalExpressionUtils.evaluate(node.left, table) && LogicalExpressionUtils.evaluate(node.right, table);
75
+ }
76
+ if (node.operator === OperatorValue.Or) {
77
+ // eslint-disable-next-line max-len
78
+ return LogicalExpressionUtils.evaluate(node.left, table) || LogicalExpressionUtils.evaluate(node.right, table);
79
+ }
80
+ }
81
+ else if (node.operator === OperatorValue.Not) {
82
+ return !LogicalExpressionUtils.evaluate(node.left, table);
83
+ }
84
+ }
85
+ else if (node.type === NodeType.Parenthesis) {
86
+ return LogicalExpressionUtils.evaluate(node.expression, table);
87
+ }
88
+ throw new Error(`${ERROR_PREFIX.UNEXPECTED_NODE_TYPE} '${node.type}'`);
89
+ }
90
+ }
91
+
92
+ export { LogicalExpressionUtils };
@@ -0,0 +1,33 @@
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 './type-guards.js';
8
+
9
+ /**
10
+ * A very simple map extension that allows to store multiple values for the same key
11
+ * by storing them in an array.
12
+ *
13
+ * @todo Add more methods if needed
14
+ */
15
+ class MultiValueMap extends Map {
16
+ /**
17
+ * Adds a value to the map. If the key already exists, the value will be appended to the existing array,
18
+ * otherwise a new array will be created for the key.
19
+ *
20
+ * @param key Key to add
21
+ * @param values Value(s) to add
22
+ */
23
+ add(key, ...values) {
24
+ let currentValues = super.get(key);
25
+ if (isUndefined(currentValues)) {
26
+ currentValues = [];
27
+ super.set(key, values);
28
+ }
29
+ currentValues.push(...values);
30
+ }
31
+ }
32
+
33
+ export { MultiValueMap };
@@ -0,0 +1,231 @@
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 { BINARY_SCHEMA_VERSION } from './binary-schema-version.js';
8
+ import { ByteBuffer } from './byte-buffer.js';
9
+ import { isChromium } from './is-chromium.js';
10
+ import { encodeIntoPolyfill } from './text-encoder-polyfill.js';
11
+
12
+ /* eslint-disable no-plusplus */
13
+ /* eslint-disable no-bitwise */
14
+ /**
15
+ * @file Output byte buffer for writing binary data.
16
+ */
17
+ /**
18
+ * Output byte buffer for writing binary data.
19
+ *
20
+ * @note Internally, this class uses a {@link ByteBuffer} instance, just providing a convenient API for reading data.
21
+ */
22
+ class OutputByteBuffer extends ByteBuffer {
23
+ /**
24
+ * Current offset in the buffer for writing.
25
+ */
26
+ offset;
27
+ /**
28
+ * Size of the shared buffer for encoding strings in bytes.
29
+ * This is a divisor of ByteBuffer.CHUNK_SIZE and experience shows that this value works optimally.
30
+ * This is sufficient for most strings that occur in filter lists (we checked average string length in popular
31
+ * filter lists).
32
+ */
33
+ static ENCODER_BUFFER_SIZE = 8192;
34
+ /**
35
+ * Length threshold for using a shared buffer for encoding strings.
36
+ * This temp buffer is needed because we write the short strings in it
37
+ * (so there is no need to constantly allocate a new buffer).
38
+ * The reason for dividing ENCODER_BUFFER_SIZE by 4 is to ensure that the encoded string fits in the buffer,
39
+ * if we also take into account the worst possible case (each character is encoded with 4 bytes).
40
+ */
41
+ static SHORT_STRING_THRESHOLD = 2048; // 8192 / 4
42
+ /**
43
+ * Represents the maximum value that can be written as a 'storage optimized' unsigned integer.
44
+ * 0x1FFFFFFF means 29 bits — 32 bits minus 3 bits — because the last bit in each byte is a flag indicating
45
+ * if there are more bytes (except for the last byte).
46
+ */
47
+ static MAX_OPTIMIZED_UINT = 0x1FFFFFFF;
48
+ /**
49
+ * Shared buffer for encoding strings.
50
+ */
51
+ sharedBuffer;
52
+ /**
53
+ * Shared native encoder for encoding strings.
54
+ */
55
+ sharedNativeEncoder;
56
+ /**
57
+ * Flag indicating if the current environment is Chromium.
58
+ * This is used for performance optimizations, because Chromium's TextEncoder/TextDecoder has a relatively
59
+ * large marshalling overhead for small strings.
60
+ */
61
+ isChromium;
62
+ /**
63
+ * Constructs a new OutputByteBuffer instance.
64
+ */
65
+ // TODO: add chunks as a parameter, if ever needed
66
+ constructor() {
67
+ super();
68
+ this.sharedBuffer = new Uint8Array(OutputByteBuffer.ENCODER_BUFFER_SIZE);
69
+ this.sharedNativeEncoder = new TextEncoder();
70
+ this.isChromium = isChromium();
71
+ // write the schema version at the beginning of the buffer
72
+ this.writeUint32ToIndex(BINARY_SCHEMA_VERSION, 0);
73
+ this.offset = 4; // schema version is already written
74
+ }
75
+ /**
76
+ * Writes a 8-bit unsigned integer to the buffer.
77
+ *
78
+ * @param value Value to write.
79
+ * @returns Number of bytes written to the buffer.
80
+ */
81
+ writeUint8(value) {
82
+ this.writeByte(this.offset++, value);
83
+ return 1;
84
+ }
85
+ /**
86
+ * Writes a 16-bit unsigned integer to the buffer.
87
+ *
88
+ * @param value Value to write.
89
+ * @returns Number of bytes written to the buffer.
90
+ */
91
+ writeUint16(value) {
92
+ this.writeByte(this.offset++, value >> 8);
93
+ this.writeByte(this.offset++, value);
94
+ return 2;
95
+ }
96
+ /**
97
+ * Writes a 32-bit unsigned integer to the buffer at a specific index.
98
+ *
99
+ * @param value Value to write.
100
+ * @param index Index to write the value to.
101
+ * @returns Number of bytes written to the buffer.
102
+ */
103
+ writeUint32ToIndex(value, index) {
104
+ this.writeByte(index, value >> 24);
105
+ this.writeByte(index + 1, value >> 16);
106
+ this.writeByte(index + 2, value >> 8);
107
+ this.writeByte(index + 3, value);
108
+ return 4;
109
+ }
110
+ /**
111
+ * Writes a 32-bit unsigned integer to the buffer.
112
+ *
113
+ * @param value Value to write.
114
+ * @returns Number of bytes written to the buffer.
115
+ */
116
+ writeUint32(value) {
117
+ this.writeUint32ToIndex(value, this.offset);
118
+ this.offset += 4;
119
+ return 4;
120
+ }
121
+ /**
122
+ * Writes a 32-bit signed integer to the buffer.
123
+ *
124
+ * @param value Value to write.
125
+ * @returns Number of bytes written to the buffer.
126
+ */
127
+ writeInt32(value) {
128
+ return this.writeUint32(value ? value >>> 0 : 0);
129
+ }
130
+ /**
131
+ * Writes a Uint8Array to the byte buffer.
132
+ *
133
+ * @param buffer Buffer to write.
134
+ */
135
+ writeBuffer(buffer) {
136
+ const { length } = buffer;
137
+ this.ensureCapacity(this.offset + length);
138
+ let chunkIndex = this.offset >>> 0x000F;
139
+ let chunkOffset = this.offset & 0x7FFF;
140
+ let remainingBytes = length;
141
+ while (remainingBytes) {
142
+ const leftInChunk = ByteBuffer.CHUNK_SIZE - chunkOffset;
143
+ const bytesToWrite = Math.min(remainingBytes, leftInChunk);
144
+ this.chunks[chunkIndex].set(buffer.subarray(length - remainingBytes, length - remainingBytes + bytesToWrite), chunkOffset);
145
+ remainingBytes -= bytesToWrite;
146
+ chunkIndex += 1;
147
+ chunkOffset = 0;
148
+ }
149
+ }
150
+ /**
151
+ * Writes a string to the buffer.
152
+ *
153
+ * @param value Value to write.
154
+ * @returns Number of bytes written to the buffer.
155
+ */
156
+ writeString(value) {
157
+ const start = this.offset;
158
+ if (value.length <= OutputByteBuffer.SHORT_STRING_THRESHOLD) {
159
+ let bytesWritten;
160
+ if (this.isChromium) {
161
+ bytesWritten = encodeIntoPolyfill(value, this.sharedBuffer).written ?? 0;
162
+ }
163
+ else {
164
+ bytesWritten = this.sharedNativeEncoder.encodeInto(value, this.sharedBuffer).written ?? 0;
165
+ }
166
+ this.writeOptimizedUint(bytesWritten);
167
+ this.writeBuffer(this.sharedBuffer.subarray(0, bytesWritten));
168
+ this.offset += bytesWritten;
169
+ return this.offset - start;
170
+ }
171
+ // TODO: Optimize for long strings, if needed. Not a common case for our use case
172
+ const buffer = this.sharedNativeEncoder.encode(value);
173
+ const bytesWritten = buffer.length;
174
+ this.writeOptimizedUint(bytesWritten);
175
+ this.writeBuffer(buffer);
176
+ this.offset += bytesWritten;
177
+ return this.offset - start;
178
+ }
179
+ /**
180
+ * Writes chunks to the storage.
181
+ *
182
+ * @param storage Storage to write the chunks to.
183
+ * @param key Key to write the chunks to.
184
+ * @note For performance reasons, chunks are passed by reference and not copied.
185
+ * @throws If the storage write operation throws.
186
+ */
187
+ async writeChunksToStorage(storage, key) {
188
+ await storage.set(key, this.chunks);
189
+ }
190
+ /**
191
+ * Writes an 'optimized' unsigned integer to the buffer.
192
+ * 'Optimized' means smaller storage usage for smaller numbers.
193
+ * Except for the last byte, each byte's most significant bit is a flag indicating if there are more bytes.
194
+ *
195
+ * @param value Value to write.
196
+ * @returns Number of bytes written to the buffer.
197
+ * @throws If the value exceeds the 29-bit limit.
198
+ */
199
+ writeOptimizedUint(value) {
200
+ if (value < 0 || value > OutputByteBuffer.MAX_OPTIMIZED_UINT) {
201
+ throw new Error('Value exceeds 29-bit limit');
202
+ }
203
+ let remainingValue = value;
204
+ const startOffset = this.offset;
205
+ while (remainingValue >= 0x80) {
206
+ const byteValue = remainingValue & 0x7F;
207
+ remainingValue >>>= 7;
208
+ this.writeByte(this.offset++, byteValue | 0x80);
209
+ }
210
+ this.writeByte(this.offset++, remainingValue);
211
+ return this.offset - startOffset;
212
+ }
213
+ /**
214
+ * Gets the current offset in the buffer for writing.
215
+ *
216
+ * @returns Current offset in the buffer for writing.
217
+ */
218
+ get currentOffset() {
219
+ return this.offset;
220
+ }
221
+ /**
222
+ * Gets the chunks of the buffer.
223
+ *
224
+ * @returns Chunks of the buffer.
225
+ */
226
+ getChunks() {
227
+ return this.chunks;
228
+ }
229
+ }
230
+
231
+ export { OutputByteBuffer };