{"_id":"@adguard/ecss-tree","_rev":"11-7b97c822d3e17a730506721aa549fcd9","name":"@adguard/ecss-tree","dist-tags":{"latest":"2.0.3"},"versions":{"1.0.4":{"name":"@adguard/ecss-tree","version":"1.0.4","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"scripthunter7"},"license":"MIT","_id":"@adguard/ecss-tree@1.0.4","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/scripthunter7/ecsstree#readme","bugs":{"url":"https://github.com/scripthunter7/ecsstree/issues"},"dist":{"shasum":"8d00fd11c346c5fb92b5ed94d37c3dafbba1b5e3","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-1.0.4.tgz","fileCount":18,"integrity":"sha512-J6xwEFxLH05ecIp0oE36KjVM4032Gm4diLXWXqW3h7vq6kXi9kphT13SwB1UC+tmn5gyUEjs2Bkk3AuirzCK2Q==","signatures":[{"sig":"MEUCIQCkIg/GWZeUkJ/pYUCCdmF0yVsfniRb1A3AgljLlZihjAIgfOplCC1r7Kw3h5D3e1Isiu50kxmXiwCyMV1UFMdamXE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40273,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9PaoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxMxAAosH47Q1PaWrONcNKe0LGwMmy/xY8jyJSZ5pJnFhsYgc7MSbH\r\nuE3JnvQh8UBjq1aUopbiscy+Bmttyqn0F1Jfwo1ttyaCCAoe5nCLoKW8uyE6\r\nm6Va7AfuwRj4HXJxqUn53ctGZFzH47PpNRVPfVP85ANfKvZBts/MRE5cmFyg\r\n6NkUoM6V/4f6GcgsrfjceHhMGoQCrU3yz3vMxyLkjtvtoGhZ33lNXAHvlMs1\r\ni52qd2vsycHytyjvFCIXZ1AefNSbyZKJU8oMn8Tv9ripI/6+plON8kKgz/r+\r\nOHVV8d1a46jbGQTHneGp8DWulqXSgvm8NH9eDcFpxEziodA0/1vv9gABoMVP\r\nyW63v399Nd26V7kD6cupUcvNcgXQ4g0MAyJ2vzlwZuMleK+zdwMulI6cDHQO\r\n001u78+ndBLCjlL9CZICsgT9Ze4pVjLD77yghg0n+qWXMavkcDJyS6nWo1O/\r\nL3XZ5Q1qp992zY1qlOjPaYGvgFUbkXm3oU23EdmarljeEHyzbuA5yGLt1ct3\r\nPUn4t2iqjwmrDF8yqVfiq8/O94jgqizS4l+7BdhLTg8EwoNpBIPetRus+3Xe\r\nhb/O0r11gLra9OGE7e2jDFv3OgjGYYJK/RtHmYAtanv8EpMUF+r03wFYMyFC\r\nMha4ZllT8qMfmbeKKwOMObAwkXvvf6UNbVs=\r\n=HLTt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/ecsstree.cjs","type":"module","module":"dist/ecsstree.esm.js","browser":"dist/ecsstree.iife.js","scripts":{"lint":"eslint .","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","build":"yarn rollup --config rollup.config.js","prepare":"husky install"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"repository":{"url":"git+https://github.com/scripthunter7/ecsstree.git","type":"git"},"description":"Adblock Extended CSS fork for CSSTree","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2023 scripthunter7\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","dependencies":{"css-tree":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.0","eslint":"^8.34.0","rollup":"^3.8.1","prettier":"^2.8.4","@babel/core":"^7.20.7","@babel/preset-env":"^7.20.2","@rollup/plugin-json":"^6.0.0","@rollup/plugin-alias":"^4.0.2","@rollup/plugin-babel":"^6.0.3","eslint-plugin-import":"^2.27.5","@rollup/plugin-terser":"^0.2.1","eslint-config-prettier":"^8.6.0","eslint-plugin-prettier":"^4.2.1","@rollup/plugin-commonjs":"^24.0.0","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^15.0.1","rollup-plugin-node-externals":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_1.0.4_1676998312217_0.5059131551164788","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@adguard/ecss-tree","version":"1.0.5","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"scripthunter7"},"license":"MIT","_id":"@adguard/ecss-tree@1.0.5","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/scripthunter7/ecsstree#readme","bugs":{"url":"https://github.com/scripthunter7/ecsstree/issues"},"dist":{"shasum":"42da5c07ce628d38cc50efa88a0e4bc6313cb632","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-1.0.5.tgz","fileCount":23,"integrity":"sha512-L5g3pltJMiD19Fw7ZIGsK+E2QgVNi8QgVQhQo1EQjkS1tHXemzaoWZYgZ4asecmeJC0Wli6t/qzm7w6otBX2Pw==","signatures":[{"sig":"MEUCIHUnGnoKpywHDnCBocpp52aDpe++GxSxvNHJ3OKVQ+ftAiEA27729M5DIF9HUE29pSI2tG2A5pW05nfrZPNpivM1XqY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":420039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9PeWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqswg//aI4791YNLTILNnzXfuU1AkwSjqt4z9aBDxh/8S7tAv3ECA/d\r\nf8sVgeUT0LFqnhLhsLqMXzFAHDWcG2XYAeafeodscXFqdchVpvyZ7vdf2uJs\r\n2rN8xqvimG/Xskk+U50emlEhMkSgIkaSp40mr6bUILkV0UO/WhZ0dfJK1Hwh\r\nMv/+PEzAEuZIe7jnAUjCRr9NaCcSaAsSCHqitYHXZ2edV1Tttckz4fliIapL\r\nM6KJtUHWRcPVTEmlwmvRCsOEIApHkR96XJ9pOtJ7xxjYJ6xZNOD9vNgA1E5U\r\nLzrOJldIQEVhBP3dKdyipeUHmZq+nrGU6GrTWYcTTx1FtafOSqo+eoe3ywoO\r\nl5+oKYpV1CLkrl+p8zasGaKi1QPOhcijPcuJHb3t5B/mofV7rz/7WS9GDaEg\r\nOvj4bczobBizXIbYPrq6dM/EU8mvEj8v791NRHzFUobYRjX3ZgqRBf0H8SF2\r\nFfrpPoq36E6WbSaCG3TlBBjSk54dyFGVvg4MPsjQmx+QD4HNE5oep6eZkI6o\r\nbhUYfTNz1RPT6eHNFW+IUznUPep7UrEl9/ksrnvrtkR3oqNz0Z0C4zJyB1IK\r\nThdHqd6f22UYQbHvMTciHNEDkeHp9TnZaqrGvWmpaCZawz07BuhzjtK2Gc4z\r\nyLzfwiAfPUoks7kVo4hzsRT5wYD4nmcT5NA=\r\n=hagJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/ecsstree.cjs","type":"module","module":"dist/ecsstree.esm.js","browser":"dist/ecsstree.iife.js","scripts":{"lint":"eslint .","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","build":"yarn rollup --config rollup.config.js","prepare":"husky install"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"repository":{"url":"git+https://github.com/scripthunter7/ecsstree.git","type":"git"},"description":"Adblock Extended CSS fork for CSSTree","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2023 scripthunter7\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","dependencies":{"css-tree":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.0","eslint":"^8.34.0","rollup":"^3.8.1","prettier":"^2.8.4","@babel/core":"^7.20.7","@babel/preset-env":"^7.20.2","@rollup/plugin-json":"^6.0.0","@rollup/plugin-alias":"^4.0.2","@rollup/plugin-babel":"^6.0.3","eslint-plugin-import":"^2.27.5","@rollup/plugin-terser":"^0.2.1","eslint-config-prettier":"^8.6.0","eslint-plugin-prettier":"^4.2.1","@rollup/plugin-commonjs":"^24.0.0","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^15.0.1","rollup-plugin-node-externals":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_1.0.5_1676998550667_0.6478568673914402","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@adguard/ecss-tree","version":"1.0.6","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@1.0.6","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"b9c897bc63bc52e928d9d0399c4a3b5994718ab8","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-1.0.6.tgz","fileCount":11,"integrity":"sha512-XAD4JPvtandme7s2U24JLWzUJzplkcJMSvSGBM1M1vF2jjS7cPsXR0GerwUaVg63J69e74o8YPLHN5Be60EL5g==","signatures":[{"sig":"MEYCIQDLhbNgP/98Pkao47A+ggjC+CqMro9USyA2GQ6yHBxOzgIhANZXVLUkZL8Z6dPpAMNA0YG6LP0TyG4y6Fof0+cpMRN8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":442888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9fecACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJrg//ZMBWWHLVBIosX2JjScSoj7x24KsAuFIt44rWCarelc30R4dM\r\nI/Wwr7OPhVT4WUibHZ5RfWTNe3w0bENoH3SmZ/Tlgf4WNT2csSor3bUO7IN2\r\n+FTcNfiMMNTS518be64Q7LSWW3hHO2wVwd58Gikbw7JDcnEs6NdOyhj0XCf9\r\nISZKfiY5JMgux/fO9y8DGkr6v5NY+/ujjT2rPkieHvMgH9tFhF/dc16DafIs\r\nQiEfeQfxXX5p2t0ZqiD9KWXtX24BLrDrfQQLw8OZo8NPTy5Y7Ex19CxI9MdU\r\n4JbSoqmqcDb/4kfYomok5mZCYp+2ap7pJLbkAzvJ1UG4kJ0GuM+JsPP2zXO3\r\nNovDNdOzLNi02DZJ5U+mOW9MMVtQd0lCeXs9V+JlY0Ce8ekpHBsjDZ5ajrtc\r\nQjXY0CVDq4z8PQ7onmcClhgP1KTNg/vIpN/gYGtS6LsOBIztaUAXQhJ8av5p\r\nnuJgxNDWChkkCY6BYc5jkF/U0n9xERNq3oOsPhXzJrr77M08Nes0qHuj27yD\r\n1aAcIIzoK7k6Lz68Ixc4fIxfDyY5NV2R9jouR5kZ5HKaSMibE/5rdsusg519\r\n/xWXHln+e7TNxEww0/l9uBBeGbH9u35z4c8wK72b1z5mbm7pi9l2PaZdDNSJ\r\n7MdMUma98Am2IOfa0cPd8eNtQxEFbqbfUCQ=\r\n=dym1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/ecsstree.cjs","type":"module","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.esm.js","browser":"dist/ecsstree.iife.js","scripts":{"lint":"eslint . --cache","test":"node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js","build":"rollup --config rollup.config.js","prepare":"husky install"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"repository":{"url":"git+https://github.com/AdguardTeam/ecsstree.git","type":"git"},"description":"Adblock Extended CSS fork for CSSTree","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2023 AdGuard Software Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","dependencies":{"css-tree":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.0","eslint":"^8.34.0","rollup":"^3.8.1","typescript":"^4.9.5","@babel/core":"^7.20.7","@types/css-tree":"^2.3.0","@babel/preset-env":"^7.20.2","rollup-plugin-dts":"^5.2.0","@rollup/plugin-json":"^6.0.0","@rollup/plugin-alias":"^4.0.2","@rollup/plugin-babel":"^6.0.3","eslint-plugin-import":"^2.27.5","@rollup/plugin-terser":"^0.2.1","@rollup/plugin-commonjs":"^24.0.0","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^15.0.1","rollup-plugin-node-externals":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_1.0.6_1677064092265_0.46036570419637557","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"@adguard/ecss-tree","version":"1.0.7","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@1.0.7","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"ed20b86ba780db5605fee613eee75a20a1b1d0cd","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-1.0.7.tgz","fileCount":11,"integrity":"sha512-z4JI+pCIvL7TnawzUdXyVMRnp7WqX6+iorELz+Lf68YWm+TRHxwRVNQ6DQqxrUSilOJDZrGXGIqEGz6wlgsRVQ==","signatures":[{"sig":"MEUCIGd1BiPykvdOVOc0ui8aL0E6hS4p9sXCrp/rBSCbX1/uAiEAhTWAw6tp7giGDRJuhBVuZ62Qt9BV9IT+AtpCmNZyuIc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":444911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9meXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoSjA//eQ4Fn2/F49yicqwD9MUZC8EYO5xJltI3aWaf0pUHwUJXDeCE\r\nSqm+wpwKOce8jmQTE5cV8KaVKQcxYfXwWB0seYgdTlQEHZsakcHtk3aX2sqB\r\nLLK3zXGX7Gb2muGHFuc1PIZlBVoYMME5MbPxIddOPmeRAatIFVA6LNtqQsOt\r\n81AJOGqXOeU7jykrHbTdbkvhHSuCM0MqqmNZUxhjFnIduf422UebwaoRYUnr\r\nCBetXGsw5caKrcJ8WtvVfS9zBBTPDR8/KmJLKK44cmQpzYe/QvUu479rjIiv\r\nz+UoLA5OPfr5vQhVRzATMqtFAcyUXz/aDLqjlKnWGEdLB3REZ4Kxc4Kst1Q/\r\nnUuYXzCSRw6EP16fobFyY4ex5eq4gwbrG/o1vQd1HQovTxhPMifDcKpoYfRa\r\n8LJtiNfkhhPcHPMT/t1RWE8unLmnG3pitbBgG7aMaQzLDsEhQ4iPLWes8DO7\r\nxbSooR6L46BxNm8xhkEbK2oz11nhtlAUv9WroA+Ycm4vQzxZ3bxBl0Hd62Kl\r\nMNbYyJls3rMNwVBMXRVmxJ5I2J7FF7rrnNsAZDv5XiuCJNDrRr7p+Adb8NaH\r\nErnka8VKikd5UFqlMSI815P7sSbO/isoS5LLHevjpm4AhlLWxS/wiIsrrM1I\r\nhOiaSaM87nZm6cfMV1rbevJaadsin58rNko=\r\n=BFcJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/ecsstree.cjs","type":"module","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.esm.js","browser":"dist/ecsstree.iife.js","scripts":{"lint":"eslint . --cache","test":"node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js","build":"rollup --config rollup.config.js","prepare":"husky install"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"repository":{"url":"git+https://github.com/AdguardTeam/ecsstree.git","type":"git"},"description":"Adblock Extended CSS fork for CSSTree","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2023 AdGuard Software Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","dependencies":{"css-tree":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.0","eslint":"^8.34.0","rollup":"^3.8.1","typescript":"^4.9.5","@babel/core":"^7.20.7","@types/css-tree":"^2.3.0","@babel/preset-env":"^7.20.2","rollup-plugin-dts":"^5.2.0","@rollup/plugin-json":"^6.0.0","@rollup/plugin-alias":"^4.0.2","@rollup/plugin-babel":"^6.0.3","eslint-plugin-import":"^2.27.5","@rollup/plugin-terser":"^0.2.1","@rollup/plugin-commonjs":"^24.0.0","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^15.0.1","rollup-plugin-node-externals":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_1.0.7_1677092758815_0.46930311746751685","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"@adguard/ecss-tree","version":"1.0.8","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@1.0.8","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"9209c2118c88821fc822851153cc042d58abef67","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-1.0.8.tgz","fileCount":11,"integrity":"sha512-Y5dfzWH5nnzEH9URuzOQ1RXl0bzmLiGO7Nt9Wc/na7uD5UHqoz4PlzVllFpO1bLA+Cqq5ebNrz+uWRKN3BxSTg==","signatures":[{"sig":"MEQCIFgWVVmWnLtvoAqHaevy4a98fCEoHo1JBKqfTstXyjcSAiB9PC97tNEBouXSHHfQENoas92wH4VKpuvJDddiBAalTg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":446229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/N9NACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrVbw/8Cz4GGKsP/bA7k6OGRZhAa9m+4v7kzF5/y6ihyUrVzZbLJcL6\r\ne17yNMPeyBfcFk7AVE5G2VvT5vsdaeOBaHBxE6E6qej+l54/PASPbFHHekQe\r\nVJeF+dpFKueVdfcJYSsE8rHqX3r7abpIVHnm6qOaIqw2EYGL4zgtQnHoo+ps\r\nSrHy98oZRQWipHpJcI9MAV4f+gjRqweadOoTGcpD50zc5fytFno7saypr54M\r\n5OckGqISPZUH0cwqlTkC2eWAiqpiNF98AGfIHd1RjJYBBOCJFqqq0LZLkMOY\r\nEaLHoiJyB00B2dLq6cnkdEIv1mOFat4uSbPO/ELmtcMwXJhAn3GGsqiBXQ63\r\nj9ae/haiugyoncKIaUr3RMmzmPGFPYjvKdhLsqXvyjKvL4MmQCbRQnqCXkPO\r\n0jRkfdCAsKzY8qI4pQDwszZ1V9VB3RdA2UPtKPnwriOSbM2pJhM42ccX3dZE\r\nFIklUxt1Xf8c4i7Lx+MhFSmACqgPqfz51RRwqFV99DbNhHdKLXbaAAuUX5SP\r\n7g2oWuYkATCr5FRRHCEs07C/2VvC6PTKvPJvzChbsptjOskaZesGycfSopzv\r\ncLA/uxFJ4fQBxjY5tYQbs75vfFQ/FYx9VBWdEyGSgqL84c497aSVP29MBKD0\r\nKdZS1XWqwfntJ4atfd/TInWOG34IS2xkpB8=\r\n=wvYY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/ecsstree.cjs","type":"module","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.esm.js","browser":"dist/ecsstree.iife.js","scripts":{"lint":"eslint . --cache","test":"node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js","build":"rollup --config rollup.config.js","prepare":"husky install"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"repository":{"url":"git+https://github.com/AdguardTeam/ecsstree.git","type":"git"},"description":"Adblock Extended CSS fork for CSSTree","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2023 AdGuard Software Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","dependencies":{"css-tree":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","husky":"^8.0.0","eslint":"^8.34.0","rollup":"^3.8.1","typescript":"^4.9.5","@babel/core":"^7.20.7","@types/css-tree":"^2.3.0","@babel/preset-env":"^7.20.2","rollup-plugin-dts":"^5.2.0","@rollup/plugin-json":"^6.0.0","@rollup/plugin-alias":"^4.0.2","@rollup/plugin-babel":"^6.0.3","eslint-plugin-import":"^2.27.5","@rollup/plugin-terser":"^0.2.1","@rollup/plugin-commonjs":"^24.0.0","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^15.0.1","rollup-plugin-node-externals":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_1.0.8_1677516621720_0.8621523385414314","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@adguard/ecss-tree","version":"1.1.0","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@1.1.0","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"27d8650ae7fb7fb08b780a41f765564e7251f59b","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-1.1.0.tgz","fileCount":9,"integrity":"sha512-Qs7cpUH5AexO9JAXxMPmh6CwdNEnP1qUBSpvHnGxPmHQDjBzpAn4qz8zsJILmX4Rc5Up0iqeYcYC7Pq5HBvoyQ==","signatures":[{"sig":"MEYCIQCcnSTZxtDdR5YQtlmnly2Dr8NF1vq2pbok2UTUW/czNgIhAMkmE0PSwTjKgVhx0glpOlrZKK9J9FsGZeAh6vxiUTn2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94919},"main":"dist/ecsstree.cjs","type":"module","_from":"file:ecsstree.tgz","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.js","exports":{".":{"types":"./dist/ecsstree.d.ts","import":"./dist/ecsstree.js","require":"./dist/ecsstree.cjs"}},"scripts":{"lint":"eslint . --cache && markdownlint .","test":"jest","build":"rimraf dist && rollup --config rollup.config.js && node tasks/build-txt.js","prepare":"node .husky/install.js","test:smoke":"(cd test/smoke/esm && yarn test) && (cd test/smoke/cjs && yarn test) && (cd test/smoke/typescript && yarn test)"},"_npmUser":{"name":"maximtop","email":"maximtop@gmail.com"},"_resolved":"/opt/atlassian/application-data/bamboo/shared/build-dir/1933314/205127684-205193222/ecsstree.tgz","_integrity":"sha512-Qs7cpUH5AexO9JAXxMPmh6CwdNEnP1qUBSpvHnGxPmHQDjBzpAn4qz8zsJILmX4Rc5Up0iqeYcYC7Pq5HBvoyQ==","repository":{"url":"git+https://github.com/AdguardTeam/ecsstree.git","type":"git"},"_npmVersion":"10.5.0","description":"Adblock Extended CSS fork for CSSTree","directories":{},"_nodeVersion":"21.7.3","dependencies":{"css-tree":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.5","jsdoc":"^4.0.3","eslint":"^8.34.0","rimraf":"^5.0.10","rollup":"^4.21.2","@swc/core":"^1.7.24","@swc/jest":"^0.2.36","typescript":"^5.6.2","markdownlint":"^0.35.0","@types/css-tree":"^2.3.8","markdownlint-cli":"^0.41.0","rollup-plugin-dts":"^6.1.1","@rollup/plugin-swc":"^0.4.0","@rollup/plugin-json":"^6.1.0","eslint-plugin-jsdoc":"^50.2.2","@rollup/plugin-alias":"^5.1.0","eslint-plugin-import":"^2.30.0","@rollup/plugin-terser":"^0.2.1","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^15.2.3","eslint-plugin-import-newlines":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_1.1.0_1725989203844_0.9901476267828371","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@adguard/ecss-tree","version":"2.0.0","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@2.0.0","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"4f42e97c546ed5a297186f892e546537ca9ea97f","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-2.0.0.tgz","fileCount":6,"integrity":"sha512-IWywA8l6WhsjcFZV0Z6UGBiiwnW2tcoAEb+rOLlsdQVcDwmQKpRZKho8l3Ily814eYURt9r6pJnjQgcpP8RRww==","signatures":[{"sig":"MEQCIFQelp/a+8GPmQC6FXRP128v7WTou7keNgh4f65vwG8qAiBq9O0c8jfQ63/PsiMSBggd4rNEaQ6R0qxMgyk4JsE5wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137504},"main":"dist/ecsstree.cjs","type":"module","_from":"file:ecsstree.tgz","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.js","exports":{".":{"types":"./dist/ecsstree.d.ts","import":"./dist/ecsstree.js","require":"./dist/ecsstree.cjs"}},"scripts":{"lint":"eslint . --cache && markdownlint .","test":"vitest","build":"rimraf dist && rollup --config rollup.config.js && node tasks/build-txt.js","test:smoke":"(cd test/smoke/esm && pnpm test) && (cd test/smoke/cjs && pnpm test) && (cd test/smoke/typescript && pnpm test)"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"_resolved":"/opt/atlassian/application-data/bamboo/shared/build-dir/204505107/205127684-205193222/ecsstree.tgz","_integrity":"sha512-IWywA8l6WhsjcFZV0Z6UGBiiwnW2tcoAEb+rOLlsdQVcDwmQKpRZKho8l3Ily814eYURt9r6pJnjQgcpP8RRww==","repository":{"url":"git+https://github.com/AdguardTeam/ecsstree.git","type":"git"},"_npmVersion":"10.9.2","description":"Adblock Extended CSS fork for CSSTree","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@eslint/css-tree":"^3.6.6","@adguard/css-tokenizer":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","eslint":"^8.57.1","rimraf":"^5.0.10","rollup":"^4.52.5","vitest":"^3.2.4","@swc/core":"^1.13.5","typescript":"^5.6.2","@types/node":"^22.14.0","markdownlint":"^0.35.0","eslint-plugin-n":"^17.23.1","markdownlint-cli":"^0.41.0","rollup-plugin-dts":"^6.2.3","@rollup/plugin-swc":"^0.4.0","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^3.2.4","eslint-plugin-jsdoc":"^61.1.5","@rollup/plugin-alias":"^5.1.1","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^16.0.3","eslint-plugin-import-newlines":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_2.0.0_1761050260986_0.700345388094699","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@adguard/ecss-tree","version":"2.0.1","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@2.0.1","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"a85138fe38c2848a808d70e10e422611a1388eaa","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-2.0.1.tgz","fileCount":6,"integrity":"sha512-GvVz3rLQqcZkNVpUbdowimokhPxNL6pODwmZbiWTUfa3bEAT7XI+4ydxVZmtK2WS2u7qu/IISmI69PSFXE0ucw==","signatures":[{"sig":"MEQCIAOYRS607Tnhz7aKt5NvnJlehuGLIErnN/NhvilqQSpjAiAokdDt17BRQI8D740T1ky8N/6p1wIibAefs+oCeh6VXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137632},"main":"dist/ecsstree.cjs","type":"module","_from":"file:ecsstree.tgz","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.js","exports":{".":{"types":"./dist/ecsstree.d.ts","import":"./dist/ecsstree.js","require":"./dist/ecsstree.cjs"}},"scripts":{"lint":"eslint . --cache && markdownlint .","test":"vitest","build":"rimraf dist && rollup --config rollup.config.js && node tasks/build-txt.js","increment":"pnpm version patch --no-git-tag-version","test:smoke":"(cd test/smoke/esm && pnpm test) && (cd test/smoke/cjs && pnpm test) && (cd test/smoke/typescript && pnpm test)"},"_npmUser":{"name":"ameshkov","email":"am@adguard.com"},"_resolved":"/opt/atlassian/application-data/bamboo/shared/build-dir/1933314/205127684-205193222/ecsstree.tgz","_integrity":"sha512-GvVz3rLQqcZkNVpUbdowimokhPxNL6pODwmZbiWTUfa3bEAT7XI+4ydxVZmtK2WS2u7qu/IISmI69PSFXE0ucw==","repository":{"url":"git+https://github.com/AdguardTeam/ecsstree.git","type":"git"},"_npmVersion":"10.9.2","description":"Adblock Extended CSS fork for CSSTree","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@eslint/css-tree":"3.6.6","@adguard/css-tokenizer":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","eslint":"^8.57.1","rimraf":"^5.0.10","rollup":"^4.52.5","vitest":"^3.2.4","@swc/core":"^1.13.5","typescript":"^5.6.2","@types/node":"^22.14.0","markdownlint":"^0.35.0","eslint-plugin-n":"^17.23.1","markdownlint-cli":"^0.41.0","rollup-plugin-dts":"^6.2.3","@rollup/plugin-swc":"^0.4.0","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^3.2.4","eslint-plugin-jsdoc":"^61.1.5","@rollup/plugin-alias":"^5.1.1","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^16.0.3","eslint-plugin-import-newlines":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_2.0.1_1763738407154_0.7916414742628839","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@adguard/ecss-tree","version":"2.0.2","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@2.0.2","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"fc0194d3a458f3a25880da7414f58c64a10f476a","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-2.0.2.tgz","fileCount":7,"integrity":"sha512-iGbf80jQnLLo49Ihcgjw+E2vd2H+eZ0f8nos84kPkcV5fSsPQ+JUvGuGaPpMntMcGtgAoU8hkJopf/xqegf38g==","signatures":[{"sig":"MEQCICyY0PEGOqbj6zmMSez9jBuUxmXQFPc718Nh0yc0I++wAiACD/6qfEDYZ/aEBUKBMmhhrnPjhwYp63HkqlFSN6cWwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143934},"main":"dist/ecsstree.cjs","type":"module","_from":"file:ecsstree.tgz","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.js","exports":{".":{"types":"./dist/ecsstree.d.ts","import":"./dist/ecsstree.js","require":"./dist/ecsstree.cjs"}},"scripts":{"lint":"eslint . --cache && markdownlint .","test":"vitest","build":"rimraf dist && rollup --config rollup.config.js","increment":"pnpm version patch --no-git-tag-version","test:smoke":"(cd test/smoke/esm && pnpm test) && (cd test/smoke/cjs && pnpm test) && (cd test/smoke/typescript && pnpm test)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:00727691-c5b7-403d-85bc-5e8a16558b1b"}},"_resolved":"/home/runner/work/ext-ecsstree/ext-ecsstree/ecsstree.tgz","_integrity":"sha512-iGbf80jQnLLo49Ihcgjw+E2vd2H+eZ0f8nos84kPkcV5fSsPQ+JUvGuGaPpMntMcGtgAoU8hkJopf/xqegf38g==","repository":{"url":"git+https://github.com/AdGuardSoftwareLimited/ext-ecsstree.git","type":"git"},"_npmVersion":"11.13.0","description":"Adblock Extended CSS fork for CSSTree","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@eslint/css-tree":"3.6.6","@adguard/css-tokenizer":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","eslint":"^8.57.1","rimraf":"^5.0.10","rollup":"^4.52.5","vitest":"^3.2.4","@swc/core":"^1.13.5","typescript":"^5.6.2","@types/node":"^22.14.0","markdownlint":"^0.35.0","eslint-plugin-n":"^17.23.1","markdownlint-cli":"^0.41.0","rollup-plugin-dts":"^6.2.3","@rollup/plugin-swc":"^0.4.0","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^3.2.4","eslint-plugin-jsdoc":"^61.1.5","@rollup/plugin-alias":"^5.1.1","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^16.0.3","eslint-plugin-import-newlines":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_2.0.2_1781886641173_0.684159023492757","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@adguard/ecss-tree","version":"2.0.3","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","_id":"@adguard/ecss-tree@2.0.3","maintainers":[{"name":"ameshkov","email":"am@adguard.com"},{"name":"maximtop","email":"maximtop@gmail.com"},{"name":"blakhard","email":"vlad.abdulmianov@gmail.com"}],"homepage":"https://github.com/AdguardTeam/ecsstree#readme","bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"dist":{"shasum":"3583e8613b7deb23f3255245b1080531cf61c0ab","tarball":"https://registry.npmjs.org/@adguard/ecss-tree/-/ecss-tree-2.0.3.tgz","fileCount":7,"integrity":"sha512-hw7ylftc1khCRA20O/V6gGQoq+UZSZP6GydMDbn/KRTxJ4Iv9mC0BX3HZ+e1HK0E7iFjNbphNXsATy9vIXJtyA==","signatures":[{"sig":"MEQCIFf4Yq1ybPA4+gZLZJ497RYwc9VZ5A0/V8MDVfNC1xVzAiBplGcmKASPDIDIo6hCVO0HNSW5kEwJPZGbqpKCCncp0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144032},"main":"dist/ecsstree.cjs","type":"module","_from":"file:ecsstree.tgz","types":"dist/ecsstree.d.ts","module":"dist/ecsstree.js","exports":{".":{"types":"./dist/ecsstree.d.ts","import":"./dist/ecsstree.js","require":"./dist/ecsstree.cjs"}},"scripts":{"lint":"eslint . --cache && markdownlint .","test":"vitest","build":"rimraf dist && rollup --config rollup.config.js","increment":"pnpm version patch --no-git-tag-version","test:smoke":"(cd test/smoke/esm && pnpm test) && (cd test/smoke/cjs && pnpm test) && (cd test/smoke/typescript && pnpm test)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:00727691-c5b7-403d-85bc-5e8a16558b1b"}},"_resolved":"/home/runner/work/ext-ecsstree/ext-ecsstree/ecsstree.tgz","_integrity":"sha512-hw7ylftc1khCRA20O/V6gGQoq+UZSZP6GydMDbn/KRTxJ4Iv9mC0BX3HZ+e1HK0E7iFjNbphNXsATy9vIXJtyA==","repository":{"url":"git+https://github.com/AdGuardSoftwareLimited/ext-ecsstree.git","type":"git"},"_npmVersion":"11.13.0","description":"Adblock Extended CSS fork for CSSTree","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@eslint/css-tree":"3.6.6","@adguard/css-tokenizer":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdoc":"^4.0.5","eslint":"^8.57.1","rimraf":"^5.0.10","rollup":"^4.52.5","vitest":"^3.2.4","@swc/core":"^1.13.5","typescript":"^5.6.2","@types/node":"^22.14.0","markdownlint":"^0.35.0","eslint-plugin-n":"^17.23.1","markdownlint-cli":"^0.41.0","rollup-plugin-dts":"^6.2.3","@rollup/plugin-swc":"^0.4.0","@rollup/plugin-json":"^6.1.0","@vitest/coverage-v8":"^3.2.4","eslint-plugin-jsdoc":"^61.1.5","@rollup/plugin-alias":"^5.1.1","eslint-plugin-import":"^2.32.0","@rollup/plugin-terser":"^0.4.4","eslint-config-airbnb-base":"^15.0.0","@rollup/plugin-node-resolve":"^16.0.3","eslint-plugin-import-newlines":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/ecss-tree_2.0.3_1782785323372_0.672459632905541","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2023-02-21T16:51:52.151Z","modified":"2026-08-19T10:43:20.027Z","1.0.4":"2023-02-21T16:51:52.415Z","1.0.5":"2023-02-21T16:55:50.814Z","1.0.6":"2023-02-22T11:08:12.481Z","1.0.7":"2023-02-22T19:05:59.030Z","1.0.8":"2023-02-27T16:50:21.929Z","1.1.0":"2024-09-10T17:26:44.033Z","2.0.0":"2025-10-21T12:37:41.185Z","2.0.1":"2025-11-21T15:20:07.352Z","2.0.2":"2026-06-19T16:30:41.321Z","2.0.3":"2026-06-30T02:08:43.535Z"},"bugs":{"url":"https://github.com/AdguardTeam/ecsstree/issues"},"author":{"name":"AdGuard Software Ltd.","email":"https://adguard.com"},"license":"MIT","homepage":"https://github.com/AdguardTeam/ecsstree#readme","keywords":["css","ecss","extendedcss","ast","tokenizer","parser","walker","lexer","generator","utils","syntax","validation","adblock","ublock","adguard"],"repository":{"url":"git+https://github.com/AdGuardSoftwareLimited/ext-ecsstree.git","type":"git"},"description":"Adblock Extended CSS fork for CSSTree","maintainers":[{"email":"am@adguard.com","name":"ameshkov"},{"email":"maximtop@gmail.com","name":"maximtop"},{"email":"vlad.abdulmianov@gmail.com","name":"blakhard"},{"email":"d.naumov@adguard.com","name":"d13410n3"}],"readme":"<!-- markdownlint-disable -->\n<img align=\"right\" width=\"111\" height=\"111\" alt=\"CSSTree logo\" src=\"https://raw.githubusercontent.com/csstree/csstree/master/assets/csstree-logo-rounded.svg\"/>\n<!-- markdownlint-enable -->\n\n<!-- omit in toc -->\n# ECSSTree\n\n<!--markdownlint-disable MD013-->\n[![NPM version](https://img.shields.io/npm/v/@adguard/ecss-tree.svg)](https://www.npmjs.com/package/@adguard/ecss-tree)\n[![NPM Downloads](https://img.shields.io/npm/dm/@adguard/ecss-tree.svg)](https://www.npmjs.com/package/@adguard/ecss-tree)\n[![LICENSE](https://img.shields.io/github/license/AdguardTeam/ecsstree)](https://github.com/AdguardTeam/ecsstree/blob/main/LICENSE)\n<!--markdownlint-enable MD013-->\n\nAdblock Extended CSS supplement for [CSSTree](https://github.com/csstree/csstree).\nOur primary goal is to change the internal behavior of the CSSTree parser to support\nExtended CSS (ECSS) language elements, but we don't change the API or the AST structure.\nTherefore ECSSTree fully backwards compatible with CSSTree, so you can pass our AST to CSSTree functions\nand vice versa without any problems.\n\n> **Note:** This package is developed in\n> [AdGuardSoftwareLimited/ext-ecsstree](https://github.com/AdGuardSoftwareLimited/ext-ecsstree).\n> The [AdguardTeam/ecsstree](https://github.com/AdguardTeam/ecsstree)\n> repository is a public mirror.\n>\n> [!NOTE]\n> If you are looking for a library that can parse CSS, but you don't know what is Adblock\n> or Extended CSS, you should probably use [CSSTree](https://github.com/csstree/csstree) instead of this library :)\n\n## Table of contents\n\n- [Table of contents](#table-of-contents)\n- [Installation](#installation)\n- [Supported Extended CSS elements](#supported-extended-css-elements)\n- [Motivation](#motivation)\n    - [Advanced validation](#advanced-validation)\n- [Handle problematic cases](#handle-problematic-cases)\n- [Examples](#examples)\n- [Reporting problems / Requesting features](#reporting-problems--requesting-features)\n    - [Contributing](#contributing)\n    - [Development](#development)\n        - [Prerequisites](#prerequisites)\n        - [Commands](#commands)\n- [License](#license)\n- [Acknowledgements](#acknowledgements)\n- [References](#references)\n\n## Installation\n\nYou can install the library using\n\n- [PNPM][pnpm-pkg-manager-url]: `pnpm add @adguard/ecss-tree`\n- [NPM][npm-pkg-manager-url]: `npm install @adguard/ecss-tree`\n- [Yarn][yarn-pkg-manager-url]: `yarn add @adguard/ecss-tree`\n\n[npm-pkg-manager-url]: https://www.npmjs.com/get-npm\n[pnpm-pkg-manager-url]: https://pnpm.io/\n[yarn-pkg-manager-url]: https://yarnpkg.com/en/docs/install\n\nOr you can use it via esm.run: <https://esm.run/@adguard/ecss-tree>\n\n## Supported Extended CSS elements\n\nCurrently, the following Extended CSS pseudo classes are supported:\n\n- `:-abp-contains(raw)`: [[ABP reference]][abp-extcss]\n- `:-abp-has(selector list)`: [[ABP reference]][abp-extcss]\n- `:contains(raw)`: [[ADG reference]][contains-adg]\n- `:has-text(raw)`: [[uBO reference]][has-text-ubo]\n- `:if-not(selector)`: [[ADG reference]][if-not-adg]\n- `:matches-css-after(raw)`: [[uBO reference]][matches-css-after-ubo]\n- `:matches-css-before(raw)`: [[uBO reference]][matches-css-before-ubo]\n- `:matches-css(raw)`: [[ADG reference]][matches-css-adg], [[uBO reference]][matches-css-ubo]\n- `:matches-media(media query list)`: [[uBO reference]][matches-media-ubo]\n- `:min-text-length(number)`: [[uBO reference]][min-text-length-ubo]\n- `:nth-ancestor(number)`: [[ADG reference]][nth-ancestor-adg]\n- `:style(declaration list)`: [[uBO reference]][style-ubo]\n- `:upward(selector list / number)`: [[ADG reference]][upward-adg], [[uBO reference]][upward-ubo]\n- `:xpath(raw)`: [[ADG reference]][xpath-adg], [[uBO reference]][xpath-ubo]\n\nIn addition, CSSTree supports the following pseudo classes\n[by default](https://github.com/csstree/csstree/blob/master/lib/syntax/pseudo/index.js):\n\n- `:has(selector list)`: [[W3C reference]][has-w3c], [[ADG reference]][has-adg], [[uBO reference]][has-ubo]\n- `:not(selector list)`: [[W3C reference]][not-w3c], [[ADG reference]][not-adg], [[uBO reference]][not-ubo]\n- `:is(selector list)`: [[W3C reference]][is-w3c], [[ADG reference]][is-adg], [[uBO reference]][is-ubo]\n\n[has-w3c]: https://drafts.csswg.org/selectors-4/#has-pseudo\n[is-w3c]: https://drafts.csswg.org/selectors-4/#is-pseudo\n[not-w3c]: https://drafts.csswg.org/selectors-4/#negation-pseudo\n\n[abp-extcss]: https://help.adblockplus.org/hc/en-us/articles/360062733293#elemhide_css\n\n[contains-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-contains\n[has-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-has\n[if-not-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-if-not\n[is-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-is\n[matches-css-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-matches-css\n[not-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-not\n[nth-ancestor-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-nth-ancestor\n[upward-adg]: https://github.com/AdguardTeam/ExtendedCss#extended-css-upward\n[xpath-adg]: https://github.com/AdguardTeam/ExtendedCss#-pseudo-class-xpath\n\n[has-text-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjecthas-textneedle\n[has-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjecthasarg\n[is-ubo]: https://github.com/AdguardTeam/ExtendedCss#extended-css-is\n[matches-css-after-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectmatches-css-afterarg\n[matches-css-before-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectmatches-css-beforearg\n[matches-css-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectmatches-cssarg\n[matches-media-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectmatches-mediaarg\n[min-text-length-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectmin-text-lengthn\n[not-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectnotarg\n[style-ubo]: https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#subjectstylearg\n[upward-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectupwardarg\n[xpath-ubo]: https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectxpatharg\n\nAlso, CSSTree supports legacy Extended CSS elements by default (attribute selectors):\n`[-ext-name=\"value\"]`, where `name` is the name of the Extended CSS element and `value` is its value.\nFor example, the following selector can be parsed by CSSTree:\n\n```css\n[-ext-has=\"selector list\"]\n```\n\nIf a pseudo class is unknown to CSSTree, it tries to parse it as a `Raw` element\n(if possible - see [problematic cases](https://github.com/AdguardTeam/ecsstree#handle-problematic-cases)).\n\nThe CSSTree library itself is quite flexible and error-tolerant,\nso it basically manages well the Extended CSS elements that are not (yet) included here.\n\n## Motivation\n\nFor example, the following selector\n\n```css\ndiv:-abp-has(> section)\n```\n\nwill be parsed by the default CSSTree as follows\n\n```json\n{\n    \"type\": \"Selector\",\n    \"loc\": null,\n    \"children\": [\n        {\n            \"type\": \"PseudoClassSelector\",\n            \"loc\": null,\n            \"name\": \"-abp-has\",\n            \"children\": [\n                {\n                    \"type\": \"Raw\",\n                    \"loc\": null,\n                    \"value\": \"> section\"\n                }\n            ]\n        }\n    ]\n}\n```\n\nThe problem with this is that the `-abp-has` parameter is parsed as `Raw`, not as a `Selector`,\nsince `-abp-has` is an unknown pseudo class in CSS / CSSTree.\n\nThis is where the ECSSTree library comes into play. It detects that `-abp-has` expects a selector as a parameter,\ni.e. it parses the passed parameter as a `Selector`. This means that the selector above will be parsed as follows:\n\n```json\n{\n    \"type\": \"Selector\",\n    \"loc\": null,\n    \"children\": [\n        {\n            \"type\": \"PseudoClassSelector\",\n            \"loc\": null,\n            \"name\": \"-abp-has\",\n            \"children\": [\n                {\n                    \"type\": \"Selector\",\n                    \"loc\": null,\n                    \"children\": [\n                        {\n                            \"type\": \"Combinator\",\n                            \"loc\": null,\n                            \"name\": \">\"\n                        },\n                        {\n                            \"type\": \"TypeSelector\",\n                            \"loc\": null,\n                            \"name\": \"section\"\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n}\n```\n\n`Combinator` and similar Nodes are part of CSSTree, this fork simply specifies that the `-abp-has` parameter\nshould be parsed as a selector. The nodes themselves are part of the CSSTree.\n\n### Advanced validation\n\nIn addition, this approach enables a more advanced validation. For example,\nthe default CSSTree does not throw an error when parsing the following selector:\n\n```css\ndiv:-abp-has(42)\n```\n\nsince it doesn't know what `-abp-has` is, it simply parses 42 as `Raw`. ECSSTree parses the parameter as a selector,\nwhich will throw an error, since 42 is simply an invalid selector.\n\n## Handle problematic cases\n\nThe library also handles problematic selectors, such as the following:\n\n```css\ndiv:contains(aaa'bbb)\n```\n\nThis selector doesn't fully meet with CSS standards, so even if CSSTree is flexible,\nit will not be able to parse it properly, because it will tokenize it as follows:\n\n| Token type     | Start index | End index | Source part |\n| -------------- | ----------- | --------- | ----------- |\n| ident-token    | 0           | 3         | div         |\n| colon-token    | 3           | 4         | :           |\n| function-token | 4           | 13        | contains(   |\n| ident-token    | 13          | 16        | aaa         |\n| string-token   | 16          | 21        | 'bbb)       |\n\nAt quote mark (`'`) tokenizer will think that a string is starting, and it tokenizes the rest of the input as a string.\nThis is the normal behavior for the tokenizer, but it is wrong for us, since the parser will fail with an\n`\")\" is expected` error, as it doesn't found the closing parenthesis, since it thinks that the string is still open.\n\nECSSTree will handle this case by a special re-tokenization algorithm during the parsing process, when parser reaches\nthis problematic point. This way, ECSSTree's parser will be able to parse this selector properly.\nIt is also true for `xpath`.\n\n*Note:* ECSSTree parses `:contains` and `:xpath` parameters as `Raw`. The main goal of this library is changing the\ninternal behavior of the CSSTree's parser to make it able to parse the Extended CSS selectors properly,\nnot to change the AST itself. The AST should be the same as in CSSTree, so that the library can be used\nas a drop-in replacement for CSSTree.\nParsing `:xpath` expressions or regular expressions in detail would be a huge task, and requires new AST nodes,\nwhich would be a breaking change. But it always parses the correct raw expression for you,\nso you can parse/validate these expressions yourself if you want. There are many libraries for this,\nsuch as [xpath](https://www.npmjs.com/package/xpath) or [regexpp](https://www.npmjs.com/package/regexpp).\nSee [example codes](/examples) for more details.\n\n## Examples\n\nHere are a very simple example to show how to use ECSSTree:\n\n```javascript\nimport { parse, generate, toPlainObject, fromPlainObject } from \"@adguard/ecss-tree\";\nimport { inspect } from \"util\";\n\n// Some inputs to test\nconst inputs = [\n    // Valid selectors\n    `div:-abp-has(> .some-class > a[href^=\"https://example.com\"])`,\n    `body:style(padding-top: 0 !important;):matches-media((min-width: 500px) and (max-width: 1000px))`,\n    `section:upward(2):contains(aaa'bbb):xpath(//*[contains(text(),\"()(cc\")])`,\n\n    // Missing closing bracket at the end\n    `div:-abp-has(> .some-class > a[href^=\"https://example.com\"]`,\n];\n\n// Iterate over inputs\nfor (const input of inputs) {\n    try {\n        // Parse raw input to AST. This will throw an error if the input is not valid.\n        // Don't forget to set context to 'selector', because CSSTree will try to parse\n        // 'stylesheet' by default.\n        const ast = parse(input, { context: \"selector\" });\n\n        // By default, AST uses a doubly linked list. To convert it to plain object, you can\n        // use toPlainObject() function.\n        // If you want to convert AST back to doubly linked list version, you can use\n        // fromPlainObject() function.\n        const astPlain = toPlainObject(ast);\n        const astAgain = fromPlainObject(astPlain);\n\n        // Print AST to console\n        console.log(inspect(astPlain, { colors: true, depth: null }));\n\n        // You can also generate string from AST (don't use plain object here)\n        console.log(generate(astAgain));\n    } catch (e) {\n        // Mark invalid selector\n        console.log(`Invalid selector: ${input}`);\n\n        // Show CSSTree's formatted error message\n        console.log(e.formattedMessage);\n    }\n}\n```\n\nThe API is the same as in CSSTree, so you can use the\n[CSSTree documentation](https://github.com/csstree/csstree/tree/master/docs) as a reference.\n\nYou can find more examples in the [examples](/examples) folder.\n\n## Reporting problems / Requesting features\n\nIf you find a bug or want to request a new feature, please please [open an issue][new-issue-url] on GitHub.\nPlease provide a detailed description of the problem or the feature you want to request, and if possible,\na code example that demonstrates the problem or the feature.\n\n[new-issue-url]: https://github.com/AdguardTeam/ecsstree/issues/new\n\n### Contributing\n\nYou can contribute to the project by opening a pull request. People who contribute to AdGuard projects can receive\nvarious rewards, see [this page][contribute] for details.\n\n[contribute]: https://adguard.com/contribute.html\n\n### Development\n\n#### Prerequisites\n\nMake sure you have the following tools installed:\n\n1. Node.js (latest LTS version is recommended)\n1. [pnpm](https://pnpm.io/)\n\n#### Commands\n\nDuring development, you can use the following commands (listed in `package.json`):\n\n- `pnpm lint` - lint the code with [ESLint][eslint]\n- `pnpm test` - run tests with [Jest][jest] (you can also run a specific test with `pnpm test <test-name>`)\n- `pnpm build` - build the library to the `dist` folder by using [Rollup][rollup]\n\n[eslint]: https://eslint.org/\n[jest]: https://jestjs.io/\n[rollup]: https://rollupjs.org/\n\n## Documentation\n\n- [Development](DEVELOPMENT.md)\n- [Deployment](DEPLOYMENT.md)\n- [Changelog](CHANGELOG.md)\n- [LLM agent rules](AGENTS.md)\n\n## License\n\nThis library is licensed under the MIT license.\nSee the [LICENSE](https://github.com/AdguardTeam/ecsstree/blob/main/LICENSE) file for more info.\n\n## Acknowledgements\n\nIn this section, we would like to thank the following people for their work:\n\n- Roman Dvornov ([lahmatiy](https://github.com/lahmatiy)) for creating and maintaining the\n  [CSSTree](https://github.com/csstree/csstree) library\n\n## References\n\nHere are some useful links to learn more about Extended CSS selectors:\n\n- CSSTree docs: <https://github.com/csstree/csstree/tree/master/docs>\n- AdGuard *ExtendedCSS*: <https://github.com/AdguardTeam/ExtendedCss>\n- uBlock *\"Procedural cosmetic filters\"*: <https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters>\n- Adblock Plus *ExtendedCSS*: <https://help.adblockplus.org/hc/en-us/articles/360062733293#elemhide-emulation>\n","readmeFilename":"README.md"}