@browserless.io/browserless 2.31.1 → 2.32.0-beta-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/build/routes/chrome/http/content.post.body.json +8 -8
  2. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  3. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  4. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  5. package/build/routes/chromium/http/content.post.body.json +8 -8
  6. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  7. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  8. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  9. package/build/routes/edge/http/content.post.body.json +8 -8
  10. package/build/routes/edge/http/pdf.post.body.json +8 -8
  11. package/build/routes/edge/http/scrape.post.body.json +8 -8
  12. package/build/routes/edge/http/screenshot.post.body.json +8 -8
  13. package/build/routes/management/tests/management.spec.js +14 -0
  14. package/build/server.js +4 -5
  15. package/build/shared/utils/enjoi-resolver.d.ts +77 -0
  16. package/build/shared/utils/enjoi-resolver.js +399 -0
  17. package/docker/base/Dockerfile +2 -2
  18. package/extensions/ublocklite/README.md +4 -2
  19. package/extensions/ublocklite/_locales/ar/messages.json +34 -10
  20. package/extensions/ublocklite/_locales/az/messages.json +26 -2
  21. package/extensions/ublocklite/_locales/be/messages.json +26 -2
  22. package/extensions/ublocklite/_locales/bg/messages.json +26 -2
  23. package/extensions/ublocklite/_locales/bn/messages.json +26 -2
  24. package/extensions/ublocklite/_locales/br_FR/messages.json +26 -2
  25. package/extensions/ublocklite/_locales/bs/messages.json +26 -2
  26. package/extensions/ublocklite/_locales/ca/messages.json +26 -2
  27. package/extensions/ublocklite/_locales/cs/messages.json +26 -2
  28. package/extensions/ublocklite/_locales/cv/messages.json +26 -2
  29. package/extensions/ublocklite/_locales/cy/messages.json +37 -13
  30. package/extensions/ublocklite/_locales/da/messages.json +26 -2
  31. package/extensions/ublocklite/_locales/de/messages.json +26 -2
  32. package/extensions/ublocklite/_locales/el/messages.json +29 -5
  33. package/extensions/ublocklite/_locales/en/messages.json +26 -2
  34. package/extensions/ublocklite/_locales/en_GB/messages.json +26 -2
  35. package/extensions/ublocklite/_locales/eo/messages.json +26 -2
  36. package/extensions/ublocklite/_locales/es/messages.json +26 -2
  37. package/extensions/ublocklite/_locales/et/messages.json +26 -2
  38. package/extensions/ublocklite/_locales/eu/messages.json +26 -2
  39. package/extensions/ublocklite/_locales/fa/messages.json +26 -2
  40. package/extensions/ublocklite/_locales/fi/messages.json +26 -2
  41. package/extensions/ublocklite/_locales/fil/messages.json +68 -44
  42. package/extensions/ublocklite/_locales/fr/messages.json +26 -2
  43. package/extensions/ublocklite/_locales/fy/messages.json +26 -2
  44. package/extensions/ublocklite/_locales/gl/messages.json +27 -3
  45. package/extensions/ublocklite/_locales/gu/messages.json +26 -2
  46. package/extensions/ublocklite/_locales/he/messages.json +26 -2
  47. package/extensions/ublocklite/_locales/hi/messages.json +26 -2
  48. package/extensions/ublocklite/_locales/hr/messages.json +26 -2
  49. package/extensions/ublocklite/_locales/hu/messages.json +26 -2
  50. package/extensions/ublocklite/_locales/hy/messages.json +26 -2
  51. package/extensions/ublocklite/_locales/id/messages.json +37 -13
  52. package/extensions/ublocklite/_locales/it/messages.json +26 -2
  53. package/extensions/ublocklite/_locales/ja/messages.json +26 -2
  54. package/extensions/ublocklite/_locales/ka/messages.json +26 -2
  55. package/extensions/ublocklite/_locales/kk/messages.json +26 -2
  56. package/extensions/ublocklite/_locales/kn/messages.json +26 -2
  57. package/extensions/ublocklite/_locales/ko/messages.json +26 -2
  58. package/extensions/ublocklite/_locales/lt/messages.json +26 -2
  59. package/extensions/ublocklite/_locales/lv/messages.json +26 -2
  60. package/extensions/ublocklite/_locales/mk/messages.json +26 -2
  61. package/extensions/ublocklite/_locales/ml/messages.json +26 -2
  62. package/extensions/ublocklite/_locales/mr/messages.json +26 -2
  63. package/extensions/ublocklite/_locales/ms/messages.json +26 -2
  64. package/extensions/ublocklite/_locales/nb/messages.json +26 -2
  65. package/extensions/ublocklite/_locales/nl/messages.json +26 -2
  66. package/extensions/ublocklite/_locales/oc/messages.json +26 -2
  67. package/extensions/ublocklite/_locales/pa/messages.json +26 -2
  68. package/extensions/ublocklite/_locales/pl/messages.json +26 -2
  69. package/extensions/ublocklite/_locales/pt_BR/messages.json +26 -2
  70. package/extensions/ublocklite/_locales/pt_PT/messages.json +29 -5
  71. package/extensions/ublocklite/_locales/ro/messages.json +26 -2
  72. package/extensions/ublocklite/_locales/ru/messages.json +26 -2
  73. package/extensions/ublocklite/_locales/si/messages.json +26 -2
  74. package/extensions/ublocklite/_locales/sk/messages.json +26 -2
  75. package/extensions/ublocklite/_locales/sl/messages.json +26 -2
  76. package/extensions/ublocklite/_locales/so/messages.json +26 -2
  77. package/extensions/ublocklite/_locales/sq/messages.json +26 -2
  78. package/extensions/ublocklite/_locales/sr/messages.json +26 -2
  79. package/extensions/ublocklite/_locales/sv/messages.json +26 -2
  80. package/extensions/ublocklite/_locales/sw/messages.json +26 -2
  81. package/extensions/ublocklite/_locales/ta/messages.json +26 -2
  82. package/extensions/ublocklite/_locales/te/messages.json +26 -2
  83. package/extensions/ublocklite/_locales/th/messages.json +26 -2
  84. package/extensions/ublocklite/_locales/tr/messages.json +26 -2
  85. package/extensions/ublocklite/_locales/uk/messages.json +26 -2
  86. package/extensions/ublocklite/_locales/ur/messages.json +26 -2
  87. package/extensions/ublocklite/_locales/vi/messages.json +33 -9
  88. package/extensions/ublocklite/_locales/zh_CN/messages.json +33 -9
  89. package/extensions/ublocklite/_locales/zh_TW/messages.json +26 -2
  90. package/extensions/ublocklite/css/develop.css +59 -25
  91. package/extensions/ublocklite/css/line-hor-dashed.png +0 -0
  92. package/extensions/ublocklite/dashboard.html +25 -16
  93. package/extensions/ublocklite/js/admin.js +7 -8
  94. package/extensions/ublocklite/js/background.js +38 -19
  95. package/extensions/ublocklite/js/dashboard.js +3 -3
  96. package/extensions/ublocklite/js/develop.js +533 -798
  97. package/extensions/ublocklite/js/dnr-editor.js +180 -0
  98. package/extensions/ublocklite/js/dnr-parser.js +30 -10
  99. package/extensions/ublocklite/js/i18n.js +5 -0
  100. package/extensions/ublocklite/js/mode-editor.js +87 -0
  101. package/extensions/ublocklite/js/mode-manager.js +11 -48
  102. package/extensions/ublocklite/js/mode-parser.js +211 -0
  103. package/extensions/ublocklite/js/ro-dnr-editor.js +95 -0
  104. package/extensions/ublocklite/js/ruleset-manager.js +42 -16
  105. package/extensions/ublocklite/js/rw-dnr-editor.js +391 -0
  106. package/extensions/ublocklite/js/settings.js +7 -71
  107. package/extensions/ublocklite/lib/codemirror/cm6.bundle.ubol.min.js +1 -1
  108. package/extensions/ublocklite/lib/codemirror/codemirror.LICENSE +21 -0
  109. package/extensions/ublocklite/manifest.json +1 -1
  110. package/extensions/ublocklite/rulesets/generic-details.json +3 -24
  111. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +7 -18
  112. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +12 -6
  113. package/extensions/ublocklite/rulesets/main/annoyances-others.json +4 -2
  114. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +2 -1
  115. package/extensions/ublocklite/rulesets/main/annoyances-social.json +4 -2
  116. package/extensions/ublocklite/rulesets/main/block-lan.json +6 -0
  117. package/extensions/ublocklite/rulesets/main/chn-0.json +26 -64
  118. package/extensions/ublocklite/rulesets/main/cze-0.json +2 -1
  119. package/extensions/ublocklite/rulesets/main/deu-0.json +3 -1
  120. package/extensions/ublocklite/rulesets/main/dpollock-0.json +2 -0
  121. package/extensions/ublocklite/rulesets/main/easylist.json +23 -9
  122. package/extensions/ublocklite/rulesets/main/easyprivacy.json +40 -11
  123. package/extensions/ublocklite/rulesets/main/fin-0.json +11 -2
  124. package/extensions/ublocklite/rulesets/main/fra-0.json +22 -41
  125. package/extensions/ublocklite/rulesets/main/grc-0.json +1 -1
  126. package/extensions/ublocklite/rulesets/main/hun-0.json +9 -2
  127. package/extensions/ublocklite/rulesets/main/idn-0.json +8 -38
  128. package/extensions/ublocklite/rulesets/main/ind-0.json +35 -6
  129. package/extensions/ublocklite/rulesets/main/irn-0.json +1 -0
  130. package/extensions/ublocklite/rulesets/main/isr-0.json +11 -1
  131. package/extensions/ublocklite/rulesets/main/ita-0.json +1 -1
  132. package/extensions/ublocklite/rulesets/main/jpn-1.json +24 -18
  133. package/extensions/ublocklite/rulesets/main/kor-1.json +6 -4
  134. package/extensions/ublocklite/rulesets/main/nld-0.json +3 -2
  135. package/extensions/ublocklite/rulesets/main/nor-0.json +8 -2
  136. package/extensions/ublocklite/rulesets/main/pgl.json +10 -7
  137. package/extensions/ublocklite/rulesets/main/pol-0.json +5 -0
  138. package/extensions/ublocklite/rulesets/main/rus-0.json +30 -28
  139. package/extensions/ublocklite/rulesets/main/spa-1.json +18 -61
  140. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +7223 -999
  141. package/extensions/ublocklite/rulesets/main/swe-1.json +40 -28
  142. package/extensions/ublocklite/rulesets/main/tur-0.json +17 -38
  143. package/extensions/ublocklite/rulesets/main/ublock-badware.json +28 -63
  144. package/extensions/ublocklite/rulesets/main/ublock-filters.json +173 -28
  145. package/extensions/ublocklite/rulesets/main/ukr-0.json +8 -26
  146. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +339 -766
  147. package/extensions/ublocklite/rulesets/main/vie-1.json +33 -30
  148. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +4 -1
  149. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +0 -3
  150. package/extensions/ublocklite/rulesets/modify-headers/rus-0.json +2 -1
  151. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +1 -1
  152. package/extensions/ublocklite/rulesets/redirect/adguard-mobile.json +1 -1
  153. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +1 -0
  154. package/extensions/ublocklite/rulesets/redirect/spa-1.json +3 -4
  155. package/extensions/ublocklite/rulesets/redirect/swe-1.json +2 -1
  156. package/extensions/ublocklite/rulesets/redirect/tur-0.json +1 -1
  157. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +15 -5
  158. package/extensions/ublocklite/rulesets/redirect/vie-1.json +2 -2
  159. package/extensions/ublocklite/rulesets/regex/adguard-mobile.json +13 -0
  160. package/extensions/ublocklite/rulesets/regex/chn-0.json +2 -3
  161. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  162. package/extensions/ublocklite/rulesets/regex/kor-1.json +1 -0
  163. package/extensions/ublocklite/rulesets/regex/nor-0.json +10 -0
  164. package/extensions/ublocklite/rulesets/regex/spa-0.json +0 -1
  165. package/extensions/ublocklite/rulesets/regex/spa-1.json +0 -13
  166. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -6
  167. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +14 -6
  168. package/extensions/ublocklite/rulesets/regex/ukr-0.json +2 -2
  169. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +10 -5
  170. package/extensions/ublocklite/rulesets/removeparam/rus-0.json +1 -1
  171. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +3 -2
  172. package/extensions/ublocklite/rulesets/ruleset-details.json +246 -246
  173. package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +3 -3
  174. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +1 -1
  175. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-others.js +3 -3
  176. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +1 -1
  177. package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +3 -3
  178. package/extensions/ublocklite/rulesets/scripting/declarative/easylist.js +3 -3
  179. package/extensions/ublocklite/rulesets/scripting/declarative/fin-0.js +3 -3
  180. package/extensions/ublocklite/rulesets/scripting/declarative/fra-0.js +3 -3
  181. package/extensions/ublocklite/rulesets/scripting/declarative/idn-0.js +3 -3
  182. package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +3 -3
  183. package/extensions/ublocklite/rulesets/scripting/declarative/kor-1.js +3 -3
  184. package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
  185. package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
  186. package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
  187. package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
  188. package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +3 -3
  189. package/extensions/ublocklite/rulesets/scripting/declarative/ukr-0.js +3 -3
  190. package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +1 -1
  191. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  192. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +3 -3
  193. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
  194. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  195. package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +2 -2
  196. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/generic/hrv-0.js +1 -1
  198. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +2 -2
  199. package/extensions/ublocklite/rulesets/scripting/generic/ind-0.js +2 -2
  200. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
  201. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  202. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
  204. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +2 -2
  205. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  206. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-cookies.css +0 -1
  208. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-social.css +0 -1
  209. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +0 -4
  210. package/extensions/ublocklite/rulesets/scripting/generichigh/cze-0.css +0 -1
  211. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +5 -9
  212. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +11 -0
  213. package/extensions/ublocklite/rulesets/scripting/generichigh/kor-1.css +0 -2
  214. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  215. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +1 -1
  216. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  217. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +3 -3
  219. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  220. package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +3 -3
  221. package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +3 -3
  222. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  223. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +3 -3
  224. package/extensions/ublocklite/rulesets/scripting/procedural/nor-0.js +3 -3
  225. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  226. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  228. package/extensions/ublocklite/rulesets/scripting/procedural/spa-0.js +3 -3
  229. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  230. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +11 -2
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie.js +10 -1
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +12 -3
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie-reload.js +10 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +12 -3
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.remove-cookie.js +17 -7
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-cookie.js +10 -1
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-attr.js +2 -2
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +1 -1
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +17 -7
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +12 -3
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-local-storage-item.js +2 -2
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-cookie.js +10 -1
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-local-storage-item.js +2 -2
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-social.set-cookie.js +10 -1
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-on-property-read.js +2 -2
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.evaldata-prune.js +1 -1
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +3 -3
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +1 -1
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +1 -1
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.json-prune-xhr-response.js +597 -0
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.remove-cookie.js +17 -7
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-cookie.js +10 -1
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.set-cookie.js +10 -1
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.abort-on-property-read.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.adjust-setTimeout.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-fetch.js +2 -2
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-constant.js +1 -1
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-cookie.js +10 -1
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-fetch.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.remove-cookie.js +17 -7
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-constant.js +1 -1
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-cookie.js +10 -1
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +17 -7
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +1 -1
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.adjust-setTimeout.js +1 -1
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +1 -1
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-setTimeout.js +2 -2
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-window-open.js +1 -1
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-node-text.js +1 -1
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +2 -2
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-cookie-reload.js +10 -1
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +2 -2
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-cookie.js +10 -1
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-stack-trace.js +1 -1
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +1 -1
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +1 -1
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +1 -1
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-xhr.js +1 -1
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-cookie.js +19 -9
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +1 -1
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie-reload.js +11 -2
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +10 -1
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.remove-cookie.js +17 -7
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-current-script.js +2 -2
  301. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  302. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-stack-trace.js +1 -1
  303. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +2 -2
  304. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +2 -2
  305. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
  306. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  307. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +1 -1
  308. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +2 -2
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-xhr.js +1 -1
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +2 -2
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-class.js +2 -2
  312. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  313. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie-reload.js +10 -1
  314. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie.js +12 -3
  315. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +1 -1
  316. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-cookie.js +17 -7
  317. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.set-cookie.js +10 -1
  318. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-current-script.js +2 -2
  319. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
  320. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +1 -1
  321. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +2 -2
  322. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setTimeout.js +2 -2
  323. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  324. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +2 -2
  325. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  326. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-cookie.js +10 -1
  327. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.abort-current-script.js +2 -2
  328. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  329. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  330. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +1 -1
  331. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  332. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  333. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
  334. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  335. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +30 -7
  336. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
  337. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
  338. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +19 -2
  339. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +3 -3
  340. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +1 -1
  341. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-refresh.js +1 -1
  342. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  343. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  344. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  345. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  346. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +19 -9
  347. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +3 -3
  348. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +12 -3
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  351. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  352. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  353. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  354. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +2 -2
  355. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie-reload.js +10 -1
  356. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie.js +13 -4
  357. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +399 -0
  358. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
  359. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +19 -2
  360. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +19 -2
  361. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-current-script.js +2 -2
  362. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-read.js +1 -1
  363. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-write.js +1 -1
  364. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.remove-class.js +1 -1
  365. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.set-constant.js +2 -2
  366. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +1 -1
  367. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  368. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
  369. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  370. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  371. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  372. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  373. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  374. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  375. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  376. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  377. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  378. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  379. package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
  380. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  381. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  382. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  383. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +1 -1
  384. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  385. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  386. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  387. package/extensions/ublocklite/rulesets/scripting/specific/ltu-0.js +3 -3
  388. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  389. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  390. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  391. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  392. package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +3 -3
  393. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  394. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  395. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  396. package/extensions/ublocklite/rulesets/scripting/specific/ublock-badware.js +3 -3
  397. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  398. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  399. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  400. package/extensions/ublocklite/rulesets/scriptlet-details.json +157 -153
  401. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +1 -34
  402. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +198 -248
  403. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +2 -0
  404. package/extensions/ublocklite/rulesets/strictblock/easylist.json +3 -2
  405. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +37 -1
  406. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +304 -62
  407. package/extensions/ublocklite/rulesets/strictblock/grc-0.json +1 -7
  408. package/extensions/ublocklite/rulesets/strictblock/idn-0.json +1 -0
  409. package/extensions/ublocklite/rulesets/strictblock/ita-0.json +1 -0
  410. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +159 -155
  411. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
  412. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
  413. package/extensions/ublocklite/rulesets/strictblock/pgl.json +10 -7
  414. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +0 -11
  415. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +7223 -999
  416. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +0 -13
  417. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +569 -570
  418. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  419. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +0 -75
  420. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +339 -766
  421. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +3 -2
  422. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +13 -0
  423. package/extensions/ublocklite/ublock.zip +0 -0
  424. package/package.json +24 -19
  425. package/src/routes/management/tests/management.spec.ts +25 -0
  426. package/src/server.ts +4 -5
  427. package/src/shared/utils/enjoi-resolver.ts +565 -0
  428. package/static/docs/swagger.json +9 -9
  429. package/static/docs/swagger.min.json +9 -9
  430. package/static/function/client.js +86 -39
  431. package/static/function/index.html +86 -39
  432. /package/extensions/ublocklite/lib/codemirror/{LICENSE → codemirror-quickstart.LICENSE} +0 -0
@@ -0,0 +1,180 @@
1
+ /*******************************************************************************
2
+
3
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
4
+ Copyright (C) 2014-present Raymond Hill
5
+
6
+ This program is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
18
+
19
+ Home: https://github.com/gorhill/uBlock
20
+ */
21
+
22
+ import { dnr } from './ext-compat.js';
23
+ import { rulesFromText } from './dnr-parser.js';
24
+
25
+ /******************************************************************************/
26
+
27
+ export class DNREditor {
28
+ constructor() {
29
+ this.validatedRegexes = [];
30
+ this.validatedRegexResults = [];
31
+ }
32
+
33
+ updateView(editor, firstLine, lastLine) {
34
+ const { doc } = editor.view.state;
35
+ const text = doc.sliceString(firstLine.from, lastLine.to);
36
+ const { bad } = rulesFromText(text);
37
+ if ( Array.isArray(bad) && bad.length !== 0 ) {
38
+ self.cm6.lineErrorAdd(editor.view, bad.map(i => i + firstLine.number));
39
+ }
40
+ const entries = self.cm6.findAll(
41
+ editor.view,
42
+ '\\bregexFilter: (\\S+)',
43
+ firstLine.from,
44
+ lastLine.to
45
+ );
46
+ const regexes = [];
47
+ for ( const entry of entries ) {
48
+ const regex = entry.match[1];
49
+ const i = this.validatedRegexes.indexOf(regex);
50
+ if ( i !== -1 ) {
51
+ const reason = this.validatedRegexResults[i];
52
+ if ( reason === true ) { continue; }
53
+ self.cm6.spanErrorAdd(editor.view, entry.from+13, entry.to, reason);
54
+ } else {
55
+ regexes.push(regex);
56
+ }
57
+ }
58
+ this.validateRegexes(editor, regexes);
59
+ }
60
+
61
+ exportToFile(text, fname) {
62
+ const { rules } = rulesFromText(text);
63
+ if ( Array.isArray(rules) === false ) { return; }
64
+ let ruleId = 1;
65
+ for ( const rule of rules ) {
66
+ rule.id = ruleId++;
67
+ }
68
+ return {
69
+ fname,
70
+ data: JSON.stringify(rules, null, 2),
71
+ mime: 'application/json',
72
+ };
73
+ }
74
+
75
+ async validateRegexes(editor, regexes) {
76
+ if ( regexes.length === 0 ) { return; }
77
+ const promises = regexes.map(regex => this.validateRegex(regex));
78
+ await Promise.all(promises);
79
+ for ( const regex of regexes ) {
80
+ const i = this.validatedRegexes.indexOf(regex);
81
+ if ( i === -1 ) { continue; }
82
+ const reason = this.validatedRegexResults[i];
83
+ if ( reason === true ) { continue; }
84
+ const entries = self.cm6.findAll(editor.view,
85
+ `(?<=\\bregexFilter: )${RegExp.escape(regex)}`
86
+ );
87
+ for ( const entry of entries ) {
88
+ self.cm6.spanErrorAdd(editor.view, entry.from, entry.to, reason);
89
+ }
90
+ }
91
+ }
92
+
93
+ async validateRegex(regex) {
94
+ const details = await dnr.isRegexSupported({ regex });
95
+ const result = details.isSupported || details.reason;
96
+ if ( this.validatedRegexes.length > 32 ) {
97
+ this.validatedRegexes.pop();
98
+ this.validatedRegexResults.pop();
99
+ }
100
+ this.validatedRegexes.unshift(regex);
101
+ this.validatedRegexResults.unshift(result);
102
+ }
103
+
104
+ createTooltipWidget(text) {
105
+ const template = document.querySelector('.badmark-tooltip');
106
+ const fragment = template.content.cloneNode(true);
107
+ const dom = fragment.querySelector('.badmark-tooltip');
108
+ dom.textContent = text;
109
+ return dom;
110
+ }
111
+
112
+ foldService(state, from) {
113
+ const { doc } = state;
114
+ const lineFrom = doc.lineAt(from);
115
+ if ( this.reFoldable.test(lineFrom.text) === false ) { return null; }
116
+ if ( lineFrom.number <= 5 ) { return null ; }
117
+ const lineBlockStart = doc.line(lineFrom.number - 5);
118
+ if ( this.reFoldCandidates.test(lineBlockStart.text) === false ) { return null; }
119
+ for ( let i = lineFrom.number-4; i < lineFrom.number; i++ ) {
120
+ const line = doc.line(i);
121
+ if ( this.reFoldable.test(line.text) === false ) { return null; }
122
+ }
123
+ let i = lineFrom.number + 1;
124
+ for ( ; i <= doc.lines; i++ ) {
125
+ const lineNext = doc.line(i);
126
+ if ( this.reFoldable.test(lineNext.text) === false ) { break; }
127
+ }
128
+ i -= 1;
129
+ if ( i === lineFrom.number ) { return null; }
130
+ const lineFoldEnd = doc.line(i);
131
+ return { from: lineFrom.from+6, to: lineFoldEnd.to };
132
+ }
133
+ reFoldable = /^ {4}- \S/;
134
+ reFoldCandidates = new RegExp(`^(?: {2})+${[
135
+ 'initiatorDomains',
136
+ 'excludedInitiatorDomains',
137
+ 'requestDomains',
138
+ 'excludedRequestDomains',
139
+ ].join('|')}:$`);
140
+
141
+ streamParserKeywords = new RegExp(`\\b(${[
142
+ 'block',
143
+ 'redirect',
144
+ 'allow',
145
+ 'modifyHeaders',
146
+ 'upgradeScheme',
147
+ 'allowAllRequest',
148
+ 'append',
149
+ 'set',
150
+ 'remove',
151
+ 'firstParty',
152
+ 'thirdParty',
153
+ 'true',
154
+ 'false',
155
+ 'connect',
156
+ 'delete',
157
+ 'get',
158
+ 'head',
159
+ 'options',
160
+ 'patch',
161
+ 'post',
162
+ 'put',
163
+ 'other',
164
+ 'main_frame',
165
+ 'sub_frame',
166
+ 'stylesheet',
167
+ 'script',
168
+ 'image',
169
+ 'font',
170
+ 'object',
171
+ 'xmlhttprequest',
172
+ 'ping',
173
+ 'csp_report',
174
+ 'media',
175
+ 'websocket',
176
+ 'webtransport',
177
+ 'webbundle',
178
+ 'other',
179
+ ].join('|')})\\b`);
180
+ };
@@ -94,9 +94,15 @@ const perScopeParsers = {
94
94
  rule[key] = {};
95
95
  scope.push(key);
96
96
  break;
97
+ case 'id': {
98
+ const n = parseInt(val, 10);
99
+ if ( isNaN(n) || n < 1) { return false; }
100
+ rule.id = n;
101
+ break;
102
+ }
97
103
  case 'priority': {
98
104
  const n = parseInt(val, 10);
99
- if ( isNaN(n) || n <= 1 ) { return false; }
105
+ if ( isNaN(n) || n < 1 ) { return false; }
100
106
  rule.priority = n;
101
107
  break;
102
108
  }
@@ -283,6 +289,10 @@ const perScopeParsers = {
283
289
  rule.condition[key] = [];
284
290
  scope.push(key);
285
291
  break;
292
+ case 'tabIds':
293
+ rule.condition.tabIds = [];
294
+ scope.push('tabIds');
295
+ break;
286
296
  default:
287
297
  return false;
288
298
  }
@@ -412,6 +422,12 @@ const perScopeParsers = {
412
422
  item.excludedValues.push(node.val);
413
423
  return true;
414
424
  },
425
+ 'condition.tabIds': function(scope, rule, node) {
426
+ if ( node.list !== true ) { return false; }
427
+ const n = parseInt(node.val, 10);
428
+ if ( isNaN(n) || n === 0 ) { return false; }
429
+ rule.condition.tabIds.push(n);
430
+ },
415
431
  };
416
432
 
417
433
  /******************************************************************************/
@@ -479,16 +495,17 @@ export function rulesFromText(text) {
479
495
  const indices = [];
480
496
  for ( let i = 0; i < lines.length; i++ ) {
481
497
  const line = lines[i].trimEnd();
482
- const trimmed = line.trimStart();
483
- if ( trimmed.startsWith('#') ) { continue; }
484
- // Discard leading empty lines
485
- if ( trimmed === '' ) {
486
- if ( indices.length === 0 ) { continue; }
487
- }
498
+ if ( line.trim().startsWith('#') ) { continue; }
488
499
  if ( line !== '---' && line !== '...' ) {
489
500
  indices.push(i);
490
501
  continue;
491
502
  }
503
+ // Discard leading empty lines
504
+ while ( indices.length !== 0 ) {
505
+ const s = lines[indices[0]].trim();
506
+ if ( s.length !== 0 ) { break; }
507
+ indices.shift();
508
+ }
492
509
  // Discard trailing empty lines
493
510
  while ( indices.length !== 0 ) {
494
511
  const s = lines[indices.at(-1)].trim();
@@ -544,18 +561,21 @@ function textFromValue(val, depth) {
544
561
 
545
562
  /******************************************************************************/
546
563
 
547
- export function textFromRules(rules) {
564
+ export function textFromRules(rules, option = {}) {
548
565
  if ( Array.isArray(rules) === false ) {
549
566
  if ( rules instanceof Object === false ) { return; }
550
567
  rules = [ rules ];
551
568
  }
552
569
  const out = [];
553
570
  for ( const rule of rules ) {
554
- if ( rule.id ) { rule.id = undefined };
571
+ if ( option.keepId !== true && rule.id ) { rule.id = undefined };
555
572
  const text = textFromValue(rule, 0);
556
573
  if ( text === undefined ) { continue; }
557
574
  out.push(text, '---' );
558
575
  }
559
- out.push('');
576
+ if ( out.length !== 0 ) {
577
+ out.unshift('---');
578
+ out.push('');
579
+ }
560
580
  return out.join('\n');
561
581
  }
@@ -263,6 +263,11 @@ if ( isBackgroundProcess !== true ) {
263
263
  elem.setAttribute('aria-label', text);
264
264
  }
265
265
  }
266
+
267
+ for ( const elem of root.querySelectorAll('[data-i18n-label]') ) {
268
+ const text = i18n$(elem.getAttribute('data-i18n-label'));
269
+ elem.setAttribute('label', text);
270
+ }
266
271
  };
267
272
 
268
273
  i18n.renderElapsedTimeToString = function(tstamp) {
@@ -0,0 +1,87 @@
1
+ /*******************************************************************************
2
+
3
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
4
+ Copyright (C) 2014-present Raymond Hill
5
+
6
+ This program is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
18
+
19
+ Home: https://github.com/gorhill/uBlock
20
+ */
21
+
22
+ import {
23
+ modesFromText,
24
+ textFromModes,
25
+ } from './mode-parser.js';
26
+ import { i18n$ } from './i18n.js';
27
+ import { sendMessage } from './ext.js';
28
+
29
+ /******************************************************************************/
30
+
31
+ export class ModeEditor {
32
+ constructor(editor) {
33
+ this.editor = editor;
34
+ this.bc = null;
35
+ }
36
+
37
+ on() {
38
+ if ( this.bc !== null ) { return; }
39
+ this.bc = new self.BroadcastChannel('uBOL');
40
+ this.bc.onmessage = ev => {
41
+ const message = ev.data;
42
+ if ( message instanceof Object === false ) { return; }
43
+ if ( message.filteringModeDetails === undefined ) { return; }
44
+ // TODO: merge with ongoing edits?
45
+ const text = textFromModes(message.filteringModeDetails);
46
+ this.editor.setEditorText(text, true);
47
+ };
48
+ }
49
+
50
+ off() {
51
+ if ( this.bc === null ) { return; }
52
+ this.bc.onmessage = null;
53
+ this.bc = null;
54
+ }
55
+
56
+ async getText() {
57
+ const modes = await sendMessage({ what: 'getFilteringModeDetails' });
58
+ return textFromModes(modes);
59
+ }
60
+
61
+ async saveEditorText(editor) {
62
+ const { modes } = modesFromText(editor.getEditorText());
63
+ if ( modes instanceof Object === false ) { return; }
64
+ const modesAfter = await sendMessage({ what: 'setFilteringModeDetails', modes });
65
+ const text = textFromModes(modesAfter);
66
+ editor.setEditorText(text);
67
+ return true;
68
+ }
69
+
70
+ updateView(editor, firstLine, lastLine) {
71
+ const { doc } = editor.view.state;
72
+ const text = doc.sliceString(firstLine.from, lastLine.to);
73
+ const { bad } = modesFromText(text, true);
74
+ if ( Array.isArray(bad) && bad.length !== 0 ) {
75
+ self.cm6.lineErrorAdd(editor.view, bad.map(i => i + firstLine.number));
76
+ }
77
+ }
78
+
79
+ sequenceScopes = [
80
+ `${i18n$('filteringMode0Name')}:`, 'none:',
81
+ `${i18n$('filteringMode1Name')}:`, 'basic:',
82
+ `${i18n$('filteringMode2Name')}:`, 'optimal:',
83
+ `${i18n$('filteringMode3Name')}:`, 'complete:',
84
+ ];
85
+
86
+ ioAccept = '.json,application/json';
87
+ };
@@ -225,7 +225,7 @@ export async function readFilteringModeDetails(bypassCache = false) {
225
225
  }
226
226
  }
227
227
  let [
228
- userModes,
228
+ userModes = { optimal: [ 'all-urls' ] },
229
229
  adminDefaultFiltering,
230
230
  adminNoFiltering,
231
231
  ] = await Promise.all([
@@ -233,9 +233,6 @@ export async function readFilteringModeDetails(bypassCache = false) {
233
233
  adminReadEx('defaultFiltering'),
234
234
  adminReadEx('noFiltering'),
235
235
  ]);
236
- if ( userModes === undefined ) {
237
- userModes = { optimal: [ 'all-urls' ] };
238
- }
239
236
  userModes = unserializeModeDetails(userModes);
240
237
  if ( adminDefaultFiltering !== undefined ) {
241
238
  const modefromName = {
@@ -277,29 +274,34 @@ async function writeFilteringModeDetails(afterDetails) {
277
274
  readFilteringModeDetails.cache = unserializeModeDetails(data);
278
275
  return Promise.all([
279
276
  getDefaultFilteringMode(),
280
- getTrustedSites(),
281
277
  hasBroadHostPermissions(),
282
278
  localWrite('filteringModeDetails', data),
283
279
  sessionWrite('filteringModeDetails', data),
284
280
  ]).then(results => {
285
281
  broadcastMessage({
286
282
  defaultFilteringMode: results[0],
287
- trustedSites: Array.from(results[1]),
288
- hasOmnipotence: results[2],
283
+ hasOmnipotence: results[1],
284
+ filteringModeDetails: readFilteringModeDetails.cache,
289
285
  });
290
286
  });
291
287
  }
292
288
 
293
289
  /******************************************************************************/
294
290
 
295
- export async function getFilteringModeDetails() {
291
+ export async function getFilteringModeDetails(serializable = false) {
296
292
  const actualDetails = await readFilteringModeDetails();
297
- return {
293
+ const out = {
298
294
  none: new Set(actualDetails.none),
299
295
  basic: new Set(actualDetails.basic),
300
296
  optimal: new Set(actualDetails.optimal),
301
297
  complete: new Set(actualDetails.complete),
302
298
  };
299
+ return serializable ? serializeModeDetails(out) : out;
300
+ }
301
+
302
+ export async function setFilteringModeDetails(details) {
303
+ await localWrite('filteringModeDetails', serializeModeDetails(details));
304
+ await readFilteringModeDetails(true);
303
305
  }
304
306
 
305
307
  /******************************************************************************/
@@ -328,45 +330,6 @@ export function setDefaultFilteringMode(afterLevel) {
328
330
 
329
331
  /******************************************************************************/
330
332
 
331
- export async function getTrustedSites() {
332
- const filteringModes = await getFilteringModeDetails();
333
- return filteringModes.none;
334
- }
335
-
336
- export async function setTrustedSites(hostnames) {
337
- const [
338
- filteringModes,
339
- hasOmnipotence,
340
- ] = await Promise.all([
341
- getFilteringModeDetails(),
342
- hasBroadHostPermissions(),
343
- ]);
344
- const { none } = filteringModes;
345
- const hnSet = new Set(hostnames);
346
- let modified = false;
347
- if ( none.has('all-urls') && hnSet.has('all-urls') === false ) {
348
- applyFilteringMode(filteringModes, 'all-urls', hasOmnipotence ? MODE_OPTIMAL : MODE_BASIC);
349
- modified = true;
350
- }
351
- for ( const hn of none ) {
352
- if ( hnSet.has(hn) ) {
353
- hnSet.delete(hn);
354
- } else {
355
- none.delete(hn);
356
- modified = true;
357
- }
358
- }
359
- for ( const hn of hnSet ) {
360
- const level = applyFilteringMode(filteringModes, hn, MODE_NONE);
361
- if ( level !== MODE_NONE ) { continue; }
362
- modified = true;
363
- }
364
- if ( modified === false ) { return; }
365
- return writeFilteringModeDetails(filteringModes);
366
- }
367
-
368
- /******************************************************************************/
369
-
370
333
  export async function syncWithBrowserPermissions() {
371
334
  const [
372
335
  permissions,
@@ -0,0 +1,211 @@
1
+ /*******************************************************************************
2
+
3
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
4
+ Copyright (C) 2014-present Raymond Hill
5
+
6
+ This program is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
18
+
19
+ Home: https://github.com/gorhill/uBlock
20
+ */
21
+
22
+ import { i18n$ } from './i18n.js';
23
+ import punycode from './punycode.js';
24
+
25
+ /******************************************************************************/
26
+
27
+ function selectParser(scope, modes, node) {
28
+ const parser = perScopeParsers[scope.join('.')];
29
+ if ( parser === undefined ) { return false; }
30
+ return parser(scope, modes, node);
31
+ }
32
+
33
+ const validModes = [
34
+ 'none',
35
+ 'basic',
36
+ 'optimal',
37
+ 'complete',
38
+ ];
39
+
40
+ const uglyModeNames = {
41
+ [i18n$('filteringMode0Name')]: 'none',
42
+ [i18n$('filteringMode1Name')]: 'basic',
43
+ [i18n$('filteringMode2Name')]: 'optimal',
44
+ [i18n$('filteringMode3Name')]: 'complete',
45
+ };
46
+
47
+ const prettyModeNames = {
48
+ none: i18n$('filteringMode0Name'),
49
+ basic: i18n$('filteringMode1Name'),
50
+ optimal: i18n$('filteringMode2Name'),
51
+ complete: i18n$('filteringMode3Name'),
52
+ };
53
+
54
+ const perScopeParsers = {
55
+ '': function(scope, modes, node) {
56
+ const { key, val } = node;
57
+ switch ( key ) {
58
+ case 'none':
59
+ case 'basic':
60
+ case 'optimal':
61
+ case 'complete':
62
+ case prettyModeNames.none:
63
+ case prettyModeNames.basic:
64
+ case prettyModeNames.optimal:
65
+ case prettyModeNames.complete: {
66
+ const mode = uglyModeNames[key] || key;
67
+ if ( val !== undefined ) { return false; }
68
+ modes[mode] ||= [];
69
+ scope.push(mode);
70
+ break;
71
+ }
72
+ default:
73
+ return false;
74
+ }
75
+ return true;
76
+ },
77
+ none: function(scope, modes, node) {
78
+ return addHostnameToMode(modes, 'none', node)
79
+ },
80
+ basic: function(scope, modes, node) {
81
+ return addHostnameToMode(modes, 'basic', node)
82
+ },
83
+ optimal: function(scope, modes, node) {
84
+ return addHostnameToMode(modes, 'optimal', node)
85
+ },
86
+ complete: function(scope, modes, node) {
87
+ return addHostnameToMode(modes, 'complete', node)
88
+ },
89
+ };
90
+
91
+ const addHostnameToMode = (modes, mode, node) => {
92
+ if ( node.list !== true ) { return false; }
93
+ modes[mode].push(punycode.toASCII(node.val));
94
+ };
95
+
96
+ /******************************************************************************/
97
+
98
+ function depthFromIndent(line) {
99
+ const match = /^\s*/.exec(line);
100
+ const count = match[0].length;
101
+ if ( (count & 1) !== 0 ) { return -1; }
102
+ return count / 2;
103
+ }
104
+
105
+ /******************************************************************************/
106
+
107
+ function nodeFromLine(line) {
108
+ const match = reNodeParser.exec(line);
109
+ const out = {};
110
+ if ( match === null ) { return out; }
111
+ if ( match[1] ) {
112
+ out.list = true;
113
+ }
114
+ if ( match[4] ) {
115
+ out.val = match[4].trim();
116
+ } else if ( match[3] ) {
117
+ out.key = match[2];
118
+ out.val = match[3].trim();
119
+ if ( out.val === "''" ) { out.val = '' };
120
+ } else {
121
+ out.key = match[2];
122
+ }
123
+ return out;
124
+ }
125
+
126
+ const reNodeParser = /^\s*(- )?(?:([^:]+):( \S.*)?|(\S.*))$/;
127
+
128
+ /******************************************************************************/
129
+
130
+ export function modesFromText(text, justbad = false) {
131
+ const lines = [ ...text.split(/\n\r|\r\n|\n|\r/) ];
132
+ const indices = [];
133
+ for ( let i = 0; i < lines.length; i++ ) {
134
+ const line = lines[i].trimEnd();
135
+ if ( line.trim().startsWith('#') ) { continue; }
136
+ indices.push(i);
137
+ }
138
+ // Discard leading empty lines
139
+ while ( indices.length !== 0 ) {
140
+ const s = lines[indices[0]].trim();
141
+ if ( s.length !== 0 ) { break; }
142
+ indices.shift();
143
+ }
144
+ // Discard trailing empty lines
145
+ while ( indices.length !== 0 ) {
146
+ const s = lines[indices.at(-1)].trim();
147
+ if ( s.length !== 0 ) { break; }
148
+ indices.pop();
149
+ }
150
+ // Parse
151
+ const modes = {};
152
+ const bad = [];
153
+ const scope = [];
154
+ for ( const i of indices ) {
155
+ const line = lines[i];
156
+ const depth = depthFromIndent(line);
157
+ if ( depth < 0 ) {
158
+ bad.push(i);
159
+ continue;
160
+ }
161
+ scope.length = depth;
162
+ const node = nodeFromLine(line);
163
+ const result = selectParser(scope, modes, node);
164
+ if ( result === false ) {
165
+ bad.push(i);
166
+ }
167
+ }
168
+ if ( justbad ) {
169
+ return bad.length !== 0 ? { bad } : { };
170
+ }
171
+ // Ensure all modes are present, and that one mode is the default one
172
+ const seen = new Map();
173
+ let defaultMode = '';
174
+ for ( const mode of validModes ) {
175
+ modes[mode] = new Set(modes[mode]);
176
+ if ( modes[mode].has('all-urls') ) {
177
+ defaultMode = mode;
178
+ }
179
+ for ( const hn of modes[mode] ) {
180
+ if ( seen.has(hn) ) {
181
+ modes[seen.get(hn)].delete(hn);
182
+ }
183
+ seen.set(hn, mode);
184
+ }
185
+ }
186
+ if ( defaultMode === '' ) {
187
+ defaultMode = 'optimal';
188
+ }
189
+ modes[defaultMode].clear();
190
+ modes[defaultMode].add('all-urls');
191
+ for ( const mode of validModes ) {
192
+ modes[mode] = Array.from(modes[mode]);
193
+ }
194
+ return { modes };
195
+ }
196
+
197
+ /******************************************************************************/
198
+
199
+ export function textFromModes(modes) {
200
+ const out = [];
201
+ for ( const mode of validModes ) {
202
+ const hostnames = modes[mode];
203
+ if ( hostnames === undefined ) { continue; }
204
+ out.push(`${prettyModeNames[mode]}:`);
205
+ for ( const hn of hostnames ) {
206
+ out.push(` - ${punycode.toUnicode(hn)}`);
207
+ }
208
+ }
209
+ out.push('');
210
+ return out.join('\n');
211
+ }