1 Commits

Author SHA1 Message Date
dependabot[bot] 0900475e09 [upd] pypi: Update docutils requirement from >=0.21.2 to >=0.22.4
Updates the requirements on [docutils](https://github.com/rtfd/recommonmark) to permit the latest version.
- [Changelog](https://github.com/readthedocs/recommonmark/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rtfd/recommonmark/commits)

---
updated-dependencies:
- dependency-name: docutils
  dependency-version: 0.22.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-24 07:25:34 +00:00
161 changed files with 9907 additions and 11284 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ jobs:
persist-credentials: "false"
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version-file: "./.nvmrc"
+2 -2
View File
@@ -29,7 +29,7 @@ jobs:
persist-credentials: "false"
- name: Sync GHCS from Docker Scout
uses: docker/scout-action@cd72f264beff1cd72735de31148b9d3244a0234a # v1.21.0
uses: docker/scout-action@bacf462e8d090c09660de30a6ccc718035f961e3 # v1.20.4
with:
organization: "searxng"
dockerhub-user: "${{ secrets.DOCKER_USER }}"
@@ -41,6 +41,6 @@ jobs:
write-comment: "false"
- name: Upload SARIFs
uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
with:
sarif_file: "./scout.sarif"
+197 -174
View File
@@ -15,8 +15,8 @@
"swiped-events": "1.2.0"
},
"devDependencies": {
"@biomejs/biome": "2.4.15",
"@types/node": "^25.8.0",
"@biomejs/biome": "2.4.12",
"@types/node": "^25.6.0",
"browserslist": "^4.28.2",
"browserslist-to-esbuild": "^2.1.1",
"edge.js": "^6.5.0",
@@ -24,13 +24,13 @@
"mathjs": "^15.2.0",
"sharp": "~0.34.5",
"sort-package-json": "^3.6.1",
"stylelint": "^17.11.1",
"stylelint": "^17.8.0",
"stylelint-config-standard-less": "^4.1.0",
"stylelint-prettier": "^5.0.3",
"svgo": "^4.0.1",
"typescript": "~6.0.3",
"vite": "^8.0.13",
"vite-bundle-analyzer": "^1.3.8"
"vite": "^8.0.8",
"vite-bundle-analyzer": "^1.3.7"
}
},
"node_modules/@babel/code-frame": {
@@ -69,9 +69,9 @@
}
},
"node_modules/@biomejs/biome": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.15.tgz",
"integrity": "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.12.tgz",
"integrity": "sha512-Rro7adQl3NLq/zJCIL98eElXKI8eEiBtoeu5TbXF/U3qbjuSc7Jb5rjUbeHHcquDWeSf3HnGP7XI5qGrlRk/pA==",
"dev": true,
"license": "MIT OR Apache-2.0",
"bin": {
@@ -85,20 +85,20 @@
"url": "https://opencollective.com/biome"
},
"optionalDependencies": {
"@biomejs/cli-darwin-arm64": "2.4.15",
"@biomejs/cli-darwin-x64": "2.4.15",
"@biomejs/cli-linux-arm64": "2.4.15",
"@biomejs/cli-linux-arm64-musl": "2.4.15",
"@biomejs/cli-linux-x64": "2.4.15",
"@biomejs/cli-linux-x64-musl": "2.4.15",
"@biomejs/cli-win32-arm64": "2.4.15",
"@biomejs/cli-win32-x64": "2.4.15"
"@biomejs/cli-darwin-arm64": "2.4.12",
"@biomejs/cli-darwin-x64": "2.4.12",
"@biomejs/cli-linux-arm64": "2.4.12",
"@biomejs/cli-linux-arm64-musl": "2.4.12",
"@biomejs/cli-linux-x64": "2.4.12",
"@biomejs/cli-linux-x64-musl": "2.4.12",
"@biomejs/cli-win32-arm64": "2.4.12",
"@biomejs/cli-win32-x64": "2.4.12"
}
},
"node_modules/@biomejs/cli-darwin-arm64": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.15.tgz",
"integrity": "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.12.tgz",
"integrity": "sha512-BnMU4Pc3ciEVteVpZ0BK33MLr7X57F5w1dwDLDn+/iy/yTrA4Q/N2yftidFtsA4vrDh0FMXDpacNV/Tl3fbmng==",
"cpu": [
"arm64"
],
@@ -113,9 +113,9 @@
}
},
"node_modules/@biomejs/cli-darwin-x64": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.15.tgz",
"integrity": "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.12.tgz",
"integrity": "sha512-x9uJ0bI1rJsWICp3VH8w/5PnAVD3A7SqzDpbrfoUQX1QyWrK5jSU4fRLo/wSgGeplCivbxBRKmt5Xq4/nWvq8A==",
"cpu": [
"x64"
],
@@ -130,9 +130,9 @@
}
},
"node_modules/@biomejs/cli-linux-arm64": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.15.tgz",
"integrity": "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.12.tgz",
"integrity": "sha512-tOwuCuZZtKi1jVzbk/5nXmIsziOB6yqN8c9r9QM0EJYPU6DpQWf11uBOSCfFKKM4H3d9ZoarvlgMfbcuD051Pw==",
"cpu": [
"arm64"
],
@@ -147,9 +147,9 @@
}
},
"node_modules/@biomejs/cli-linux-arm64-musl": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.15.tgz",
"integrity": "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.12.tgz",
"integrity": "sha512-FhfpkAAlKL6kwvcVap0Hgp4AhZmtd3YImg0kK1jd7C/aSoh4SfsB2f++yG1rU0lr8Y5MCFJrcSkmssiL9Xnnig==",
"cpu": [
"arm64"
],
@@ -164,9 +164,9 @@
}
},
"node_modules/@biomejs/cli-linux-x64": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.15.tgz",
"integrity": "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.12.tgz",
"integrity": "sha512-8pFeAnLU9QdW9jCIslB/v82bI0lhBmz2ZAKc8pVMFPO0t0wAHsoEkrUQUbMkIorTRIjbqyNZHA3lEXavsPWYSw==",
"cpu": [
"x64"
],
@@ -181,9 +181,9 @@
}
},
"node_modules/@biomejs/cli-linux-x64-musl": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.15.tgz",
"integrity": "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.12.tgz",
"integrity": "sha512-dwTIgZrGutzhkQCuvHynCkyW6hJxUuyZqKKO0YNfaS2GUoRO+tOvxXZqZB6SkWAOdfZTzwaw8IEdUnIkHKHoew==",
"cpu": [
"x64"
],
@@ -198,9 +198,9 @@
}
},
"node_modules/@biomejs/cli-win32-arm64": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.15.tgz",
"integrity": "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.12.tgz",
"integrity": "sha512-B0DLnx0vA9ya/3v7XyCaP+/lCpnbWbMOfUFFve+xb5OxyYvdHaS55YsSddr228Y+JAFk58agCuZTsqNiw2a6ig==",
"cpu": [
"arm64"
],
@@ -215,9 +215,9 @@
}
},
"node_modules/@biomejs/cli-win32-x64": {
"version": "2.4.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.15.tgz",
"integrity": "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.12.tgz",
"integrity": "sha512-yMckRzTyZ83hkk8iDFWswqSdU8tvZxspJKnYNh7JZr/zhZNOlzH13k4ecboU6MurKExCe2HUkH75pGI/O2JwGA==",
"cpu": [
"x64"
],
@@ -295,6 +295,7 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=20.19.0"
},
@@ -343,6 +344,7 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=20.19.0"
}
@@ -417,29 +419,6 @@
"postcss-selector-parser": "^7.1.1"
}
},
"node_modules/@emnapi/core": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
"integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.1",
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/runtime": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/wasi-threads": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
@@ -1023,9 +1002,9 @@
}
},
"node_modules/@oxc-project/types": {
"version": "0.130.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz",
"integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==",
"version": "0.124.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.124.0.tgz",
"integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==",
"dev": true,
"license": "MIT",
"funding": {
@@ -1107,9 +1086,9 @@
}
},
"node_modules/@rolldown/binding-android-arm64": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz",
"integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz",
"integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==",
"cpu": [
"arm64"
],
@@ -1124,9 +1103,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz",
"integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz",
"integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==",
"cpu": [
"arm64"
],
@@ -1141,9 +1120,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz",
"integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz",
"integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==",
"cpu": [
"x64"
],
@@ -1158,9 +1137,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz",
"integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz",
"integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==",
"cpu": [
"x64"
],
@@ -1175,9 +1154,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz",
"integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz",
"integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==",
"cpu": [
"arm"
],
@@ -1192,9 +1171,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz",
"integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==",
"cpu": [
"arm64"
],
@@ -1209,9 +1188,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz",
"integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz",
"integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==",
"cpu": [
"arm64"
],
@@ -1226,9 +1205,9 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz",
"integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==",
"cpu": [
"ppc64"
],
@@ -1243,9 +1222,9 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz",
"integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==",
"cpu": [
"s390x"
],
@@ -1260,9 +1239,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz",
"integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz",
"integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==",
"cpu": [
"x64"
],
@@ -1277,9 +1256,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz",
"integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz",
"integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==",
"cpu": [
"x64"
],
@@ -1294,9 +1273,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz",
"integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz",
"integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==",
"cpu": [
"arm64"
],
@@ -1311,9 +1290,9 @@
}
},
"node_modules/@rolldown/binding-wasm32-wasi": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz",
"integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz",
"integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==",
"cpu": [
"wasm32"
],
@@ -1321,18 +1300,41 @@
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/core": "1.10.0",
"@emnapi/runtime": "1.10.0",
"@napi-rs/wasm-runtime": "^1.1.4"
"@emnapi/core": "1.9.2",
"@emnapi/runtime": "1.9.2",
"@napi-rs/wasm-runtime": "^1.1.3"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
"node": ">=14.0.0"
}
},
"node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz",
"integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.1",
"tslib": "^2.4.0"
}
},
"node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
"integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz",
"integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz",
"integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==",
"cpu": [
"arm64"
],
@@ -1347,9 +1349,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz",
"integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz",
"integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==",
"cpu": [
"x64"
],
@@ -1364,9 +1366,9 @@
}
},
"node_modules/@rolldown/pluginutils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
"integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz",
"integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==",
"dev": true,
"license": "MIT"
},
@@ -1511,9 +1513,9 @@
}
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.2",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
"integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
"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,
@@ -1522,13 +1524,14 @@
}
},
"node_modules/@types/node": {
"version": "25.8.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz",
"integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==",
"version": "25.6.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz",
"integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": ">=7.24.0 <7.24.7"
"undici-types": "~7.19.0"
}
},
"node_modules/@types/pluralize": {
@@ -1693,6 +1696,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.10.12",
"caniuse-lite": "^1.0.30001782",
@@ -1911,6 +1915,7 @@
"integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"mdn-data": "2.27.1",
"source-map-js": "^1.2.1"
@@ -2434,9 +2439,9 @@
}
},
"node_modules/get-east-asian-width": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
"integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
"integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2747,6 +2752,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-what": {
"version": "4.1.16",
"resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
@@ -2821,6 +2836,7 @@
"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@keyv/serialize": "^1.1.1"
}
@@ -2847,6 +2863,7 @@
"integrity": "sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"copy-anything": "^3.0.5",
"parse-node-version": "^1.0.1"
@@ -3465,9 +3482,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.14",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
"integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
"version": "8.5.10",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
"integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
"dev": true,
"funding": [
{
@@ -3484,6 +3501,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -3546,6 +3564,7 @@
"integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -3731,14 +3750,14 @@
}
},
"node_modules/rolldown": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz",
"integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==",
"version": "1.0.0-rc.15",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.15.tgz",
"integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.130.0",
"@rolldown/pluginutils": "^1.0.0"
"@oxc-project/types": "=0.124.0",
"@rolldown/pluginutils": "1.0.0-rc.15"
},
"bin": {
"rolldown": "bin/cli.mjs"
@@ -3747,21 +3766,21 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-android-arm64": "1.0.1",
"@rolldown/binding-darwin-arm64": "1.0.1",
"@rolldown/binding-darwin-x64": "1.0.1",
"@rolldown/binding-freebsd-x64": "1.0.1",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.1",
"@rolldown/binding-linux-arm64-gnu": "1.0.1",
"@rolldown/binding-linux-arm64-musl": "1.0.1",
"@rolldown/binding-linux-ppc64-gnu": "1.0.1",
"@rolldown/binding-linux-s390x-gnu": "1.0.1",
"@rolldown/binding-linux-x64-gnu": "1.0.1",
"@rolldown/binding-linux-x64-musl": "1.0.1",
"@rolldown/binding-openharmony-arm64": "1.0.1",
"@rolldown/binding-wasm32-wasi": "1.0.1",
"@rolldown/binding-win32-arm64-msvc": "1.0.1",
"@rolldown/binding-win32-x64-msvc": "1.0.1"
"@rolldown/binding-android-arm64": "1.0.0-rc.15",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.15",
"@rolldown/binding-darwin-x64": "1.0.0-rc.15",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.15",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15",
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.15",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.15",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.15",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15"
}
},
"node_modules/run-parallel": {
@@ -4000,9 +4019,9 @@
}
},
"node_modules/string-width": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
"integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz",
"integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4049,9 +4068,9 @@
}
},
"node_modules/stylelint": {
"version": "17.11.1",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.11.1.tgz",
"integrity": "sha512-+smN/HqVTggUx3iuAzOi9fPh8SrH+cJWlZrYVldXoJ06orWBhZ4Ue/QEp64oei6pVrAh4w3tG+Y12Vw7MbCFRQ==",
"version": "17.8.0",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.8.0.tgz",
"integrity": "sha512-oHkld9T60LDSaUQ4CSVc+tlt9eUoDlxhaGWShsUCKyIL14boZfmK5bSphZqx64aiC5tCqX+BsQMTMoSz8D1zIg==",
"dev": true,
"funding": [
{
@@ -4064,10 +4083,11 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"@csstools/css-calc": "^3.2.0",
"@csstools/css-calc": "^3.1.1",
"@csstools/css-parser-algorithms": "^4.0.0",
"@csstools/css-syntax-patches-for-csstree": "^1.1.3",
"@csstools/css-syntax-patches-for-csstree": "^1.1.2",
"@csstools/css-tokenizer": "^4.0.0",
"@csstools/media-query-list-parser": "^5.0.0",
"@csstools/selector-resolve-nested": "^4.0.0",
@@ -4086,16 +4106,17 @@
"html-tags": "^5.1.0",
"ignore": "^7.0.5",
"import-meta-resolve": "^4.2.0",
"is-plain-object": "^5.0.0",
"mathml-tag-names": "^4.0.0",
"meow": "^14.1.0",
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"picocolors": "^1.1.1",
"postcss": "^8.5.14",
"postcss": "^8.5.9",
"postcss-safe-parser": "^7.0.1",
"postcss-selector-parser": "^7.1.1",
"postcss-value-parser": "^4.2.0",
"string-width": "^8.2.1",
"string-width": "^8.2.0",
"supports-hyperlinks": "^4.4.0",
"svg-tags": "^1.0.0",
"table": "^6.9.0",
@@ -4414,6 +4435,7 @@
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -4458,6 +4480,7 @@
"integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -4467,9 +4490,9 @@
}
},
"node_modules/undici-types": {
"version": "7.24.6",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
"integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
"version": "7.19.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
"integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
"dev": true,
"license": "MIT"
},
@@ -4534,17 +4557,17 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "8.0.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz",
"integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==",
"version": "8.0.8",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.8.tgz",
"integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.32.0",
"picomatch": "^4.0.4",
"postcss": "^8.5.14",
"rolldown": "1.0.1",
"tinyglobby": "^0.2.16"
"postcss": "^8.5.8",
"rolldown": "1.0.0-rc.15",
"tinyglobby": "^0.2.15"
},
"bin": {
"vite": "bin/vite.js"
@@ -4560,7 +4583,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
"@vitejs/devtools": "^0.1.18",
"@vitejs/devtools": "^0.1.0",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
@@ -4612,9 +4635,9 @@
}
},
"node_modules/vite-bundle-analyzer": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.3.8.tgz",
"integrity": "sha512-IIk7WPhoYs7pyo75jwI+dFt7yykgjK7NY+dqnJtiZnyqP2k6NgPb3TY80FLFjtgnfk/o+OjI18+anKyeviCbRA==",
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.3.7.tgz",
"integrity": "sha512-dYlW6iM0Gq7+uSEfXytDC+UjruUMgEKhXwQUbw4cJUgHA6FdEhpLgIrL5OZEyabrzVen0mZyfOSESyZ7nGyT8g==",
"dev": true,
"license": "MIT",
"bin": {
+5 -5
View File
@@ -29,8 +29,8 @@
"swiped-events": "1.2.0"
},
"devDependencies": {
"@biomejs/biome": "2.4.15",
"@types/node": "^25.8.0",
"@biomejs/biome": "2.4.12",
"@types/node": "^25.6.0",
"browserslist": "^4.28.2",
"browserslist-to-esbuild": "^2.1.1",
"edge.js": "^6.5.0",
@@ -38,12 +38,12 @@
"mathjs": "^15.2.0",
"sharp": "~0.34.5",
"sort-package-json": "^3.6.1",
"stylelint": "^17.11.1",
"stylelint": "^17.8.0",
"stylelint-config-standard-less": "^4.1.0",
"stylelint-prettier": "^5.0.3",
"svgo": "^4.0.1",
"typescript": "~6.0.3",
"vite": "^8.0.13",
"vite-bundle-analyzer": "^1.3.8"
"vite": "^8.0.8",
"vite-bundle-analyzer": "^1.3.7"
}
}
-57
View File
@@ -1,57 +0,0 @@
.content {
width: 52em; /* instead of 46em */
}
p code.literal {
text-wrap: nowrap;
}
aside.sidebar {
border-color: lightsteelblue;
border-radius: 3pt;
}
p.sidebar-title, .sidebar p {
margin: 6pt;
}
.sidebar li,
.hlist li {
list-style-type: disclosure-closed;
}
.sphinxsidebar .current > a {
font-weight: bold;
}
/* admonitions with (rendered) reST markup examples (:class: rst-example)
*
* .. admonition:: title of the example
* :class: rst-example
* ....
*/
div.rst-example {
background-color: inherit;
margin: 0;
border-top: none;
border-right: 1px solid #ccc;
border-bottom: none;
border-left: none;
border-radius: none;
padding: 0;
}
div.rst-example > p.admonition-title {
font-family: Sans Serif;
font-style: italic;
font-size: 0.8em;
display: block;
border-bottom: 1px solid #ccc;
padding: 0.5em 1em;
text-align: right;
}
div.sphinx-tabs {
clear: both;
}
+151
View File
@@ -0,0 +1,151 @@
@import url("pocoo.css");
a, a.reference, a.footnote-reference {
color: #004b6b;
border-color: #004b6b;
}
a:hover {
color: #6d4100;
border-color: #6d4100;
}
p.version-warning {
background-color: #004b6b;
}
aside.sidebar {
background-color: whitesmoke;
border-color: lightsteelblue;
border-radius: 3pt;
}
div.sphinxsidebar p.caption {
display: none;
}
p.sidebar-title, .sidebar p {
margin: 6pt;
}
.sidebar li,
.hlist li {
list-style-type: disclosure-closed;
}
.sphinxsidebar .current > a {
font-weight: bold;
}
/* admonitions
*/
div.admonition, div.topic, nav.contents, div.toctree-wrapper {
background-color: #fafafa;
margin: 8px 0px;
padding: 1em;
border-radius: 3pt 0 0 3pt;
border-top: none;
border-right: none;
border-bottom: none;
border-left: 5pt solid #ccc;
list-style-type: disclosure-closed;
}
div.toctree-wrapper p.caption {
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
display: inline;
}
p.admonition-title:after {
content: none;
}
.admonition.hint { border-color: #416dc0b0; }
.admonition.note { border-color: #6c856cb0; }
.admonition.tip { border-color: #85c5c2b0; }
.admonition.attention { border-color: #ecec97b0; }
.admonition.caution { border-color: #a6c677b0; }
.admonition.danger { border-color: #d46262b0; }
.admonition.important { border-color: #dfa3a3b0; }
.admonition.error { border-color: red; }
.admonition.warning { border-color: darkred; }
.admonition.admonition-generic-admonition-title {
border-color: #416dc0b0;
}
/* admonitions with (rendered) reST markup examples (:class: rst-example)
*
* .. admonition:: title of the example
* :class: rst-example
* ....
*/
div.rst-example {
background-color: inherit;
margin: 0;
border-top: none;
border-right: 1px solid #ccc;
border-bottom: none;
border-left: none;
border-radius: none;
padding: 0;
}
div.rst-example > p.admonition-title {
font-family: Sans Serif;
font-style: italic;
font-size: 0.8em;
display: block;
border-bottom: 1px solid #ccc;
padding: 0.5em 1em;
text-align: right;
}
/* code block in figures
*/
div.highlight pre {
text-align: left;
}
/* Table theme
*/
thead, tfoot {
background-color: #fff;
}
th:hover, td:hover {
background-color: #ffc;
}
thead th, tfoot th, tfoot td, tbody th {
background-color: #fffaef;
}
tbody tr:nth-child(odd) {
background-color: #fff;
}
tbody tr:nth-child(even) {
background-color: #fafafa;
}
caption {
font-family: Sans Serif;
padding: 0.5em;
margin: 0.5em 0 0.5em 0;
caption-side: top;
text-align: left;
}
div.sphinx-tabs {
clear: both;
}
+7
View File
@@ -0,0 +1,7 @@
[theme]
inherit = pocoo
stylesheet = searxng.css
[options]
touch_icon =
globaltoc_maxdepth = 5
+5
View File
@@ -4,6 +4,11 @@
Buildhosts
==========
.. contents::
:depth: 2
:local:
:backlinks: entry
To get best results from build, it's recommend to install additional packages on
build hosts (see :ref:`searxng.sh`).
+5
View File
@@ -61,6 +61,11 @@ section might give you some guidance.
- `Apache Fedora`_
- `Apache directives`_
.. contents::
:depth: 2
:local:
:backlinks: entry
The Apache HTTP server
======================
+6
View File
@@ -41,6 +41,12 @@ section might give you some guidance.
- `uWSGI support from nginx`_
.. contents::
:depth: 2
:local:
:backlinks: entry
The nginx HTTP server
=====================
+6
View File
@@ -4,6 +4,12 @@
Step by step installation
=========================
.. contents::
:depth: 2
:local:
:backlinks: entry
In this section we show the setup of a SearXNG instance that will be installed
by the :ref:`installation scripts`.
+6
View File
@@ -9,6 +9,12 @@ uWSGI
- `systemd.unit`_
- `uWSGI Emperor`_
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _systemd.unit: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
.. _One service per app in systemd:
https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
+6
View File
@@ -8,6 +8,11 @@ Favicons
Don't activate the favicons before reading the documentation.
.. contents::
:depth: 2
:local:
:backlinks: entry
Activating the favicons in SearXNG is very easy, but this **generates a
significantly higher load** in the client/server communication and increases
resources needed on the server.
@@ -245,3 +250,4 @@ into the *proxy*:
.. _data URL:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
.. _FQN: https://en.wikipedia.org/wiki/Fully_qualified_name
+5
View File
@@ -8,5 +8,10 @@ Limiter
The limiter requires a :ref:`Valkey <settings valkey>` database.
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.limiter
:members:
+5
View File
@@ -12,6 +12,11 @@ file.
- :ref:`use_default_settings.yml`
- :ref:`search API`
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _settings location:
settings.yml location
+6 -13
View File
@@ -102,18 +102,11 @@ The built-in plugins are all located in the namespace `searx.plugins`.
external plugins
================
SearXNG supports :ref:`external plugins <dev plugin>` / there is no need to
install one, SearXNG runs out of the box.
`Only show green hosted results`_:
SearXNG plugin to check if a domain is part of the Green WEB.
`SearXNG BM25 Reranker`_:
SearXNG plugin that reranks search results using BM25 text relevance scoring
to improve search quality.
.. _Only show green hosted results:
https://github.com/return42/tgwf-searx-plugins/
https://github.com/return42/tgwf-searx-plugins/
.. _SearXNG BM25 Reranker:
https://github.com/Oaklight/searxng-bm25-reranker
SearXNG supports *external plugins* / there is no need to install one, SearXNG
runs out of the box.
- `Only show green hosted results`_
- ..
+5
View File
@@ -9,6 +9,11 @@ SearXNG maintenance
- :ref:`toolboxing`
- :ref:`uWSGI maintenance`
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _update searxng:
How to update
+1 -1
View File
@@ -169,7 +169,7 @@ ${fedora_build}
$ sudo -H -u ${SERVICE_USER} -i
(${SERVICE_USER})$ cd ${SEARXNG_SRC}
(${SERVICE_USER})$ export SEARXNG_SETTINGS_PATH=\"${SEARXNG_SETTINGS_PATH}\"
(${SERVICE_USER})$ python -m searx.webapp
(${SERVICE_USER})$ python searx/webapp.py
# disable debug
$ sudo -H sed -i -e \"s/debug : True/debug : False/g\" \"$SEARXNG_SETTINGS_PATH\"
+34 -41
View File
@@ -1,7 +1,8 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
import os
import sys, os
from pathlib import Path
from pallets_sphinx_themes import ProjectLink
from searx import get_setting
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
@@ -97,6 +98,7 @@ extlinks['pull-searx'] = ('https://github.com/searx/searx/pull/%s', 'PR %s')
extlinks['origin'] = (GIT_URL + '/blob/' + GIT_BRANCH + '/%s', 'git://%s')
extlinks['patch'] = (GIT_URL + '/commit/%s', '#%s')
extlinks['docs'] = (DOCS_URL + '/%s', 'docs: %s')
extlinks['pypi'] = ('https://pypi.org/project/%s', 'PyPi: %s')
extlinks['man'] = ('https://manpages.debian.org/jump?q=%s', '%s')
#extlinks['role'] = (
# 'https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-%s', '')
@@ -115,6 +117,7 @@ extensions = [
'sphinx.ext.viewcode',
"sphinx.ext.autodoc",
"sphinx.ext.intersphinx",
"pallets_sphinx_themes",
"sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst
"sphinx_jinja", # https://github.com/tardyp/sphinx-jinja
"sphinxcontrib.programoutput", # https://github.com/NextThought/sphinxcontrib-programoutput
@@ -155,49 +158,15 @@ issues_github_path = "searxng/searxng"
# HTML -----------------------------------------------------------------
html_theme = "furo"
html_theme_options = {
# link to project source at GitHub for editing and viewing docs code
"source_repository": "https://github.com/searxng/searxng/",
"source_branch": "master",
"source_directory": "docs/",
# Show link to repository & searx.space in footer
"footer_icons": [
{
"name": "GitHub",
"url": "https://github.com/searxng/searxng/",
"html": "&#x1F4BE;",
},
{
"name": "searx.space",
"url": "https://searx.space/",
"html": "&#x1F310;",
},
],
}
html_sidebars = {
"**": [
"sidebar/scroll-start.html",
"sidebar/brand.html",
"sidebar/search.html",
"sidebar/navigation.html",
"sidebar/ethical-ads.html",
"sidebar/scroll-end.html",
]
}
html_static_path = ['_static']
html_css_files = [
'searxng.css',
]
# https://searxng.github.io/searxng --> '/searxng/'
# https://docs.searxng.org --> '/'
notfound_urls_prefix = '/'
sys.path.append(os.path.abspath('_themes'))
sys.path.insert(0, os.path.abspath("../"))
html_theme_path = ['_themes']
html_theme = "searxng"
# sphinx.ext.imgmath setup
html_math_renderer = 'imgmath'
imgmath_image_format = 'svg'
@@ -205,10 +174,34 @@ imgmath_font_size = 14
# sphinx.ext.imgmath setup END
html_show_sphinx = False
html_theme_options = {"index_sidebar_logo": True}
html_context = {"project_links": [] }
html_context["project_links"].append(ProjectLink("Source", GIT_URL + '/tree/' + GIT_BRANCH))
if WIKI_URL:
html_context["project_links"].append(ProjectLink("Wiki", WIKI_URL))
if PUBLIC_INSTANCES:
html_context["project_links"].append(ProjectLink("Public instances", PUBLIC_INSTANCES))
if ISSUE_URL:
html_context["project_links"].append(ProjectLink("Issue Tracker", ISSUE_URL))
if PRIVACYPOLICY_URL:
html_context["project_links"].append(ProjectLink("Privacy Policy", PRIVACYPOLICY_URL))
if CONTACT_URL:
html_context["project_links"].append(ProjectLink("Contact", CONTACT_URL))
html_sidebars = {
"**": [
"globaltoc.html",
"project.html",
"relations.html",
"searchbox.html",
"sourcelink.html"
],
}
singlehtml_sidebars = {"index": ["project.html", "localtoc.html"]}
html_logo = "../client/simple/src/brand/searxng-wordmark.svg"
html_title = "SearXNG Documentation ({})".format(VERSION_STRING)
html_show_sourcelink = True
html_copy_source = True
# LaTeX ----------------------------------------------------------------
+5
View File
@@ -4,6 +4,11 @@
How to contribute
=================
.. contents::
:depth: 2
:local:
:backlinks: entry
Prime directives: Privacy, Hackability
======================================
+5
View File
@@ -4,6 +4,11 @@
Demo Offline Engine
===================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.demo_offline
:members:
+5
View File
@@ -4,6 +4,11 @@
Demo Online Engine
==================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.demo_online
:members:
+5
View File
@@ -4,6 +4,11 @@
Engine Overview
===============
.. contents::
:depth: 3
:local:
:backlinks: entry
.. _metasearch-engine: https://en.wikipedia.org/wiki/Metasearch_engine
.. sidebar:: Further reading ..
+6
View File
@@ -4,6 +4,12 @@
Engine Implementations
======================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. toctree::
:caption: Framework Components
:maxdepth: 2
+5
View File
@@ -4,5 +4,10 @@
JSON Engine
============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.json_engine
:members:
+5
View File
@@ -4,5 +4,10 @@
MediaWiki Engine
================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.mediawiki
:members:
@@ -9,6 +9,11 @@ Command Line Engines
- :origin:`command.py <searx/engines/command.py>`
- :ref:`offline engines`
.. contents::
:depth: 2
:local:
:backlinks: entry
.. sidebar:: info
Initial sponsored by `Search and Discovery Fund
+12 -7
View File
@@ -6,16 +6,21 @@ NoSQL databases
.. sidebar:: further read
- `NoSQL database <https://en.wikipedia.org/wiki/NoSQL>`_
- `NoSQL databases <https://en.wikipedia.org/wiki/NoSQL>`_
- `valkey.io <https://valkey.io/>`_
- `MongoDB <https://www.mongodb.com>`_
.. contents::
:depth: 2
:local:
:backlinks: entry
.. sidebar:: info
Initial sponsored by `Search and Discovery Fund
<https://nlnet.nl/discovery>`_ of `NLnet Foundation <https://nlnet.nl/>`_.
The following `NoSQL database`_ are supported:
The following `NoSQL databases`_ are supported:
- :ref:`engine valkey_server`
- :ref:`engine mongodb`
@@ -52,7 +57,7 @@ instance. To switch into the environment (:ref:`searxng-src`) you can use
Configure the engines
=====================
`NoSQL database`_ are used for storing arbitrary data without first defining
`NoSQL databases`_ are used for storing arbitrary data without first defining
their structure.
@@ -70,13 +75,13 @@ Valkey Server
- :origin:`valkey_server.py <searx/engines/valkey_server.py>`
.. automodule:: searx.engines.valkey_server
:members:
:members:
.. _engine mongodb:
MongoDB / PyMongo
-----------------
MongoDB
-------
.. _pymongo: https://github.com/mongodb/mongo-python-driver#installation
@@ -88,4 +93,4 @@ MongoDB / PyMongo
.. automodule:: searx.engines.mongodb
:members:
:members:
@@ -7,6 +7,11 @@ Local Search APIs
- `Comparison to alternatives
<https://docs.meilisearch.com/learn/what_is_meilisearch/comparison_to_alternatives.html>`_
.. contents::
:depth: 1
:local:
:backlinks: entry
.. sidebar:: info
Initial sponsored by `Search and Discovery Fund
@@ -32,8 +37,8 @@ in section :ref:`private engines`.
.. _engine meilisearch:
MeiliSearch Engine
==================
MeiliSearch
===========
.. automodule:: searx.engines.meilisearch
:members:
@@ -41,16 +46,17 @@ MeiliSearch Engine
.. _engine elasticsearch:
Elasticsearch Engine
====================
Elasticsearch
=============
.. automodule:: searx.engines.elasticsearch
:members:
.. _engine solr:
Solr Engine
===========
Solr
====
.. automodule:: searx.engines.solr
:members:
+5
View File
@@ -10,6 +10,11 @@ SQL Engines
- `PostgreSQL <https://www.postgresql.org>`_
- `MySQL <https://www.mysql.com>`_
.. contents::
:depth: 2
:local:
:backlinks: entry
.. sidebar:: info
Initial sponsored by `Search and Discovery Fund
-8
View File
@@ -1,8 +0,0 @@
.. _500px engine:
=====
500px
=====
.. automodule:: searx.engines.500px
:members:
+5
View File
@@ -4,5 +4,10 @@
Adobe Stock
===========
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.adobe_stock
:members:
+5
View File
@@ -4,5 +4,10 @@
Alpine Linux Packages
=====================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.alpinelinux
:members:
@@ -4,5 +4,10 @@
Anna's Archive
==============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.annas_archive
:members:
+5
View File
@@ -4,6 +4,11 @@
Arch Linux
==========
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.archlinux
:members:
+6
View File
@@ -4,6 +4,12 @@
Bing Engines
============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _bing web engine:
Bing WEB
+5
View File
@@ -4,5 +4,10 @@
Bpb
===
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.bpb
:members:
+5
View File
@@ -2,6 +2,11 @@
Brave Engines
=============
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
Brave offers two different engines for SearXNG:
1. The standard engine (``brave``) uses the web interface.
+5
View File
@@ -4,6 +4,11 @@
BT4G
====
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.bt4g
:members:
-8
View File
@@ -1,8 +0,0 @@
.. _cara engine:
===========
Cara Images
===========
.. automodule:: searx.engines.cara
:members:
+5
View File
@@ -4,5 +4,10 @@
CORE
====
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.core
:members:
+5
View File
@@ -4,5 +4,10 @@
Dailymotion
===========
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.dailymotion
:members:
+5
View File
@@ -4,6 +4,11 @@
DuckDuckGo Engines
==================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.duckduckgo
:members:
+6
View File
@@ -4,6 +4,12 @@
Google Engines
==============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _google API:
Google API
+5
View File
@@ -4,5 +4,10 @@
Lemmy
=====
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.lemmy
:members:
+5
View File
@@ -4,5 +4,10 @@
Library of Congress
===================
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.loc
:members:
+5
View File
@@ -4,5 +4,10 @@
Mastodon
========
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.mastodon
:members:
+5
View File
@@ -4,5 +4,10 @@
Moviepilot
==========
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.moviepilot
:members:
+5
View File
@@ -4,5 +4,10 @@
Matrix Rooms Search (MRS)
=========================
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.mrs
:members:
+6
View File
@@ -4,6 +4,12 @@
Mwmbl Engine
============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _mwmbl web engine:
Mwmbl WEB
+5
View File
@@ -4,5 +4,10 @@
Odysee
======
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.odysee
:members:
+6
View File
@@ -4,6 +4,12 @@
Peertube Engines
================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _peertube video engine:
Peertube Video
+5
View File
@@ -4,5 +4,10 @@
Piped
=====
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.piped
:members:
+5
View File
@@ -4,5 +4,10 @@
Presearch Engine
================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.presearch
:members:
+5
View File
@@ -4,5 +4,10 @@
Qwant
=====
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.qwant
:members:
@@ -4,5 +4,10 @@
RadioBrowser
============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.radio_browser
:members:
+5
View File
@@ -4,5 +4,10 @@
Recoll Engine
=============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.recoll
:members:
+5
View File
@@ -4,5 +4,10 @@
Soundcloud
==========
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.soundcloud
:members:
+5
View File
@@ -4,5 +4,10 @@
Startpage Engines
=================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.startpage
:members:
+5
View File
@@ -4,5 +4,10 @@
Tagesschau API
==============
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.tagesschau
:members:
+5
View File
@@ -4,5 +4,10 @@
Torznab WebAPI
==============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.torznab
:members:
+5
View File
@@ -4,5 +4,10 @@
Void Linux binary packages
==========================
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.voidlinux
:members:
+5
View File
@@ -4,5 +4,10 @@
Wallhaven
=========
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.wallhaven
:members:
+6
View File
@@ -4,6 +4,12 @@
Wikimedia
=========
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _wikipedia engine:
Wikipedia
+5
View File
@@ -4,5 +4,10 @@
Yacy
====
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.yacy
:members:
+5
View File
@@ -4,5 +4,10 @@
Yahoo Engine
============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.yahoo
:members:
+5
View File
@@ -4,5 +4,10 @@
Z-Library
=========
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.zlibrary
:members:
@@ -4,6 +4,11 @@
Tineye
======
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.tineye
:members:
+5
View File
@@ -4,6 +4,11 @@
XPath Engine
============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.xpath
:members:
+5
View File
@@ -19,6 +19,11 @@ Makefiles, we recommend to read gnu-make_ introduction.
To install developer requirements follow :ref:`buildhosts`.
.. contents::
:depth: 2
:local:
:backlinks: entry
The usage is simple, just type ``make {target-name}`` to *build* a target.
Calling the ``help`` target gives a first overview (``make help``):
+1 -19
View File
@@ -60,29 +60,11 @@ into the developer environment and start a python based HTTP server by::
$ ./manage dev.env
...
(dev.env)$ SEARXNG_DEBUG=1 searxng-run
(dev.env)$ SEARXNG_DEBUG=1 python -m searx.webapp
Since this is a pure Python solution, you can set breakpoints in your code with
``pdb.set_trace()`` and the debugger will wait for you in the terminal prompt.
Any other script or command line provided by SearXNG can also be used in the
same environment, here are a few examples::
# tools related to favicons
(dev.env)$ python -m searx.favicons
# tools related to DATA stored in searx/data
(dev.env)$ python -m searx.data --help
# tools related to engines
(dev.env)$ python -m searx.enginelib --help
# to test one of the update scripts
(dev.env)$ searxng_extra/update/update_engine_traits.py --help
# to test the update of the wikidata units
(dev.env)$ searxng_extra/update/update_wikidata_units.py
.. sidebar:: further read
+6
View File
@@ -36,6 +36,12 @@ docs.live <make docs.live>` to build HTML while editing.
- SVG_, ImageMagick_
- DOT_, `Graphviz's dot`_, Graphviz_
.. contents::
:depth: 3
:local:
:backlinks: entry
Sphinx_ and reST_ have their place in the python ecosystem. Over that reST is
used in popular projects, e.g the Linux kernel documentation `[kernel doc]`_.
+5
View File
@@ -14,6 +14,11 @@ type of a result is defined by the :py:obj:`result_type.Result.template`. To
set another media-type as :ref:`template default`, the field ``template``
in the result item must be set to the desired type.
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. _result template macros:
+5
View File
@@ -7,6 +7,11 @@ Why use a private instance?
\.\.\.is a common question among SearXNG users. Before answering this
question, see what options a SearXNG user has.
.. contents::
:depth: 2
:local:
:backlinks: entry
Public instances are open to everyone who has access to their URL. Usually, they
are operated by unknown parties (from the users' point of view). Private
instances can be used by a select group of people, such as a SearXNG instance for a
+5
View File
@@ -4,6 +4,11 @@
Bot Detection
=============
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.botdetection
:members:
+8
View File
@@ -4,6 +4,11 @@
Favicons (source)
=================
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.favicons
:members:
@@ -38,3 +43,6 @@ Favicons Cache
.. automodule:: searx.favicons.cache
:members:
+5
View File
@@ -4,6 +4,11 @@
Locales
=======
.. contents::
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.locales
:members:
+6
View File
@@ -4,6 +4,12 @@
Search processors
=================
.. contents::
:depth: 2
:local:
:backlinks: entry
Abstract processor class
========================
+5
View File
@@ -22,6 +22,11 @@ Configured Engines
called *tabs*), engines can be queried by their name or the categories they
belong to, by using a :ref:`\!bing syntax <search-syntax>`.
.. contents::
:depth: 2
:local:
:backlinks: entry
.. jinja:: searx
{% for category, engines in categories_as_tabs.items() %}
+5
View File
@@ -2,6 +2,11 @@
User information
================
.. contents::
:depth: 3
:local:
:backlinks: entry
.. toctree::
:maxdepth: 2
+6
View File
@@ -15,6 +15,12 @@ script :origin:`utils/searxng.sh`.
- :ref:`installation nginx`
- :ref:`installation apache`
.. contents::
:depth: 2
:local:
:backlinks: entry
Install
=======
+8 -10
View File
@@ -4,25 +4,23 @@ cov-core==1.15.0
black==25.9.0
pylint==4.0.5
splinter==0.21.0
selenium==4.44.0
Sphinx==8.2.3;python_version <= "3.11"
Sphinx==9.1.0; python_version > "3.11"
selenium==4.43.0
Pallets-Sphinx-Themes==2.5.0
Sphinx==8.2.3
sphinx-issues==6.0.0
sphinx-jinja==2.0.2
sphinx-tabs==3.5.0
furo==2025.12.19
sphinxcontrib-programoutput==0.19
sphinx-autobuild==2025.8.25
sphinx-notfound-page==1.1.0
myst-parser==5.0.0
linuxdoc==20260504
linuxdoc==20240924
aiounittest==1.5.0
yamllint==1.38.0
wlc==2.0.0
wlc==1.17.2
coloredlogs==15.0.1
docutils>=0.21.2;python_version <= "3.11"
docutils>=0.22.4; python_version > "3.11"
docutils>=0.22.4
parameterized==0.9.0
granian[reload]==2.7.4
basedpyright==1.39.4
granian[reload]==2.7.3
basedpyright==1.39.2
types-lxml==2026.2.16
+2 -2
View File
@@ -1,2 +1,2 @@
granian==2.7.4
granian[pname]==2.7.4
granian==2.7.3
granian[pname]==2.7.3
+4 -4
View File
@@ -1,9 +1,9 @@
certifi==2026.4.22
certifi==2026.2.25
babel==2.18.0
flask-babel==4.0.0
flask==3.1.3
jinja2==3.1.6
lxml==6.1.0
lxml==6.0.4
pygments==2.20.0
python-dateutil==2.9.0.post0
pyyaml==6.0.3
@@ -11,9 +11,9 @@ httpx[http2]==0.28.1
httpx-socks[asyncio]==0.10.0
sniffio==1.3.1
valkey==6.1.1
markdown-it-py==4.2.0
markdown-it-py==4.0.0
msgspec==0.21.1
typer==0.25.1
typer==0.24.1
isodate==0.7.2
whitenoise==6.12.0
typing-extensions==4.15.0
+1 -7
View File
@@ -114,13 +114,7 @@ class ExpireCacheStats:
if expire:
valid_until = datetime.datetime.fromtimestamp(expire).strftime("%Y-%m-%d %H:%M:%S")
c_kv += 1
value_str = str(value)
if len(value_str) > 120:
value_str = f"{value_str[:120]} ..."
lines.append(
f"[{ctx_name:20s}] {valid_until} {key:12}"
f" --> ({type(value).__name__}:{len(value)}) {value_str} "
)
lines.append(f"[{ctx_name:20s}] {valid_until} {key:12}" f" --> ({type(value).__name__}) {value} ")
lines.append(f"Number of contexts: {c_ctx}")
lines.append(f"number of key/value pairs: {c_kv}")
File diff suppressed because it is too large Load Diff
+27 -34
View File
@@ -33,7 +33,7 @@
"pa": "ਚੈੱਕ ਕੋਰੂਨਾ",
"pl": "korona czeska",
"pt": "coroa checa",
"ro": "coroană cehă",
"ro": "Coroană cehă",
"ru": "чешская крона",
"sk": "česká koruna",
"sl": "češka krona",
@@ -1164,7 +1164,7 @@
"pa": "ਸਵਿੱਸ ਫ਼ਰਾਂਕ",
"pl": "frank szwajcarski",
"pt": "Franco suíço",
"ro": "franc elvețian",
"ro": "Franc elvețian",
"ru": "швейцарский франк",
"sk": "Švajčiarsky frank",
"sl": "švicarski frank",
@@ -1484,7 +1484,7 @@
"pa": "ਚੈੱਕ ਕੋਰੂਨਾ",
"pl": "korona czeska",
"pt": "coroa checa",
"ro": "coroană cehă",
"ro": "Coroană cehă",
"ru": "чешская крона",
"sk": "česká koruna",
"sl": "češka krona",
@@ -1807,7 +1807,7 @@
"pap": "Euro",
"pl": "euro",
"pt": "Euro",
"ro": "euro",
"ro": "Euro",
"ru": "евро",
"sk": "euro",
"sl": "evro",
@@ -1941,7 +1941,7 @@
"tr": "İngiliz sterlini",
"tt": "стерлинг фунты",
"uk": "фунт стерлінгів",
"vi": "bảng Anh"
"vi": "Bảng Anh"
},
"GEL": {
"ar": "لاري جورجي",
@@ -2627,7 +2627,7 @@
"pa": "ਆਈਸਲੈਂਡੀ ਕਰੋਨਾ",
"pl": "Korona islandzka",
"pt": "coroa islandesa",
"ro": "coroană islandeză",
"ro": "Coroană islandeză",
"ru": "исландская крона",
"sk": "Islandská koruna",
"sl": "islandska krona",
@@ -2827,7 +2827,7 @@
"pa": "ਕਿਰਗਿਜ਼ਸਤਾਨੀ ਸੋਮ",
"pl": "som",
"pt": "som",
"ro": "som",
"ro": "som kîrgîz",
"ru": "киргизский сом",
"sk": "kyrgyzský som",
"sl": "kirgiški som",
@@ -3516,7 +3516,6 @@
"en": "kyat",
"eo": "birma kjato",
"es": "Kyat birmano",
"eu": "kyat",
"fi": "Myanmarin kyat",
"fr": "Kyat",
"ga": "kyat Mhaenmar",
@@ -3577,7 +3576,7 @@
"sk": "Mongolský tugrik",
"sl": "tugrik",
"sr": "монголски тугрик",
"sv": "mongolisk tögrög",
"sv": "Mongolisk Tögrög",
"th": "ทูกรีก",
"tr": "Tögrög",
"tt": "төгрөг",
@@ -4128,7 +4127,7 @@
"oc": "Dolar neozelandés",
"pl": "dolar nowozelandzki",
"pt": "dólar neozelandês",
"ro": "dolar neozeelandez",
"ro": "Dolar neozeelandez",
"ru": "новозеландский доллар",
"sk": "Novozélandský dolár",
"sl": "novozelandski dolar",
@@ -4227,7 +4226,7 @@
"es": "sol",
"eu": "Sol",
"fi": "Perun nuevo sol",
"fr": "sol",
"fr": "nouveau sol",
"ga": "nuevo sol Pheiriú",
"gl": "Nuevo sol",
"he": "סול",
@@ -4235,7 +4234,7 @@
"hu": "perui új sol",
"id": "Nuevo Sol",
"it": "Nuevo Sol peruviano",
"ja": "ソル",
"ja": "ヌエボ・ソル",
"ko": "페루 솔",
"lt": "Naujasis solis",
"lv": "Peru sols",
@@ -4527,7 +4526,7 @@
"nl": "Qatarese rial",
"oc": "Riyal qatarita",
"pa": "ਕਤਰੀ ਰਿਆਲ",
"pl": "Rial katarski",
"pl": "Rial Kataru",
"pt": "Rial catarense",
"ru": "катарский риал",
"sk": "katarský rijál",
@@ -5572,7 +5571,6 @@
"en": "Tanzanian shilling",
"eo": "tanzania ŝilingo",
"es": "chelín tanzano",
"eu": "Txelin tanzaniar",
"fi": "Tansanian šillinki",
"fr": "shilling tanzanien",
"ga": "scilling na Tansáine",
@@ -5816,8 +5814,8 @@
"uk": "узбецький сом"
},
"VED": {
"en": "digital bolívar",
"es": "bolívar digital",
"en": "Digital bolívar",
"es": "Bolívar digital",
"fr": "bolivar numérique",
"pt": "Bolívar digital",
"ro": "Bolivar digital"
@@ -6578,7 +6576,7 @@
"Rs": "LKR",
"R₣": "RWF",
"S$": "SGD",
"S/": "PEN",
"S/.": "PEN",
"SI$": "SBD",
"SM": "TJS",
"SR": "SAR",
@@ -8733,6 +8731,7 @@
"franc djiboutià": "DJF",
"franc djiboutien": "DJF",
"franc elvețian": "CHF",
"franc elveţian": "CHF",
"franc guinea": "GNF",
"franc guinean": "GNF",
"franc guineà": "GNF",
@@ -8760,7 +8759,6 @@
"franc switze": "CHF",
"franc thụy sĩ": "CHF",
"franchi svizzeri": "CHF",
"franci elvețieni": "CHF",
"franco": [
"XPF",
"XAF",
@@ -9725,13 +9723,11 @@
"kwd": "KWD",
"kwt": "KWD",
"kyat": "MMK",
"kyat birmaniar": "MMK",
"kyat birmano": "MMK",
"kyat birmà": "MMK",
"kyat mhaenmar": "MMK",
"kyat myanma": "MMK",
"kyat myanmar": "MMK",
"kyat myanmartar": "MMK",
"kyd": "KYD",
"kyrgyz som": "KGS",
"kyrgyzský som": "KGS",
@@ -11152,7 +11148,6 @@
"pyg": "PYG",
"pумънски лей": "RON",
"pумынский лей": "RON",
"q8146": "JPY",
"qar": "QAR",
"qatar riyal": "QAR",
"qatarese rial": "QAR",
@@ -11264,6 +11259,7 @@
"rial irański": "IRR",
"rial jemeński": "YER",
"rial katarski": "QAR",
"rial kataru": "QAR",
"rial na hiaráine": "IRR",
"rial oman": "OMR",
"rial omanais": "OMR",
@@ -11836,7 +11832,6 @@
"sol peruano": "PEN",
"sol peruviano": "PEN",
"sol perú": "PEN",
"sol péruvien": "PEN",
"solomon adaları doları": "SBD",
"solomon dollar": "SBD",
"solomon islands dollar": "SBD",
@@ -11851,7 +11846,6 @@
"som de l'uzbekistan": "UZS",
"som del kirguizistan": "KGS",
"som do quirguistão": "KGS",
"som kârgâz": "KGS",
"som kirghiso": "KGS",
"som kirghiz": "KGS",
"som kirghizo": "KGS",
@@ -12160,7 +12154,6 @@
"INR",
"BDT"
],
"taka 12272": "BDT",
"taka bangladese": "BDT",
"taka bangladesh": "BDT",
"taka bangladeshi": "BDT",
@@ -12426,7 +12419,6 @@
"CZK",
"203"
],
"txelin tanzaniar": "TZS",
"tyrkisk lira": "TRY",
"tzs": "TZS",
"ṭākā": "BDT",
@@ -12528,6 +12520,7 @@
"uruguayischer peso": "UYU",
"uruguayn peso": "UYU",
"uruguayské peso": "UYU",
"uruguyansk peso": "UYU",
"urugvaja peso": "UYU",
"urugvajaus pesas": "UYU",
"urugvajski peso": "UYU",
@@ -15731,7 +15724,6 @@
"지부티프랑": "DJF",
"지브롤터 파운드": "GIP",
"짐바브웨 골드": "ZWG",
"짐바브웨 달러": "ZWL",
"짯": "MMK",
"챠트": "MMK",
"체코 코루나": [
@@ -15829,7 +15821,10 @@
"STN",
"CRC"
],
"₣": "XPF",
"₣": [
"XPF",
"RWF"
],
"₤": "GBP",
"₦": "NGN",
"₨": [
@@ -15862,9 +15857,6 @@
"⃀": "KGS",
"⃁": "SAR",
"⃂": "MVR",
"⃃": "AED",
"⃄": "OMR",
"⃅": "BYN",
"〒": "KZT",
"アイスランドクローナ": "ISK",
"アイスランド・クローナ": "ISK",
@@ -16006,7 +15998,6 @@
"ソマリア・シリング": "SOS",
"ソム": "KGS",
"ソモニ": "TJS",
"ソル": "PEN",
"ソロモン諸島ドル": "SBD",
"ソロモン諸島・ドル": "SBD",
"ダラシ": "GMD",
@@ -16198,8 +16189,10 @@
"香港ドル": "HKD",
"香港・ドル": "HKD",
"香港元": "HKD",
"﷼": "IRR",
"﷼'": "YER",
"💶": "EUR"
"﷼": [
"YER",
"IRR"
],
"﷼'": "YER"
}
}
File diff suppressed because it is too large Load Diff
+7 -181
View File
@@ -4079,7 +4079,6 @@
"bg-BG": "BG:bg",
"bn-BD": "BD:bn",
"bn-IN": "IN:bn",
"ca-ES": "ES:ca",
"cs-CZ": "CZ:cs",
"de-AT": "AT:de",
"de-CH": "CH:de",
@@ -4111,15 +4110,16 @@
"es-CO": "CO:es-419",
"es-CU": "CU:es-419",
"es-ES": "ES:es",
"et-EE": "EE:et",
"fi-FI": "FI:fi",
"es-MX": "MX:es-419",
"es-PE": "PE:es-419",
"es-US": "US:es-419",
"es-VE": "VE:es-419",
"fr-BE": "BE:fr",
"fr-CA": "CA:fr",
"fr-CH": "CH:fr",
"fr-FR": "FR:fr",
"fr-MA": "MA:fr",
"fr-SN": "SN:fr",
"gu-IN": "IN:gu",
"he-IL": "IL:he",
"hi-IN": "IN:hi",
"hu-HU": "HU:hu",
@@ -4131,13 +4131,12 @@
"lv-LV": "LV:lv",
"ml-IN": "IN:ml",
"mr-IN": "IN:mr",
"ms-MY": "MY:ms",
"nb-NO": "NO:no",
"nl-BE": "BE:nl",
"nl-NL": "NL:nl",
"pa-IN": "IN:pa",
"pl-PL": "PL:pl",
"pt-BR": "BR:pt-419",
"pt-PT": "PT:pt-150",
"ro-RO": "RO:ro",
"ru-RU": "RU:ru",
"ru-UA": "UA:ru",
@@ -4152,7 +4151,8 @@
"uk-UA": "UA:uk",
"vi-VN": "VN:vi",
"zh-CN": "CN:zh-Hans",
"zh-HK": "HK:zh-Hant"
"zh-HK": "HK:zh-Hant",
"zh-TW": "TW:zh-Hant"
},
"supported_domains": {}
},
@@ -7280,7 +7280,6 @@
"hu": "hungarian",
"hy": "armenian",
"id": "indonesian",
"ig": "igbo",
"is": "icelandic",
"it": "italian",
"ja": "japanese",
@@ -7336,7 +7335,6 @@
"ta": "tamil",
"te": "telugu",
"th": "thai",
"ti": "tigrinya",
"tk": "turkmen",
"tr": "turkish",
"tt": "tatar",
@@ -7344,7 +7342,6 @@
"ur": "urdu",
"uz": "uzbek",
"vi": "vietnamese",
"wo": "wolof",
"xh": "xhosa",
"yi": "yiddish",
"yo": "yoruba",
@@ -8513,177 +8510,6 @@
"zh-classical": "zh-classical"
}
},
"yep": {
"all_locale": null,
"custom": {},
"data_type": "traits_v1",
"languages": {
"aa": "aa",
"ab": "ab",
"af": "af",
"ak": "ak",
"am": "am",
"an": "an",
"ar": "ar",
"as": "as",
"az": "az",
"ba": "ba",
"be": "be",
"bg": "bg",
"bho": "bh",
"bm": "bm",
"bn": "bn",
"bo": "bo",
"br": "br",
"bs": "bs",
"ca": "ca",
"ce": "ce",
"co": "co",
"cs": "cs",
"cu": "cu",
"cv": "cv",
"cy": "cy",
"da": "da",
"de": "de",
"dv": "dv",
"dz": "dz",
"ee": "ee",
"el": "el",
"en": "en",
"eo": "eo",
"es": "es",
"et": "et",
"eu": "eu",
"fa": "fa",
"ff": "ff",
"fi": "fi",
"fil": "tl",
"fo": "fo",
"fr": "fr",
"fy": "fy",
"ga": "ga",
"gd": "gd",
"gl": "gl",
"gn": "gn",
"gu": "gu",
"gv": "gv",
"ha": "ha",
"he": "he",
"hi": "hi",
"hr": "hr",
"ht": "ht",
"hu": "hu",
"hy": "hy",
"ia": "ia",
"id": "id",
"ie": "ie",
"ig": "ig",
"ii": "ii",
"io": "io",
"is": "is",
"it": "it",
"iu": "iu",
"ja": "ja",
"jv": "jv",
"ka": "ka",
"ki": "ki",
"kk": "kk",
"kl": "kl",
"km": "km",
"kn": "kn",
"ko": "ko",
"ks": "ks",
"ku": "ku",
"kw": "kw",
"ky": "ky",
"la": "la",
"lb": "lb",
"lg": "lg",
"ln": "ln",
"lo": "lo",
"lt": "lt",
"lu": "lu",
"lv": "lv",
"mg": "mg",
"mi": "mi",
"mk": "mk",
"ml": "ml",
"mn": "mn",
"mr": "mr",
"ms": "ms",
"mt": "mt",
"my": "my",
"nb": "nb",
"nd": "nd",
"ne": "ne",
"nl": "nl",
"nn": "nn",
"no": "no",
"nr": "nr",
"nv": "nv",
"ny": "ny",
"oc": "oc",
"om": "om",
"or": "or",
"os": "os",
"pa": "pa",
"pl": "pl",
"ps": "ps",
"pt": "pt",
"qu": "qu",
"rm": "rm",
"rn": "rn",
"ro": "ro",
"ru": "ru",
"rw": "rw",
"sa": "sa",
"sc": "sc",
"sd": "sd",
"se": "se",
"sg": "sg",
"si": "si",
"sk": "sk",
"sl": "sl",
"sn": "sn",
"so": "so",
"sq": "sq",
"sr": "sr",
"ss": "ss",
"st": "st",
"su": "su",
"sv": "sv",
"sw": "sw",
"ta": "ta",
"te": "te",
"tg": "tg",
"th": "th",
"ti": "ti",
"tk": "tk",
"tn": "tn",
"to": "to",
"tr": "tr",
"ts": "ts",
"tt": "tt",
"ug": "ug",
"uk": "uk",
"ur": "ur",
"uz": "uz",
"ve": "ve",
"vi": "vi",
"vo": "vo",
"wa": "wa",
"wo": "wo",
"xh": "xh",
"yi": "yi",
"yo": "yo",
"za": "za",
"zh": "zh",
"zh_Hans": "zh-cn",
"zh_Hant": "zh-tw",
"zu": "zu"
},
"regions": {}
},
"z-library": {
"all_locale": "",
"custom": {
File diff suppressed because it is too large Load Diff
+2661 -2286
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -5,7 +5,7 @@
],
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
"versions": [
"150.0",
"149.0"
"149.0",
"148.0"
]
}
+158 -333
View File
@@ -194,11 +194,6 @@
"symbol": "cm⁻³",
"to_si_factor": 1000000.0
},
"Q102129592": {
"si_name": "Q6137407",
"symbol": "d⁻¹",
"to_si_factor": 1.15741e-05
},
"Q102130673": {
"si_name": "Q182429",
"symbol": "ym/s",
@@ -434,11 +429,6 @@
"symbol": "mtpa",
"to_si_factor": 31.709791984
},
"Q104381302": {
"si_name": "Q104381302",
"symbol": "W/m³",
"to_si_factor": 1.0
},
"Q104628312": {
"si_name": "Q25269",
"symbol": "vars",
@@ -1509,6 +1499,11 @@
"symbol": "kg m²/(s² K)",
"to_si_factor": 1.0
},
"Q106725578": {
"si_name": "Q106725578",
"symbol": "m²/(s² K)",
"to_si_factor": 1.0
},
"Q106740890": {
"si_name": "Q106740890",
"symbol": "m²/s²",
@@ -1659,6 +1654,11 @@
"symbol": "N/mm",
"to_si_factor": 1000.0
},
"Q106886424": {
"si_name": "Q215571",
"symbol": "kgf m",
"to_si_factor": 9.80665
},
"Q106886632": {
"si_name": "Q44395",
"symbol": "hbar",
@@ -1764,16 +1764,6 @@
"symbol": "kg/(m⁴ s)",
"to_si_factor": 1.0
},
"Q107059005": {
"si_name": "Q69425409",
"symbol": "A h/dm³",
"to_si_factor": 3600000.0
},
"Q107059365": {
"si_name": "Q97541209",
"symbol": "A h/kg",
"to_si_factor": 3600.0
},
"Q107095937": {
"si_name": "Q107095937",
"symbol": "kg m²/(s² mol)",
@@ -2084,11 +2074,6 @@
"symbol": "rem/s",
"to_si_factor": 0.01
},
"Q107378429": {
"si_name": "Q11547252",
"symbol": "1/in²",
"to_si_factor": 1550.0
},
"Q107378436": {
"si_name": "Q11547251",
"symbol": "Å⁻¹",
@@ -2294,11 +2279,6 @@
"symbol": "b/sr",
"to_si_factor": 1e-28
},
"Q107611142": {
"si_name": "Q98267267",
"symbol": "b/eV",
"to_si_factor": 6.24151e-10
},
"Q107611199": {
"si_name": "Q98267267",
"symbol": "cm²/erg",
@@ -2314,96 +2294,11 @@
"symbol": "cm²/(sr erg)",
"to_si_factor": 1000.0
},
"Q107821494": {
"si_name": null,
"symbol": "bit/m³",
"to_si_factor": null
},
"Q107822428": {
"si_name": null,
"symbol": "bit/m",
"to_si_factor": null
},
"Q107824325": {
"si_name": null,
"symbol": "bit/m²",
"to_si_factor": null
},
"Q107862770": {
"si_name": null,
"symbol": "Kibit/m",
"to_si_factor": null
},
"Q107862783": {
"si_name": null,
"symbol": "Kibit/m",
"to_si_factor": null
},
"Q107862850": {
"si_name": null,
"symbol": "Kibit/m³",
"to_si_factor": null
},
"Q107862870": {
"si_name": null,
"symbol": "Mibit/m",
"to_si_factor": null
},
"Q107862884": {
"si_name": null,
"symbol": "Mibit/m²",
"to_si_factor": null
},
"Q107862898": {
"si_name": null,
"symbol": "Mibit/m³",
"to_si_factor": null
},
"Q107970215": {
"si_name": null,
"symbol": "Pibit/m",
"to_si_factor": null
},
"Q107970224": {
"si_name": null,
"symbol": "Pibit/m²",
"to_si_factor": null
},
"Q107970230": {
"si_name": null,
"symbol": "Pibit/m³",
"to_si_factor": null
},
"Q107970235": {
"si_name": null,
"symbol": "Tibit/m",
"to_si_factor": null
},
"Q107970256": {
"si_name": null,
"symbol": "Tibit/m³",
"to_si_factor": null
},
"Q107970266": {
"si_name": null,
"symbol": "Tibit/m²",
"to_si_factor": null
},
"Q108270163": {
"si_name": "Q25381181",
"symbol": "t/a",
"to_si_factor": 3.169e-05
},
"Q1084321": {
"si_name": null,
"symbol": "Tb/s",
"to_si_factor": null
},
"Q108533173": {
"si_name": "Q108533173",
"symbol": "sr⁻¹",
"to_si_factor": 1.0
},
"Q1086691": {
"si_name": null,
"symbol": "fg",
@@ -2464,11 +2359,6 @@
"symbol": "e.u.",
"to_si_factor": 4.184
},
"Q109448508": {
"si_name": null,
"symbol": "man-Sv",
"to_si_factor": null
},
"Q1098949": {
"si_name": "Q21393312",
"symbol": "Cl",
@@ -2499,9 +2389,14 @@
"symbol": "nm²",
"to_si_factor": 1e-18
},
"Q111494193": {
"si_name": "Q111494193",
"symbol": "J/(Hz mol)",
"Q110742003": {
"si_name": null,
"symbol": "dppx",
"to_si_factor": null
},
"Q110812007": {
"si_name": "Q281096",
"symbol": "nt",
"to_si_factor": 1.0
},
"Q11229": {
@@ -2549,11 +2444,6 @@
"symbol": "Yb",
"to_si_factor": null
},
"Q114559346": {
"si_name": null,
"symbol": "g CO2e/kWh",
"to_si_factor": null
},
"Q114589269": {
"si_name": null,
"symbol": "Ѧ",
@@ -2674,21 +2564,11 @@
"symbol": "ʰ",
"to_si_factor": 0.2617993878
},
"Q116486875": {
"si_name": null,
"symbol": "mol(-1) s(-1)",
"to_si_factor": null
},
"Q1165639": {
"si_name": "Q89992008",
"symbol": "daraf",
"to_si_factor": 1.0
},
"Q1165725": {
"si_name": "Q25343",
"symbol": "D",
"to_si_factor": 9.869e-13
},
"Q1165799": {
"si_name": "Q11573",
"symbol": "mil",
@@ -2874,6 +2754,11 @@
"symbol": "pc",
"to_si_factor": 3.085677581491367e+16
},
"Q121960323": {
"si_name": "Q121960323",
"symbol": "m/m",
"to_si_factor": 1.0
},
"Q121965382": {
"si_name": "Q121965382",
"symbol": "mol/mol",
@@ -3094,6 +2979,26 @@
"symbol": "QC",
"to_si_factor": 1e+30
},
"Q125471199": {
"si_name": null,
"symbol": "r°C",
"to_si_factor": null
},
"Q125471200": {
"si_name": null,
"symbol": "q°C",
"to_si_factor": null
},
"Q125471246": {
"si_name": null,
"symbol": "R°C",
"to_si_factor": null
},
"Q125471247": {
"si_name": null,
"symbol": "Q°C",
"to_si_factor": null
},
"Q125471334": {
"si_name": "Q131255",
"symbol": "rF",
@@ -3274,11 +3179,6 @@
"symbol": "STf",
"to_si_factor": 8896.443230521
},
"Q131966422": {
"si_name": "Q11573",
"symbol": "Q",
"to_si_factor": 0.00025
},
"Q1322380": {
"si_name": "Q11574",
"symbol": "Ts",
@@ -3374,11 +3274,6 @@
"symbol": "kgf/cm²",
"to_si_factor": 98066.5
},
"Q135964483": {
"si_name": "Q11547252",
"symbol": "mm⁻²",
"to_si_factor": 1e-06
},
"Q136039973": {
"si_name": null,
"symbol": "FPS",
@@ -3429,36 +3324,6 @@
"symbol": "V_P",
"to_si_factor": 1.0429e+27
},
"Q1386162": {
"si_name": "Q106680668",
"symbol": "E",
"to_si_factor": 1e-09
},
"Q138847616": {
"si_name": "Q11573",
"symbol": "µm⁻¹",
"to_si_factor": 1000000.0
},
"Q138847643": {
"si_name": "Q11547251",
"symbol": "nm⁻¹",
"to_si_factor": 1000000000.0
},
"Q138847654": {
"si_name": "Q11547251",
"symbol": "pm⁻¹",
"to_si_factor": 1000000000000.0
},
"Q139054848": {
"si_name": null,
"symbol": "A·h/m²",
"to_si_factor": null
},
"Q139086088": {
"si_name": "Q69425409",
"symbol": "A h/m³",
"to_si_factor": 3600.0
},
"Q1394540": {
"si_name": null,
"symbol": "bm",
@@ -3809,11 +3674,6 @@
"symbol": "dl",
"to_si_factor": 0.0001
},
"Q18379097": {
"si_name": "Q95375885",
"symbol": "SFU",
"to_si_factor": 1e-22
},
"Q18413919": {
"si_name": "Q182429",
"symbol": "cm/s",
@@ -3849,11 +3709,6 @@
"symbol": "zs",
"to_si_factor": 1e-21
},
"Q188768": {
"si_name": null,
"symbol": "FLOPS",
"to_si_factor": null
},
"Q190095": {
"si_name": "Q190095",
"symbol": "Gy",
@@ -4269,11 +4124,6 @@
"symbol": "kgf",
"to_si_factor": 9.80665
},
"Q21719454": {
"si_name": "Q21719454",
"symbol": "m/s³",
"to_si_factor": 1.0
},
"Q217208": {
"si_name": "Q11574",
"symbol": "a",
@@ -4384,16 +4234,6 @@
"symbol": "TW",
"to_si_factor": 1000000000000.0
},
"Q23893259": {
"si_name": null,
"symbol": "1/(p y)",
"to_si_factor": null
},
"Q23893296": {
"si_name": null,
"symbol": "1/100000py",
"to_si_factor": null
},
"Q23925410": {
"si_name": "Q25517",
"symbol": "gal (UK)",
@@ -4534,11 +4374,6 @@
"symbol": "statΩ",
"to_si_factor": 898755178700.0
},
"Q25325238": {
"si_name": null,
"symbol": "bhp/cm³",
"to_si_factor": null
},
"Q253276": {
"si_name": "Q11573",
"symbol": "mi",
@@ -4884,11 +4719,6 @@
"symbol": "g",
"to_si_factor": 9.80665
},
"Q28657331": {
"si_name": null,
"symbol": "erg/(s cm²)",
"to_si_factor": null
},
"Q28683485": {
"si_name": "Q28683485",
"symbol": "C/kg",
@@ -4919,11 +4749,6 @@
"symbol": "mH",
"to_si_factor": 0.001
},
"Q29463526": {
"si_name": null,
"symbol": "hr/yr",
"to_si_factor": null
},
"Q296936": {
"si_name": "Q25269",
"symbol": "toe",
@@ -5144,11 +4969,6 @@
"symbol": "μA",
"to_si_factor": 1e-06
},
"Q3186734": {
"si_name": "Q3186734",
"symbol": "J/(m³ K)",
"to_si_factor": 1.0
},
"Q31889818": {
"si_name": "Q199",
"symbol": "ppq",
@@ -5159,11 +4979,6 @@
"symbol": "kb",
"to_si_factor": null
},
"Q3196665": {
"si_name": "Q215571",
"symbol": "kgf m",
"to_si_factor": 9.80665
},
"Q3207456": {
"si_name": "Q25236",
"symbol": "mW",
@@ -5269,6 +5084,11 @@
"symbol": "fL",
"to_si_factor": 1e-18
},
"Q3320608": {
"si_name": "Q25236",
"symbol": "kW",
"to_si_factor": 1000.0
},
"Q3331719": {
"si_name": "Q25343",
"symbol": "dma",
@@ -5399,11 +5219,6 @@
"symbol": "mA⋅h",
"to_si_factor": 3.6
},
"Q38623562": {
"si_name": "Q6137407",
"symbol": "rpm",
"to_si_factor": 0.0166667
},
"Q3867152": {
"si_name": "Q1051665",
"symbol": "ft/s²",
@@ -5574,11 +5389,6 @@
"symbol": "nhp",
"to_si_factor": null
},
"Q4346600": {
"si_name": null,
"symbol": "PPHPD",
"to_si_factor": null
},
"Q4406": {
"si_name": null,
"symbol": "$T",
@@ -5759,6 +5569,11 @@
"symbol": "Ga",
"to_si_factor": null
},
"Q5299480": {
"si_name": null,
"symbol": "DPCm",
"to_si_factor": null
},
"Q531": {
"si_name": "Q11573",
"symbol": "l.y.",
@@ -6439,11 +6254,6 @@
"symbol": "U/L",
"to_si_factor": null
},
"Q5558595": {
"si_name": null,
"symbol": "GFLOPS",
"to_si_factor": null
},
"Q55663153": {
"si_name": "Q55663153",
"symbol": "H/m",
@@ -6554,11 +6364,6 @@
"symbol": "L/kg",
"to_si_factor": 0.001
},
"Q57175652": {
"si_name": null,
"symbol": "m3/year/individual",
"to_si_factor": null
},
"Q57273614": {
"si_name": "Q182429",
"symbol": "mm/min",
@@ -6569,11 +6374,6 @@
"symbol": "d",
"to_si_factor": 86400.0
},
"Q57306331": {
"si_name": "Q86200529",
"symbol": "cm²/g",
"to_si_factor": 0.1
},
"Q577": {
"si_name": "Q11574",
"symbol": "a",
@@ -6824,21 +6624,6 @@
"symbol": "UK t",
"to_si_factor": 1016.0469088
},
"Q66778234": {
"si_name": null,
"symbol": "TFLOPS",
"to_si_factor": null
},
"Q66778809": {
"si_name": null,
"symbol": "MFLOPS",
"to_si_factor": null
},
"Q66778863": {
"si_name": null,
"symbol": "PFLOPS",
"to_si_factor": null
},
"Q67060736": {
"si_name": "Q67060736",
"symbol": "W/kg",
@@ -7229,6 +7014,11 @@
"symbol": "Mb/s",
"to_si_factor": null
},
"Q7398951": {
"si_name": null,
"symbol": "PPI",
"to_si_factor": null
},
"Q743895": {
"si_name": "Q39369",
"symbol": "bpm",
@@ -7294,21 +7084,6 @@
"symbol": "Td",
"to_si_factor": 1e-06
},
"Q78053467": {
"si_name": null,
"symbol": "kFLOPS",
"to_si_factor": null
},
"Q781545": {
"si_name": null,
"symbol": "phon",
"to_si_factor": null
},
"Q78336909": {
"si_name": "Q78336909",
"symbol": "m³/(kg s²)",
"to_si_factor": 1.0
},
"Q7854897": {
"si_name": null,
"symbol": "mya",
@@ -7434,11 +7209,6 @@
"symbol": "YiB",
"to_si_factor": null
},
"Q80026587": {
"si_name": "Q6137407",
"symbol": "km/(s Mpc)",
"to_si_factor": 3.24078e-20
},
"Q80237579": {
"si_name": "Q56023789",
"symbol": "J/nm",
@@ -7494,11 +7264,6 @@
"symbol": "B/s",
"to_si_factor": null
},
"Q82440913": {
"si_name": null,
"symbol": "L/100 km",
"to_si_factor": null
},
"Q828224": {
"si_name": "Q11573",
"symbol": "km",
@@ -7584,11 +7349,6 @@
"symbol": "thm (US)",
"to_si_factor": 105480400.0
},
"Q843877": {
"si_name": "Q25236",
"symbol": "L☉",
"to_si_factor": 3.828e+26
},
"Q844211": {
"si_name": "Q844211",
"symbol": "kg/m³",
@@ -7664,11 +7424,6 @@
"symbol": "Pa s/m³",
"to_si_factor": 1.0
},
"Q87049028": {
"si_name": "Q87049028",
"symbol": "N s/m",
"to_si_factor": 1.0
},
"Q87051580": {
"si_name": "Q87051580",
"symbol": "Pa s/m",
@@ -7809,11 +7564,6 @@
"symbol": "J/s",
"to_si_factor": 1.0
},
"Q92717607": {
"si_name": "Q92717607",
"symbol": "K/m",
"to_si_factor": 1.0
},
"Q93318": {
"si_name": "Q11573",
"symbol": "M",
@@ -7834,16 +7584,6 @@
"symbol": "gill (UK)",
"to_si_factor": 0.000142
},
"Q93868873": {
"si_name": null,
"symbol": "mpg",
"to_si_factor": null
},
"Q93871856": {
"si_name": null,
"symbol": "km/L",
"to_si_factor": null
},
"Q93947085": {
"si_name": "Q93947085",
"symbol": "K/Pa",
@@ -9159,6 +8899,11 @@
"symbol": "ET",
"to_si_factor": 1e+18
},
"Q96070276": {
"si_name": null,
"symbol": "m°C",
"to_si_factor": null
},
"Q96070318": {
"si_name": "Q177612",
"symbol": "dsr",
@@ -9214,6 +8959,21 @@
"symbol": "Gsr",
"to_si_factor": 1000000000.0
},
"Q96095941": {
"si_name": null,
"symbol": "μ°C",
"to_si_factor": null
},
"Q96095955": {
"si_name": null,
"symbol": "n°C",
"to_si_factor": null
},
"Q96095960": {
"si_name": null,
"symbol": "k°C",
"to_si_factor": null
},
"Q96106290": {
"si_name": "Q177612",
"symbol": "Tsr",
@@ -9239,11 +8999,41 @@
"symbol": "Ysr",
"to_si_factor": 1e+24
},
"Q96106346": {
"si_name": null,
"symbol": "c°C",
"to_si_factor": null
},
"Q96106360": {
"si_name": null,
"symbol": "d°C",
"to_si_factor": null
},
"Q96106368": {
"si_name": null,
"symbol": "da°C",
"to_si_factor": null
},
"Q96106385": {
"si_name": null,
"symbol": "h°C",
"to_si_factor": null
},
"Q96106393": {
"si_name": null,
"symbol": "M°C",
"to_si_factor": null
},
"Q96192470": {
"si_name": "Q96192470",
"symbol": "W/m",
"to_si_factor": 1.0
},
"Q96236286": {
"si_name": null,
"symbol": "G°C",
"to_si_factor": null
},
"Q96309077": {
"si_name": "Q96309077",
"symbol": "S m²/mol",
@@ -9254,6 +9044,56 @@
"symbol": "μas",
"to_si_factor": 4.848136811095356e-12
},
"Q97059641": {
"si_name": null,
"symbol": "p°C",
"to_si_factor": null
},
"Q97059652": {
"si_name": null,
"symbol": "T°C",
"to_si_factor": null
},
"Q97143826": {
"si_name": null,
"symbol": "P°C",
"to_si_factor": null
},
"Q97143831": {
"si_name": null,
"symbol": "y°C",
"to_si_factor": null
},
"Q97143835": {
"si_name": null,
"symbol": "f°C",
"to_si_factor": null
},
"Q97143838": {
"si_name": null,
"symbol": "Z°C",
"to_si_factor": null
},
"Q97143842": {
"si_name": null,
"symbol": "E°C",
"to_si_factor": null
},
"Q97143843": {
"si_name": null,
"symbol": "z°C",
"to_si_factor": null
},
"Q97143849": {
"si_name": null,
"symbol": "Y°C",
"to_si_factor": null
},
"Q97143851": {
"si_name": null,
"symbol": "a°C",
"to_si_factor": null
},
"Q97540991": {
"si_name": "Q97540991",
"symbol": "A m²/(J s)",
@@ -9274,11 +9114,6 @@
"symbol": "Bq/m³",
"to_si_factor": 1.0
},
"Q98103135": {
"si_name": "Q98103135",
"symbol": "Bq/m²",
"to_si_factor": 1.0
},
"Q98266832": {
"si_name": "Q98266832",
"symbol": "m²/sr",
@@ -9304,11 +9139,6 @@
"symbol": "eV/m²",
"to_si_factor": 1.60218e-19
},
"Q98635536": {
"si_name": "Q56023789",
"symbol": "eV/m",
"to_si_factor": 1.602176634e-19
},
"Q98642859": {
"si_name": "Q98643033",
"symbol": "eV m²/kg",
@@ -9339,11 +9169,6 @@
"symbol": "m⁻³ s⁻¹",
"to_si_factor": 1.0
},
"Q98974322": {
"si_name": null,
"symbol": "W yr/(m² kg)",
"to_si_factor": null
},
"Q99476928": {
"si_name": "Q12438",
"symbol": "gf",
+7 -9
View File
@@ -8,8 +8,8 @@
There is a command line for developer purposes and for deeper analysis. Here is
an example in which the command line is called in the development environment::
$ ./manage dev.env
(dev.env)$ python -m searx.enginelib --help
$ ./manage pyenv.cmd bash --norc --noprofile
(py3) python -m searx.enginelib --help
.. hint::
@@ -46,7 +46,6 @@ ENGINES_CACHE: ExpireCacheSQLite = ExpireCacheSQLite.build_cache(
name="ENGINES_CACHE",
MAXHOLD_TIME=60 * 60 * 24 * 7, # 7 days
MAINTENANCE_PERIOD=60 * 60, # 2h
MAX_VALUE_LEN=1024 * 1024 * 1024, # 1MB
)
)
"""Global :py:obj:`searx.cache.ExpireCacheSQLite` instance where the cached
@@ -72,9 +71,9 @@ def state():
@app.command()
def maintenance(force: bool = True, truncate: bool = False):
def maintenance(force: bool = True):
"""Carry out maintenance on cache of the engines."""
ENGINES_CACHE.maintenance(force=force, truncate=truncate)
ENGINES_CACHE.maintenance(force=force)
class EngineCache:
@@ -112,8 +111,8 @@ class EngineCache:
For introspection of the DB, jump into developer environment and run command to
show cache state::
$ ./manage dev.env
(dev.env)$ python -m searx.enginelib cache state
$ ./manage pyenv.cmd bash --norc --noprofile
(py3) python -m searx.enginelib cache state
cache tables and key/values
===========================
@@ -160,8 +159,7 @@ class EngineCache:
def __init__(self, engine_name: str, expire: int | None = None):
self.expire: int = expire or ENGINES_CACHE.cfg.MAXHOLD_TIME
_valid = "-_." + string.ascii_letters + string.digits
# engine_name is a table and SQL table names must start with a letter
self.table_name: str = "eng_" + "".join([c if c in _valid else "_" for c in engine_name])
self.table_name: str = "".join([c if c in _valid else "_" for c in engine_name])
def set(self, key: str, value: t.Any, expire: int | None = None) -> bool:
return ENGINES_CACHE.set(
+13
View File
@@ -116,6 +116,19 @@ class EngineTraits:
return self.all_locale
return locales.get_engine_locale(searxng_locale, self.regions, default=default)
def is_locale_supported(self, searxng_locale: str) -> bool:
"""A *locale* (SearXNG's internal representation) is considered to be
supported by the engine if the *region* or the *language* is supported
by the engine.
For verification the functions :py:func:`EngineTraits.get_region` and
:py:func:`EngineTraits.get_language` are used.
"""
if self.data_type == "traits_v1":
return bool(self.get_region(searxng_locale) or self.get_language(searxng_locale))
raise TypeError("engine traits of type %s is unknown" % self.data_type)
def copy(self):
"""Create a copy of the dataclass object."""
return EngineTraits(**dataclasses.asdict(self))
-4
View File
@@ -84,10 +84,6 @@ def request(query, params):
def response(resp):
# sometimes 360search returns empty response when called from non-chinese ips
if not resp.text or not resp.text.strip():
return []
dom = html.fromstring(resp.text)
results = []
-137
View File
@@ -1,137 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# pylint: disable=invalid-name
"""500px_ is a online network for photographers with millions of members
worldwide. Photographers come to 500px to discover and share incredible photos,
gain meaningful exposure, compete in photo contests, and license their photos
through our exclusive distribution partners.
.. _500px: https://500px.com
"""
import typing as t
import codecs
import random
import string
from searx.result_types import EngineResults
if t.TYPE_CHECKING:
from searx.extended_types import SXNG_Response
from searx.search.processors import OnlineParams
# about
about = {
"website": "https://500px.com",
"wikidata_id": "Q354894",
"official_api_documentation": None,
"use_official_api": False,
"require_api_key": False,
"results": "JSON",
}
base_url = "https://500px.com"
api_url = "https://api.500px.com"
categories = ["images"]
paging = True
results_per_page = 30
"""Number of results to return in the request.
The default was taken from the WEB UI, where the GraphQL query sets the value to
*static*: ``first: 30``.
"""
SXNG_query = """query PhotoSearchPaginationContainerQuery(
$first: Int, $cursor: String, $search: String!, $sort: PhotoSort, $filters: [PhotoSearchFilter!], $nlp: Boolean
) {
...SXNG_query
}
fragment SXNG_query on Query {
photoSearch(sort: $sort, first: $first, after: $cursor, search: $search, filters: $filters, nlp: $nlp) {
edges {
node {
id
canonicalPath
name
description
width
height
photographer: uploader {
displayName
}
images(sizes: [35, 33]) {
size
url
jpegUrl
webpUrl
id
}
}
cursor
}
}
}
"""
def setup(_) -> bool:
global SXNG_query # pylint: disable=global-statement
rand_str: str = "".join(random.choice(string.ascii_letters) for _ in range(5))
SXNG_query = SXNG_query.replace("SXNG_query", "PhotoSearchPaginationContainer_query_1" + rand_str)
return True
def request(query: str, params: "OnlineParams") -> None:
# cursor is the base64 hash of the string "pos-<offset-1>", e.g. "pos-29" -> "cG9zLTI5"
offset = ((params["pageno"] - 1) * results_per_page) - 1
cursor = codecs.encode(f"pos-{offset}".encode("utf-8"), "base64").decode("utf-8")
params["url"] = f"{api_url}/graphql"
params["method"] = "POST"
params["json"] = {
"operationName": "PhotoSearchPaginationContainerQuery",
"variables": {
"first": results_per_page,
"cursor": cursor,
"search": query,
"sort": "RELEVANCE",
"filters": [],
"nlp": False,
},
"query": SXNG_query,
}
def response(resp: "SXNG_Response"):
res = EngineResults()
json_data = resp.json()["data"]["photoSearch"]
for edge in json_data["edges"]:
node = edge["node"] # pyright: ignore[reportAny]
if not node["images"]:
continue
images: list[dict[str, str]] = sorted(node["images"], key=lambda i: i["size"])
thumbnail_src = images[0]["url"]
img_src = images[-1]["url"]
res.add(
res.types.LegacyResult(
{
"template": "images.html",
"url": base_url + node["canonicalPath"],
"thumbnail_src": thumbnail_src,
"img_src": img_src,
"title": node["name"],
"content": node["description"],
"author": node["photographer"]["displayName"],
"resolution": f"{node['width']}x{node['height']}",
}
)
)
return res
+75
View File
@@ -0,0 +1,75 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Ask.com"""
from urllib.parse import urlencode
import dateutil
from lxml import html
from searx import utils
# Metadata
about = {
"website": "https://www.ask.com/",
"wikidata_id": 'Q847564',
"official_api_documentation": None,
"use_official_api": False,
"require_api_key": False,
"results": "HTML",
}
# Engine Configuration
categories = ['general']
paging = True
max_page = 5
"""Ask.com has at max 5 pages."""
# Base URL
base_url = "https://www.ask.com/web"
def request(query, params):
query_params = {
"q": query,
"page": params["pageno"],
}
params["url"] = f"{base_url}?{urlencode(query_params)}"
return params
def response(resp):
start_tag = 'window.MESON.initialState = {'
end_tag = '}};'
dom = html.fromstring(resp.text)
script = utils.eval_xpath_getindex(dom, '//script', 0, default=None).text
pos = script.index(start_tag) + len(start_tag) - 1
script = script[pos:]
pos = script.index(end_tag) + len(end_tag) - 1
script = script[:pos]
json_resp = utils.js_obj_str_to_python(script)
results = []
for item in json_resp['search']['webResults']['results']:
pubdate_original = item.get('pubdate_original')
if pubdate_original:
pubdate_original = dateutil.parser.parse(pubdate_original)
metadata = [item.get(field) for field in ['category_l1', 'catsy'] if item.get(field)]
results.append(
{
"url": item['url'].split('&ueid')[0],
"title": item['title'],
"content": item['abstract'],
"publishedDate": pubdate_original,
# "thumbnail": item.get('image_url') or None, # these are not thumbs / to large
"metadata": ' | '.join(metadata),
}
)
return results
-85
View File
@@ -1,85 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# pylint: disable=invalid-name
"""Cara_ is a social media and portfolio-sharing platform for artists and art
enthusiasts.
With the widespread use of generative AI, Cara_ decided to build a place that
filters out gen AI images so that people searching for authentic creatives and
images can do so easily.
.. _Cara: https://cara.app/about
"""
from urllib.parse import urlencode
import typing as t
from searx.result_types import EngineResults
if t.TYPE_CHECKING:
from searx.extended_types import SXNG_Response
from searx.search.processors import OnlineParams
about = {
"website": "https://cara.app",
"official_api_documentation": None,
"use_official_api": False,
"require_api_key": False,
"results": "JSON",
}
base_url = "https://cara.app"
images_url = "https://images.cara.app"
categories = ["images"]
paging = True
results_per_page = 24
# if using HTTP2, we get blocked immediately
enable_http2 = False
def request(query: str, params: "OnlineParams") -> None:
args = {
"q": query,
"sortBy": "Top",
"take": results_per_page,
"skip": (params["pageno"] - 1) * results_per_page,
}
params["url"] = f"{base_url}/api/search/portfolio-posts?{urlencode(args)}"
def response(resp: "SXNG_Response"):
res = EngineResults()
json_data: list[dict[str, t.Any]] = resp.json()
for result in json_data:
thumbnail, img = None, None
i: dict[str, str]
for i in result["images"]:
if thumbnail is None or i["isCoverImg"]:
thumbnail = i
if img is None or not i["isCoverImg"]:
img = i
if not thumbnail or not img:
continue
res.add(
res.types.LegacyResult(
{
"template": "images.html",
"url": f"{base_url}/post/{result['id']}",
"thumbnail_src": f"{images_url}/{thumbnail['src']}?height=256",
"img_src": f"{images_url}/{img['src']}",
"title": result["title"],
"content": result["content"],
"author": result["name"],
}
)
)
return res
+24 -31
View File
@@ -1,23 +1,15 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Fyyd (podcasts)"""
import typing as t
from datetime import datetime
from urllib.parse import urlencode
from searx.result_types import EngineResults
if t.TYPE_CHECKING:
from searx.extended_types import SXNG_Response
from searx.search.processors import OnlineParams
about = {
"website": "https://fyyd.de",
"official_api_documentation": "https://github.com/eazyliving/fyyd-api",
"use_official_api": True,
"require_api_key": False,
"results": "JSON",
'website': 'https://fyyd.de',
'official_api_documentation': 'https://github.com/eazyliving/fyyd-api',
'use_official_api': True,
'require_api_key': False,
'results': 'JSON',
}
categories = []
paging = True
@@ -26,30 +18,31 @@ base_url = "https://api.fyyd.de"
page_size = 10
def request(query: str, params: "OnlineParams") -> None:
def request(query, params):
args = {
"term": query,
"count": page_size,
"page": params["pageno"] - 1,
'term': query,
'count': page_size,
'page': params['pageno'] - 1,
}
params["url"] = f"{base_url}/0.2/search/podcast?{urlencode(args)}"
params['url'] = f"{base_url}/0.2/search/podcast?{urlencode(args)}"
return params
def response(resp: "SXNG_Response"):
res = EngineResults()
def response(resp):
results = []
json_results: list[dict[str, str]] = resp.json()["data"] # pyright: ignore[reportAny]
json_results = resp.json()['data']
for result in json_results:
res.add(
res.types.MainResult(
url=result["htmlURL"],
title=result["title"],
content=result["description"],
thumbnail=result["smallImageURL"],
publishedDate=datetime.strptime(result["status_since"], "%Y-%m-%d %H:%M:%S"),
metadata=f"Rank: {result['rank']} || {result['episode_count']} episodes",
)
results.append(
{
'url': result['htmlURL'],
'title': result['title'],
'content': result['description'],
'thumbnail': result['smallImageURL'],
'publishedDate': datetime.strptime(result['status_since'], '%Y-%m-%d %H:%M:%S'),
'metadata': f"Rank: {result['rank']} || {result['episode_count']} episodes",
}
)
return res
return results

Some files were not shown because too many files have changed in this diff Show More