@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,559 @@
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 { ESCAPE_CHARACTER, REGEX_MARKER, SPACE, TAB, NUMBER_0, NUMBER_9, SMALL_LETTER_A, SMALL_LETTER_Z, CAPITAL_LETTER_A, CAPITAL_LETTER_Z, CR, LF, FF, EMPTY, CRLF } from './constants.js';
8
+
9
+ /**
10
+ * @file Utility functions for string manipulation.
11
+ */
12
+ const SINGLE_QUOTE_MARKER = "'";
13
+ const DOUBLE_QUOTE_MARKER = '"';
14
+ /**
15
+ * Utility functions for string manipulation.
16
+ */
17
+ class StringUtils {
18
+ /**
19
+ * Finds the first occurrence of a character that:
20
+ * - isn't preceded by an escape character
21
+ *
22
+ * @param pattern - Source pattern
23
+ * @param searchedCharacter - Searched character
24
+ * @param start - Start index
25
+ * @param escapeCharacter - Escape character, \ by default
26
+ * @param end - End index (excluded)
27
+ * @returns Index or -1 if the character not found
28
+ */
29
+ static findNextUnescapedCharacter(pattern, searchedCharacter, start = 0, escapeCharacter = ESCAPE_CHARACTER, end = pattern.length) {
30
+ for (let i = start; i < end; i += 1) {
31
+ // The searched character cannot be preceded by an escape
32
+ if (pattern[i] === searchedCharacter && pattern[i - 1] !== escapeCharacter) {
33
+ return i;
34
+ }
35
+ }
36
+ return -1;
37
+ }
38
+ /**
39
+ * Finds the first occurrence in backward direction of a character that isn't preceded by an escape character.
40
+ *
41
+ * @param pattern - Source pattern
42
+ * @param searchedCharacter - Searched character
43
+ * @param start - Start index
44
+ * @param escapeCharacter - Escape character, \ by default
45
+ * @param end - End index (Included)
46
+ * @returns Index or -1 if the character not found
47
+ */
48
+ static findNextUnescapedCharacterBackwards(pattern, searchedCharacter, start = pattern.length - 1, escapeCharacter = ESCAPE_CHARACTER, end = 0) {
49
+ for (let i = start; i >= end; i -= 1) {
50
+ // The searched character cannot be preceded by an escape
51
+ if (pattern[i] === searchedCharacter && pattern[i - 1] !== escapeCharacter) {
52
+ return i;
53
+ }
54
+ }
55
+ return -1;
56
+ }
57
+ /**
58
+ * Finds the last occurrence of a character that:
59
+ * - isn't preceded by an escape character
60
+ *
61
+ * @param pattern - Source pattern
62
+ * @param searchedCharacter - Searched character
63
+ * @param escapeCharacter - Escape character, \ by default
64
+ * @returns Index or -1 if the character not found
65
+ */
66
+ static findLastUnescapedCharacter(pattern, searchedCharacter, escapeCharacter = ESCAPE_CHARACTER) {
67
+ for (let i = pattern.length - 1; i >= 0; i -= 1) {
68
+ // The searched character cannot be preceded by an escape
69
+ if (pattern[i] === searchedCharacter && pattern[i - 1] !== escapeCharacter) {
70
+ return i;
71
+ }
72
+ }
73
+ return -1;
74
+ }
75
+ /**
76
+ * Finds the next occurrence of a character that:
77
+ * - isn't preceded by an escape character
78
+ * - isn't followed by the specified character
79
+ *
80
+ * @param pattern - Source pattern
81
+ * @param start - Start index
82
+ * @param searchedCharacter - Searched character
83
+ * @param notFollowedBy - Searched character not followed by this character
84
+ * @param escapeCharacter - Escape character, \ by default
85
+ * @returns Index or -1 if the character not found
86
+ */
87
+ static findNextUnescapedCharacterThatNotFollowedBy(pattern, start, searchedCharacter, notFollowedBy, escapeCharacter = ESCAPE_CHARACTER) {
88
+ for (let i = start; i < pattern.length; i += 1) {
89
+ // The searched character cannot be preceded by an escape
90
+ if (pattern[i] === searchedCharacter
91
+ && pattern[i + 1] !== notFollowedBy
92
+ && pattern[i - 1] !== escapeCharacter) {
93
+ return i;
94
+ }
95
+ }
96
+ return -1;
97
+ }
98
+ /**
99
+ * Finds the last occurrence of a character that:
100
+ * - isn't preceded by an escape character
101
+ * - isn't followed by the specified character
102
+ *
103
+ * @param pattern - Source pattern
104
+ * @param searchedCharacter - Searched character
105
+ * @param notFollowedBy - Searched character not followed by this character
106
+ * @param escapeCharacter - Escape character, \ by default
107
+ * @returns Index or -1 if the character not found
108
+ */
109
+ static findLastUnescapedCharacterThatNotFollowedBy(pattern, searchedCharacter, notFollowedBy, escapeCharacter = ESCAPE_CHARACTER) {
110
+ for (let i = pattern.length - 1; i >= 0; i -= 1) {
111
+ // The searched character cannot be preceded by an escape
112
+ if (pattern[i] === searchedCharacter
113
+ && pattern[i + 1] !== notFollowedBy
114
+ && pattern[i - 1] !== escapeCharacter) {
115
+ return i;
116
+ }
117
+ }
118
+ return -1;
119
+ }
120
+ /**
121
+ * Finds the next occurrence of a character that:
122
+ * - isn't part of any string literal ('literal' or "literal")
123
+ * - isn't part of any RegExp expression (/regexp/)
124
+ *
125
+ * @param pattern - Source pattern
126
+ * @param searchedCharacter - Searched character
127
+ * @param start - Start index
128
+ * @returns Index or -1 if the character not found
129
+ */
130
+ static findUnescapedNonStringNonRegexChar(pattern, searchedCharacter, start = 0) {
131
+ let open = null;
132
+ for (let i = start; i < pattern.length; i += 1) {
133
+ if ((pattern[i] === SINGLE_QUOTE_MARKER
134
+ || pattern[i] === DOUBLE_QUOTE_MARKER
135
+ || pattern[i] === REGEX_MARKER)
136
+ && pattern[i - 1] !== ESCAPE_CHARACTER) {
137
+ if (open === pattern[i]) {
138
+ open = null;
139
+ }
140
+ else if (open === null) {
141
+ open = pattern[i];
142
+ }
143
+ }
144
+ else if (open === null && pattern[i] === searchedCharacter && pattern[i - 1] !== ESCAPE_CHARACTER) {
145
+ return i;
146
+ }
147
+ }
148
+ return -1;
149
+ }
150
+ /**
151
+ * Finds the next occurrence of a character that:
152
+ * - isn't part of any string literal ('literal' or "literal")
153
+ * - isn't preceded by an escape character
154
+ *
155
+ * @param pattern - Source pattern
156
+ * @param searchedCharacter - Searched character
157
+ * @param start - Start index
158
+ * @param escapeCharacter - Escape character, \ by default
159
+ * @returns Index or -1 if the character not found
160
+ */
161
+ static findNextUnquotedUnescapedCharacter(pattern, searchedCharacter, start = 0, escapeCharacter = ESCAPE_CHARACTER) {
162
+ let openQuote = null;
163
+ for (let i = start; i < pattern.length; i += 1) {
164
+ // Unescaped ' or "
165
+ if ((pattern[i] === SINGLE_QUOTE_MARKER || pattern[i] === DOUBLE_QUOTE_MARKER)
166
+ && pattern[i - 1] !== escapeCharacter) {
167
+ if (!openQuote)
168
+ openQuote = pattern[i];
169
+ else if (openQuote === pattern[i])
170
+ openQuote = null;
171
+ }
172
+ else if (pattern[i] === searchedCharacter && pattern[i - 1] !== escapeCharacter) {
173
+ // Unescaped character
174
+ if (!openQuote) {
175
+ return i;
176
+ }
177
+ }
178
+ }
179
+ return -1;
180
+ }
181
+ /**
182
+ * Finds the next occurrence of a character that:
183
+ * - isn't "bracketed"
184
+ * - isn't preceded by an escape character
185
+ *
186
+ * @param pattern - Source pattern
187
+ * @param searchedCharacter - Searched character
188
+ * @param start - Start index
189
+ * @param escapeCharacter - Escape character, \ by default
190
+ * @param openBracket - Open bracket, ( by default
191
+ * @param closeBracket - Close bracket, ( by default
192
+ * @throws If the opening and closing brackets are the same
193
+ * @returns Index or -1 if the character not found
194
+ */
195
+ static findNextNotBracketedUnescapedCharacter(pattern, searchedCharacter, start = 0, escapeCharacter = ESCAPE_CHARACTER, openBracket = '(', closeBracket = ')') {
196
+ if (openBracket === closeBracket) {
197
+ throw new Error('Open and close bracket cannot be the same');
198
+ }
199
+ let depth = 0;
200
+ for (let i = start; i < pattern.length; i += 1) {
201
+ if (pattern[i] === openBracket) {
202
+ depth += 1;
203
+ }
204
+ else if (pattern[i] === closeBracket) {
205
+ depth -= 1;
206
+ }
207
+ else if (depth < 1 && pattern[i] === searchedCharacter && pattern[i - 1] !== escapeCharacter) {
208
+ return i;
209
+ }
210
+ }
211
+ return -1;
212
+ }
213
+ /**
214
+ * Splits the source pattern along characters that:
215
+ * - isn't part of any string literal ('literal' or "literal")
216
+ * - isn't preceded by an escape character
217
+ *
218
+ * @param pattern - Source pattern
219
+ * @param delimeterCharacter - Delimeter character
220
+ * @returns Splitted string
221
+ */
222
+ static splitStringByUnquotedUnescapedCharacter(pattern, delimeterCharacter) {
223
+ const parts = [];
224
+ let delimeterIndex = -1;
225
+ do {
226
+ const prevDelimeterIndex = delimeterIndex;
227
+ delimeterIndex = StringUtils.findNextUnquotedUnescapedCharacter(pattern, delimeterCharacter, delimeterIndex + 1);
228
+ if (delimeterIndex !== -1) {
229
+ parts.push(pattern.substring(prevDelimeterIndex + 1, delimeterIndex));
230
+ }
231
+ else {
232
+ parts.push(pattern.substring(prevDelimeterIndex + 1, pattern.length));
233
+ }
234
+ } while (delimeterIndex !== -1);
235
+ return parts;
236
+ }
237
+ /**
238
+ * Splits the source pattern along characters that:
239
+ * - isn't part of any string literal ('literal' or "literal")
240
+ * - isn't part of any RegExp expression (/regexp/)
241
+ * - isn't preceded by an escape character
242
+ *
243
+ * @param pattern - Source pattern
244
+ * @param delimeterCharacter - Delimeter character
245
+ * @returns Splitted string
246
+ */
247
+ static splitStringByUnescapedNonStringNonRegexChar(pattern, delimeterCharacter) {
248
+ const parts = [];
249
+ let delimeterIndex = -1;
250
+ do {
251
+ const prevDelimeterIndex = delimeterIndex;
252
+ delimeterIndex = StringUtils.findUnescapedNonStringNonRegexChar(pattern, delimeterCharacter, delimeterIndex + 1);
253
+ if (delimeterIndex !== -1) {
254
+ parts.push(pattern.substring(prevDelimeterIndex + 1, delimeterIndex));
255
+ }
256
+ else {
257
+ parts.push(pattern.substring(prevDelimeterIndex + 1, pattern.length));
258
+ }
259
+ } while (delimeterIndex !== -1);
260
+ return parts;
261
+ }
262
+ /**
263
+ * Splits the source pattern along characters that:
264
+ * - isn't preceded by an escape character
265
+ *
266
+ * @param pattern - Source pattern
267
+ * @param delimeterCharacter - Delimeter character
268
+ * @returns Splitted string
269
+ */
270
+ static splitStringByUnescapedCharacter(pattern, delimeterCharacter) {
271
+ const parts = [];
272
+ let delimeterIndex = -1;
273
+ do {
274
+ const prevDelimeterIndex = delimeterIndex;
275
+ delimeterIndex = StringUtils.findNextUnescapedCharacter(pattern, delimeterCharacter, delimeterIndex + 1);
276
+ if (delimeterIndex !== -1) {
277
+ parts.push(pattern.substring(prevDelimeterIndex + 1, delimeterIndex));
278
+ }
279
+ else {
280
+ parts.push(pattern.substring(prevDelimeterIndex + 1, pattern.length));
281
+ }
282
+ } while (delimeterIndex !== -1);
283
+ return parts;
284
+ }
285
+ /**
286
+ * Determines whether the given character is a space or tab character.
287
+ *
288
+ * @param char - The character to check.
289
+ * @returns true if the given character is a space or tab character, false otherwise.
290
+ */
291
+ static isWhitespace(char) {
292
+ return char === SPACE || char === TAB;
293
+ }
294
+ /**
295
+ * Checks if the given character is a digit.
296
+ *
297
+ * @param char The character to check.
298
+ * @returns `true` if the given character is a digit, `false` otherwise.
299
+ */
300
+ static isDigit(char) {
301
+ return char >= NUMBER_0 && char <= NUMBER_9;
302
+ }
303
+ /**
304
+ * Checks if the given character is a small letter.
305
+ *
306
+ * @param char The character to check.
307
+ * @returns `true` if the given character is a small letter, `false` otherwise.
308
+ */
309
+ static isSmallLetter(char) {
310
+ return char >= SMALL_LETTER_A && char <= SMALL_LETTER_Z;
311
+ }
312
+ /**
313
+ * Checks if the given character is a capital letter.
314
+ *
315
+ * @param char The character to check.
316
+ * @returns `true` if the given character is a capital letter, `false` otherwise.
317
+ */
318
+ static isCapitalLetter(char) {
319
+ return char >= CAPITAL_LETTER_A && char <= CAPITAL_LETTER_Z;
320
+ }
321
+ /**
322
+ * Checks if the given character is a letter (small or capital).
323
+ *
324
+ * @param char The character to check.
325
+ * @returns `true` if the given character is a letter, `false` otherwise.
326
+ */
327
+ static isLetter(char) {
328
+ return StringUtils.isSmallLetter(char) || StringUtils.isCapitalLetter(char);
329
+ }
330
+ /**
331
+ * Checks if the given character is a letter or a digit.
332
+ *
333
+ * @param char Character to check
334
+ * @returns `true` if the given character is a letter or a digit, `false` otherwise.
335
+ */
336
+ static isAlphaNumeric(char) {
337
+ return StringUtils.isLetter(char) || StringUtils.isDigit(char);
338
+ }
339
+ /**
340
+ * Searches for the first non-whitespace character in the source pattern.
341
+ *
342
+ * @param pattern - Source pattern
343
+ * @param start - Start index
344
+ * @returns Index or -1 if the character not found
345
+ */
346
+ static findFirstNonWhitespaceCharacter(pattern, start = 0) {
347
+ for (let i = start; i < pattern.length; i += 1) {
348
+ if (!StringUtils.isWhitespace(pattern[i])) {
349
+ return i;
350
+ }
351
+ }
352
+ return -1;
353
+ }
354
+ /**
355
+ * Searches for the last non-whitespace character in the source pattern.
356
+ *
357
+ * @param pattern - Source pattern
358
+ * @returns Index or -1 if the character not found
359
+ */
360
+ static findLastNonWhitespaceCharacter(pattern) {
361
+ for (let i = pattern.length - 1; i >= 0; i -= 1) {
362
+ if (!StringUtils.isWhitespace(pattern[i])) {
363
+ return i;
364
+ }
365
+ }
366
+ return -1;
367
+ }
368
+ /**
369
+ * Finds the next whitespace character in the pattern.
370
+ *
371
+ * @param pattern Pattern to search in
372
+ * @param start Start index
373
+ * @returns Index of the next whitespace character or the length of the pattern if not found
374
+ */
375
+ static findNextWhitespaceCharacter(pattern, start = 0) {
376
+ for (let i = start; i < pattern.length; i += 1) {
377
+ if (StringUtils.isWhitespace(pattern[i])) {
378
+ return i;
379
+ }
380
+ }
381
+ return pattern.length;
382
+ }
383
+ /**
384
+ * Escapes a specified character in the string.
385
+ *
386
+ * @param pattern - Input string
387
+ * @param character - Character to escape
388
+ * @param escapeCharacter - Escape character (optional)
389
+ * @returns Escaped string
390
+ */
391
+ static escapeCharacter(pattern, character, escapeCharacter = ESCAPE_CHARACTER) {
392
+ let result = EMPTY;
393
+ for (let i = 0; i < pattern.length; i += 1) {
394
+ if (pattern[i] === character && pattern[i - 1] !== escapeCharacter) {
395
+ result += escapeCharacter;
396
+ }
397
+ result += pattern[i];
398
+ }
399
+ return result;
400
+ }
401
+ /**
402
+ * Searches for the next non-whitespace character in the source pattern.
403
+ *
404
+ * @param pattern Pattern to search
405
+ * @param start Start index
406
+ * @returns Index of the next non-whitespace character or the length of the pattern
407
+ */
408
+ static skipWS(pattern, start = 0) {
409
+ let i = start;
410
+ while (i < pattern.length && StringUtils.isWhitespace(pattern[i])) {
411
+ i += 1;
412
+ }
413
+ return Math.min(i, pattern.length);
414
+ }
415
+ /**
416
+ * Searches for the previous non-whitespace character in the source pattern.
417
+ *
418
+ * @param pattern Pattern to search
419
+ * @param start Start index
420
+ * @returns Index of the previous non-whitespace character or -1
421
+ */
422
+ static skipWSBack(pattern, start = pattern.length - 1) {
423
+ let i = start;
424
+ while (i >= 0 && StringUtils.isWhitespace(pattern[i])) {
425
+ i -= 1;
426
+ }
427
+ return Math.max(i, -1);
428
+ }
429
+ /**
430
+ * Checks if the given character is a new line character.
431
+ *
432
+ * @param char Character to check
433
+ * @returns `true` if the given character is a new line character, `false` otherwise.
434
+ */
435
+ static isEOL(char) {
436
+ return char === CR || char === LF || char === FF;
437
+ }
438
+ /**
439
+ * Splits a string along newline characters.
440
+ *
441
+ * @param input - Input string
442
+ * @returns Splitted string
443
+ */
444
+ static splitStringByNewLines(input) {
445
+ return input.split(/\r?\n/);
446
+ }
447
+ /**
448
+ * Splits a string by new lines and stores the new line type for each line
449
+ *
450
+ * @param input The input string to be split
451
+ * @returns An array of tuples, where each tuple contains a line of the input string and its
452
+ * corresponding new line type ("lf", "crlf", or "cr")
453
+ */
454
+ static splitStringByNewLinesEx(input) {
455
+ // Array to store the tuples of line and new line type
456
+ const result = [];
457
+ let currentLine = EMPTY;
458
+ let newLineType = null;
459
+ // Iterate over each character in the input string
460
+ for (let i = 0; i < input.length; i += 1) {
461
+ const char = input[i];
462
+ if (char === CR) {
463
+ if (input[i + 1] === LF) {
464
+ newLineType = 'crlf';
465
+ i += 1;
466
+ }
467
+ else {
468
+ newLineType = 'cr';
469
+ }
470
+ result.push([currentLine, newLineType]);
471
+ currentLine = EMPTY;
472
+ newLineType = null;
473
+ }
474
+ else if (char === LF) {
475
+ newLineType = 'lf';
476
+ result.push([currentLine, newLineType]);
477
+ currentLine = EMPTY;
478
+ newLineType = null;
479
+ }
480
+ else {
481
+ currentLine += char;
482
+ }
483
+ }
484
+ if (result.length === 0 || currentLine !== EMPTY) {
485
+ result.push([currentLine, newLineType]);
486
+ }
487
+ return result;
488
+ }
489
+ /**
490
+ * Merges an array of tuples (line, newLineType) into a single string
491
+ *
492
+ * @param input The array of tuples to be merged
493
+ * @returns A single string containing the lines and new line characters from the input array
494
+ */
495
+ static mergeStringByNewLines(input) {
496
+ let result = EMPTY;
497
+ // Iterate over each tuple in the input array
498
+ for (let i = 0; i < input.length; i += 1) {
499
+ const [line, newLineType] = input[i];
500
+ // Add the line to the result string
501
+ result += line;
502
+ // Add the appropriate new line character based on the newLineType
503
+ if (newLineType !== null) {
504
+ if (newLineType === 'crlf') {
505
+ result += CRLF;
506
+ }
507
+ else if (newLineType === 'cr') {
508
+ result += CR;
509
+ }
510
+ else {
511
+ result += LF;
512
+ }
513
+ }
514
+ }
515
+ return result;
516
+ }
517
+ /**
518
+ * Helper method to parse a raw string as a number
519
+ *
520
+ * @param raw Raw string to parse
521
+ * @returns Parsed number
522
+ * @throws If the raw string can't be parsed as a number
523
+ */
524
+ static parseNumber(raw) {
525
+ const result = parseInt(raw, 10);
526
+ if (Number.isNaN(result)) {
527
+ throw new Error('Expected a number');
528
+ }
529
+ return result;
530
+ }
531
+ /**
532
+ * Checks if the given value is a string.
533
+ *
534
+ * @param value Value to check
535
+ * @returns `true` if the value is a string, `false` otherwise
536
+ */
537
+ static isString(value) {
538
+ return typeof value === 'string';
539
+ }
540
+ /**
541
+ * Escapes the given characters in the input string.
542
+ *
543
+ * @param input Input string
544
+ * @param characters Characters to escape (by default, no characters are escaped)
545
+ * @returns Escaped string
546
+ */
547
+ static escapeCharacters(input, characters = new Set()) {
548
+ let result = EMPTY;
549
+ for (let i = 0; i < input.length; i += 1) {
550
+ if (characters.has(input[i])) {
551
+ result += ESCAPE_CHARACTER;
552
+ }
553
+ result += input[i];
554
+ }
555
+ return result;
556
+ }
557
+ }
558
+
559
+ export { DOUBLE_QUOTE_MARKER, SINGLE_QUOTE_MARKER, StringUtils };
@@ -0,0 +1,107 @@
1
+ /*
2
+ * AGTree v3.0.0-alpha.2 (build date: Tue, 17 Dec 2024 16:50:04 GMT)
3
+ * (c) 2024 Adguard Software Ltd.
4
+ * Released under the MIT license
5
+ * https://github.com/AdguardTeam/tsurlfilter/tree/master/packages/agtree#readme
6
+ */
7
+ import { EMPTY } from './constants.js';
8
+
9
+ /* eslint-disable no-plusplus */
10
+ /* eslint-disable no-bitwise */
11
+ /**
12
+ * @file Optimized utility for decoding strings from byte sequences.
13
+ */
14
+ const REPLACEMENT_CHAR = String.fromCodePoint(0xFFFD);
15
+ /**
16
+ * Decodes a byte sequence into an UTF-8 string according to the WHATWG spec.
17
+ * Optimized for performance.
18
+ *
19
+ * @param buffer Buffer to read the bytes from.
20
+ * @param start Start offset in the buffer.
21
+ * @param end End offset in the buffer.
22
+ * @returns Decoded string.
23
+ * @see {@link https://encoding.spec.whatwg.org/#utf-8-decoder}
24
+ */
25
+ const decodeTextPolyfill = (buffer, start = 0, end = -1) => {
26
+ let codePoint = 0;
27
+ let bytesSeen = 0;
28
+ let bytesNeeded = 0;
29
+ let lowerBoundary = 0x0080;
30
+ let upperBoundary = 0x00BF;
31
+ let i = start;
32
+ const { length } = buffer;
33
+ const realEnd = end === -1 ? length : Math.min(end, length);
34
+ const result = new Array(realEnd - start);
35
+ let resIdx = 0;
36
+ for (; i < realEnd; i += 1) {
37
+ const byte = buffer[i];
38
+ if (bytesNeeded === 0) {
39
+ if (byte <= 0x007F) {
40
+ codePoint = byte & 0x00FF;
41
+ }
42
+ else if (byte >= 0x00C2 && byte <= 0x00DF) {
43
+ bytesNeeded = 1;
44
+ codePoint = byte & 0x001F;
45
+ }
46
+ else if (byte >= 0x00E0 && byte <= 0x00EF) {
47
+ bytesNeeded = 2;
48
+ codePoint = byte & 0x000F;
49
+ if (byte === 0x00E0) {
50
+ // Adjust lower boundary for exclusion of overlong sequences
51
+ lowerBoundary = 0x00A0;
52
+ }
53
+ else if (byte === 0x00ED) {
54
+ // Adjust upper boundary to exclude surrogates
55
+ upperBoundary = 0x009F;
56
+ }
57
+ }
58
+ else if (byte >= 0x00F0 && byte <= 0x00F4) {
59
+ bytesNeeded = 3;
60
+ codePoint = byte & 0x0007;
61
+ if (byte === 0x00F0) {
62
+ // Adjust lower boundary for exclusion of overlong sequences
63
+ lowerBoundary = 0x0090;
64
+ }
65
+ else if (byte === 0x00F4) {
66
+ // Adjust upper boundary to limit to valid Unicode range
67
+ upperBoundary = 0x008F;
68
+ }
69
+ }
70
+ else {
71
+ // For bytes that are not valid initial bytes of UTF-8 sequences, add replacement character
72
+ result[resIdx++] = REPLACEMENT_CHAR;
73
+ continue;
74
+ }
75
+ }
76
+ else {
77
+ // For subsequent bytes in a multibyte sequence, check if the byte is in the expected range
78
+ if (!(byte >= lowerBoundary && byte <= upperBoundary)) {
79
+ // Reset the state for illegal sequences and add replacement character
80
+ bytesNeeded = 0;
81
+ bytesSeen = 0;
82
+ lowerBoundary = 0x0080;
83
+ upperBoundary = 0x00BF;
84
+ result[resIdx++] = REPLACEMENT_CHAR;
85
+ // Decrement `i` to re-evaluate this byte as the start of a new sequence
86
+ i -= 1;
87
+ continue;
88
+ }
89
+ codePoint = (codePoint << 6) | (byte & 0x003F);
90
+ // Reset boundaries for next bytes
91
+ lowerBoundary = 0x0080;
92
+ upperBoundary = 0x00BF;
93
+ bytesSeen += 1;
94
+ }
95
+ if (bytesSeen === bytesNeeded) {
96
+ // Complete the code point assembly and add it to the result
97
+ result[resIdx++] = String.fromCodePoint(codePoint);
98
+ // Reset for the next character
99
+ bytesNeeded = 0;
100
+ bytesSeen = 0;
101
+ codePoint = 0;
102
+ }
103
+ }
104
+ return result.join(EMPTY);
105
+ };
106
+
107
+ export { decodeTextPolyfill };