@browserless.io/browserless 2.33.0 → 2.34.0-beta-0

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 (503) hide show
  1. package/README.md +1 -1
  2. package/build/config.d.ts +1 -1
  3. package/build/config.js +1 -1
  4. package/build/http.d.ts +10 -0
  5. package/build/http.js +5 -0
  6. package/build/limiter.spec.js +1 -1
  7. package/build/routes/chrome/http/content.post.body.json +8 -8
  8. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  9. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  10. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  11. package/build/routes/chrome/tests/content.spec.js +12 -12
  12. package/build/routes/chrome/tests/page-websocket.spec.js +3 -3
  13. package/build/routes/chrome/tests/pdf.spec.js +13 -13
  14. package/build/routes/chrome/tests/performance.spec.js +4 -4
  15. package/build/routes/chrome/tests/scrape.spec.js +13 -13
  16. package/build/routes/chrome/tests/screenshot.spec.js +14 -14
  17. package/build/routes/chromium/http/content.post.body.json +8 -8
  18. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  19. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  20. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  21. package/build/routes/chromium/tests/content.spec.js +13 -13
  22. package/build/routes/chromium/tests/page-websocket.spec.js +3 -3
  23. package/build/routes/chromium/tests/pdf.spec.js +13 -13
  24. package/build/routes/chromium/tests/performance.spec.js +4 -4
  25. package/build/routes/chromium/tests/scrape.spec.js +13 -13
  26. package/build/routes/chromium/tests/screenshot.spec.js +14 -14
  27. package/build/routes/edge/http/content.post.body.json +8 -8
  28. package/build/routes/edge/http/pdf.post.body.json +8 -8
  29. package/build/routes/edge/http/scrape.post.body.json +8 -8
  30. package/build/routes/edge/http/screenshot.post.body.json +8 -8
  31. package/build/routes/edge/tests/content.spec.js +12 -12
  32. package/build/routes/edge/tests/page-websocket.spec.js +3 -3
  33. package/build/routes/edge/tests/pdf.spec.js +13 -13
  34. package/build/routes/edge/tests/performance.spec.js +4 -4
  35. package/build/routes/edge/tests/scrape.spec.js +13 -13
  36. package/build/routes/edge/tests/screenshot.spec.js +14 -14
  37. package/build/routes/management/http/kill.get.d.ts +1 -1
  38. package/build/routes/management/http/kill.get.query.json +0 -3
  39. package/build/routes/management/http/pressure.get.d.ts +1 -1
  40. package/build/routes/management/http/pressure.get.js +12 -4
  41. package/build/routes/management/http/sessions.get.d.ts +1 -1
  42. package/build/routes/management/http/sessions.get.query.json +0 -3
  43. package/build/routes/management/tests/management.spec.js +13 -13
  44. package/build/server.js +12 -4
  45. package/build/shim.d.ts +5 -0
  46. package/build/shim.js +13 -0
  47. package/build/shim.spec.js +28 -1
  48. package/build/types.d.ts +14 -0
  49. package/build/types.js +14 -0
  50. package/build/utils.js +1 -1
  51. package/extensions/ublocklite/_locales/ar/messages.json +8 -8
  52. package/extensions/ublocklite/_locales/be/messages.json +8 -8
  53. package/extensions/ublocklite/_locales/fi/messages.json +18 -18
  54. package/extensions/ublocklite/_locales/hi/messages.json +21 -21
  55. package/extensions/ublocklite/_locales/hu/messages.json +8 -8
  56. package/extensions/ublocklite/_locales/id/messages.json +15 -15
  57. package/extensions/ublocklite/_locales/ja/messages.json +23 -23
  58. package/extensions/ublocklite/_locales/nl/messages.json +1 -1
  59. package/extensions/ublocklite/_locales/pt_BR/messages.json +15 -15
  60. package/extensions/ublocklite/_locales/pt_PT/messages.json +18 -18
  61. package/extensions/ublocklite/_locales/th/messages.json +30 -30
  62. package/extensions/ublocklite/_locales/tr/messages.json +1 -1
  63. package/extensions/ublocklite/_locales/uk/messages.json +10 -10
  64. package/extensions/ublocklite/_locales/vi/messages.json +8 -8
  65. package/extensions/ublocklite/css/picker-ui.css +1 -1
  66. package/extensions/ublocklite/css/report.css +0 -8
  67. package/extensions/ublocklite/js/background.js +30 -6
  68. package/extensions/ublocklite/js/debug.js +8 -4
  69. package/extensions/ublocklite/js/develop.js +1 -1
  70. package/extensions/ublocklite/js/ext-compat.js +9 -2
  71. package/extensions/ublocklite/js/filter-lists.js +1 -2
  72. package/extensions/ublocklite/js/filter-manager.js +57 -23
  73. package/extensions/ublocklite/js/picker-ui.js +32 -41
  74. package/extensions/ublocklite/js/popup.js +10 -10
  75. package/extensions/ublocklite/js/redirect-resources.js +1 -0
  76. package/extensions/ublocklite/js/ro-dnr-editor.js +6 -1
  77. package/extensions/ublocklite/js/scripting/css-procedural-api.js +821 -0
  78. package/extensions/ublocklite/js/scripting/css-procedural.js +62 -718
  79. package/extensions/ublocklite/{rulesets/scripting/declarative/isr-0.js → js/scripting/css-user-terminate.js} +16 -13
  80. package/extensions/ublocklite/js/scripting/css-user.js +12 -1
  81. package/extensions/ublocklite/js/scripting/picker.js +46 -13
  82. package/extensions/ublocklite/js/scripting/tool-overlay.js +14 -8
  83. package/extensions/ublocklite/js/scripting/unpicker.js +5 -9
  84. package/extensions/ublocklite/js/scripting/zapper.js +1 -1
  85. package/extensions/ublocklite/js/scripting-manager.js +0 -65
  86. package/extensions/ublocklite/js/static-filtering-parser.js +2 -2
  87. package/extensions/ublocklite/js/tool-overlay-ui.js +1 -1
  88. package/extensions/ublocklite/js/unpicker-ui.js +16 -9
  89. package/extensions/ublocklite/js/zapper-ui.js +3 -2
  90. package/extensions/ublocklite/manifest.json +7 -2
  91. package/extensions/ublocklite/picker-ui.html +1 -1
  92. package/extensions/ublocklite/report.html +0 -1
  93. package/extensions/ublocklite/rulesets/generic-details.json +10 -14
  94. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +3 -2
  95. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +19 -10
  96. package/extensions/ublocklite/rulesets/main/annoyances-others.json +4 -3
  97. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +4 -4
  98. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +1 -1
  99. package/extensions/ublocklite/rulesets/main/block-lan.json +2 -1
  100. package/extensions/ublocklite/rulesets/main/chn-0.json +22 -21
  101. package/extensions/ublocklite/rulesets/main/deu-0.json +6 -5
  102. package/extensions/ublocklite/rulesets/main/dpollock-0.json +5 -41
  103. package/extensions/ublocklite/rulesets/main/easylist.json +59 -35
  104. package/extensions/ublocklite/rulesets/main/easyprivacy.json +65 -12
  105. package/extensions/ublocklite/rulesets/main/fra-0.json +9 -11
  106. package/extensions/ublocklite/rulesets/main/hrv-0.json +5 -5
  107. package/extensions/ublocklite/rulesets/main/hun-0.json +1 -1
  108. package/extensions/ublocklite/rulesets/main/idn-0.json +8 -2
  109. package/extensions/ublocklite/rulesets/main/ind-0.json +30 -24
  110. package/extensions/ublocklite/rulesets/main/irn-0.json +44 -635
  111. package/extensions/ublocklite/rulesets/main/isr-0.json +1 -0
  112. package/extensions/ublocklite/rulesets/main/jpn-1.json +42 -26
  113. package/extensions/ublocklite/rulesets/main/kor-1.json +9 -4
  114. package/extensions/ublocklite/rulesets/main/mkd-0.json +1 -1
  115. package/extensions/ublocklite/rulesets/main/nld-0.json +2 -1
  116. package/extensions/ublocklite/rulesets/main/nor-0.json +14 -12
  117. package/extensions/ublocklite/rulesets/main/pgl.json +29 -12
  118. package/extensions/ublocklite/rulesets/main/pol-0.json +1 -1
  119. package/extensions/ublocklite/rulesets/main/rus-0.json +23 -30
  120. package/extensions/ublocklite/rulesets/main/rus-1.json +4 -2
  121. package/extensions/ublocklite/rulesets/main/spa-1.json +9 -32
  122. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +13773 -14561
  123. package/extensions/ublocklite/rulesets/main/swe-1.json +39 -29
  124. package/extensions/ublocklite/rulesets/main/tur-0.json +39 -27
  125. package/extensions/ublocklite/rulesets/main/ublock-badware.json +63 -65
  126. package/extensions/ublocklite/rulesets/main/ublock-experimental.json +3 -0
  127. package/extensions/ublocklite/rulesets/main/ublock-filters.json +99 -41
  128. package/extensions/ublocklite/rulesets/main/ukr-0.json +5 -7
  129. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +432 -1025
  130. package/extensions/ublocklite/rulesets/main/vie-1.json +50 -50
  131. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +3 -0
  132. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +1 -1
  133. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +3 -7
  134. package/extensions/ublocklite/rulesets/modify-headers/vie-1.json +1 -1
  135. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +1 -0
  136. package/extensions/ublocklite/rulesets/redirect/easyprivacy.json +16 -0
  137. package/extensions/ublocklite/rulesets/redirect/rus-0.json +2 -1
  138. package/extensions/ublocklite/rulesets/redirect/spa-1.json +1 -2
  139. package/extensions/ublocklite/rulesets/redirect/tur-0.json +0 -2
  140. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +17 -10
  141. package/extensions/ublocklite/rulesets/redirect/vie-1.json +5 -22
  142. package/extensions/ublocklite/rulesets/regex/chn-0.json +1 -1
  143. package/extensions/ublocklite/rulesets/regex/ita-0.json +1 -0
  144. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  145. package/extensions/ublocklite/rulesets/regex/tur-0.json +3 -1
  146. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +1 -4
  147. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +12 -9
  148. package/extensions/ublocklite/rulesets/regex/ukr-0.json +2 -2
  149. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +22 -11
  150. package/extensions/ublocklite/rulesets/removeparam/irn-0.json +27 -15
  151. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +1 -1
  152. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +1 -2
  153. package/extensions/ublocklite/rulesets/ruleset-details.json +281 -304
  154. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  155. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +2 -2
  156. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +2 -2
  157. package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +1 -1
  158. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  159. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
  160. package/extensions/ublocklite/rulesets/scripting/generic/hrv-0.js +1 -1
  161. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +2 -2
  162. package/extensions/ublocklite/rulesets/scripting/generic/ind-0.js +2 -2
  163. package/extensions/ublocklite/rulesets/scripting/generic/irn-0.js +3 -3
  164. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +2 -2
  165. package/extensions/ublocklite/rulesets/scripting/generic/kor-1.js +2 -2
  166. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  167. package/extensions/ublocklite/rulesets/scripting/generic/rou-1.js +2 -2
  168. package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +1 -1
  169. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
  170. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  171. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +3 -3
  172. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +2 -0
  173. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +3 -0
  174. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +26 -0
  175. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +2 -0
  176. package/extensions/ublocklite/rulesets/scripting/generichigh/tur-0.css +1 -0
  177. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +0 -2
  178. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  179. package/extensions/ublocklite/rulesets/scripting/procedural/alb-0.js +4 -4
  180. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +4 -4
  181. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  182. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  183. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-social.js +3 -3
  184. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +3 -3
  185. package/extensions/ublocklite/rulesets/scripting/procedural/cze-0.js +3 -3
  186. package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +1 -1
  187. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  188. package/extensions/ublocklite/rulesets/scripting/{declarative → procedural}/easyprivacy.js +5 -5
  189. package/extensions/ublocklite/rulesets/scripting/procedural/est-0.js +3 -3
  190. package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +3 -3
  191. package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +4 -4
  192. package/extensions/ublocklite/rulesets/scripting/procedural/grc-0.js +3 -3
  193. package/extensions/ublocklite/rulesets/scripting/procedural/hrv-0.js +3 -3
  194. package/extensions/ublocklite/rulesets/scripting/procedural/hun-0.js +3 -3
  195. package/extensions/ublocklite/rulesets/scripting/procedural/idn-0.js +3 -3
  196. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +3 -3
  197. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  198. package/extensions/ublocklite/rulesets/scripting/procedural/isl-0.js +1 -1
  199. package/extensions/ublocklite/rulesets/scripting/procedural/isr-0.js +3 -3
  200. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +1 -1
  201. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  202. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +3 -3
  203. package/extensions/ublocklite/rulesets/scripting/procedural/ltu-0.js +3 -3
  204. package/extensions/ublocklite/rulesets/scripting/procedural/lva-0.js +1 -1
  205. package/extensions/ublocklite/rulesets/scripting/{declarative → procedural}/mkd-0.js +4 -4
  206. package/extensions/ublocklite/rulesets/scripting/procedural/nld-0.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/procedural/nor-0.js +4 -4
  208. package/extensions/ublocklite/rulesets/scripting/procedural/pol-0.js +3 -3
  209. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  210. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  211. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +3 -3
  212. package/extensions/ublocklite/rulesets/scripting/procedural/spa-0.js +1 -1
  213. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +4 -4
  214. package/extensions/ublocklite/rulesets/scripting/procedural/svn-0.js +1 -1
  215. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  216. package/extensions/ublocklite/rulesets/scripting/procedural/tha-0.js +1 -1
  217. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +4 -4
  218. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-badware.js +3 -3
  219. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  220. package/extensions/ublocklite/rulesets/scripting/procedural/ubol-tests.js +1 -1
  221. package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
  222. package/extensions/ublocklite/rulesets/scripting/procedural/vie-1.js +3 -3
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +4 -3
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.abort-current-script.js +4 -3
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.set-attr.js → annoyances-cookies.set-cookie-reload.js} +129 -108
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +5 -4
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-window-open.js +1 -1
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +2 -2
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +6 -5
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.adjust-setTimeout.js +1 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +3 -3
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-fetch.js +2 -2
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.abort-current-script.js +4 -3
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.abort-current-script.js +5 -4
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-local-storage-item.js +1 -1
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.abort-current-script.js +4 -3
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.abort-current-script.js +4 -3
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.prevent-setTimeout.js → fra-0.prevent-requestAnimationFrame.js} +13 -49
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-setTimeout.js +2 -2
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-window-open.js +1 -1
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.remove-node-text.js → fra-0.remove-node-text.js} +3 -3
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.abort-current-script.js +6 -5
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.abort-on-property-read.js → hun-0.set-local-storage-item.js} +92 -62
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-current-script.js +7 -6
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-on-property-read.js +3 -3
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.addEventListener-defuser.js +2 -2
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-local-storage-item.js +2 -2
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-session-storage-item.js +2 -2
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.abort-current-script.js +4 -3
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +6 -5
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +2 -2
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.adjust-setTimeout.js +1 -1
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.href-sanitizer.js +2 -2
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-attr.js +2 -2
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-node-text.js +2 -2
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.abort-current-script.js +4 -3
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.abort-on-stack-trace.js → kor-1.spoof-css.js} +113 -112
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/ltu-0.abort-current-script.js +4 -3
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.abort-current-script.js +4 -3
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.prevent-setTimeout.js +2 -2
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.prevent-xhr.js → nld-0.prevent-xhr.js} +3 -3
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.abort-current-script.js +4 -3
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.abort-current-script.js +4 -3
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.abort-current-script.js +4 -3
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.prevent-setInterval.js +2 -2
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.prevent-setTimeout.js +2 -2
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.prevent-window-open.js +2 -2
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-current-script.js +5 -4
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +2 -2
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.adjust-setInterval.js +1 -1
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.json-prune-fetch-response.js +2 -2
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-fetch.js +3 -3
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +2 -2
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.prevent-xhr.js +1 -1
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-current-script.js +6 -5
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-write.js +2 -2
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +2 -2
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +2 -2
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +1 -1
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +2 -2
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +1 -1
  301. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.abort-current-script.js +5 -4
  302. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.noeval-if.js +1 -1
  303. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.set-constant.js +1 -1
  304. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-current-script.js +4 -3
  305. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +1 -1
  306. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-write.js +2 -2
  307. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +1 -1
  308. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.adjust-setTimeout.js → tur-0.adjust-setTimeout.js} +4 -4
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.m3u-prune.js +2 -2
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +2 -2
  312. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  313. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.abort-current-script.js +4 -3
  314. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +795 -0
  315. package/extensions/ublocklite/rulesets/scripting/scriptlet/{tur-0.set-attr.js → ublock-experimental.trusted-replace-node-text.js} +144 -119
  316. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +7 -6
  317. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  318. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  319. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +3 -3
  320. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  321. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
  322. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  323. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.close-window.js +3 -3
  324. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +2 -2
  325. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +1 -1
  326. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +2 -2
  327. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +2 -2
  328. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +2 -2
  329. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.nowebrtc.js +1 -1
  330. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.close-window.js → ublock-filters.prevent-canvas.js} +14 -21
  331. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
  332. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +2 -2
  333. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +3 -3
  334. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  335. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  336. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +2 -2
  337. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  338. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  339. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +3 -3
  340. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  341. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  342. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-session-storage-item.js +2 -2
  343. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-click-element.js +2 -2
  344. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-request.js +884 -0
  345. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-response.js +887 -0
  346. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-override-element-method.js +3 -3
  347. package/extensions/ublocklite/rulesets/scripting/scriptlet/{irn-0.prevent-fetch.js → ublock-filters.trusted-prevent-fetch.js} +7 -7
  348. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-fetch-response.js +2 -2
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  351. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +3 -3
  352. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-attr.js +2 -2
  353. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +4 -4
  354. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie.js +3 -3
  355. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +1 -1
  356. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
  357. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-current-script.js +4 -3
  358. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-read.js +1 -1
  359. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +6 -5
  360. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  361. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +1 -1
  362. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  363. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  364. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  365. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  366. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  367. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  368. package/extensions/ublocklite/rulesets/scripting/specific/cze-0.js +1 -1
  369. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  370. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  371. package/extensions/ublocklite/rulesets/scripting/{declarative/ubol-tests.js → specific/easyprivacy.js} +7 -7
  372. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  373. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  374. package/extensions/ublocklite/rulesets/scripting/specific/hrv-0.js +3 -3
  375. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  376. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  377. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  378. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  379. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  380. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  381. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  382. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  383. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  384. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  385. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  386. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  387. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  388. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  389. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  390. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  391. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  392. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  393. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  394. package/extensions/ublocklite/rulesets/scriptlet-details.json +265 -553
  395. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +6 -1
  396. package/extensions/ublocklite/rulesets/strictblock/annoyances-cookies.json +0 -1
  397. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +235 -1
  398. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +5 -41
  399. package/extensions/ublocklite/rulesets/strictblock/easylist.json +13 -14
  400. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +53 -3
  401. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +236 -31
  402. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -0
  403. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +8 -251
  404. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +174 -166
  405. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +4 -0
  406. package/extensions/ublocklite/rulesets/strictblock/mkd-0.json +1 -0
  407. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
  408. package/extensions/ublocklite/rulesets/strictblock/pgl.json +29 -12
  409. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +1 -0
  410. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +13773 -14561
  411. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +3 -55
  412. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +0 -1
  413. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +646 -641
  414. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  415. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +1 -4
  416. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +432 -1025
  417. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +2 -2
  418. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +60 -2
  419. package/extensions/ublocklite/ublock.zip +0 -0
  420. package/extensions/ublocklite/web_accessible_resources/fingerprint2.js +1 -1
  421. package/package.json +12 -12
  422. package/src/config.ts +1 -1
  423. package/src/http.ts +5 -0
  424. package/src/limiter.spec.ts +1 -1
  425. package/src/routes/chrome/tests/content.spec.ts +12 -12
  426. package/src/routes/chrome/tests/page-websocket.spec.ts +3 -3
  427. package/src/routes/chrome/tests/pdf.spec.ts +13 -13
  428. package/src/routes/chrome/tests/performance.spec.ts +4 -4
  429. package/src/routes/chrome/tests/scrape.spec.ts +13 -13
  430. package/src/routes/chrome/tests/screenshot.spec.ts +14 -14
  431. package/src/routes/chromium/tests/content.spec.ts +13 -13
  432. package/src/routes/chromium/tests/page-websocket.spec.ts +3 -3
  433. package/src/routes/chromium/tests/pdf.spec.ts +13 -13
  434. package/src/routes/chromium/tests/performance.spec.ts +4 -4
  435. package/src/routes/chromium/tests/scrape.spec.ts +13 -13
  436. package/src/routes/chromium/tests/screenshot.spec.ts +14 -14
  437. package/src/routes/edge/tests/content.spec.ts +12 -12
  438. package/src/routes/edge/tests/page-websocket.spec.ts +3 -3
  439. package/src/routes/edge/tests/pdf.spec.ts +13 -13
  440. package/src/routes/edge/tests/performance.spec.ts +4 -4
  441. package/src/routes/edge/tests/scrape.spec.ts +13 -13
  442. package/src/routes/edge/tests/screenshot.spec.ts +14 -14
  443. package/src/routes/management/http/kill.get.ts +1 -1
  444. package/src/routes/management/http/pressure.get.ts +15 -3
  445. package/src/routes/management/http/sessions.get.ts +1 -1
  446. package/src/routes/management/tests/management.spec.ts +13 -13
  447. package/src/server.ts +17 -3
  448. package/src/shim.spec.ts +40 -1
  449. package/src/shim.ts +17 -0
  450. package/src/types.ts +25 -0
  451. package/src/utils.ts +1 -1
  452. package/static/docs/swagger.json +247 -38
  453. package/static/docs/swagger.min.json +246 -37
  454. package/static/function/client.js +46 -8
  455. package/static/function/index.html +46 -8
  456. package/extensions/ublocklite/js/scripting/css-declarative.js +0 -116
  457. package/extensions/ublocklite/rulesets/modify-headers/irn-0.json +0 -45
  458. package/extensions/ublocklite/rulesets/redirect/irn-0.json +0 -73
  459. package/extensions/ublocklite/rulesets/regex/irn-0.json +0 -22
  460. package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +0 -42
  461. package/extensions/ublocklite/rulesets/scripting/declarative/alb-0.js +0 -42
  462. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +0 -42
  463. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-others.js +0 -42
  464. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +0 -42
  465. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-social.js +0 -42
  466. package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +0 -42
  467. package/extensions/ublocklite/rulesets/scripting/declarative/cze-0.js +0 -42
  468. package/extensions/ublocklite/rulesets/scripting/declarative/easylist.js +0 -42
  469. package/extensions/ublocklite/rulesets/scripting/declarative/est-0.js +0 -42
  470. package/extensions/ublocklite/rulesets/scripting/declarative/fin-0.js +0 -42
  471. package/extensions/ublocklite/rulesets/scripting/declarative/fra-0.js +0 -42
  472. package/extensions/ublocklite/rulesets/scripting/declarative/grc-0.js +0 -42
  473. package/extensions/ublocklite/rulesets/scripting/declarative/hrv-0.js +0 -42
  474. package/extensions/ublocklite/rulesets/scripting/declarative/hun-0.js +0 -42
  475. package/extensions/ublocklite/rulesets/scripting/declarative/idn-0.js +0 -42
  476. package/extensions/ublocklite/rulesets/scripting/declarative/irn-0.js +0 -42
  477. package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +0 -42
  478. package/extensions/ublocklite/rulesets/scripting/declarative/kor-1.js +0 -42
  479. package/extensions/ublocklite/rulesets/scripting/declarative/ltu-0.js +0 -42
  480. package/extensions/ublocklite/rulesets/scripting/declarative/nld-0.js +0 -42
  481. package/extensions/ublocklite/rulesets/scripting/declarative/nor-0.js +0 -42
  482. package/extensions/ublocklite/rulesets/scripting/declarative/pol-0.js +0 -42
  483. package/extensions/ublocklite/rulesets/scripting/declarative/rou-1.js +0 -42
  484. package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +0 -42
  485. package/extensions/ublocklite/rulesets/scripting/declarative/rus-1.js +0 -42
  486. package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +0 -42
  487. package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +0 -42
  488. package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +0 -42
  489. package/extensions/ublocklite/rulesets/scripting/declarative/ublock-badware.js +0 -42
  490. package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +0 -42
  491. package/extensions/ublocklite/rulesets/scripting/declarative/ukr-0.js +0 -42
  492. package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +0 -42
  493. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-fetch.js +0 -553
  494. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +0 -451
  495. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-write.js +0 -347
  496. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +0 -498
  497. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setInterval.js +0 -332
  498. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +0 -541
  499. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.json-prune.js +0 -506
  500. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-window-open.js +0 -471
  501. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-attr.js +0 -405
  502. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +0 -376
  503. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +0 -541
@@ -0,0 +1,821 @@
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
+ // Important!
23
+ // Isolate from global scope
24
+ (function uBOL_cssProceduralAPI() {
25
+
26
+ if ( self.ProceduralFiltererAPI !== undefined ) {
27
+ if ( self.ProceduralFiltererAPI instanceof Promise === false ) { return; }
28
+ }
29
+
30
+ /******************************************************************************/
31
+
32
+ const uBOL_injectCSS = css => {
33
+ chrome.runtime.sendMessage({
34
+ what: 'insertCSS',
35
+ css,
36
+ }).catch(( ) => {
37
+ });
38
+ };
39
+
40
+ const nonVisualElements = {
41
+ head: true,
42
+ link: true,
43
+ meta: true,
44
+ script: true,
45
+ style: true,
46
+ };
47
+
48
+ const regexFromString = (s, exact = false) => {
49
+ if ( s === '' ) { return /^/; }
50
+ const match = /^\/(.+)\/([imu]*)$/.exec(s);
51
+ if ( match !== null ) {
52
+ return new RegExp(match[1], match[2] || undefined);
53
+ }
54
+ const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
55
+ return new RegExp(exact ? `^${reStr}$` : reStr);
56
+ };
57
+
58
+ const randomToken = ( ) => {
59
+ const n = Math.random();
60
+ return String.fromCharCode(n * 25 + 97) +
61
+ Math.floor(
62
+ (0.25 + n * 0.75) * Number.MAX_SAFE_INTEGER
63
+ ).toString(36).slice(-8);
64
+ };
65
+
66
+ /******************************************************************************/
67
+
68
+ // 'P' stands for 'Procedural'
69
+
70
+ class PSelectorTask {
71
+ destructor() {
72
+ }
73
+ begin() {
74
+ }
75
+ end() {
76
+ }
77
+ }
78
+
79
+ /******************************************************************************/
80
+
81
+ class PSelectorVoidTask extends PSelectorTask {
82
+ constructor(filterer, task) {
83
+ super();
84
+ console.info(`uBO: :${task[0]}() operator does not exist`);
85
+ }
86
+ transpose() {
87
+ }
88
+ }
89
+
90
+ /******************************************************************************/
91
+
92
+ class PSelectorHasTextTask extends PSelectorTask {
93
+ constructor(filterer, task) {
94
+ super();
95
+ this.needle = regexFromString(task[1]);
96
+ }
97
+ transpose(node, output) {
98
+ if ( this.needle.test(node.textContent) ) {
99
+ output.push(node);
100
+ }
101
+ }
102
+ }
103
+
104
+ /******************************************************************************/
105
+
106
+ class PSelectorIfTask extends PSelectorTask {
107
+ constructor(filterer, task) {
108
+ super();
109
+ this.pselector = new PSelector(filterer, task[1]);
110
+ }
111
+ transpose(node, output) {
112
+ if ( this.pselector.test(node) === this.target ) {
113
+ output.push(node);
114
+ }
115
+ }
116
+ target = true;
117
+ }
118
+
119
+ class PSelectorIfNotTask extends PSelectorIfTask {
120
+ target = false;
121
+ }
122
+
123
+ /******************************************************************************/
124
+
125
+ class PSelectorMatchesAttrTask extends PSelectorTask {
126
+ constructor(filterer, task) {
127
+ super();
128
+ this.reAttr = regexFromString(task[1].attr, true);
129
+ this.reValue = regexFromString(task[1].value, true);
130
+ }
131
+ transpose(node, output) {
132
+ if ( typeof node.getAttributeNames !== 'function' ) { return; }
133
+ const attrs = node.getAttributeNames();
134
+ for ( const attr of attrs ) {
135
+ if ( this.reAttr.test(attr) === false ) { continue; }
136
+ if ( this.reValue.test(node.getAttribute(attr)) === false ) { continue; }
137
+ output.push(node);
138
+ }
139
+ }
140
+ }
141
+
142
+ /******************************************************************************/
143
+
144
+ class PSelectorMatchesCSSTask extends PSelectorTask {
145
+ constructor(filterer, task) {
146
+ super();
147
+ this.name = task[1].name;
148
+ this.pseudo = task[1].pseudo ? `::${task[1].pseudo}` : null;
149
+ let arg0 = task[1].value, arg1;
150
+ if ( Array.isArray(arg0) ) {
151
+ arg1 = arg0[1]; arg0 = arg0[0];
152
+ }
153
+ this.value = new RegExp(arg0, arg1);
154
+ }
155
+ transpose(node, output) {
156
+ const style = window.getComputedStyle(node, this.pseudo);
157
+ if ( style !== null && this.value.test(style[this.name]) ) {
158
+ output.push(node);
159
+ }
160
+ }
161
+ }
162
+ class PSelectorMatchesCSSAfterTask extends PSelectorMatchesCSSTask {
163
+ constructor(filterer, task) {
164
+ super(filterer, task);
165
+ this.pseudo = '::after';
166
+ }
167
+ }
168
+
169
+ class PSelectorMatchesCSSBeforeTask extends PSelectorMatchesCSSTask {
170
+ constructor(filterer, task) {
171
+ super(filterer, task);
172
+ this.pseudo = '::before';
173
+ }
174
+ }
175
+
176
+ /******************************************************************************/
177
+
178
+ class PSelectorMatchesMediaTask extends PSelectorTask {
179
+ constructor(filterer, task) {
180
+ super();
181
+ this.filterer = filterer;
182
+ this.mql = window.matchMedia(task[1]);
183
+ if ( this.mql.media === 'not all' ) { return; }
184
+ this.boundHandler = this.handler.bind(this);
185
+ this.mql.addEventListener('change', this.boundHandler);
186
+ }
187
+ destructor() {
188
+ super.destructor();
189
+ this.mql.removeEventListener('change', this.boundHandler);
190
+ }
191
+ transpose(node, output) {
192
+ if ( this.mql.matches === false ) { return; }
193
+ output.push(node);
194
+ }
195
+ handler() {
196
+ if ( this.filterer instanceof Object === false ) { return; }
197
+ this.filterer.uBOL_DOMChanged();
198
+ }
199
+ }
200
+
201
+ /******************************************************************************/
202
+
203
+ class PSelectorMatchesPathTask extends PSelectorTask {
204
+ constructor(filterer, task) {
205
+ super();
206
+ this.needle = regexFromString(
207
+ task[1].replace(/\P{ASCII}/gu, s => encodeURIComponent(s))
208
+ );
209
+ }
210
+ transpose(node, output) {
211
+ if ( this.needle.test(self.location.pathname + self.location.search) ) {
212
+ output.push(node);
213
+ }
214
+ }
215
+ }
216
+
217
+ /******************************************************************************/
218
+
219
+ class PSelectorMatchesPropTask extends PSelectorTask {
220
+ constructor(filterer, task) {
221
+ super();
222
+ this.props = task[1].attr.split('.');
223
+ this.reValue = task[1].value !== ''
224
+ ? regexFromString(task[1].value, true)
225
+ : null;
226
+ }
227
+ transpose(node, output) {
228
+ let value = node;
229
+ for ( const prop of this.props ) {
230
+ if ( value === undefined ) { return; }
231
+ if ( value === null ) { return; }
232
+ value = value[prop];
233
+ }
234
+ if ( this.reValue === null ) {
235
+ if ( value === undefined ) { return; }
236
+ } else if ( this.reValue.test(value) === false ) {
237
+ return;
238
+ }
239
+ output.push(node);
240
+ }
241
+ }
242
+
243
+ /******************************************************************************/
244
+
245
+ class PSelectorMinTextLengthTask extends PSelectorTask {
246
+ constructor(filterer, task) {
247
+ super();
248
+ this.min = task[1];
249
+ }
250
+ transpose(node, output) {
251
+ if ( node.textContent.length >= this.min ) {
252
+ output.push(node);
253
+ }
254
+ }
255
+ }
256
+
257
+ /******************************************************************************/
258
+
259
+ class PSelectorOthersTask extends PSelectorTask {
260
+ constructor() {
261
+ super();
262
+ this.targets = new Set();
263
+ }
264
+ begin() {
265
+ this.targets.clear();
266
+ }
267
+ end(output) {
268
+ const toKeep = new Set(this.targets);
269
+ const toDiscard = new Set();
270
+ const body = document.body;
271
+ const head = document.head;
272
+ let discard = null;
273
+ for ( let keep of this.targets ) {
274
+ while ( keep !== null && keep !== body && keep !== head ) {
275
+ toKeep.add(keep);
276
+ toDiscard.delete(keep);
277
+ discard = keep.previousElementSibling;
278
+ while ( discard !== null ) {
279
+ if ( nonVisualElements[discard.localName] !== true ) {
280
+ if ( toKeep.has(discard) === false ) {
281
+ toDiscard.add(discard);
282
+ }
283
+ }
284
+ discard = discard.previousElementSibling;
285
+ }
286
+ discard = keep.nextElementSibling;
287
+ while ( discard !== null ) {
288
+ if ( nonVisualElements[discard.localName] !== true ) {
289
+ if ( toKeep.has(discard) === false ) {
290
+ toDiscard.add(discard);
291
+ }
292
+ }
293
+ discard = discard.nextElementSibling;
294
+ }
295
+ keep = keep.parentElement;
296
+ }
297
+ }
298
+ for ( discard of toDiscard ) {
299
+ output.push(discard);
300
+ }
301
+ this.targets.clear();
302
+ }
303
+ transpose(candidate) {
304
+ for ( const target of this.targets ) {
305
+ if ( target.contains(candidate) ) { return; }
306
+ if ( candidate.contains(target) ) {
307
+ this.targets.delete(target);
308
+ }
309
+ }
310
+ this.targets.add(candidate);
311
+ }
312
+ }
313
+
314
+ /******************************************************************************/
315
+
316
+ class PSelectorShadowTask extends PSelectorTask {
317
+ constructor(filterer, task) {
318
+ super();
319
+ this.selector = task[1];
320
+ }
321
+ transpose(node, output) {
322
+ const root = this.openOrClosedShadowRoot(node);
323
+ if ( root === null ) { return; }
324
+ const nodes = root.querySelectorAll(this.selector);
325
+ output.push(...nodes);
326
+ }
327
+ get openOrClosedShadowRoot() {
328
+ if ( PSelectorShadowTask.openOrClosedShadowRoot !== undefined ) {
329
+ return PSelectorShadowTask.openOrClosedShadowRoot;
330
+ }
331
+ if ( typeof chrome === 'object' && chrome !== null ) {
332
+ if ( chrome.dom instanceof Object ) {
333
+ if ( typeof chrome.dom.openOrClosedShadowRoot === 'function' ) {
334
+ PSelectorShadowTask.openOrClosedShadowRoot =
335
+ chrome.dom.openOrClosedShadowRoot;
336
+ return PSelectorShadowTask.openOrClosedShadowRoot;
337
+ }
338
+ }
339
+ }
340
+ PSelectorShadowTask.openOrClosedShadowRoot = node =>
341
+ node.openOrClosedShadowRoot || null;
342
+ return PSelectorShadowTask.openOrClosedShadowRoot;
343
+ }
344
+ }
345
+
346
+ /******************************************************************************/
347
+
348
+ // https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277
349
+ // Prepend `:scope ` if needed.
350
+ class PSelectorSpathTask extends PSelectorTask {
351
+ constructor(filterer, task) {
352
+ super();
353
+ this.spath = task[1];
354
+ this.nth = /^(?:\s*[+~]|:)/.test(this.spath);
355
+ if ( this.nth ) { return; }
356
+ if ( /^\s*>/.test(this.spath) ) {
357
+ this.spath = `:scope ${this.spath.trim()}`;
358
+ }
359
+ }
360
+ transpose(node, output) {
361
+ const nodes = this.nth
362
+ ? PSelectorSpathTask.qsa(node, this.spath)
363
+ : node.querySelectorAll(this.spath);
364
+ for ( const node of nodes ) {
365
+ output.push(node);
366
+ }
367
+ }
368
+ // Helper method for other operators.
369
+ static qsa(node, selector) {
370
+ const parent = node.parentElement;
371
+ if ( parent === null ) { return []; }
372
+ let pos = 1;
373
+ for (;;) {
374
+ node = node.previousElementSibling;
375
+ if ( node === null ) { break; }
376
+ pos += 1;
377
+ }
378
+ return parent.querySelectorAll(
379
+ `:scope > :nth-child(${pos})${selector}`
380
+ );
381
+ }
382
+ }
383
+
384
+ /******************************************************************************/
385
+
386
+ class PSelectorUpwardTask extends PSelectorTask {
387
+ constructor(filterer, task) {
388
+ super();
389
+ const arg = task[1];
390
+ if ( typeof arg === 'number' ) {
391
+ this.i = arg;
392
+ } else {
393
+ this.s = arg;
394
+ }
395
+ }
396
+ transpose(node, output) {
397
+ if ( this.s !== '' ) {
398
+ const parent = node.parentElement;
399
+ if ( parent === null ) { return; }
400
+ node = parent.closest(this.s);
401
+ if ( node === null ) { return; }
402
+ } else {
403
+ let nth = this.i;
404
+ for (;;) {
405
+ node = node.parentElement;
406
+ if ( node === null ) { return; }
407
+ nth -= 1;
408
+ if ( nth === 0 ) { break; }
409
+ }
410
+ }
411
+ output.push(node);
412
+ }
413
+ i = 0;
414
+ s = '';
415
+ }
416
+
417
+ /******************************************************************************/
418
+
419
+ class PSelectorWatchAttrs extends PSelectorTask {
420
+ constructor(filterer, task) {
421
+ super();
422
+ this.filterer = filterer;
423
+ this.observer = null;
424
+ this.observed = new WeakSet();
425
+ this.observerOptions = {
426
+ attributes: true,
427
+ subtree: true,
428
+ };
429
+ const attrs = task[1];
430
+ if ( Array.isArray(attrs) && attrs.length !== 0 ) {
431
+ this.observerOptions.attributeFilter = task[1];
432
+ }
433
+ }
434
+ destructor() {
435
+ super.destructor();
436
+ if ( this.observer ) {
437
+ this.observer.takeRecords();
438
+ this.observer.disconnect();
439
+ this.observer = null;
440
+ }
441
+ }
442
+ transpose(node, output) {
443
+ output.push(node);
444
+ if ( this.filterer instanceof Object === false ) { return; }
445
+ if ( this.observed.has(node) ) { return; }
446
+ if ( this.observer === null ) {
447
+ this.observer = new MutationObserver(( ) => {
448
+ this.filterer.uBOL_DOMChanged();
449
+ });
450
+ }
451
+ this.observer.observe(node, this.observerOptions);
452
+ this.observed.add(node);
453
+ }
454
+ }
455
+
456
+ /******************************************************************************/
457
+
458
+ class PSelectorXpathTask extends PSelectorTask {
459
+ constructor(filterer, task) {
460
+ super();
461
+ this.xpe = document.createExpression(task[1], null);
462
+ this.xpr = null;
463
+ }
464
+ transpose(node, output) {
465
+ this.xpr = this.xpe.evaluate(
466
+ node,
467
+ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
468
+ this.xpr
469
+ );
470
+ let j = this.xpr.snapshotLength;
471
+ while ( j-- ) {
472
+ const node = this.xpr.snapshotItem(j);
473
+ if ( node.nodeType === 1 ) {
474
+ output.push(node);
475
+ }
476
+ }
477
+ }
478
+ }
479
+
480
+ /******************************************************************************/
481
+
482
+ class PSelector {
483
+ constructor(filterer, o) {
484
+ this.selector = o.selector;
485
+ this.tasks = [];
486
+ const tasks = [];
487
+ if ( Array.isArray(o.tasks) === false ) { return; }
488
+ for ( const task of o.tasks ) {
489
+ const ctor = PSelector.operatorToTaskMap.get(task[0]) || PSelectorVoidTask;
490
+ tasks.push(new ctor(filterer, task));
491
+ }
492
+ this.tasks = tasks;
493
+ }
494
+ destructor() {
495
+ for ( const task of this.tasks ) {
496
+ task.destructor();
497
+ }
498
+ }
499
+ prime(input) {
500
+ const root = input || document;
501
+ if ( this.selector === '' ) { return [ root ]; }
502
+ if ( input !== document ) {
503
+ const c0 = this.selector.charCodeAt(0);
504
+ if ( c0 === 0x2B /* + */ || c0 === 0x7E /* ~ */ ) {
505
+ return Array.from(PSelectorSpathTask.qsa(input, this.selector));
506
+ } else if ( c0 === 0x3E /* > */ ) {
507
+ return Array.from(input.querySelectorAll(`:scope ${this.selector}`));
508
+ }
509
+ }
510
+ return Array.from(root.querySelectorAll(this.selector));
511
+ }
512
+ exec(input) {
513
+ let nodes = this.prime(input);
514
+ for ( const task of this.tasks ) {
515
+ if ( nodes.length === 0 ) { break; }
516
+ const transposed = [];
517
+ task.begin();
518
+ for ( const node of nodes ) {
519
+ task.transpose(node, transposed);
520
+ }
521
+ task.end(transposed);
522
+ nodes = transposed;
523
+ }
524
+ return nodes;
525
+ }
526
+ test(input) {
527
+ const nodes = this.prime(input);
528
+ for ( const node of nodes ) {
529
+ let output = [ node ];
530
+ for ( const task of this.tasks ) {
531
+ const transposed = [];
532
+ task.begin();
533
+ for ( const node of output ) {
534
+ task.transpose(node, transposed);
535
+ }
536
+ task.end(transposed);
537
+ output = transposed;
538
+ if ( output.length === 0 ) { break; }
539
+ }
540
+ if ( output.length !== 0 ) { return true; }
541
+ }
542
+ return false;
543
+ }
544
+ static operatorToTaskMap = new Map([
545
+ [ 'has', PSelectorIfTask ],
546
+ [ 'has-text', PSelectorHasTextTask ],
547
+ [ 'if', PSelectorIfTask ],
548
+ [ 'if-not', PSelectorIfNotTask ],
549
+ [ 'matches-attr', PSelectorMatchesAttrTask ],
550
+ [ 'matches-css', PSelectorMatchesCSSTask ],
551
+ [ 'matches-css-after', PSelectorMatchesCSSAfterTask ],
552
+ [ 'matches-css-before', PSelectorMatchesCSSBeforeTask ],
553
+ [ 'matches-media', PSelectorMatchesMediaTask ],
554
+ [ 'matches-path', PSelectorMatchesPathTask ],
555
+ [ 'matches-prop', PSelectorMatchesPropTask ],
556
+ [ 'min-text-length', PSelectorMinTextLengthTask ],
557
+ [ 'not', PSelectorIfNotTask ],
558
+ [ 'others', PSelectorOthersTask ],
559
+ [ 'shadow', PSelectorShadowTask ],
560
+ [ 'spath', PSelectorSpathTask ],
561
+ [ 'upward', PSelectorUpwardTask ],
562
+ [ 'watch-attr', PSelectorWatchAttrs ],
563
+ [ 'xpath', PSelectorXpathTask ],
564
+ ]);
565
+ }
566
+
567
+ /******************************************************************************/
568
+
569
+ class PSelectorRoot extends PSelector {
570
+ constructor(filterer, o) {
571
+ super(filterer, o);
572
+ this.budget = 200; // I arbitrary picked a 1/5 second
573
+ this.raw = o.raw;
574
+ this.cost = 0;
575
+ this.lastAllowanceTime = 0;
576
+ this.action = o.action;
577
+ }
578
+ prime(input) {
579
+ try {
580
+ return super.prime(input);
581
+ } catch {
582
+ }
583
+ return [];
584
+ }
585
+ exec(input) {
586
+ try {
587
+ return super.exec(input);
588
+ } catch {
589
+ }
590
+ return [];
591
+ }
592
+ }
593
+
594
+ /******************************************************************************/
595
+
596
+ class ProceduralFilterer {
597
+ constructor() {
598
+ this.selectors = [];
599
+ this.styleTokenMap = new Map();
600
+ this.styledNodes = new Set();
601
+ this.timer = undefined;
602
+ this.hideStyle = 'display:none!important;';
603
+ }
604
+
605
+ async reset() {
606
+ if ( this.timer ) {
607
+ self.cancelAnimationFrame(this.timer);
608
+ this.timer = undefined;
609
+ }
610
+ for ( const pselector of this.selectors.values() ) {
611
+ pselector.destructor();
612
+ }
613
+ this.selectors.length = 0;
614
+ const promises = [];
615
+ for ( const [ style, token ] of this.styleTokenMap ) {
616
+ for ( const elem of this.styledNodes ) {
617
+ elem.removeAttribute(token);
618
+ }
619
+ const css = `[${token}]\n{${style}}\n`;
620
+ promises.push(
621
+ chrome.runtime.sendMessage({ what: 'removeCSS', css }).catch(( ) => { })
622
+ );
623
+ }
624
+ this.styleTokenMap.clear();
625
+ this.styledNodes.clear();
626
+ return Promise.all(promises);
627
+ }
628
+
629
+ addSelectors(selectors) {
630
+ for ( const selector of selectors ) {
631
+ const pselector = new PSelectorRoot(this, selector);
632
+ this.primeProceduralSelector(pselector);
633
+ this.selectors.push(pselector);
634
+ }
635
+ }
636
+
637
+ // This allows to perform potentially expensive initialization steps
638
+ // before the filters are ready to be applied.
639
+ primeProceduralSelector(pselector) {
640
+ if ( pselector.action === undefined ) {
641
+ this.styleTokenFromStyle(this.hideStyle);
642
+ } else if ( pselector.action[0] === 'style' ) {
643
+ this.styleTokenFromStyle(pselector.action[1]);
644
+ }
645
+ return pselector;
646
+ }
647
+
648
+ uBOL_commit() {
649
+ if ( this.timer !== undefined ) {
650
+ self.cancelAnimationFrame(this.timer);
651
+ this.timer = undefined;
652
+ }
653
+
654
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/341
655
+ // Be ready to unhide nodes which no longer matches any of
656
+ // the procedural selectors.
657
+ const toUnstyle = this.styledNodes;
658
+ this.styledNodes = new Set();
659
+
660
+ let t0 = Date.now();
661
+
662
+ for ( const pselector of this.selectors.values() ) {
663
+ const allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000);
664
+ if ( allowance >= 1 ) {
665
+ pselector.budget += allowance * 50;
666
+ if ( pselector.budget > 200 ) { pselector.budget = 200; }
667
+ pselector.lastAllowanceTime = t0;
668
+ }
669
+ if ( pselector.budget <= 0 ) { continue; }
670
+ const nodes = pselector.exec();
671
+ const t1 = Date.now();
672
+ pselector.budget += t0 - t1;
673
+ if ( pselector.budget < -500 ) {
674
+ console.info('uBOL: disabling %s', pselector.raw);
675
+ pselector.budget = -0x7FFFFFFF;
676
+ }
677
+ t0 = t1;
678
+ if ( nodes.length === 0 ) { continue; }
679
+ this.processNodes(nodes, pselector.action);
680
+ }
681
+
682
+ this.unprocessNodes(toUnstyle);
683
+ }
684
+
685
+ styleTokenFromStyle(style) {
686
+ if ( style === undefined ) { return; }
687
+ let styleToken = this.styleTokenMap.get(style);
688
+ if ( styleToken !== undefined ) { return styleToken; }
689
+ styleToken = randomToken();
690
+ this.styleTokenMap.set(style, styleToken);
691
+ uBOL_injectCSS(`[${styleToken}]\n{${style}}\n`);
692
+ return styleToken;
693
+ }
694
+
695
+ processNodes(nodes, action) {
696
+ const op = action && action[0] || '';
697
+ const arg = op !== '' ? action[1] : '';
698
+ switch ( op ) {
699
+ case '':
700
+ /* fall through */
701
+ case 'style': {
702
+ const styleToken = this.styleTokenFromStyle(
703
+ arg === '' ? this.hideStyle : arg
704
+ );
705
+ for ( const node of nodes ) {
706
+ node.setAttribute(styleToken, '');
707
+ this.styledNodes.add(node);
708
+ }
709
+ break;
710
+ }
711
+ case 'remove': {
712
+ for ( const node of nodes ) {
713
+ node.remove();
714
+ node.textContent = '';
715
+ }
716
+ break;
717
+ }
718
+ case 'remove-attr': {
719
+ const reAttr = regexFromString(arg, true);
720
+ for ( const node of nodes ) {
721
+ for ( const name of node.getAttributeNames() ) {
722
+ if ( reAttr.test(name) === false ) { continue; }
723
+ node.removeAttribute(name);
724
+ }
725
+ }
726
+ break;
727
+ }
728
+ case 'remove-class': {
729
+ const reClass = regexFromString(arg, true);
730
+ for ( const node of nodes ) {
731
+ const cl = node.classList;
732
+ for ( const name of cl.values() ) {
733
+ if ( reClass.test(name) === false ) { continue; }
734
+ cl.remove(name);
735
+ }
736
+ }
737
+ break;
738
+ }
739
+ default:
740
+ break;
741
+ }
742
+ }
743
+
744
+ unprocessNodes(nodes) {
745
+ const tokens = Array.from(this.styleTokenMap.values());
746
+ for ( const node of nodes ) {
747
+ if ( this.styledNodes.has(node) ) { continue; }
748
+ for ( const token of tokens ) {
749
+ node.removeAttribute(token);
750
+ }
751
+ }
752
+ }
753
+
754
+ uBOL_DOMChanged() {
755
+ if ( this.timer !== undefined ) { return; }
756
+ this.timer = self.requestAnimationFrame(( ) => {
757
+ this.timer = undefined;
758
+ this.uBOL_commit();
759
+ });
760
+ }
761
+ }
762
+
763
+ /******************************************************************************/
764
+
765
+ self.ProceduralFiltererAPI = class {
766
+ constructor() {
767
+ this.proceduralFilterer = null;
768
+ this.domObserver = null;
769
+ }
770
+
771
+ async reset() {
772
+ if ( this.domObserver ) {
773
+ this.domObserver.takeRecords();
774
+ this.domObserver.disconnect();
775
+ this.domObserver = null;
776
+ }
777
+ if ( this.proceduralFilterer ) {
778
+ await this.proceduralFilterer.reset();
779
+ this.proceduralFilterer = null;
780
+ }
781
+ }
782
+
783
+ addSelectors(selectors) {
784
+ if ( this.proceduralFilterer === null ) {
785
+ this.proceduralFilterer = new ProceduralFilterer();
786
+ }
787
+ if ( this.domObserver === null ) {
788
+ this.domObserver = new MutationObserver(mutations => {
789
+ this.onDOMChanged(mutations);
790
+ });
791
+ this.domObserver.observe(document, { childList: true, subtree: true });
792
+ }
793
+ this.proceduralFilterer.addSelectors(selectors);
794
+ this.proceduralFilterer.uBOL_commit();
795
+ }
796
+
797
+ qsa(selector) {
798
+ const o = JSON.parse(selector);
799
+ const pselector = new PSelectorRoot(null, o);
800
+ return pselector.exec();
801
+ }
802
+
803
+ onDOMChanged(mutations) {
804
+ for ( const mutation of mutations ) {
805
+ for ( const added of mutation.addedNodes ) {
806
+ if ( added.nodeType !== 1 ) { continue; }
807
+ return this.proceduralFilterer.uBOL_DOMChanged();
808
+ }
809
+ for ( const removed of mutation.removedNodes ) {
810
+ if ( removed.nodeType !== 1 ) { continue; }
811
+ return this.proceduralFilterer.uBOL_DOMChanged();
812
+ }
813
+ }
814
+ }
815
+ };
816
+
817
+ /******************************************************************************/
818
+
819
+ })();
820
+
821
+ void 0;