From f3f61d0e19782e413e027ce78ad0fa4af1d056ec Mon Sep 17 00:00:00 2001
From: 01zulfi <85733202+01zulfi@users.noreply.github.com>
Date: Wed, 11 Jun 2025 16:59:52 +0500
Subject: [PATCH] clipper: remove unneeded code & packages Signed-off-by:
01zulfi <85733202+01zulfi@users.noreply.github.com>
---
packages/clipper/package-lock.json | 467 ++------------------------
packages/clipper/package.json | 4 +-
packages/clipper/src/css-tokenizer.ts | 176 ----------
packages/clipper/src/styles.ts | 349 -------------------
packages/clipper/src/utils.ts | 9 -
5 files changed, 37 insertions(+), 968 deletions(-)
delete mode 100644 packages/clipper/src/css-tokenizer.ts
diff --git a/packages/clipper/package-lock.json b/packages/clipper/package-lock.json
index 3fb133ea6..4cd23cfa0 100644
--- a/packages/clipper/package-lock.json
+++ b/packages/clipper/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "@notesnook/clipper",
"version": "2.1.3",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -11,9 +11,7 @@
"license": "GPL-3.0-or-later",
"dependencies": {
"@mozilla/readability": "^0.4.2",
- "css-what": "6.1.0",
- "hyperapp": "^2.0.22",
- "specificity": "^0.4.1"
+ "hyperapp": "^2.0.22"
},
"devDependencies": {
"@playwright/test": "1.48.2",
@@ -22,9 +20,7 @@
}
},
"node_modules/@emnapi/core": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz",
- "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==",
+ "version": "1.6.0",
"dev": true,
"license": "MIT",
"optional": true,
@@ -34,9 +30,7 @@
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz",
- "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==",
+ "version": "1.6.0",
"dev": true,
"license": "MIT",
"optional": true,
@@ -46,8 +40,6 @@
},
"node_modules/@emnapi/wasi-threads": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -57,15 +49,11 @@
},
"node_modules/@module-federation/error-codes": {
"version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.18.0.tgz",
- "integrity": "sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@module-federation/runtime": {
"version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.18.0.tgz",
- "integrity": "sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -76,8 +64,6 @@
},
"node_modules/@module-federation/runtime-core": {
"version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.18.0.tgz",
- "integrity": "sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -87,8 +73,6 @@
},
"node_modules/@module-federation/runtime-tools": {
"version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.18.0.tgz",
- "integrity": "sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -98,15 +82,11 @@
},
"node_modules/@module-federation/sdk": {
"version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.18.0.tgz",
- "integrity": "sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==",
"dev": true,
"license": "MIT"
},
"node_modules/@module-federation/webpack-bundler-runtime": {
"version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.18.0.tgz",
- "integrity": "sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -116,16 +96,13 @@
},
"node_modules/@mozilla/readability": {
"version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.2.tgz",
- "integrity": "sha512-48MJXzi4Dhy2fJ3lGjmwdEJKoMmn3oiYew9n/1OW6cZy78hAzRIyDJDBCGrg4PBFDyY4xos+H4LCFn5QVRDcfw==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/@napi-rs/wasm-runtime": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.6.tgz",
- "integrity": "sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==",
+ "version": "1.0.7",
"dev": true,
"license": "MIT",
"optional": true,
@@ -137,9 +114,8 @@
},
"node_modules/@playwright/test": {
"version": "1.48.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz",
- "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"playwright": "1.48.2"
},
@@ -151,17 +127,15 @@
}
},
"node_modules/@rsbuild/core": {
- "version": "1.5.13",
- "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.13.tgz",
- "integrity": "sha512-P+TCvZCVpBYZ3GDdnzR/tZKicE41khJIqIRlJYnEc9dwUfX1/eqRf8lA8yrsbB5iZbSfj1iOoH1N25cCQ3hhuA==",
+ "version": "1.5.17",
"dev": true,
"license": "MIT",
"dependencies": {
"@rspack/core": "1.5.8",
"@rspack/lite-tapable": "~1.0.1",
"@swc/helpers": "^0.5.17",
- "core-js": "~3.45.1",
- "jiti": "^2.6.0"
+ "core-js": "~3.46.0",
+ "jiti": "^2.6.1"
},
"bin": {
"rsbuild": "bin/rsbuild.js"
@@ -172,8 +146,6 @@
},
"node_modules/@rspack/binding": {
"version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.8.tgz",
- "integrity": "sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow==",
"dev": true,
"license": "MIT",
"optionalDependencies": {
@@ -189,7 +161,19 @@
"@rspack/binding-win32-x64-msvc": "1.5.8"
}
},
- "node_modules/@rspack/binding-darwin-arm64": {
+ "node_modules/@rspack/binding-win32-x64-msvc": {
+ "version": "1.5.8",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-darwin-arm64": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.8.tgz",
"integrity": "sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g==",
@@ -203,7 +187,7 @@
"darwin"
]
},
- "node_modules/@rspack/binding-darwin-x64": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-darwin-x64": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.8.tgz",
"integrity": "sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw==",
@@ -217,7 +201,7 @@
"darwin"
]
},
- "node_modules/@rspack/binding-linux-arm64-gnu": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-linux-arm64-gnu": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.8.tgz",
"integrity": "sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ==",
@@ -231,7 +215,7 @@
"linux"
]
},
- "node_modules/@rspack/binding-linux-arm64-musl": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-linux-arm64-musl": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.8.tgz",
"integrity": "sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw==",
@@ -245,7 +229,7 @@
"linux"
]
},
- "node_modules/@rspack/binding-linux-x64-gnu": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-linux-x64-gnu": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.8.tgz",
"integrity": "sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA==",
@@ -259,7 +243,7 @@
"linux"
]
},
- "node_modules/@rspack/binding-linux-x64-musl": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-linux-x64-musl": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.8.tgz",
"integrity": "sha512-gE0+MZmwF+01p9/svpEESkzkLpBkVUG2o03YMpwXYC/maeRRhWvF8BJ7R3i/Ls/jFGSE87dKX5NbRLVzqksq/w==",
@@ -273,7 +257,7 @@
"linux"
]
},
- "node_modules/@rspack/binding-wasm32-wasi": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-wasm32-wasi": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.8.tgz",
"integrity": "sha512-cfg3niNHeJuxuml1Vy9VvaJrI/5TakzoaZvKX2g5S24wfzR50Eyy4JAsZ+L2voWQQp1yMJbmPYPmnTCTxdJQBQ==",
@@ -287,7 +271,7 @@
"@napi-rs/wasm-runtime": "^1.0.5"
}
},
- "node_modules/@rspack/binding-win32-arm64-msvc": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-win32-arm64-msvc": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.8.tgz",
"integrity": "sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g==",
@@ -301,7 +285,7 @@
"win32"
]
},
- "node_modules/@rspack/binding-win32-ia32-msvc": {
+ "node_modules/@rspack/binding/node_modules/@rspack/binding-win32-ia32-msvc": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.8.tgz",
"integrity": "sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw==",
@@ -315,24 +299,8 @@
"win32"
]
},
- "node_modules/@rspack/binding-win32-x64-msvc": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.8.tgz",
- "integrity": "sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
"node_modules/@rspack/core": {
"version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.8.tgz",
- "integrity": "sha512-sUd2LfiDhqYVfvknuoz0+/c+wSpn693xotnG5g1CSWKZArbtwiYzBIVnNlcHGmuoBRsnj/TkSq8dTQ7gwfBroQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -354,8 +322,6 @@
},
"node_modules/@rspack/lite-tapable": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz",
- "integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -364,8 +330,6 @@
},
"node_modules/@swc/helpers": {
"version": "0.5.17",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
- "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -374,8 +338,6 @@
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
- "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -384,9 +346,7 @@
}
},
"node_modules/core-js": {
- "version": "3.45.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.1.tgz",
- "integrity": "sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==",
+ "version": "3.46.0",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -395,40 +355,12 @@
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/hyperapp": {
"version": "2.0.22",
- "resolved": "https://registry.npmjs.org/hyperapp/-/hyperapp-2.0.22.tgz",
- "integrity": "sha512-3uf9HjnjrhbfykowFNEObZewBEo4DXJIM+9FnGkiR9E4H2eh2f921SzMCMS69X5nN3A7KFfmZc9KCKh/7TQBFA=="
+ "license": "MIT"
},
"node_modules/jiti": {
"version": "2.6.1",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
- "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
"dev": true,
"license": "MIT",
"bin": {
@@ -437,9 +369,8 @@
},
"node_modules/playwright": {
"version": "1.48.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz",
- "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"playwright-core": "1.48.2"
},
@@ -455,9 +386,8 @@
},
"node_modules/playwright-core": {
"version": "1.48.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz",
- "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"playwright-core": "cli.js"
},
@@ -467,341 +397,16 @@
},
"node_modules/slugify": {
"version": "1.6.6",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
- "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/specificity": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
- "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
- "bin": {
- "specificity": "bin/specificity"
- }
- },
"node_modules/tslib": {
"version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true,
"license": "0BSD"
}
- },
- "dependencies": {
- "@emnapi/core": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz",
- "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==",
- "dev": true,
- "optional": true,
- "requires": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- }
- },
- "@emnapi/runtime": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz",
- "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "tslib": "^2.4.0"
- }
- },
- "@emnapi/wasi-threads": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "tslib": "^2.4.0"
- }
- },
- "@module-federation/error-codes": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.18.0.tgz",
- "integrity": "sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==",
- "dev": true
- },
- "@module-federation/runtime": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.18.0.tgz",
- "integrity": "sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==",
- "dev": true,
- "requires": {
- "@module-federation/error-codes": "0.18.0",
- "@module-federation/runtime-core": "0.18.0",
- "@module-federation/sdk": "0.18.0"
- }
- },
- "@module-federation/runtime-core": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.18.0.tgz",
- "integrity": "sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==",
- "dev": true,
- "requires": {
- "@module-federation/error-codes": "0.18.0",
- "@module-federation/sdk": "0.18.0"
- }
- },
- "@module-federation/runtime-tools": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.18.0.tgz",
- "integrity": "sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==",
- "dev": true,
- "requires": {
- "@module-federation/runtime": "0.18.0",
- "@module-federation/webpack-bundler-runtime": "0.18.0"
- }
- },
- "@module-federation/sdk": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.18.0.tgz",
- "integrity": "sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==",
- "dev": true
- },
- "@module-federation/webpack-bundler-runtime": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.18.0.tgz",
- "integrity": "sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==",
- "dev": true,
- "requires": {
- "@module-federation/runtime": "0.18.0",
- "@module-federation/sdk": "0.18.0"
- }
- },
- "@mozilla/readability": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.2.tgz",
- "integrity": "sha512-48MJXzi4Dhy2fJ3lGjmwdEJKoMmn3oiYew9n/1OW6cZy78hAzRIyDJDBCGrg4PBFDyY4xos+H4LCFn5QVRDcfw=="
- },
- "@napi-rs/wasm-runtime": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.6.tgz",
- "integrity": "sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==",
- "dev": true,
- "optional": true,
- "requires": {
- "@emnapi/core": "^1.5.0",
- "@emnapi/runtime": "^1.5.0",
- "@tybys/wasm-util": "^0.10.1"
- }
- },
- "@playwright/test": {
- "version": "1.48.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz",
- "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==",
- "dev": true,
- "requires": {
- "playwright": "1.48.2"
- }
- },
- "@rsbuild/core": {
- "version": "1.5.13",
- "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.13.tgz",
- "integrity": "sha512-P+TCvZCVpBYZ3GDdnzR/tZKicE41khJIqIRlJYnEc9dwUfX1/eqRf8lA8yrsbB5iZbSfj1iOoH1N25cCQ3hhuA==",
- "dev": true,
- "requires": {
- "@rspack/core": "1.5.8",
- "@rspack/lite-tapable": "~1.0.1",
- "@swc/helpers": "^0.5.17",
- "core-js": "~3.45.1",
- "jiti": "^2.6.0"
- }
- },
- "@rspack/binding": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.8.tgz",
- "integrity": "sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow==",
- "dev": true,
- "requires": {
- "@rspack/binding-darwin-arm64": "1.5.8",
- "@rspack/binding-darwin-x64": "1.5.8",
- "@rspack/binding-linux-arm64-gnu": "1.5.8",
- "@rspack/binding-linux-arm64-musl": "1.5.8",
- "@rspack/binding-linux-x64-gnu": "1.5.8",
- "@rspack/binding-linux-x64-musl": "1.5.8",
- "@rspack/binding-wasm32-wasi": "1.5.8",
- "@rspack/binding-win32-arm64-msvc": "1.5.8",
- "@rspack/binding-win32-ia32-msvc": "1.5.8",
- "@rspack/binding-win32-x64-msvc": "1.5.8"
- }
- },
- "@rspack/binding-darwin-arm64": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.8.tgz",
- "integrity": "sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-darwin-x64": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.8.tgz",
- "integrity": "sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-linux-arm64-gnu": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.8.tgz",
- "integrity": "sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-linux-arm64-musl": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.8.tgz",
- "integrity": "sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-linux-x64-gnu": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.8.tgz",
- "integrity": "sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-linux-x64-musl": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.8.tgz",
- "integrity": "sha512-gE0+MZmwF+01p9/svpEESkzkLpBkVUG2o03YMpwXYC/maeRRhWvF8BJ7R3i/Ls/jFGSE87dKX5NbRLVzqksq/w==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-wasm32-wasi": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.8.tgz",
- "integrity": "sha512-cfg3niNHeJuxuml1Vy9VvaJrI/5TakzoaZvKX2g5S24wfzR50Eyy4JAsZ+L2voWQQp1yMJbmPYPmnTCTxdJQBQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@napi-rs/wasm-runtime": "^1.0.5"
- }
- },
- "@rspack/binding-win32-arm64-msvc": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.8.tgz",
- "integrity": "sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-win32-ia32-msvc": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.8.tgz",
- "integrity": "sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw==",
- "dev": true,
- "optional": true
- },
- "@rspack/binding-win32-x64-msvc": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.8.tgz",
- "integrity": "sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ==",
- "dev": true,
- "optional": true
- },
- "@rspack/core": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.8.tgz",
- "integrity": "sha512-sUd2LfiDhqYVfvknuoz0+/c+wSpn693xotnG5g1CSWKZArbtwiYzBIVnNlcHGmuoBRsnj/TkSq8dTQ7gwfBroQ==",
- "dev": true,
- "requires": {
- "@module-federation/runtime-tools": "0.18.0",
- "@rspack/binding": "1.5.8",
- "@rspack/lite-tapable": "1.0.1"
- }
- },
- "@rspack/lite-tapable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz",
- "integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==",
- "dev": true
- },
- "@swc/helpers": {
- "version": "0.5.17",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
- "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
- "dev": true,
- "requires": {
- "tslib": "^2.8.0"
- }
- },
- "@tybys/wasm-util": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
- "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
- "dev": true,
- "optional": true,
- "requires": {
- "tslib": "^2.4.0"
- }
- },
- "core-js": {
- "version": "3.45.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.1.tgz",
- "integrity": "sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==",
- "dev": true
- },
- "css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "hyperapp": {
- "version": "2.0.22",
- "resolved": "https://registry.npmjs.org/hyperapp/-/hyperapp-2.0.22.tgz",
- "integrity": "sha512-3uf9HjnjrhbfykowFNEObZewBEo4DXJIM+9FnGkiR9E4H2eh2f921SzMCMS69X5nN3A7KFfmZc9KCKh/7TQBFA=="
- },
- "jiti": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
- "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
- "dev": true
- },
- "playwright": {
- "version": "1.48.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz",
- "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==",
- "dev": true,
- "requires": {
- "fsevents": "2.3.2",
- "playwright-core": "1.48.2"
- }
- },
- "playwright-core": {
- "version": "1.48.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz",
- "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==",
- "dev": true
- },
- "slugify": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
- "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
- "dev": true
- },
- "specificity": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
- "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg=="
- },
- "tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true
- }
}
}
diff --git a/packages/clipper/package.json b/packages/clipper/package.json
index e95d84b4b..06e404312 100644
--- a/packages/clipper/package.json
+++ b/packages/clipper/package.json
@@ -33,8 +33,6 @@
},
"dependencies": {
"@mozilla/readability": "^0.4.2",
- "css-what": "6.1.0",
- "hyperapp": "^2.0.22",
- "specificity": "^0.4.1"
+ "hyperapp": "^2.0.22"
}
}
diff --git a/packages/clipper/src/css-tokenizer.ts b/packages/clipper/src/css-tokenizer.ts
deleted file mode 100644
index a2b8822af..000000000
--- a/packages/clipper/src/css-tokenizer.ts
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-This file is part of the Notesnook project (https://notesnook.com/)
-
-Copyright (C) 2023 Streetwriters (Private) Limited
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-const from = String.fromCharCode;
-
-function trim(value: string): string {
- return value.trim();
-}
-
-function charat(value: string, index: number): number {
- return value.charCodeAt(index) | 0;
-}
-
-function strlen(value: string): number {
- return value.length;
-}
-
-function substr(value: string, begin: number, end: number): string {
- return value.slice(begin, end);
-}
-
-function append(value: T, array: T[]): T {
- array.push(value);
- return value;
-}
-
-let line = 1;
-let column = 1;
-let length = 0;
-let position = 0;
-let character = 0;
-let characters = "";
-
-function next(): number {
- character = position < length ? charat(characters, position++) : 0;
-
- if ((column++, character === 10)) (column = 1), line++;
-
- return character;
-}
-
-function peek(): number {
- return charat(characters, position);
-}
-
-function slice(begin: number, end: number): string {
- return substr(characters, begin, end);
-}
-
-function token(type: number): number {
- switch (type) {
- // \0 \t \n \r \s whitespace token
- case 0:
- case 9:
- case 10:
- case 13:
- case 32:
- return 5;
-
- // ! + , / > @ ~ isolate token
- case 33:
- case 42:
- case 43:
- case 44:
- case 47:
- case 62:
- case 64:
- case 126:
- case 59: /* ; { } breakpoint token */
- case 123:
- case 125:
- return 4;
- // : accompanied token
- case 58:
- return 3;
- // " ' ( [ opening delimit token
- case 34:
- case 39:
- case 40:
- case 91:
- return 2;
- // ) ] closing delimit token
- case 41:
- case 93:
- return 1;
- }
-
- return 0;
-}
-
-function alloc(value: string): [] {
- line = column = 1;
- length = strlen((characters = value));
- position = 0;
- return [];
-}
-
-function dealloc(value: T): T {
- characters = "";
- return value;
-}
-
-function delimit(type: number): string {
- return trim(
- slice(
- position - 1,
- delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)
- )
- );
-}
-
-export function tokenize(value: string): string[] {
- return dealloc(tokenizer(alloc(value)));
-}
-
-function tokenizer(children: string[]): string[] {
- while (next())
- switch (token(character)) {
- case 0:
- append(identifier(position - 1), children);
- break;
- case 2:
- append(delimit(character), children);
- break;
- default:
- append(from(character), children);
- }
-
- return children;
-}
-
-function delimiter(type: number): number {
- while (next())
- switch (character) {
- // ] ) " '
- case type:
- return position;
- // " '
- case 34:
- case 39:
- if (type !== 34 && type !== 39) delimiter(character);
- break;
- // (
- case 40:
- if (type === 41) delimiter(type);
- break;
- // \
- case 92:
- next();
- break;
- }
-
- return position;
-}
-
-function identifier(index: number): string {
- while (!token(peek())) next();
-
- return slice(index, position);
-}
diff --git a/packages/clipper/src/styles.ts b/packages/clipper/src/styles.ts
index f3c4b15fe..1eea8a7b6 100644
--- a/packages/clipper/src/styles.ts
+++ b/packages/clipper/src/styles.ts
@@ -17,57 +17,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
import { constructUrl, FetchOptions } from "./fetch.js";
-import { compare, calculate, SpecificityArray } from "specificity";
-import { tokenize } from "./css-tokenizer.js";
-import { stringify, parse, SelectorType } from "css-what";
-import { safeQuerySelectorAll } from "./utils.js";
-
-const SHORTHANDS = [
- "animation",
- "background",
- "border",
- "border-block-end",
- "border-block-start",
- "border-bottom",
- "border-color",
- "border-image",
- "border-inline-end",
- "border-inline-start",
- "border-left",
- "border-radius",
- "border-right",
- "border-style",
- "border-top",
- "border-width",
- "column-rule",
- "columns",
- "contain-intrinsic-size",
- "flex",
- "flex-flow",
- "font",
- "gap",
- "grid",
- "grid-area",
- "grid-column",
- "grid-row",
- "grid-template",
- "grid-gap",
- "list-style",
- "margin",
- "mask",
- "offset",
- "outline",
- "overflow",
- "padding",
- "place-content",
- "place-items",
- "place-self",
- "scroll-margin",
- "scroll-padding",
- "text-decoration",
- "text-emphasis",
- "transition"
-];
export async function inlineStylesheets(options?: FetchOptions) {
for (const sheet of document.styleSheets) {
@@ -113,224 +62,6 @@ async function downloadStylesheet(href: string, options?: FetchOptions) {
}
}
-type StyleableElement = HTMLElement | SVGElement;
-type BaseStyle = {
- rule: CSSStyleDeclaration;
- href: URL | null;
-};
-type SpecifiedStyle = BaseStyle & {
- specificity: SpecificityArray;
-};
-type PseudoElementStyle = BaseStyle & {
- pseudoElement: string;
-};
-type CSSStyledElements = Map;
-type CSSPseudoElements = Map;
-
-export async function cacheStylesheets(documentStyles: CSSStyleDeclaration) {
- const styledElements: CSSStyledElements = new Map();
- const styledPseudoElements: CSSPseudoElements = new Map();
-
- for (const sheet of document.styleSheets) {
- if (await skipStyleSheet(sheet)) continue;
- let href = sheet.href || undefined;
- if (!href && sheet.ownerNode instanceof HTMLElement)
- href = sheet.ownerNode.getAttribute("href") || undefined;
-
- walkRules(
- sheet.cssRules,
- documentStyles,
- styledElements,
- styledPseudoElements,
- href
- );
- }
-
- return {
- getPseudo(element: StyleableElement, pseudoElement: string) {
- const styles = styledPseudoElements
- .get(element)
- ?.filter((s) => s.pseudoElement.includes(pseudoElement));
- if (!styles || !styles.length) return;
-
- return getElementStyles(element, styles, documentStyles);
- },
- get(element: StyleableElement) {
- const styles = styledElements.get(element);
- if (!styles) return;
-
- const allStyles = styles.sort((a, b) =>
- compare(a.specificity, b.specificity)
- );
- allStyles.push({
- rule: element.style,
- specificity: [0, 0, 0, 0],
- href: null
- });
-
- return getElementStyles(element, allStyles, documentStyles);
- }
- };
-}
-
-function walkRules(
- cssRules: CSSRuleList,
- documentStyles: CSSStyleDeclaration,
- styled: CSSStyledElements,
- pseudoElements: CSSPseudoElements,
- href?: string
-) {
- for (const rule of cssRules) {
- if (rule instanceof CSSStyleRule) {
- if (isPseudoSelector(rule.selectorText)) {
- const selectors = parsePseudoSelector(rule.selectorText);
-
- for (const selector of selectors) {
- if (!selector || !selector.selector.trim()) continue;
- const elements = safeQuerySelectorAll(
- document,
- selector.selector
- ) as NodeListOf;
-
- for (const element of elements) {
- if (
- !(element instanceof HTMLElement) &&
- !(element instanceof SVGElement)
- )
- continue;
-
- const styles: PseudoElementStyle[] =
- pseudoElements.get(element) || [];
- pseudoElements.set(element, styles);
-
- styles.push({
- rule: rule.style,
- href: getBaseUrl(href),
- pseudoElement: selector.pseudoElement
- });
- }
- }
- }
-
- const elements = safeQuerySelectorAll(
- document,
- rule.selectorText
- ) as NodeListOf;
-
- for (const element of elements) {
- if (
- !(element instanceof HTMLElement) &&
- !(element instanceof SVGElement)
- )
- continue;
-
- const parts = rule.selectorText.split(",");
- const styles: SpecifiedStyle[] = styled.get(element) || [];
- styled.set(element, styles);
-
- for (const part of parts) {
- try {
- const specificity = calculate(part)[0];
- styles.push({
- specificity: specificity.specificityArray,
- rule: rule.style,
- href: getBaseUrl(href)
- });
- break;
- } catch (e) {
- console.error(e, href && getBaseUrl(href));
- // ignore
- }
- }
- }
- } else if (
- rule instanceof CSSMediaRule &&
- window.matchMedia(rule.conditionText).matches
- ) {
- walkRules(rule.cssRules, documentStyles, styled, pseudoElements, href);
- } else if (
- rule instanceof CSSSupportsRule &&
- CSS.supports(rule.conditionText)
- ) {
- walkRules(rule.cssRules, documentStyles, styled, pseudoElements, href);
- }
- }
-}
-
-function getElementStyles(
- element: StyleableElement,
- styles: BaseStyle[],
- documentStyles: CSSStyleDeclaration
-) {
- const newStyles = newStyleDeclaration();
- const computedStyle = lazyComputedStyle(element);
- const overrides = ["display"];
-
- for (const style of styles) {
- for (const property of [...style.rule, ...SHORTHANDS]) {
- let value = style.rule.getPropertyValue(property);
- if (overrides.includes(property))
- value = computedStyle.style.getPropertyValue(property);
-
- if (value.trim()) {
- setStyle(
- newStyles,
- property,
- value,
- (variable) => {
- return (
- computedStyle.style.getPropertyValue(variable) ||
- documentStyles.getPropertyValue(variable)
- );
- },
- (url) => {
- console.log("resolving url", url, style.href);
- if (url.startsWith("data:") || !style.href) return url;
- console.log("resolving url", url, style.href.href);
- if (url.startsWith("/"))
- return new URL(`${style.href.origin}${url}`).href;
-
- return new URL(`${style.href.href}${url}`).href;
- },
- style.rule.getPropertyPriority(property)
- );
- }
- }
- }
- return newStyles;
-}
-
-function setStyle(
- target: CSSStyleDeclaration,
- property: string,
- value: string,
- get: (variable: string) => string,
- resolveUrl: (variable: string) => string,
- priority?: string
-) {
- value = resolveCssVariables(value, get);
- value = resolveCssUrl(value, resolveUrl);
-
- target.setProperty(property, value, priority);
-}
-
-function newStyleDeclaration() {
- const sheet = new CSSStyleSheet();
- sheet.insertRule(".dummy{}");
- return (sheet.cssRules[0] as CSSStyleRule).style;
-}
-
-function lazyComputedStyle(element: StyleableElement) {
- let computedStyle: CSSStyleDeclaration | undefined;
-
- return Object.defineProperty({}, "style", {
- get: () => {
- if (!computedStyle) computedStyle = getComputedStyle(element);
- return computedStyle;
- }
- }) as { style: CSSStyleDeclaration };
-}
-
async function skipStyleSheet(sheet: CSSStyleSheet, options?: FetchOptions) {
try {
sheet.cssRules.length;
@@ -349,86 +80,6 @@ async function skipStyleSheet(sheet: CSSStyleSheet, options?: FetchOptions) {
.includes("print");
}
-function resolveCssVariables(css: string, get: (variable: string) => string) {
- const tokens = tokenize(css);
- const finalTokens: string[] = [];
- for (let i = 0; i < tokens.length; ++i) {
- const token = tokens[i];
- if (token === "var") {
- const args = tokenize(tokens[++i].slice(1, -1));
- const [variable, operator, space, ...restArgs] = args;
-
- const value = get(variable);
- if (value) {
- finalTokens.push(value);
- } else if (operator && restArgs.length <= 1) {
- finalTokens.push(restArgs[0] || space);
- } else if (operator && restArgs.length === 2) {
- finalTokens.push(resolveCssVariables(restArgs.join(""), get));
- }
- } else if (token.startsWith("(") && token.endsWith(")")) {
- finalTokens.push("(", resolveCssVariables(token.slice(1, -1), get), ")");
- } else finalTokens.push(token);
- }
- return finalTokens.join("");
-}
-
-function resolveCssUrl(css: string, get: (url: string) => string) {
- const tokens = tokenize(css);
- const finalTokens: string[] = [];
- for (let i = 0; i < tokens.length; ++i) {
- const token = tokens[i];
- if (token === "url" && !tokens[i + 1].startsWith("(data")) {
- const url = tokens[++i].slice(2, -2);
- const resolvedUrl = get(url);
- if (resolvedUrl) {
- finalTokens.push(token);
- finalTokens.push('("');
- finalTokens.push(resolvedUrl);
- finalTokens.push('")');
- }
- } else finalTokens.push(token);
- }
- return finalTokens.join("");
-}
-
-function getBaseUrl(href?: string | null) {
- if (!href) return null;
- if (href.startsWith("/")) href = `${document.location.origin}${href}`;
- const url = new URL(href);
- const basepath = url.pathname.split("/").slice(0, -1).join("/");
- return new URL(`${url.origin}${basepath}/`);
-}
-
-function isPseudoSelector(text: string) {
- return (
- text.includes(":before") ||
- text.includes(":after") ||
- text.includes("::after") ||
- text.includes("::before")
- );
-}
-
-function parsePseudoSelector(selector: string) {
- const output = [];
- const selectors = parse(selector);
- for (const part of selectors) {
- const pseduoElementIndex = part.findIndex(
- (s) =>
- (s.type === SelectorType.Pseudo ||
- s.type === SelectorType.PseudoElement) &&
- (s.name === "after" || s.name === "before")
- );
- if (pseduoElementIndex <= -1) continue;
-
- output.push({
- selector: stringify([part.slice(0, pseduoElementIndex)]),
- pseudoElement: stringify([part.slice(pseduoElementIndex)])
- });
- }
- return output;
-}
-
export async function addStylesToHead(
head: HTMLHeadElement,
options?: FetchOptions
diff --git a/packages/clipper/src/utils.ts b/packages/clipper/src/utils.ts
index e9e570006..06504aa29 100644
--- a/packages/clipper/src/utils.ts
+++ b/packages/clipper/src/utils.ts
@@ -165,14 +165,6 @@ function getRootStylesheet() {
return null;
}
-function safeQuerySelectorAll(root: Node, selector: string) {
- try {
- return (root as HTMLElement).querySelectorAll(selector);
- } catch (e) {
- return new NodeList();
- }
-}
-
const SVGElements = [
"altGlyph",
"altGlyphDef",
@@ -272,6 +264,5 @@ export {
escapeXhtml,
width,
height,
- safeQuerySelectorAll,
isSVGElement
};