@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
@@ -40,7 +40,7 @@ const lookupHostname = (hostname, details, out) => {
40
40
  for (;;) {
41
41
  const argi = argsSeqs[seqi++];
42
42
  const done = argi > 0;
43
- out.push(...argsList[done ? argi : -argi]);
43
+ out.push(...JSON.parse(argsList[done ? argi : -argi]));
44
44
  if ( done ) { break; }
45
45
  }
46
46
  };
@@ -48,747 +48,91 @@ const lookupHostname = (hostname, details, out) => {
48
48
  const lookupAll = hostname => {
49
49
  for ( const details of proceduralImports ) {
50
50
  lookupHostname(hostname, details, selectors);
51
- lookupHostname(`~${hostname}`, details, exceptions);
51
+ const matches = [];
52
+ lookupHostname(`~${hostname}`, details, matches);
53
+ if ( matches.length === 0 ) { continue; }
54
+ exceptions.push(...matches.map(a => JSON.stringify(a)));
52
55
  }
53
56
  };
54
57
 
55
58
  self.isolatedAPI.forEachHostname(lookupAll, {
56
59
  hasEntities: proceduralImports.some(a => a.hasEntities)
57
60
  });
58
-
59
61
  proceduralImports.length = 0;
60
62
 
61
63
  const exceptedSelectors = exceptions.length !== 0
62
- ? selectors.filter(a => exceptions.includes(a) === false)
64
+ ? selectors.filter(a => exceptions.includes(JSON.stringify(a)) === false)
63
65
  : selectors;
64
66
  if ( exceptedSelectors.length === 0 ) { return; }
65
67
 
66
- /******************************************************************************/
67
-
68
- const uBOL_injectCSS = css => {
69
- chrome.runtime.sendMessage({
70
- what: 'insertCSS',
71
- css,
72
- }).catch(( ) => {
73
- });
74
- };
75
-
76
- const nonVisualElements = {
77
- head: true,
78
- link: true,
79
- meta: true,
80
- script: true,
81
- style: true,
82
- };
83
-
84
- const regexFromString = (s, exact = false) => {
85
- if ( s === '' ) { return /^/; }
86
- const match = /^\/(.+)\/([imu]*)$/.exec(s);
87
- if ( match !== null ) {
88
- return new RegExp(match[1], match[2] || undefined);
89
- }
90
- const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
91
- return new RegExp(exact ? `^${reStr}$` : reStr);
92
- };
93
-
94
- /******************************************************************************/
95
-
96
- // 'P' stands for 'Procedural'
97
-
98
- class PSelectorTask {
99
- begin() {
100
- }
101
- end() {
102
- }
103
- }
104
-
105
- /******************************************************************************/
106
-
107
- class PSelectorVoidTask extends PSelectorTask {
108
- constructor(task) {
109
- super();
110
- console.info(`uBO: :${task[0]}() operator does not exist`);
111
- }
112
- transpose() {
113
- }
114
- }
115
-
116
- /******************************************************************************/
117
-
118
- class PSelectorHasTextTask extends PSelectorTask {
119
- constructor(task) {
120
- super();
121
- this.needle = regexFromString(task[1]);
122
- }
123
- transpose(node, output) {
124
- if ( this.needle.test(node.textContent) ) {
125
- output.push(node);
126
- }
127
- }
128
- }
129
-
130
- /******************************************************************************/
131
-
132
- class PSelectorIfTask extends PSelectorTask {
133
- constructor(task) {
134
- super();
135
- this.pselector = new PSelector(task[1]);
136
- }
137
- transpose(node, output) {
138
- if ( this.pselector.test(node) === this.target ) {
139
- output.push(node);
140
- }
141
- }
142
- }
143
- PSelectorIfTask.prototype.target = true;
144
-
145
- class PSelectorIfNotTask extends PSelectorIfTask {
146
- }
147
- PSelectorIfNotTask.prototype.target = false;
148
-
149
- /******************************************************************************/
150
-
151
- class PSelectorMatchesAttrTask extends PSelectorTask {
152
- constructor(task) {
153
- super();
154
- this.reAttr = regexFromString(task[1].attr, true);
155
- this.reValue = regexFromString(task[1].value, true);
156
- }
157
- transpose(node, output) {
158
- const attrs = node.getAttributeNames();
159
- for ( const attr of attrs ) {
160
- if ( this.reAttr.test(attr) === false ) { continue; }
161
- if ( this.reValue.test(node.getAttribute(attr)) === false ) { continue; }
162
- output.push(node);
163
- }
164
- }
165
- }
166
-
167
- /******************************************************************************/
168
-
169
- class PSelectorMatchesCSSTask extends PSelectorTask {
170
- constructor(task) {
171
- super();
172
- this.name = task[1].name;
173
- this.pseudo = task[1].pseudo ? `::${task[1].pseudo}` : null;
174
- let arg0 = task[1].value, arg1;
175
- if ( Array.isArray(arg0) ) {
176
- arg1 = arg0[1]; arg0 = arg0[0];
177
- }
178
- this.value = new RegExp(arg0, arg1);
179
- }
180
- transpose(node, output) {
181
- const style = window.getComputedStyle(node, this.pseudo);
182
- if ( style !== null && this.value.test(style[this.name]) ) {
183
- output.push(node);
184
- }
185
- }
186
- }
187
- class PSelectorMatchesCSSAfterTask extends PSelectorMatchesCSSTask {
188
- constructor(task) {
189
- super(task);
190
- this.pseudo = '::after';
191
- }
192
- }
193
-
194
- class PSelectorMatchesCSSBeforeTask extends PSelectorMatchesCSSTask {
195
- constructor(task) {
196
- super(task);
197
- this.pseudo = '::before';
198
- }
199
- }
200
-
201
- /******************************************************************************/
202
-
203
- class PSelectorMatchesMediaTask extends PSelectorTask {
204
- constructor(task) {
205
- super();
206
- this.mql = window.matchMedia(task[1]);
207
- if ( this.mql.media === 'not all' ) { return; }
208
- this.mql.addEventListener('change', ( ) => {
209
- if ( proceduralFilterer instanceof Object === false ) { return; }
210
- proceduralFilterer.onDOMChanged();
211
- });
212
- }
213
- transpose(node, output) {
214
- if ( this.mql.matches === false ) { return; }
215
- output.push(node);
216
- }
217
- }
218
-
219
- /******************************************************************************/
220
-
221
- class PSelectorMatchesPathTask extends PSelectorTask {
222
- constructor(task) {
223
- super();
224
- this.needle = regexFromString(
225
- task[1].replace(/\P{ASCII}/gu, s => encodeURIComponent(s))
226
- );
227
- }
228
- transpose(node, output) {
229
- if ( this.needle.test(self.location.pathname + self.location.search) ) {
230
- output.push(node);
231
- }
232
- }
233
- }
234
-
235
- /******************************************************************************/
236
-
237
- class PSelectorMatchesPropTask extends PSelectorTask {
238
- constructor(task) {
239
- super();
240
- this.props = task[1].attr.split('.');
241
- this.reValue = task[1].value !== ''
242
- ? regexFromString(task[1].value, true)
243
- : null;
244
- }
245
- transpose(node, output) {
246
- let value = node;
247
- for ( const prop of this.props ) {
248
- if ( value === undefined ) { return; }
249
- if ( value === null ) { return; }
250
- value = value[prop];
251
- }
252
- if ( this.reValue === null ) {
253
- if ( value === undefined ) { return; }
254
- } else if ( this.reValue.test(value) === false ) {
255
- return;
256
- }
257
- output.push(node);
258
- }
259
- }
260
-
261
- /******************************************************************************/
262
-
263
- class PSelectorMinTextLengthTask extends PSelectorTask {
264
- constructor(task) {
265
- super();
266
- this.min = task[1];
267
- }
268
- transpose(node, output) {
269
- if ( node.textContent.length >= this.min ) {
270
- output.push(node);
271
- }
272
- }
273
- }
274
-
275
- /******************************************************************************/
276
-
277
- class PSelectorOthersTask extends PSelectorTask {
278
- constructor() {
279
- super();
280
- this.targets = new Set();
281
- }
282
- begin() {
283
- this.targets.clear();
284
- }
285
- end(output) {
286
- const toKeep = new Set(this.targets);
287
- const toDiscard = new Set();
288
- const body = document.body;
289
- const head = document.head;
290
- let discard = null;
291
- for ( let keep of this.targets ) {
292
- while ( keep !== null && keep !== body && keep !== head ) {
293
- toKeep.add(keep);
294
- toDiscard.delete(keep);
295
- discard = keep.previousElementSibling;
296
- while ( discard !== null ) {
297
- if ( nonVisualElements[discard.localName] !== true ) {
298
- if ( toKeep.has(discard) === false ) {
299
- toDiscard.add(discard);
300
- }
301
- }
302
- discard = discard.previousElementSibling;
303
- }
304
- discard = keep.nextElementSibling;
305
- while ( discard !== null ) {
306
- if ( nonVisualElements[discard.localName] !== true ) {
307
- if ( toKeep.has(discard) === false ) {
308
- toDiscard.add(discard);
309
- }
310
- }
311
- discard = discard.nextElementSibling;
312
- }
313
- keep = keep.parentElement;
314
- }
315
- }
316
- for ( discard of toDiscard ) {
317
- output.push(discard);
318
- }
319
- this.targets.clear();
320
- }
321
- transpose(candidate) {
322
- for ( const target of this.targets ) {
323
- if ( target.contains(candidate) ) { return; }
324
- if ( candidate.contains(target) ) {
325
- this.targets.delete(target);
68
+ const declaratives = exceptedSelectors.filter(a => a.cssable);
69
+ if ( declaratives.length !== 0 ) {
70
+ const cssRuleFromProcedural = details => {
71
+ const { tasks, action } = details;
72
+ let mq, selector;
73
+ if ( Array.isArray(tasks) ) {
74
+ if ( tasks[0][0] !== 'matches-media' ) { return; }
75
+ mq = tasks[0][1];
76
+ if ( tasks.length > 2 ) { return; }
77
+ if ( tasks.length === 2 ) {
78
+ if ( tasks[1][0] !== 'spath' ) { return; }
79
+ selector = tasks[1][1];
326
80
  }
327
81
  }
328
- this.targets.add(candidate);
329
- }
330
- }
331
-
332
- /******************************************************************************/
333
-
334
- class PSelectorShadowTask extends PSelectorTask {
335
- constructor(task) {
336
- super();
337
- this.selector = task[1];
338
- }
339
- transpose(node, output) {
340
- const root = this.openOrClosedShadowRoot(node);
341
- if ( root === null ) { return; }
342
- const nodes = root.querySelectorAll(this.selector);
343
- output.push(...nodes);
344
- }
345
- get openOrClosedShadowRoot() {
346
- if ( PSelectorShadowTask.openOrClosedShadowRoot !== undefined ) {
347
- return PSelectorShadowTask.openOrClosedShadowRoot;
348
- }
349
- if ( typeof chrome === 'object' && chrome !== null ) {
350
- if ( chrome.dom instanceof Object ) {
351
- if ( typeof chrome.dom.openOrClosedShadowRoot === 'function' ) {
352
- PSelectorShadowTask.openOrClosedShadowRoot =
353
- chrome.dom.openOrClosedShadowRoot;
354
- return PSelectorShadowTask.openOrClosedShadowRoot;
355
- }
356
- }
357
- }
358
- PSelectorShadowTask.openOrClosedShadowRoot = node =>
359
- node.openOrClosedShadowRoot || null;
360
- return PSelectorShadowTask.openOrClosedShadowRoot;
361
- }
362
- }
363
-
364
- /******************************************************************************/
365
-
366
- // https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277
367
- // Prepend `:scope ` if needed.
368
- class PSelectorSpathTask extends PSelectorTask {
369
- constructor(task) {
370
- super();
371
- this.spath = task[1];
372
- this.nth = /^(?:\s*[+~]|:)/.test(this.spath);
373
- if ( this.nth ) { return; }
374
- if ( /^\s*>/.test(this.spath) ) {
375
- this.spath = `:scope ${this.spath.trim()}`;
376
- }
377
- }
378
- transpose(node, output) {
379
- const nodes = this.nth
380
- ? PSelectorSpathTask.qsa(node, this.spath)
381
- : node.querySelectorAll(this.spath);
382
- for ( const node of nodes ) {
383
- output.push(node);
384
- }
385
- }
386
- // Helper method for other operators.
387
- static qsa(node, selector) {
388
- const parent = node.parentElement;
389
- if ( parent === null ) { return []; }
390
- let pos = 1;
391
- for (;;) {
392
- node = node.previousElementSibling;
393
- if ( node === null ) { break; }
394
- pos += 1;
395
- }
396
- return parent.querySelectorAll(
397
- `:scope > :nth-child(${pos})${selector}`
398
- );
399
- }
400
- }
401
-
402
- /******************************************************************************/
403
-
404
- class PSelectorUpwardTask extends PSelectorTask {
405
- constructor(task) {
406
- super();
407
- const arg = task[1];
408
- if ( typeof arg === 'number' ) {
409
- this.i = arg;
410
- } else {
411
- this.s = arg;
412
- }
413
- }
414
- transpose(node, output) {
415
- if ( this.s !== '' ) {
416
- const parent = node.parentElement;
417
- if ( parent === null ) { return; }
418
- node = parent.closest(this.s);
419
- if ( node === null ) { return; }
420
- } else {
421
- let nth = this.i;
422
- for (;;) {
423
- node = node.parentElement;
424
- if ( node === null ) { return; }
425
- nth -= 1;
426
- if ( nth === 0 ) { break; }
427
- }
428
- }
429
- output.push(node);
430
- }
431
- }
432
- PSelectorUpwardTask.prototype.i = 0;
433
- PSelectorUpwardTask.prototype.s = '';
434
-
435
- /******************************************************************************/
436
-
437
- class PSelectorWatchAttrs extends PSelectorTask {
438
- constructor(task) {
439
- super();
440
- this.observer = null;
441
- this.observed = new WeakSet();
442
- this.observerOptions = {
443
- attributes: true,
444
- subtree: true,
445
- };
446
- const attrs = task[1];
447
- if ( Array.isArray(attrs) && attrs.length !== 0 ) {
448
- this.observerOptions.attributeFilter = task[1];
449
- }
450
- }
451
- // TODO: Is it worth trying to re-apply only the current selector?
452
- handler() {
453
- if ( proceduralFilterer instanceof Object ) {
454
- proceduralFilterer.onDOMChanged();
455
- }
456
- }
457
- transpose(node, output) {
458
- output.push(node);
459
- if ( this.observed.has(node) ) { return; }
460
- if ( this.observer === null ) {
461
- this.observer = new MutationObserver(this.handler);
462
- }
463
- this.observer.observe(node, this.observerOptions);
464
- this.observed.add(node);
465
- }
466
- }
467
-
468
- /******************************************************************************/
469
-
470
- class PSelectorXpathTask extends PSelectorTask {
471
- constructor(task) {
472
- super();
473
- this.xpe = document.createExpression(task[1], null);
474
- this.xpr = null;
475
- }
476
- transpose(node, output) {
477
- this.xpr = this.xpe.evaluate(
478
- node,
479
- XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
480
- this.xpr
481
- );
482
- let j = this.xpr.snapshotLength;
483
- while ( j-- ) {
484
- const node = this.xpr.snapshotItem(j);
485
- if ( node.nodeType === 1 ) {
486
- output.push(node);
487
- }
488
- }
489
- }
490
- }
491
-
492
- /******************************************************************************/
493
-
494
- class PSelector {
495
- constructor(o) {
496
- this.selector = o.selector;
497
- this.tasks = [];
498
- const tasks = [];
499
- if ( Array.isArray(o.tasks) === false ) { return; }
500
- for ( const task of o.tasks ) {
501
- const ctor = this.operatorToTaskMap.get(task[0]) || PSelectorVoidTask;
502
- tasks.push(new ctor(task));
503
- }
504
- this.tasks = tasks;
505
- }
506
- prime(input) {
507
- const root = input || document;
508
- if ( this.selector === '' ) { return [ root ]; }
509
- if ( input !== document ) {
510
- const c0 = this.selector.charCodeAt(0);
511
- if ( c0 === 0x2B /* + */ || c0 === 0x7E /* ~ */ ) {
512
- return Array.from(PSelectorSpathTask.qsa(input, this.selector));
513
- } else if ( c0 === 0x3E /* > */ ) {
514
- return Array.from(input.querySelectorAll(`:scope ${this.selector}`));
515
- }
516
- }
517
- return Array.from(root.querySelectorAll(this.selector));
518
- }
519
- exec(input) {
520
- let nodes = this.prime(input);
521
- for ( const task of this.tasks ) {
522
- if ( nodes.length === 0 ) { break; }
523
- const transposed = [];
524
- task.begin();
525
- for ( const node of nodes ) {
526
- task.transpose(node, transposed);
527
- }
528
- task.end(transposed);
529
- nodes = transposed;
530
- }
531
- return nodes;
532
- }
533
- test(input) {
534
- const nodes = this.prime(input);
535
- for ( const node of nodes ) {
536
- let output = [ node ];
537
- for ( const task of this.tasks ) {
538
- const transposed = [];
539
- task.begin();
540
- for ( const node of output ) {
541
- task.transpose(node, transposed);
542
- }
543
- task.end(transposed);
544
- output = transposed;
545
- if ( output.length === 0 ) { break; }
546
- }
547
- if ( output.length !== 0 ) { return true; }
548
- }
549
- return false;
550
- }
551
- }
552
- PSelector.prototype.operatorToTaskMap = new Map([
553
- [ 'has', PSelectorIfTask ],
554
- [ 'has-text', PSelectorHasTextTask ],
555
- [ 'if', PSelectorIfTask ],
556
- [ 'if-not', PSelectorIfNotTask ],
557
- [ 'matches-attr', PSelectorMatchesAttrTask ],
558
- [ 'matches-css', PSelectorMatchesCSSTask ],
559
- [ 'matches-css-after', PSelectorMatchesCSSAfterTask ],
560
- [ 'matches-css-before', PSelectorMatchesCSSBeforeTask ],
561
- [ 'matches-media', PSelectorMatchesMediaTask ],
562
- [ 'matches-path', PSelectorMatchesPathTask ],
563
- [ 'matches-prop', PSelectorMatchesPropTask ],
564
- [ 'min-text-length', PSelectorMinTextLengthTask ],
565
- [ 'not', PSelectorIfNotTask ],
566
- [ 'others', PSelectorOthersTask ],
567
- [ 'shadow', PSelectorShadowTask ],
568
- [ 'spath', PSelectorSpathTask ],
569
- [ 'upward', PSelectorUpwardTask ],
570
- [ 'watch-attr', PSelectorWatchAttrs ],
571
- [ 'xpath', PSelectorXpathTask ],
572
- ]);
573
-
574
- /******************************************************************************/
575
-
576
- class PSelectorRoot extends PSelector {
577
- constructor(o) {
578
- super(o);
579
- this.budget = 200; // I arbitrary picked a 1/5 second
580
- this.raw = o.raw;
581
- this.cost = 0;
582
- this.lastAllowanceTime = 0;
583
- this.action = o.action;
584
- }
585
- prime(input) {
586
- try {
587
- return super.prime(input);
588
- } catch {
589
- }
590
- return [];
591
- }
592
- exec(input) {
593
- try {
594
- return super.exec(input);
595
- } catch {
596
- }
597
- return [];
82
+ let style;
83
+ if ( Array.isArray(action) ) {
84
+ if ( action[0] !== 'style' ) { return; }
85
+ selector = selector || details.selector;
86
+ style = action[1];
87
+ }
88
+ if ( mq === undefined && style === undefined && selector === undefined ) { return; }
89
+ if ( mq === undefined ) {
90
+ return `${selector}\n{${style}}`;
91
+ }
92
+ if ( style === undefined ) {
93
+ return `@media ${mq} {\n${selector}\n{display:none!important;}\n}`;
94
+ }
95
+ return `@media ${mq} {\n${selector}\n{${style}}\n}`;
96
+ };
97
+ const sheetText = [];
98
+ for ( const details of declaratives ) {
99
+ const ruleText = cssRuleFromProcedural(details);
100
+ if ( ruleText === undefined ) { continue; }
101
+ sheetText.push(ruleText);
102
+ }
103
+ if ( sheetText.length !== 0 ) {
104
+ chrome.runtime.sendMessage({
105
+ what: 'insertCSS',
106
+ css: sheetText.join('\n'),
107
+ }).catch(( ) => {
108
+ });
598
109
  }
599
110
  }
600
111
 
601
- /******************************************************************************/
602
-
603
- class ProceduralFilterer {
604
- constructor(selectors) {
605
- this.selectors = [];
606
- this.masterToken = this.randomToken();
607
- this.styleTokenMap = new Map();
608
- this.styledNodes = new Set();
609
- this.timer = undefined;
610
- this.hideStyle = 'display:none!important;';
611
- this.addSelectors(selectors);
612
- // Important: commit now (do not go through onDOMChanged) to be sure
613
- // first pass is going to happen asap.
614
- this.uBOL_commitNow();
615
- }
616
-
617
- addSelectors(selectors) {
618
- for ( const selector of selectors ) {
619
- const pselector = new PSelectorRoot(selector);
620
- this.primeProceduralSelector(pselector);
621
- this.selectors.push(pselector);
622
- }
623
- this.onDOMChanged();
624
- }
625
-
626
- // This allows to perform potentially expensive initialization steps
627
- // before the filters are ready to be applied.
628
- primeProceduralSelector(pselector) {
629
- if ( pselector.action === undefined ) {
630
- this.styleTokenFromStyle(this.hideStyle);
631
- } else if ( pselector.action[0] === 'style' ) {
632
- this.styleTokenFromStyle(pselector.action[1]);
633
- }
634
- return pselector;
635
- }
636
-
637
- uBOL_commitNow() {
638
- // https://github.com/uBlockOrigin/uBlock-issues/issues/341
639
- // Be ready to unhide nodes which no longer matches any of
640
- // the procedural selectors.
641
- const toUnstyle = this.styledNodes;
642
- this.styledNodes = new Set();
643
-
644
- let t0 = Date.now();
645
-
646
- for ( const pselector of this.selectors.values() ) {
647
- const allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000);
648
- if ( allowance >= 1 ) {
649
- pselector.budget += allowance * 50;
650
- if ( pselector.budget > 200 ) { pselector.budget = 200; }
651
- pselector.lastAllowanceTime = t0;
652
- }
653
- if ( pselector.budget <= 0 ) { continue; }
654
- const nodes = pselector.exec();
655
- const t1 = Date.now();
656
- pselector.budget += t0 - t1;
657
- if ( pselector.budget < -500 ) {
658
- console.info('uBOL: disabling %s', pselector.raw);
659
- pselector.budget = -0x7FFFFFFF;
660
- }
661
- t0 = t1;
662
- if ( nodes.length === 0 ) { continue; }
663
- this.processNodes(nodes, pselector.action);
664
- }
665
-
666
- this.unprocessNodes(toUnstyle);
667
- }
668
-
669
- styleTokenFromStyle(style) {
670
- if ( style === undefined ) { return; }
671
- let styleToken = this.styleTokenMap.get(style);
672
- if ( styleToken !== undefined ) { return styleToken; }
673
- styleToken = this.randomToken();
674
- this.styleTokenMap.set(style, styleToken);
675
- uBOL_injectCSS(`[${this.masterToken}][${styleToken}]\n{${style}}\n`);
676
- return styleToken;
677
- }
678
-
679
- processNodes(nodes, action) {
680
- const op = action && action[0] || '';
681
- const arg = op !== '' ? action[1] : '';
682
- switch ( op ) {
683
- case '':
684
- /* fall through */
685
- case 'style': {
686
- const styleToken = this.styleTokenFromStyle(
687
- arg === '' ? this.hideStyle : arg
688
- );
689
- for ( const node of nodes ) {
690
- node.setAttribute(this.masterToken, '');
691
- node.setAttribute(styleToken, '');
692
- this.styledNodes.add(node);
693
- }
694
- break;
695
- }
696
- case 'remove': {
697
- for ( const node of nodes ) {
698
- node.remove();
699
- node.textContent = '';
700
- }
701
- break;
702
- }
703
- case 'remove-attr': {
704
- const reAttr = regexFromString(arg, true);
705
- for ( const node of nodes ) {
706
- for ( const name of node.getAttributeNames() ) {
707
- if ( reAttr.test(name) === false ) { continue; }
708
- node.removeAttribute(name);
709
- }
710
- }
711
- break;
712
- }
713
- case 'remove-class': {
714
- const reClass = regexFromString(arg, true);
715
- for ( const node of nodes ) {
716
- const cl = node.classList;
717
- for ( const name of cl.values() ) {
718
- if ( reClass.test(name) === false ) { continue; }
719
- cl.remove(name);
720
- }
721
- }
722
- break;
723
- }
724
- default:
725
- break;
726
- }
727
- }
728
-
729
- // TODO: Current assumption is one style per hit element. Could be an
730
- // issue if an element has multiple styling and one styling is
731
- // brought back. Possibly too rare to care about this for now.
732
- unprocessNodes(nodes) {
733
- for ( const node of nodes ) {
734
- if ( this.styledNodes.has(node) ) { continue; }
735
- node.removeAttribute(this.masterToken);
736
- }
737
- }
738
-
739
- randomToken() {
740
- const n = Math.random();
741
- return String.fromCharCode(n * 25 + 97) +
742
- Math.floor(
743
- (0.25 + n * 0.75) * Number.MAX_SAFE_INTEGER
744
- ).toString(36).slice(-8);
112
+ const procedurals = exceptedSelectors.filter(a => a.cssable === undefined);
113
+ if ( procedurals.length !== 0 ) {
114
+ const addSelectors = selectors => {
115
+ if ( self.listsProceduralFiltererAPI instanceof Object === false ) { return; }
116
+ self.listsProceduralFiltererAPI.addSelectors(selectors);
117
+ };
118
+ if ( self.ProceduralFiltererAPI === undefined ) {
119
+ self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
120
+ what: 'injectCSSProceduralAPI'
121
+ }).catch(( ) => {
122
+ });
745
123
  }
746
-
747
- onDOMChanged() {
748
- if ( this.timer !== undefined ) { return; }
749
- this.timer = self.requestAnimationFrame(( ) => {
750
- this.timer = undefined;
751
- this.uBOL_commitNow();
124
+ if ( self.ProceduralFiltererAPI instanceof Promise ) {
125
+ self.ProceduralFiltererAPI.then(( ) => {
126
+ self.listsProceduralFiltererAPI = new self.ProceduralFiltererAPI();
127
+ addSelectors(procedurals);
752
128
  });
129
+ } else {
130
+ addSelectors(procedurals);
753
131
  }
754
132
  }
755
133
 
756
134
  /******************************************************************************/
757
135
 
758
- const proceduralFilterer = new ProceduralFilterer(
759
- exceptedSelectors.map(a => JSON.parse(a))
760
- );
761
-
762
- const observer = new MutationObserver(mutations => {
763
- let domChanged = false;
764
- for ( let i = 0; i < mutations.length && !domChanged; i++ ) {
765
- const mutation = mutations[i];
766
- for ( const added of mutation.addedNodes ) {
767
- if ( added.nodeType !== 1 ) { continue; }
768
- domChanged = true;
769
- break;
770
- }
771
- if ( domChanged === false ) {
772
- for ( const removed of mutation.removedNodes ) {
773
- if ( removed.nodeType !== 1 ) { continue; }
774
- domChanged = true;
775
- break;
776
- }
777
- }
778
- }
779
- if ( domChanged === false ) { return; }
780
- proceduralFilterer.onDOMChanged();
781
- });
782
-
783
- observer.observe(document, {
784
- childList: true,
785
- subtree: true,
786
- });
787
-
788
- /******************************************************************************/
789
-
790
136
  })();
791
137
 
792
- /******************************************************************************/
793
-
794
138
  void 0;