New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@adguard/extended-css

Package Overview
Dependencies
Maintainers
0
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@adguard/extended-css - npm Package Compare versions

Comparing version 2.0.56 to 2.0.59

8

CHANGELOG.md
# ExtendedCss Changelog
## [2.0.59] - 2024-12-02
### Added
- Types declaration to the exports field in the package.json.
[2.0.59]: https://github.com/AdguardTeam/ExtendedCss/compare/v2.0.58...v2.0.59
## [2.0.56]

@@ -4,0 +12,0 @@

2

dist/build.txt

@@ -1,1 +0,1 @@

version=2.0.56
version=2.0.59
/**
* @adguard/extended-css - v2.0.56 - Tue Nov 28 2023
* @adguard/extended-css - v2.0.59 - Mon Dec 02 2024
* https://github.com/AdguardTeam/ExtendedCss#homepage
* Copyright (c) 2023 AdGuard. Licensed GPL-3.0
* Copyright (c) 2024 AdGuard. Licensed GPL-3.0
*/
var ExtendedCss=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const t="SelectorList",r="Selector",s="RegularSelector",o="ExtendedSelector",n="AbsolutePseudoClass",l="RelativePseudoClass";class a{constructor(t){e(this,"children",[]),this.type=t}addChild(e){this.children.push(e)}}class i extends a{constructor(e){super(s),this.value=e}}class c extends a{constructor(e){super(l),this.name=e}}class u extends a{constructor(t){super(n),e(this,"value",""),this.name=t}}const d={LEFT:"[",RIGHT:"]"},h={LEFT:"(",RIGHT:")"},f={LEFT:"{",RIGHT:"}"},p="/",w="\\",m=" ",E=",",g=";",v=":",b="'",y='"',$="=",k="\t",S="\r",x="\n",T="\f",P=[m,k,S,x,T],N="*",O=m,R=">",A="+",I="~",L=[O,R,A,I],C=["[","]","(",")","{","}",p,w,g,v,E,b,y,"^","$",N,"#",".",O,R,A,I,k,S,x,T],B=[v,g,b,y,w,m,k,S,x,T],M="contains",D="has-text",F="-abp-contains",W="matches-css",V="matches-css-before",_="matches-css-after",G="matches-attr",H="matches-property",U="xpath",j="nth-ancestor",q=[M,D,F],Q="upward",z="remove",Y="-abp-has",K=["has",Y],X="is",J="not",Z=[M,D,F,W,V,_,G,H,U,j,Q],ee=[...K,X,J],te=[...Z,...ee],re=[J,X],se={AFTER:"after",BACKDROP:"backdrop",BEFORE:"before",CUE:"cue",CUE_REGION:"cue-region",FIRST_LETTER:"first-letter",FIRST_LINE:"first-line",FILE_SELECTION_BUTTON:"file-selector-button",GRAMMAR_ERROR:"grammar-error",MARKER:"marker",PART:"part",PLACEHOLDER:"placeholder",SELECTION:"selection",SLOTTED:"slotted",SPELLING_ERROR:"spelling-error",TARGET_TEXT:"target-text"},oe="content",ne="true",le="global",ae="Selector should be defined",ie="No style declaration found",ce="Selector should be defined before style declaration in stylesheet",ue="Invalid style declaration",de="Unclosed style declaration",he="Missing style property in declaration",fe="Missing style value in declaration",pe="Style should be declared or :remove() pseudo-class should used",we="Comments are not supported",me="Invalid :remove() pseudo-class in selector",Ee="Selector should be defined before :remove() pseudo-class",ge="Pseudo-class :remove() appears more than once in selector",ve="Pseudo-class :remove() should be at the end of selector",be=/\[-(?:ext)-([a-z-_]+)=(["'])((?:(?=(\\?))\4.)*?)\2\]/g,ye=(e,t,r,s)=>{const o=new RegExp(`([^\\\\]|^)\\\\${r}`,"g");return`:${t}(${s.replace(o,`$1${r}`)})`},$e=/\(:scope >/g,ke=/(:matches-css)-(before|after)\(/g,Se=(e,t,r)=>`${t}${h.LEFT}${r},`,xe=e=>(e=>{const t=e.replace(be,ye).replace($e,"(>").replace(ke,Se);if(t.includes("[-ext-"))throw new Error(`Invalid extended-css old syntax selector: '${e}'`);return t})(e.trim()),Te="mark",Pe="word",Ne=(e,t)=>{let r="";const s=[];return e.split("").forEach((e=>{if(t.includes(e))return r.length>0&&(s.push({type:Pe,value:r}),r=""),void s.push({type:Te,value:e});r+=e})),r.length>0&&s.push({type:Pe,value:r}),s},Oe=e=>{const t=[];e.forEach((e=>t.push(e)));const r=[];for(;t.length;){const e=t.pop();if(!e)throw new Error("Unable to make array flat");Array.isArray(e)?e.forEach((e=>t.push(e))):r.push(e)}return r.reverse()},Re=e=>e[0],Ae=e=>e[e.length-1],Ie=e=>e[e.length-2],Le=(e,t,r)=>{const s=e[t];if(!s)throw new Error(r||`No array item found by index ${t}`);return s},Ce="At least one of Selector node children should be RegularSelector",Be=e=>(null==e?void 0:e.type)===t,Me=e=>(null==e?void 0:e.type)===r,De=e=>(null==e?void 0:e.type)===s,Fe=e=>e.type===o,We=e=>(null==e?void 0:e.type)===n,Ve=e=>(null==e?void 0:e.type)===l,_e=e=>{if(null===e)throw new Error("Ast node should be defined");if(!We(e)&&!Ve(e))throw new Error("Only AbsolutePseudoClass or RelativePseudoClass ast node can have a name");if(!e.name)throw new Error("Extended pseudo-class should have a name");return e.name},Ge=(e,t)=>{if(null===e)throw new Error("Ast node should be defined");if(!De(e)&&!We(e))throw new Error("Only RegularSelector ot AbsolutePseudoClass ast node can have a value");if(!e.value)throw new Error(t||"Ast RegularSelector ot AbsolutePseudoClass node should have a value");return e.value},He=e=>e.filter(De),Ue=e=>{const t=He(e),r=Ae(t);if(!r)throw new Error(Ce);return r},je=(e,t)=>{if(1!==e.children.length)throw new Error(t);const r=Re(e.children);if(!r)throw new Error(t);return r},qe=e=>je(e,"Extended selector should be specified"),Qe=e=>{if(!Ve(e))throw new Error("Only RelativePseudoClass node can have relative SelectorList node as child");return je(e,`Missing arg for :${_e(e)}() pseudo-class`)},ze={COMMON:[h.LEFT,b,y,$,".",v,m],CONTAINS:[h.LEFT,b,y]},Ye=e=>te.includes(e),Ke=e=>re.includes(e),Xe=(e,t)=>!(!e||!t)&&(L.includes(t)||e===Pe||t===N||"#"===t||"."===t||t===v||t===b||t===y||t===d.LEFT),Je=(e,t,r)=>{const s=Ae(e.extendedPseudoNamesStack);if(!s)throw new Error("Regexp pattern allowed only in arg of extended pseudo-class");if(q.includes(s))return ze.CONTAINS.includes(t);if(t===p&&s!==U){throw new Error(`Invalid regexp pattern for :${s}() pseudo-class ${r?`in arg part: '${r}'`:"arg"}`)}return ze.COMMON.includes(t)},Ze=(e,t)=>e===d.LEFT&&t!==w,et=e=>{var t;if(!e.isAttributeBracketsOpen)return!1;const r=e.attributeBuffer.split(m).join(""),s=Ne(r,[...C,$]);const o=Re(s),n=null==o?void 0:o.type,l=null==o?void 0:o.value;if(n===Te&&l!==w)throw new Error(`'[${e.attributeBuffer}]' is not a valid attribute due to '${l}' at start of it`);const a=Ae(s),i=null==a?void 0:a.type,c=null==a?void 0:a.value;if(c===$)throw new Error(`'[${e.attributeBuffer}]' is not a valid attribute due to '='`);const u=s.findIndex((e=>e.type===Te&&e.value===$)),d=null===(t=Ie(s))||void 0===t?void 0:t.value;if(-1===u)return i===Pe||d===w&&(c===y||c===b);const h=Le(s,u+1).value;if(!(h===b||h===y)){if(i===Pe)return!0;throw new Error(`'[${e.attributeBuffer}]' is not a valid attribute`)}return i===Pe&&"i"===(null==c?void 0:c.toLocaleLowerCase())?d===h:c===h},tt=e=>!!e&&P.includes(e),rt=e=>Z.includes(e),st=e=>ee.includes(e),ot=e=>0===e.pathToBufferNode.length?null:Ae(e.pathToBufferNode)||null,nt=e=>{const t=ot(e);if(!t)throw new Error("No bufferNode found");if(!Me(t))throw new Error("Unsupported bufferNode type");const r=Ue(t.children);return e.pathToBufferNode.push(r),r},lt=(e,t)=>{const r=ot(e);if(null===r)throw new Error("No bufferNode to update");if(We(r))r.value+=t;else{if(!De(r))throw new Error(`${r.type} node cannot be updated. Only RegularSelector and AbsolutePseudoClass are supported`);r.value+=t,e.isAttributeBracketsOpen&&(e.attributeBuffer+=t)}},at=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const o=ot(e);if(null===o)throw new Error("No buffer node");let d;d=t===s?new i(r):t===n?new u(r):t===l?new c(r):new a(t),o.addChild(d),e.pathToBufferNode.push(d)},it=(e,o)=>{(e=>{const r=new a(t);e.ast=r,e.pathToBufferNode.push(r)})(e),at(e,r),at(e,s,o)},ct=function(e){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";at(e,t),at(e,r),at(e,s,o)},ut=(e,t)=>{for(let s=e.pathToBufferNode.length-1;s>=0;s-=1){var r;if((null===(r=e.pathToBufferNode[s])||void 0===r?void 0:r.type)===t){e.pathToBufferNode=e.pathToBufferNode.slice(0,s+1);break}}},dt=e=>{const t=ot(e);if(t&&Be(t)&&Ve((e=>e.pathToBufferNode.length<2?null:Ie(e.pathToBufferNode)||null)(e)))return t;ut(e,r);const s=ot(e);if(!s)throw new Error("No SelectorNode, impossible to continue selector parsing by ExtendedCss");const o=Ae(s.children),n=o&&Fe(o)&&0===e.standardPseudoBracketsStack.length,l=n&&Re(o.children);let a=s;if(l){const t=n&&l.name,r=t&&st(t),s=t&&rt(t),i=r&&e.extendedPseudoBracketsStack.length>0&&e.extendedPseudoBracketsStack.length===e.extendedPseudoNamesStack.length,c=s&&t===Ae(e.extendedPseudoNamesStack);(i||c)&&(e.pathToBufferNode.push(o),a=l)}else a=n?s:nt(e);return e.pathToBufferNode.push(a),a},ht=(e,t,s,n,l)=>{if(!n)throw new Error(`Invalid colon ':' at the end of selector: '${t}'`);if(Ye(n.toLowerCase())){if(K.includes(n)&&e.standardPseudoNamesStack.length>0)throw new Error(`Usage of :${n}() pseudo-class is not allowed inside regular pseudo: '${Ae(e.standardPseudoNamesStack)}'`);ut(e,r),at(e,o)}else{if(n.toLowerCase()===z)throw new Error(`${me}: '${t}'`);lt(e,s),l&&l===h.LEFT&&!e.isAttributeBracketsOpen&&e.standardPseudoNamesStack.push(n)}},ft=(e,t)=>(e.children=t,e),pt=e=>{if(null===e)return!1;const t=qe(e),r=_e(t);if(rt(r))return!1;const s=Qe(t).children;if(Ke(r)){if(s.every((e=>{try{const t=je(e,"Selector node should have RegularSelector");return De(t)}catch(e){return!1}})))return!0}return s.some((e=>e.children.some((e=>!!Fe(e)&&pt(e)))))},wt=(e,t)=>{if(!e)return null;const r=qe(e),s=Qe(r);if(!s.children.some((e=>e.children.some((e=>Fe(e)))))){const e=(e=>e.children.map((e=>{const t=je(e,"Ast Selector node should have RegularSelector node");return Ge(t)})).join(", "))(s),o=`:${_e(r)}${h.LEFT}${e}${h.RIGHT}`;return t.value=`${Ge(t)}${o}`,null}const o=mt(s),n=ft(r,[o]);return ft(e,[n])},mt=e=>ft(e,e.children.map((e=>(e=>{const t=e.children,r=[];let s=0;for(;s<t.length;){const e=Le(t,s,"currentChild should be specified");if(0===s)r.push(e);else{const t=Ue(r);if(Fe(e)){let s=null,o=pt(e);for(s=e;o;)s=wt(s,t),o=pt(s);if(null!==s){r.push(s);const e=qe(s),o=_e(e);Ge(t)===N&&Ke(o)&&(t.value="html *")}}else if(De(e)){const s=Ae(r)||null;De(s)&&(o=e,(n=t).value=`${Ge(n)} ${Ge(o)}`)}}s+=1}var o,n;return ft(e,r)})(e)))),Et="No white space is allowed before or after extended pseudo-class name in selector",gt=e=>{const a=(e=>{const t=xe(e);return Ne(t,C)})(e),i={ast:null,pathToBufferNode:[],extendedPseudoNamesStack:[],extendedPseudoBracketsStack:[],standardPseudoNamesStack:[],standardPseudoBracketsStack:[],isAttributeBracketsOpen:!1,attributeBuffer:"",isRegexpOpen:!1,shouldOptimize:!1};let c=0;for(;c<a.length;){const u=a[c];if(!u)break;const{type:$,value:P}=u,C=a[c+1],B=null==C?void 0:C.type,M=null==C?void 0:C.value,D=a[c+2],F=null==D?void 0:D.value,W=a[c-1],V=null==W?void 0:W.type,_=null==W?void 0:W.value,G=a[c-2],H=null==G?void 0:G.value;let q=ot(i);switch($){case Pe:if(null===q)it(i,P);else if(Be(q))at(i,r),at(i,s,P);else if(De(q))lt(i,P);else if(Fe(q)){if(tt(M)&&F===h.LEFT)throw new Error(`${Et}: '${e}'`);const t=P.toLowerCase();i.extendedPseudoNamesStack.push(t),rt(t)?at(i,n,t):(at(i,l,t),Ke(t)&&(i.shouldOptimize=!0))}else We(q)?lt(i,P):Ve(q)&&ct(i,P);break;case Te:switch(P){case E:if(!q||void 0!==q&&!M)throw new Error(`'${e}' is not a valid selector`);De(q)?i.isAttributeBracketsOpen?lt(i,P):ut(i,t):We(q)?lt(i,P):Me(q)&&ut(i,t);break;case m:if(De(q)&&!i.isAttributeBracketsOpen&&(q=dt(i)),De(q)){if(!i.isAttributeBracketsOpen&&(_===v&&B===Pe||V===Pe&&M===h.LEFT))throw new Error(`'${e}' is not a valid selector`);(!M||Xe(B,M)||i.isAttributeBracketsOpen)&&lt(i,P)}We(q)&&lt(i,P),Ve(q)&&ct(i),Me(q)&&Xe(B,M)&&at(i,s);break;case O:case R:case A:case I:case g:case p:case w:case b:case y:case"^":case"$":case f.LEFT:case f.RIGHT:case N:case"#":case".":case d.LEFT:if(L.includes(P)){if(null===q)throw new Error(`'${e}' is not a valid selector`);q=dt(i)}if(null===q)it(i,P),Ze(P,_)&&(i.isAttributeBracketsOpen=!0);else if(De(q)){if(P===f.LEFT&&!i.isAttributeBracketsOpen&&!i.isRegexpOpen)throw new Error(`'${e}' is not a valid selector`);lt(i,P),Ze(P,_)&&(i.isAttributeBracketsOpen=!0)}else We(q)?(lt(i,P),P===p&&i.extendedPseudoNamesStack.length>0&&(_===p&&H===w?i.isRegexpOpen=!1:_&&_!==w&&(Je(i,_,Ge(q))?i.isRegexpOpen=!i.isRegexpOpen:i.isRegexpOpen=!1))):Ve(q)?(ct(i,P),Ze(P,_)&&(i.isAttributeBracketsOpen=!0)):Me(q)?L.includes(P)?at(i,s,P):i.isRegexpOpen||(q=nt(i),lt(i,P),Ze(P,_)&&(i.isAttributeBracketsOpen=!0)):Be(q)&&(at(i,r),at(i,s,P),Ze(P,_)&&(i.isAttributeBracketsOpen=!0));break;case d.RIGHT:if(De(q)){if(!i.isAttributeBracketsOpen&&_!==w)throw new Error(`'${e}' is not a valid selector due to '${P}' after '${Ge(q)}'`);et(i)&&(i.isAttributeBracketsOpen=!1,i.attributeBuffer=""),lt(i,P)}We(q)&&lt(i,P);break;case v:if(tt(M)&&F&&te.includes(F))throw new Error(`${Et}: '${e}'`);if(null===q){if(M===U)it(i,"body");else{if(M===Q||M===j)throw new Error(`Selector should be defined before :${M}() pseudo-class`);it(i,N)}q=ot(i)}if(Be(q)&&(at(i,r),at(i,s),q=ot(i)),De(q)&&((_&&L.includes(_)||_===E)&&lt(i,N),ht(i,e,P,M,F)),Me(q)){if(!M)throw new Error(`Invalid colon ':' at the end of selector: '${e}'`);if(Ye(M.toLowerCase()))at(i,o);else{if(M.toLowerCase()===z)throw new Error(`${me}: '${e}'`);q=nt(i),ht(i,e,P,B,F)}}if(We(q)){if(_e(q)===U&&M&&te.includes(M)&&F===h.LEFT)throw new Error(`:xpath() pseudo-class should be the last in selector: '${e}'`);lt(i,P)}if(Ve(q)){if(!M)throw new Error(`Invalid pseudo-class arg at the end of selector: '${e}'`);ct(i,N),Ye(M.toLowerCase())?(ut(i,r),at(i,o)):(lt(i,P),F===h.LEFT&&i.standardPseudoNamesStack.push(M))}break;case h.LEFT:We(q)&&(_e(q)!==U&&i.isRegexpOpen?lt(i,P):(i.extendedPseudoBracketsStack.push(P),i.extendedPseudoBracketsStack.length>i.extendedPseudoNamesStack.length&&lt(i,P))),De(q)&&(i.standardPseudoNamesStack.length>0&&(lt(i,P),i.standardPseudoBracketsStack.push(P)),i.isAttributeBracketsOpen&&lt(i,P)),Ve(q)&&i.extendedPseudoBracketsStack.push(P);break;case h.RIGHT:if(We(q)&&(_e(q)!==U&&i.isRegexpOpen?lt(i,P):(i.extendedPseudoBracketsStack.pop(),_e(q)!==U?(i.extendedPseudoNamesStack.pop(),i.extendedPseudoBracketsStack.length>i.extendedPseudoNamesStack.length?lt(i,P):i.extendedPseudoBracketsStack.length>=0&&i.extendedPseudoNamesStack.length>=0&&ut(i,r)):i.extendedPseudoBracketsStack.length<i.extendedPseudoNamesStack.length?i.extendedPseudoNamesStack.pop():lt(i,P))),De(q))if(i.isAttributeBracketsOpen)lt(i,P);else if(i.standardPseudoNamesStack.length>0&&i.standardPseudoBracketsStack.length>0){lt(i,P),i.standardPseudoBracketsStack.pop();const t=i.standardPseudoNamesStack.pop();if(!t)throw new Error(`Parsing error. Invalid selector: ${e}`);if(Object.values(se).includes(t)&&M===v&&F&&K.includes(F))throw new Error(`Usage of :${F}() pseudo-class is not allowed after any regular pseudo-element: '${t}'`)}else i.extendedPseudoBracketsStack.pop(),i.extendedPseudoNamesStack.pop(),ut(i,o),ut(i,r);Me(q)&&(i.extendedPseudoBracketsStack.pop(),i.extendedPseudoNamesStack.pop(),ut(i,o),ut(i,r)),Ve(q)&&i.extendedPseudoNamesStack.length>0&&i.extendedPseudoBracketsStack.length>0&&(i.extendedPseudoBracketsStack.pop(),i.extendedPseudoNamesStack.pop());break;case x:case T:case S:throw new Error(`'${e}' is not a valid selector`);case k:if(!De(q)||!i.isAttributeBracketsOpen)throw new Error(`'${e}' is not a valid selector`);lt(i,P)}break;default:throw new Error(`Unknown type of token: '${P}'`)}c+=1}if(null===i.ast)throw new Error(`'${e}' is not a valid selector`);if(i.extendedPseudoNamesStack.length>0||i.extendedPseudoBracketsStack.length>0)throw new Error(`Unbalanced brackets for extended pseudo-class: '${Ae(i.extendedPseudoNamesStack)}'`);if(i.isAttributeBracketsOpen)throw new Error(`Unbalanced attribute brackets in selector: '${e}'`);return i.shouldOptimize?(u=i.ast,mt(u)):i.ast;var u},vt={MutationObserver:window.MutationObserver||window.WebKitMutationObserver};const bt=new class{constructor(){this.nativeNode=window.Node||Node}setGetter(){var e;this.getter=null===(e=Object.getOwnPropertyDescriptor(this.nativeNode.prototype,"textContent"))||void 0===e?void 0:e.get}},yt=e=>{let t=e.tagName.toLowerCase();return t+=Array.from(e.attributes).map((t=>`[${t.name}="${e.getAttribute(t.name)}"]`)).join(""),t},$t=e=>e instanceof HTMLElement,kt=(e,t)=>{const{parentElement:r}=e;if(!r)throw new Error(t||"Element does no have parent element");return r},St=e=>(e=>{if("object"==typeof(t=e)&&null!==t&&"message"in t&&"string"==typeof t.message)return e;var t;try{return new Error(JSON.stringify(e))}catch{return new Error(String(e))}})(e).message,xt={error:"undefined"!=typeof console&&console.error&&console.error.bind?console.error.bind(window.console):console.error,info:"undefined"!=typeof console&&console.info&&console.info.bind?console.info.bind(window.console):console.info},Tt=(e,t,r)=>e?e.split(t).join(r):e,Pt=e=>{if(e.startsWith(p)&&e.endsWith(p))return new RegExp(e.slice(1,-1));const t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(t)},Nt=e=>{let t;switch(e){case void 0:t="undefined";break;case null:t="null";break;default:t=e.toString()}return t},Ot=e=>{const t=Number(e);let r;if(Number.isNaN(t))switch(e){case"undefined":r=void 0;break;case"null":r=null;break;case"true":r=!0;break;case"false":r=!1;break;default:r=e}else r=t;return r},Rt=/\sVersion\/(\d{2}\.\d)(.+\s|\s)(Safari)\//.test(navigator.userAgent),At="background",It="background-image",Lt="content",Ct="opacity",Bt=".*",Mt=/^\s*\/.*\/[gmisuy]*\s*$/,Dt=e=>{if(!e.includes('url("')){const t=/url\((.*?)\)/g;return e.replace(t,'url("$1")')}return e},Ft=e=>e.replace(/(\^)?url(\\)?\\\((\w|\[\w)/g,'$1url$2\\(\\"?$3'),Wt=Dt,Vt=e=>{let t;return e.startsWith(p)&&e.endsWith(p)?(t=Ft(e),t=t.slice(1,-1)):(t=Wt(e),t=t.replace(/\\([\\()[\]"])/g,"$1"),t=(e=>{const t=new RegExp(`[${[".","+","?","$","{","}","(",")","[","]","\\","/"].join("\\")}]`,"g");return e.replace(t,"\\$&")})(t),t=Tt(t,N,Bt)),new RegExp(t,"i")},_t=(e,t,r)=>((e,t)=>{let r="";switch(e){case At:case It:r=Dt(t);break;case Lt:r=t.replace(/^(["'])([\s\S]*)\1$/,"$2");break;case Ct:r=Rt?(Math.round(100*parseFloat(t))/100).toString():t;break;default:r=t}return r})(t,window.getComputedStyle(e,r).getPropertyValue(t)),Gt=(e,t)=>{const r=e.indexOf(t);let s,o;return r>-1?(s=e.substring(0,r).trim(),o=e.substring(r+1).trim()):s=e,{name:s,value:o}},Ht=e=>{const{pseudoName:t,pseudoArg:r,domElement:s}=e,{regularPseudoElement:o,styleMatchArg:n}=((e,t)=>{const{name:r,value:s}=Gt(t,E);let o=r,n=s;if(Object.values(se).includes(r)||(o=null,n=t),!n)throw new Error(`Required style property argument part is missing in :${e}() arg: '${t}'`);return o&&(o=`::${o}`),{regularPseudoElement:o,styleMatchArg:n}})(t,r),{name:l,value:a}=Gt(n,v);if(!l||!a)throw new Error(`Required property name or value is missing in :${t}() arg: '${n}'`);let i;try{i=Vt(a)}catch(e){throw xt.error(St(e)),new Error(`Invalid argument of :${t}() pseudo-class: '${n}'`)}const c=_t(s,l,o);return i&&i.test(c)},Ut=e=>!e.includes(p)&&!!/^[\w-]+$/.test(e),jt=function(e){let t,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e.length>1&&e.startsWith(y)&&e.endsWith(y)&&(e=e.slice(1,-1)),""===e)throw new Error("Argument should be specified. Empty arg is invalid.");if(e.startsWith(p)&&e.endsWith(p)){if(!(e.length>2))throw new Error(`Invalid regexp: '${e}'`);t=Pt(e)}else if(e.includes(N)){if(e===N&&!r)throw new Error(`Argument should be more specific than ${e}`);t=Tt(e,N,Bt),t=new RegExp(t)}else{if(!Ut(e))throw new Error(`Invalid argument: '${e}'`);t=e}return t},qt=(e,t)=>{const{name:r,value:s}=Gt(t,$);if(!r)throw new Error(`Required attribute name is missing in :${e} arg: ${t}`);return{rawName:r,rawValue:s}},Qt=e=>{const{pseudoName:t,pseudoArg:r,domElement:s}=e,o=s.attributes;if(0===o.length)return!1;const{rawName:n,rawValue:l}=qt(t,r);let a;try{a=jt(n)}catch(e){const t=St(e);throw xt.error(t),new SyntaxError(t)}let i=!1,c=0;for(;c<o.length&&!i;){const e=o[c];if(!e)break;const t=a instanceof RegExp?a.test(e.name):a===e.name;if(l){let r;try{r=jt(l)}catch(e){const t=St(e);throw xt.error(t),new SyntaxError(t)}const s=r instanceof RegExp?r.test(e.value):r===e.value;i=t&&s}else i=t;c+=1}return i},zt=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const s=Re(t);if(1===t.length){let t;for(t in e)s instanceof RegExp?s.test(t)&&r.push({base:e,prop:t,value:e[t]}):s===t&&r.push({base:e,prop:s,value:e[t]});return r}if(s instanceof RegExp){const o=t.slice(1),n=[];for(const t in e)s.test(t)&&n.push(t);n.forEach((t=>{var s;const n=null===(s=Object.getOwnPropertyDescriptor(e,t))||void 0===s?void 0:s.value;zt(n,o,r)}))}if(e&&"string"==typeof s){var o;const n=null===(o=Object.getOwnPropertyDescriptor(e,s))||void 0===o?void 0:o.value;t=t.slice(1),void 0!==n&&zt(n,t,r)}return r},Yt=e=>{const{pseudoName:t,pseudoArg:r,domElement:s}=e,{rawName:o,rawValue:n}=qt(t,r);if(o.includes("\\/")||o.includes("\\."))throw new Error(`Invalid :${t} name pattern: ${o}`);let l;try{l=(e=>{e.length>1&&e.startsWith(y)&&e.endsWith(y)&&(e=e.slice(1,-1));const t=e.split("."),r=[];let s="",o=!1,n=0;for(;n<t.length;){const l=Le(t,n,`Invalid pseudo-class arg: '${e}'`);l.startsWith(p)&&l.endsWith(p)&&l.length>2?r.push(l):l.startsWith(p)?(o=!0,s+=l):l.endsWith(p)?(o=!1,s+=`.${l}`,r.push(s),s=""):o?s+=l:r.push(l),n+=1}if(s.length>0)throw new Error(`Invalid regexp property pattern '${e}'`);return r.map((t=>{if(0===t.length)throw new Error(`Empty pattern '${t}' is invalid in chain '${e}'`);let r;try{r=jt(t,!0)}catch(r){throw xt.error(St(r)),new Error(`Invalid property pattern '${t}' in property chain '${e}'`)}return r}))})(o)}catch(e){const t=St(e);throw xt.error(t),new SyntaxError(t)}const a=zt(s,l);if(0===a.length)return!1;let i=!0;if(n){let e;try{e=jt(n)}catch(e){const t=St(e);throw xt.error(t),new SyntaxError(t)}if(e)for(let t=0;t<a.length;t+=1){var c;const r=null===(c=a[t])||void 0===c?void 0:c.value;if(e instanceof RegExp)i=e.test(Nt(r));else{if("null"===r||"undefined"===r){i=e===r;break}i=Ot(e)===r}if(i)break}}return i},Kt=e=>{const{pseudoName:t,pseudoArg:r,domElement:s}=e,o=(e=>bt.getter?bt.getter.apply(e):e.textContent||"")(s);let n,l=r;if(l.startsWith(p)&&Mt.test(l)){const e=l.lastIndexOf("/"),s=l.substring(e+1);let a;l=l.substring(0,e+1).slice(1,-1).replace(/\\([\\"])/g,"$1");try{a=new RegExp(l,s)}catch(e){throw new Error(`Invalid argument of :${t}() pseudo-class: ${r}`)}n=a.test(o)}else l=l.replace(/\\([\\()[\]"])/g,"$1"),n=o.includes(l);return n},Xt=(e,t,r)=>`Error while matching element ${e}, may be invalid :${t}() pseudo-class arg: '${r}'`,Jt=(e,t,r)=>{let s,o,n;switch(t){case M:case D:case F:n=Kt,s={pseudoName:t,pseudoArg:r,domElement:e},o=Xt("text content",t,r);break;case W:case _:case V:n=Ht,s={pseudoName:t,pseudoArg:r,domElement:e},o=Xt("style",t,r);break;case G:n=Qt,s={domElement:e,pseudoName:t,pseudoArg:r},o=Xt("attributes",t,r);break;case H:n=Yt,s={domElement:e,pseudoName:t,pseudoArg:r},o=Xt("properties",t,r);break;default:throw new Error(`Unknown absolute pseudo-class :${t}()`)}return((e,t,r)=>{let s;try{s=e(t)}catch(e){throw xt.error(St(e)),new Error(r)}return s})(n,s,o)},Zt=(e,t,r)=>{const s=((e,t)=>{const r=Number(e);if(Number.isNaN(r)||r<1||r>=256)throw new Error(`Invalid argument of :${t} pseudo-class: '${e}'`);return r})(t,r),o=e.map((e=>{let t=null;try{t=((e,t,r)=>{let s=null,o=0;for(;o<t;){if(s=e.parentElement,!s)throw new Error(`Out of DOM: Argument of :${r}() pseudo-class is too big — '${t}'.`);e=s,o+=1}return s})(e,s,r)}catch(e){xt.error(St(e))}return t})).filter($t);return o},er=(e,t)=>{const r=e.map((e=>{const r=[];let s;try{s=document.evaluate(t,e,null,window.XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null)}catch(e){throw xt.error(St(e)),new Error(`Invalid argument of :xpath() pseudo-class: '${t}'`)}let o=s.iterateNext();for(;o;)$t(o)&&r.push(o),o=s.iterateNext();return r}));return Oe(r)},tr=(e,t)=>{if(!(e=>{let t;try{document.querySelectorAll(e),t=!0}catch(e){t=!1}return t})(t))throw new Error(`Invalid argument of :upward pseudo-class: '${t}'`);return e.map((e=>{const r=e.parentElement;return r?r.closest(t):null})).filter($t)},rr=(e,t)=>((e,t)=>{const r=He(e),s=Re(r);if(!s)throw new Error(t||Ce);return s})(e.children,`RegularSelector is missing for :${t}() pseudo-class`),sr=(e,t,r)=>{const s=r||Ge(e);let o=[];try{o=Array.from(t.querySelectorAll(s))}catch(e){throw new Error(`Error: unable to select by '${s}' — ${St(e)}`)}return o},or=(e,t)=>{let r=[];const s=qe(t),o=_e(s);if(rt(o)){const t=Ge(s,`Missing arg for :${o}() pseudo-class`);if(o===j)r=Zt(e,t,o);else if(o===U){try{document.createExpression(t,null)}catch(e){throw new Error(`Invalid argument of :${o}() pseudo-class: '${t}'`)}r=er(e,t)}else r=o===Q?Number.isNaN(Number(t))?tr(e,t):Zt(e,t,o):e.filter((e=>Jt(e,o,t)))}else{if(!st(o))throw new Error(`Unknown extended pseudo-class: '${o}'`);{const t=Qe(s);let n;switch(o){case"has":case Y:n=e=>(e=>{const{element:t,relativeSelectorList:r,pseudoName:s}=e;return r.children.every((e=>{const r=rr(e,s);let o="",n=null;const l=Ge(r);if(l.startsWith(A)||l.startsWith(I)?(n=t.parentElement,o=`:scope>${yt(t)}${l}`):l===N?(n=t,o=":scope *"):(o=`:scope ${l}`,n=t),!n)throw new Error(`Selection by :${s}() pseudo-class is not possible`);let a;try{a=lr(e,n,o)}catch(e){throw xt.error(St(e)),new Error(`Invalid selector for :${s}() pseudo-class: '${l}'`)}return a.length>0}))})({element:e,relativeSelectorList:t,pseudoName:o});break;case X:n=e=>(e=>{const{element:t,relativeSelectorList:r,pseudoName:s}=e;return r.children.some((e=>{const r=rr(e,s),o=kt(t,`Selection by :${s}() pseudo-class is not possible`),n=`:scope>${Ge(r)}`;let l;try{l=lr(e,o,n)}catch(e){return!1}return l.includes(t)}))})({element:e,relativeSelectorList:t,pseudoName:o});break;case J:n=e=>(e=>{const{element:t,relativeSelectorList:r,pseudoName:s}=e;return r.children.every((e=>{const r=rr(e,s),o=kt(t,`Selection by :${s}() pseudo-class is not possible`),n=`:scope>${Ge(r)}`;let l;try{l=lr(e,o,n)}catch(e){throw xt.error(St(e)),new Error(`Invalid selector for :${s}() pseudo-class: '${Ge(r)}'`)}return!l.includes(t)}))})({element:e,relativeSelectorList:t,pseudoName:o});break;default:throw new Error(`Unknown relative pseudo-class: '${o}'`)}r=e.filter(n)}}return r},nr=(e,t)=>{let r=[];const s=Ge(t);return r=s.startsWith(R)?e.map((e=>sr(t,e,`:scope${s}`))):s.startsWith(A)||s.startsWith(I)?e.map((e=>{const r=e.parentElement;if(!r)return[];const o=yt(e);return sr(t,r,`:scope>${o}${s}`)})):e.map((e=>{const r=`:scope ${Ge(t)}`;return sr(t,e,r)})),Oe(r)},lr=(e,t,r)=>{let s=[],o=0;for(;o<e.children.length;){const n=Le(e.children,o,"selectorNodeChild should be specified");0===o?s=sr(n,t,r):Fe(n)?s=or(s,n):De(n)&&(s=nr(s,n)),o+=1}return s},ar=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;const r=[];e.children.forEach((e=>{r.push(...lr(e,t))}));const s=[...new Set(Oe(r))];return s};const ir=new class{constructor(){this.astCache=new Map}saveAstToCache(e,t){this.astCache.set(e,t)}getAstFromCache(e){return this.astCache.get(e)||null}getSelectorAst(e){let t=this.getAstFromCache(e);return t||(t=gt(e)),this.saveAstToCache(e,t),t}querySelectorAll(e){const t=this.getSelectorAst(e);return ar(t)}},cr="debug",ur=e=>{const t=`:remove${h.LEFT}${h.RIGHT}`,r=`:remove${h.LEFT}`;let s,o=!1;const n=e.indexOf(t);if(0===n)throw new Error(`${Ee}: '${e}'`);if(n>0){if(n!==e.lastIndexOf(t))throw new Error(`${ge}: '${e}'`);if(n+t.length<e.length)throw new Error(`${ve}: '${e}'`);s=e.substring(0,n),o=!0}else{if(e.includes(r))throw new Error(`${me}: '${e}'`);s=e}return{selector:s,stylesOfSelector:o?[{property:z,value:ne}]:[]}},dr=(e,t)=>{let r,s=e.trim();if(s.startsWith("@"))throw new Error(`At-rules are not supported: '${s}'.`);try{r=ur(s)}catch(e){throw xt.error(St(e)),new Error(`${me}: '${s}'`)}let o,n=[],l=!1;try{s=r.selector,n=r.stylesOfSelector,o=t.getSelectorAst(s),l=!0}catch(e){l=!1}return{success:l,selector:s,ast:o,stylesOfSelector:n}},hr=()=>new Map,fr=(e,t)=>{const{selector:r,ast:s,rawStyles:o}=t;if(!o)throw new Error(`No style declaration for selector: '${r}'`);if(!s)throw new Error(`No ast parsed for selector: '${r}'`);const n=e.get(r);n?n.styles.push(...o):e.set(r,{ast:s,styles:o})},pr=e=>{const{selector:t,ast:r,rawStyles:s}=e;if(!r)throw new Error(`AST should be parsed for selector: '${t}'`);if(!s)throw new Error(`Styles should be parsed for selector: '${t}'`);const o={selector:t,ast:r},n=(e=>{const t=e.find((e=>e.property===cr));return null==t?void 0:t.value})(s),l=(e=>e.some((e=>e.property===z&&e.value===ne)))(s);let a=s;if(n&&(a=s.filter((e=>e.property!==cr)),n!==ne&&n!==le||(o.debug=n)),l){o.style={[z]:ne};const e=a.find((e=>e.property===oe));e&&(o.style.content=e.value)}else if(a.length>0){const e=(e=>{const t={};return e.forEach((e=>{const[r,s]=e;t[r]=s})),t})(a.map((e=>{const{property:t,value:r}=e;return[t,r]})));o.style=e}return o},wr=e=>{const t=[];return e.forEach(((e,r)=>{const s=r,{ast:o,styles:n}=e;t.push(pr({selector:s,ast:o,rawStyles:n}))})),t},mr="property",Er="value",gr=e=>""!==e.bufferValue&&null!==e.valueQuoteMark,vr=e=>{e.styles.push({property:e.bufferProperty.trim(),value:e.bufferValue.trim()}),e.bufferProperty="",e.bufferValue=""},br=(e,t,r)=>{const{value:s}=r;switch(r.type){case Pe:if(e.bufferProperty.length>0)throw new Error(`Invalid style property in style block: '${t}'`);e.bufferProperty+=s;break;case Te:if(s===v){if(0===e.bufferProperty.trim().length)throw new Error(`Missing style property before ':' in style block: '${t}'`);e.bufferProperty=e.bufferProperty.trim(),e.processing=Er}else if(!P.includes(s))throw new Error(`Invalid style declaration in style block: '${t}'`);break;default:throw new Error(`Unsupported style property character: '${s}' in style block: '${t}'`)}},yr=(e,t,r)=>{const{value:s}=r;if(r.type===Pe)e.bufferValue+=s;else switch(s){case v:if(!gr(e))throw new Error(`Invalid style value for property '${e.bufferProperty}' in style block: '${t}'`);e.bufferValue+=s;break;case g:gr(e)?e.bufferValue+=s:(vr(e),e.processing=mr);break;case b:case y:null===e.valueQuoteMark?e.valueQuoteMark=s:e.bufferValue.endsWith(w)||e.valueQuoteMark!==s||(e.valueQuoteMark=null),e.bufferValue+=s;break;case w:if(!gr(e))throw new Error(`Invalid style value for property '${e.bufferProperty}' in style block: '${t}'`);e.bufferValue+=s;break;case m:case k:case S:case x:case T:e.bufferValue.length>0&&(e.bufferValue+=s);break;default:throw new Error(`Unknown style declaration token: '${s}'`)}},$r=e=>{const t=e.trim(),r=(e=>{const t=e.trim();return Ne(t,B)})(t),s={processing:mr,styles:[],bufferProperty:"",bufferValue:"",valueQuoteMark:null};let o=0;for(;o<r.length;){const e=r[o];if(!e)break;if(s.processing===mr)br(s,t,e);else{if(s.processing!==Er)throw new Error("Style declaration parsing failed");yr(s,t,e)}o+=1}if(gr(s))throw new Error(`Unbalanced style declaration quotes in style block: '${t}'`);if(s.bufferProperty.length>0){if(0===s.bufferValue.length)throw new Error(`Missing style value for property '${s.bufferProperty}' in style block '${t}'`);vr(s)}if(0===s.styles.length)throw new Error(ie);return s.styles},kr=(e,t)=>{var r;const s=e.trim();if(s.includes("/*")&&s.includes("*/"))throw new Error(we);const o=(e=>{const t=[];for(let r=0;r<e.length;r+=1)e[r]===f.LEFT&&t.push(r);return t})(s);if(0===Re(o))throw new Error(ae);let n,l,a;if(o.length>0&&!s.includes(f.RIGHT))throw new Error(`${ie} OR ${de}`);if(0===o.length||!s.includes(f.RIGHT))try{if(n=dr(s,t),n.success){var i;if(0===(null===(i=n.stylesOfSelector)||void 0===i?void 0:i.length))throw new Error(pe);return{selector:n.selector.trim(),ast:n.ast,rawStyles:n.stylesOfSelector}}throw new Error("Invalid selector")}catch(e){throw new Error(St(e))}const c={selector:""};for(let e=o.length-1;e>-1;e-=1){const r=o[e];if(!r)throw new Error(`Impossible to continue, no '{' to process for rule: '${s}'`);if(l=s.slice(0,r),a=s.slice(r+1,s.length-1),n=dr(l,t),n.success){var u;c.selector=n.selector.trim(),c.ast=n.ast,c.rawStyles=n.stylesOfSelector;const e=$r(a);null===(u=c.rawStyles)||void 0===u||u.push(...e);break}}if(0===(null===(r=c.selector)||void 0===r?void 0:r.length))throw new Error("Selector in not valid");return c},Sr=/[;}]/g,xr=/[;:}]/g,Tr=/\S/g,Pr=e=>{e.rawRuleData={selector:""}},Nr=(e,t)=>{let r,s=e.selectorBuffer.trim();if(s.startsWith("@"))throw new Error(`At-rules are not supported: '${s}'.`);try{r=ur(s)}catch(e){throw xt.error(St(e)),new Error(`${me}: '${s}'`)}if(-1===e.nextIndex){if(s===r.selector)throw new Error(`${pe}: '${e.cssToParse}'`);e.cssToParse=""}let o,n=[],l=!1;try{s=r.selector,n=r.stylesOfSelector,o=t.getSelectorAst(s),l=!0}catch(e){l=!1}return e.nextIndex>0&&(e.cssToParse=e.cssToParse.slice(e.nextIndex)),{success:l,selector:s,ast:o,stylesOfSelector:n}},Or=(e,t)=>{xr.lastIndex=e.nextIndex;let r=xr.exec(e.cssToParse);if(null===r)throw new Error(`${ue}: '${e.cssToParse}'`);let s=r.index,o=r[0];if(o===f.RIGHT){if(0!==e.cssToParse.slice(e.nextIndex,s).trim().length)throw new Error(`${ue}: '${e.cssToParse}'`);if(0===t.length)throw new Error(`${ie}: '${e.cssToParse}'`);return s}if(o===v){const n=s;if(Sr.lastIndex=n,r=Sr.exec(e.cssToParse),null===r)throw new Error(`${de}: '${e.cssToParse}'`);s=r.index,o=r[0];const l=e.cssToParse.slice(e.nextIndex,n).trim();if(0===l.length)throw new Error(`${he}: '${e.cssToParse}'`);const a=e.cssToParse.slice(n+1,s).trim();if(0===a.length)throw new Error(`${fe}: '${e.cssToParse}'`);if(t.push({property:l,value:a}),o===f.RIGHT)return s}return e.cssToParse=e.cssToParse.slice(s+1),e.nextIndex=0,Or(e,t)},Rr=e=>{const t=[],r=Or(e,t);Tr.lastIndex=r+1;const s=Tr.exec(e.cssToParse);if(null===s)return e.cssToParse="",t;const o=s.index;return e.cssToParse=e.cssToParse.slice(o),t},Ar=e=>"number"==typeof e&&!Number.isNaN(e);class Ir{constructor(e){this.callback=e,this.executeCallback=this.executeCallback.bind(this)}executeCallback(){this.lastRunTime=performance.now(),Ar(this.timerId)&&(clearTimeout(this.timerId),delete this.timerId),this.callback()}run(){if(!Ar(this.timerId)){if(Ar(this.lastRunTime)){const e=performance.now()-this.lastRunTime;if(e<Ir.THROTTLE_DELAY_MS)return void(this.timerId=window.setTimeout(this.executeCallback,Ir.THROTTLE_DELAY_MS-e))}this.timerId=window.setTimeout(this.executeCallback)}}}e(Ir,"THROTTLE_DELAY_MS",150);const Lr=["mouseover","mouseleave","mouseenter","mouseout"],Cr=["keydown","keypress","keyup","auxclick","click","contextmenu","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseout","mouseup","pointerlockchange","pointerlockerror","select","wheel"],Br=["wheel"];class Mr{constructor(){e(this,"getLastEventType",(()=>this.lastEventType)),e(this,"getTimeSinceLastEvent",(()=>this.lastEventTime?Date.now()-this.lastEventTime:null)),this.trackedEvents=Rt?Cr.filter((e=>!Br.includes(e))):Cr,this.trackedEvents.forEach((e=>{document.documentElement.addEventListener(e,this.trackEvent,!0)}))}trackEvent(e){this.lastEventType=e.type,this.lastEventTime=Date.now()}isIgnoredEventType(){const e=this.getLastEventType(),t=this.getTimeSinceLastEvent();return!!e&&Lr.includes(e)&&!!t&&t<10}stopTracking(){this.trackedEvents.forEach((e=>{document.documentElement.removeEventListener(e,this.trackEvent,!0)}))}}function Dr(e){e.isDomObserved&&(e.isDomObserved=!1,e.domMutationObserver&&e.domMutationObserver.disconnect(),e.eventTracker&&e.eventTracker.stopTracking())}const Fr=/^("|')adguard.+?/,Wr=(e,t)=>{const{node:r}=t;t.removed=!0;const s=(e=>{if(!(e instanceof Element))throw new Error("Function received argument with wrong type");let t;t=e;const r=[];for(;t&&t.nodeType===Node.ELEMENT_NODE;){let e=t.nodeName.toLowerCase();if(t.id&&"string"==typeof t.id){e+=`#${t.id}`,r.unshift(e);break}let s=t,o=1;for(;s.previousElementSibling;)s=s.previousElementSibling,s.nodeType===Node.ELEMENT_NODE&&s.nodeName.toLowerCase()===e&&(o+=1);1!==o&&(e+=`:nth-of-type(${o})`),r.unshift(e),t=t.parentElement}return r.join(" > ")})(r),o=e.removalsStatistic[s]||0;o>50?xt.error(`ExtendedCss: infinite loop protection for selector: '${s}'`):r.parentElement&&(r.parentElement.removeChild(r),e.removalsStatistic[s]=o+1)},Vr=(e,t)=>{e instanceof HTMLElement&&Object.keys(t).forEach((r=>{if(void 0!==e.style.getPropertyValue(r.toString())){let s=t[r];if(!s)return;if(r===oe&&s.match(Fr))return;s=((e,t)=>{const r=e.indexOf(t,e.length-t.length);return r>=0?e.substring(0,r):e})(s.trim(),"!important").trim(),e.style.setProperty(r,s,"important")}}))},_r=(e,t)=>{if(t.protectionObserver)return;let r;if(e.beforeStyleApplied){if(!(e=>"node"in e&&"rules"in e&&e.rules instanceof Array)(t))throw new Error("Returned IAffectedElement should have 'node' and 'rules' properties");if(r=e.beforeStyleApplied(t),!r)throw new Error("Callback 'beforeStyleApplied' should return IAffectedElement")}else r=t;if(!(e=>"node"in e&&"originalStyle"in e&&"rules"in e&&e.rules instanceof Array)(r))throw new Error("Returned IAffectedElement should have 'node' and 'rules' properties");const{node:s,rules:o}=r;for(let t=0;t<o.length;t+=1){const n=o[t],l=null==n?void 0:n.selector,a=null==n?void 0:n.style,i=null==n?void 0:n.debug;if(a){if(a.remove===ne)return void Wr(e,r);Vr(s,a)}else if(!i)throw new Error(`No style declaration in rule for selector: '${l}'`)}},Gr=e=>{e.protectionObserver&&e.protectionObserver.disconnect(),e.node.style.cssText=e.originalStyle};class Hr{constructor(e){this.styleProtectionCount=0,this.observer=new vt.MutationObserver((t=>{t.length&&(this.styleProtectionCount+=1,e(t,this))}))}observe(e,t){this.styleProtectionCount<50?this.observer.observe(e,t):xt.error("ExtendedCss: infinite loop protection for style")}disconnect(){this.observer.disconnect()}}const Ur={attributes:!0,attributeOldValue:!0,attributeFilter:["style"]},jr=(e,t)=>{if(!vt.MutationObserver)return null;const r=[];t.forEach((e=>{const{style:t}=e;t&&r.push(t)}));const s=new Hr((e=>(t,r)=>{if(!t[0])return;const{target:s}=t[0];r.disconnect(),e.forEach((e=>{Vr(s,e)})),r.observe(s,Ur)})(r));return s.observe(e,Ur),s};class qr{constructor(){this.appliesTimings=[],this.appliesCount=0,this.timingsSum=0,this.meanTiming=0,this.squaredSum=0,this.standardDeviation=0}push(e){this.appliesTimings.push(e),this.appliesCount+=1,this.timingsSum+=e,this.meanTiming=this.timingsSum/this.appliesCount,this.squaredSum+=e*e,this.standardDeviation=Math.sqrt(this.squaredSum/this.appliesCount-Math.pow(this.meanTiming,2))}}const Qr=e=>Number(e.toFixed(4)),zr=e=>{const t=[];Dr(e),e.parsedRules.forEach((r=>{const s=((e,t)=>{const r=!!t.debug||e.debug;let s;r&&(s=performance.now());const{ast:o}=t,n=[];try{n.push(...ar(o))}catch(t){e.debug&&xt.error(St(t))}if(n.forEach((r=>{let s=(o=e.affectedElements,n=r,o.find((e=>e.node===n)));var o,n;if(s)s.rules.push(t),_r(e,s);else{const o=r.style.cssText;s={node:r,rules:[t],originalStyle:o,protectionObserver:null},_r(e,s),e.affectedElements.push(s)}})),r&&s){const e=performance.now()-s;t.timingStats||(t.timingStats=new qr),t.timingStats.push(e)}return n})(e,r);Array.prototype.push.apply(t,s),r.debug&&(r.matchedElements=s)}));let r=e.affectedElements.length;for(;r;){const s=e.affectedElements[r-1];if(!s)break;t.includes(s.node)?s.removed||s.protectionObserver||(s.protectionObserver=jr(s.node,s.rules)):(Gr(s),e.affectedElements.splice(r-1,1)),r-=1}!function(e){e.isDomObserved||(e.isDomObserved=!0,e.domMutationObserver=new vt.MutationObserver((t=>{if(!t||0===t.length)return;const r=new Mr;r.isIgnoredEventType()&&function(e){return!e.some((e=>"attributes"!==e.type))}(t)||(e.eventTracker=r,e.scheduler.run())})),e.domMutationObserver.observe(document,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["id","class"]}))}(e),(e=>{if(e.areTimingsPrinted)return;e.areTimingsPrinted=!0;const t={};e.parsedRules.forEach((e=>{if(e.timingStats){const{selector:s,style:o,debug:n,matchedElements:l}=e;if(!o&&!n)throw new Error(`Rule should have style declaration for selector: '${s}'`);const a={selectorParsed:s,timings:(r=e.timingStats,{appliesTimings:r.appliesTimings.map((e=>Qr(e))),appliesCount:Qr(r.appliesCount),timingsSum:Qr(r.timingsSum),meanTiming:Qr(r.meanTiming),standardDeviation:Qr(r.standardDeviation)})};o&&o.remove===ne?a.removed=!0:(a.styleApplied=o||null,a.matchedElements=l),t[s]=a}var r})),0!==Object.keys(t).length&&xt.info("[ExtendedCss] Timings in milliseconds for %o:\n%o",window.location.href,t)})(e)};class Yr{constructor(e){if(!e)throw new Error("ExtendedCss configuration should be provided.");if(this.applyRulesCallbackListener=this.applyRulesCallbackListener.bind(this),this.context={beforeStyleApplied:e.beforeStyleApplied,debug:!1,affectedElements:[],isDomObserved:!1,removalsStatistic:{},parsedRules:[],scheduler:new Ir(this.applyRulesCallbackListener)},(t=navigator.userAgent).includes("MSIE")||t.includes("Trident/"))xt.error("Browser is not supported by ExtendedCss");else{var t;if(!e.styleSheet&&!e.cssRules)throw new Error("ExtendedCss configuration should have 'styleSheet' or 'cssRules' defined.");if(e.styleSheet)try{this.context.parsedRules.push(...((e,t)=>{const r=e.trim();if(r.includes("/*")&&r.includes("*/"))throw new Error(`${we} in stylesheet: '${r}'`);const s={isSelector:!0,nextIndex:0,cssToParse:r,selectorBuffer:"",rawRuleData:{selector:""}},o=hr();let n;for(;s.cssToParse;)if(s.isSelector){if(s.nextIndex=s.cssToParse.indexOf(f.LEFT),0===s.selectorBuffer.length&&0===s.nextIndex)throw new Error(`${ce}: '${s.cssToParse}'`);-1===s.nextIndex?s.selectorBuffer=s.cssToParse:s.selectorBuffer+=s.cssToParse.slice(0,s.nextIndex),n=Nr(s,t),n.success?(s.rawRuleData.selector=n.selector.trim(),s.rawRuleData.ast=n.ast,s.rawRuleData.rawStyles=n.stylesOfSelector,s.isSelector=!1,-1===s.nextIndex?(fr(o,s.rawRuleData),Pr(s)):(s.nextIndex=1,s.selectorBuffer="")):(s.selectorBuffer+=f.LEFT,s.cssToParse=s.cssToParse.slice(1))}else{var l;const e=Rr(s);null===(l=s.rawRuleData.rawStyles)||void 0===l||l.push(...e),fr(o,s.rawRuleData),s.nextIndex=0,Pr(s),s.isSelector=!0}return wr(o)})(e.styleSheet,ir))}catch(e){throw new Error(`Pass the rules as configuration.cssRules since configuration.styleSheet cannot be parsed because of: '${St(e)}'`)}if(e.cssRules&&this.context.parsedRules.push(...((e,t)=>{const r=hr(),s=[];return[...new Set(e.map((e=>e.trim())))].forEach((e=>{try{fr(r,kr(e,t))}catch(t){const r=St(t);s.push(`'${e}' - error: '${r}'`)}})),s.length>0&&xt.info(`Invalid rules:\n ${s.join("\n ")}`),wr(r)})(e.cssRules,ir)),this.context.debug=e.debug||this.context.parsedRules.some((e=>e.debug===le)),this.context.beforeStyleApplied&&"function"!=typeof this.context.beforeStyleApplied)throw new Error(`Invalid configuration. Type of 'beforeStyleApplied' should be a function, received: '${typeof this.context.beforeStyleApplied}'`)}}applyRulesCallbackListener(){zr(this.context)}init(){bt.setGetter()}apply(){zr(this.context),"complete"!==document.readyState&&document.addEventListener("DOMContentLoaded",this.applyRulesCallbackListener,!1)}dispose(){Dr(this.context),this.context.affectedElements.forEach((e=>{Gr(e)})),document.removeEventListener("DOMContentLoaded",this.applyRulesCallbackListener,!1)}getAffectedElements(){return this.context.affectedElements}static query(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("string"!=typeof e)throw new Error("Selector should be defined as a string.");const r=performance.now();try{return ir.querySelectorAll(e)}finally{const e=performance.now();t||xt.info(`[ExtendedCss] Elapsed: ${Math.round(1e3*(e-r))} μs.`)}}static validate(e){try{const{selector:t}=ur(e);return Yr.query(t),{ok:!0,error:null}}catch(t){return{ok:!1,error:`Error: Invalid selector: '${e}' -- ${St(t)}`}}}}return Yr}();
{
"name": "@adguard/extended-css",
"version": "2.0.56",
"version": "2.0.59",
"description": "AdGuard's TypeScript library for non-standard element selecting and applying CSS styles with extended properties.",

@@ -15,7 +15,8 @@ "main": "dist/extended-css.umd.js",

"require": "./dist/extended-css.umd.js",
"import": "./dist/extended-css.esm.js"
"import": "./dist/extended-css.esm.js",
"types": "./dist/types/src/index.d.ts"
}
},
"engines": {
"node": ">=14"
"node": ">=16"
},

@@ -22,0 +23,0 @@ "scripts": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc