mirror of
https://github.com/searxng/searxng.git
synced 2026-05-22 10:54:30 +02:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c32bf8c45d |
@@ -41,6 +41,6 @@ jobs:
|
|||||||
write-comment: "false"
|
write-comment: "false"
|
||||||
|
|
||||||
- name: Upload SARIFs
|
- name: Upload SARIFs
|
||||||
uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
||||||
with:
|
with:
|
||||||
sarif_file: "./scout.sarif"
|
sarif_file: "./scout.sarif"
|
||||||
|
|||||||
Generated
+155
-167
@@ -15,8 +15,8 @@
|
|||||||
"swiped-events": "1.2.0"
|
"swiped-events": "1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.4.15",
|
"@biomejs/biome": "2.4.13",
|
||||||
"@types/node": "^25.8.0",
|
"@types/node": "^25.6.0",
|
||||||
"browserslist": "^4.28.2",
|
"browserslist": "^4.28.2",
|
||||||
"browserslist-to-esbuild": "^2.1.1",
|
"browserslist-to-esbuild": "^2.1.1",
|
||||||
"edge.js": "^6.5.0",
|
"edge.js": "^6.5.0",
|
||||||
@@ -24,13 +24,13 @@
|
|||||||
"mathjs": "^15.2.0",
|
"mathjs": "^15.2.0",
|
||||||
"sharp": "~0.34.5",
|
"sharp": "~0.34.5",
|
||||||
"sort-package-json": "^3.6.1",
|
"sort-package-json": "^3.6.1",
|
||||||
"stylelint": "^17.11.1",
|
"stylelint": "^17.9.0",
|
||||||
"stylelint-config-standard-less": "^4.1.0",
|
"stylelint-config-standard-less": "^4.1.0",
|
||||||
"stylelint-prettier": "^5.0.3",
|
"stylelint-prettier": "^5.0.3",
|
||||||
"svgo": "^4.0.1",
|
"svgo": "^4.0.1",
|
||||||
"typescript": "~6.0.3",
|
"typescript": "~6.0.3",
|
||||||
"vite": "^8.0.13",
|
"vite": "^8.0.10",
|
||||||
"vite-bundle-analyzer": "^1.3.8"
|
"vite-bundle-analyzer": "^1.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/code-frame": {
|
"node_modules/@babel/code-frame": {
|
||||||
@@ -69,9 +69,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/biome": {
|
"node_modules/@biomejs/biome": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.13.tgz",
|
||||||
"integrity": "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==",
|
"integrity": "sha512-gLXOwkOBBg0tr7bDsqlkIh4uFeKuMjxvqsrb1Tukww1iDmHcfr4Uu8MoQxp0Rcte+69+osRNWXwHsu/zxT6XqA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT OR Apache-2.0",
|
"license": "MIT OR Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -85,20 +85,20 @@
|
|||||||
"url": "https://opencollective.com/biome"
|
"url": "https://opencollective.com/biome"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@biomejs/cli-darwin-arm64": "2.4.15",
|
"@biomejs/cli-darwin-arm64": "2.4.13",
|
||||||
"@biomejs/cli-darwin-x64": "2.4.15",
|
"@biomejs/cli-darwin-x64": "2.4.13",
|
||||||
"@biomejs/cli-linux-arm64": "2.4.15",
|
"@biomejs/cli-linux-arm64": "2.4.13",
|
||||||
"@biomejs/cli-linux-arm64-musl": "2.4.15",
|
"@biomejs/cli-linux-arm64-musl": "2.4.13",
|
||||||
"@biomejs/cli-linux-x64": "2.4.15",
|
"@biomejs/cli-linux-x64": "2.4.13",
|
||||||
"@biomejs/cli-linux-x64-musl": "2.4.15",
|
"@biomejs/cli-linux-x64-musl": "2.4.13",
|
||||||
"@biomejs/cli-win32-arm64": "2.4.15",
|
"@biomejs/cli-win32-arm64": "2.4.13",
|
||||||
"@biomejs/cli-win32-x64": "2.4.15"
|
"@biomejs/cli-win32-x64": "2.4.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-darwin-arm64": {
|
"node_modules/@biomejs/cli-darwin-arm64": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.13.tgz",
|
||||||
"integrity": "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==",
|
"integrity": "sha512-2KImO1jhNFBa2oWConyr0x6flxbQpGKv6902uGXpYM62Xyem8U80j441SyUJ8KyngsmKbQjeIv1q2CQfDkNnYg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -113,9 +113,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-darwin-x64": {
|
"node_modules/@biomejs/cli-darwin-x64": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.13.tgz",
|
||||||
"integrity": "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==",
|
"integrity": "sha512-BKrJklbaFN4p1Ts4kPBczo+PkbsHQg57kmJ+vON9u2t6uN5okYHaSr7h/MutPCWQgg2lglaWoSmm+zhYW+oOkg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -130,9 +130,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-arm64": {
|
"node_modules/@biomejs/cli-linux-arm64": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.13.tgz",
|
||||||
"integrity": "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==",
|
"integrity": "sha512-NzkUDSqfvMBrPplKgVr3aXLHZ2NEELvvF4vZxXulEylKWIGqlvNEcwUcj9OLrn75TD3lJ/GIqCVlBwd1MZCuYQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -147,9 +147,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.13.tgz",
|
||||||
"integrity": "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==",
|
"integrity": "sha512-U5MsuBQW25dXaYtqWWSPM3P96H6Y+fHuja3TQpMNnylocHW0tEbtFTDlUj6oM+YJLntvEkQy4grBvQNUD4+RCg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -164,9 +164,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-x64": {
|
"node_modules/@biomejs/cli-linux-x64": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.13.tgz",
|
||||||
"integrity": "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==",
|
"integrity": "sha512-Az3ZZedYRBo9EQzNnD9SxFcR1G5QsGo6VEc2hIyVPZ1rdKwee/7E9oeBBZFpE8Z44ekxsDQBqbiWGW5ShOhUSQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -181,9 +181,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-x64-musl": {
|
"node_modules/@biomejs/cli-linux-x64-musl": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.13.tgz",
|
||||||
"integrity": "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==",
|
"integrity": "sha512-Z601MienRgTBDza/+u2CH3RSrWoXo9rtr8NK6A4KJzqGgfxx+H3VlyLgTJ4sRo40T3pIsqpTmiOQEvYzQvBRvQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -198,9 +198,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-win32-arm64": {
|
"node_modules/@biomejs/cli-win32-arm64": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.13.tgz",
|
||||||
"integrity": "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==",
|
"integrity": "sha512-Px9PS2B5/Q183bUwy/5VHqp3J2lzdOCeVGzMpphYfl8oSa7VDCqenBdqWpy6DCy/en4Rbf/Y1RieZF6dJPcc9A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -215,9 +215,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-win32-x64": {
|
"node_modules/@biomejs/cli-win32-x64": {
|
||||||
"version": "2.4.15",
|
"version": "2.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.13.tgz",
|
||||||
"integrity": "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==",
|
"integrity": "sha512-tTcMkXyBrmHi9BfrD2VNHs/5rYIUKETqsBlYOvSAABwBkJhSDVb5e7wPukftsQbO3WzQkXe6kaztC6WtUOXSoQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -417,29 +417,6 @@
|
|||||||
"postcss-selector-parser": "^7.1.1"
|
"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": {
|
"node_modules/@emnapi/wasi-threads": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
|
||||||
@@ -1023,9 +1000,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@oxc-project/types": {
|
"node_modules/@oxc-project/types": {
|
||||||
"version": "0.130.0",
|
"version": "0.127.0",
|
||||||
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz",
|
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz",
|
||||||
"integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==",
|
"integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
@@ -1107,9 +1084,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-android-arm64": {
|
"node_modules/@rolldown/binding-android-arm64": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==",
|
"integrity": "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1124,9 +1101,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-darwin-arm64": {
|
"node_modules/@rolldown/binding-darwin-arm64": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==",
|
"integrity": "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1141,9 +1118,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-darwin-x64": {
|
"node_modules/@rolldown/binding-darwin-x64": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==",
|
"integrity": "sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1158,9 +1135,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-freebsd-x64": {
|
"node_modules/@rolldown/binding-freebsd-x64": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==",
|
"integrity": "sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1175,9 +1152,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
|
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==",
|
"integrity": "sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -1192,9 +1169,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-arm64-gnu": {
|
"node_modules/@rolldown/binding-linux-arm64-gnu": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==",
|
"integrity": "sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1209,9 +1186,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-arm64-musl": {
|
"node_modules/@rolldown/binding-linux-arm64-musl": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==",
|
"integrity": "sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1226,9 +1203,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
|
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==",
|
"integrity": "sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -1243,9 +1220,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-s390x-gnu": {
|
"node_modules/@rolldown/binding-linux-s390x-gnu": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==",
|
"integrity": "sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -1260,9 +1237,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-x64-gnu": {
|
"node_modules/@rolldown/binding-linux-x64-gnu": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==",
|
"integrity": "sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1277,9 +1254,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-x64-musl": {
|
"node_modules/@rolldown/binding-linux-x64-musl": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==",
|
"integrity": "sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1294,9 +1271,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-openharmony-arm64": {
|
"node_modules/@rolldown/binding-openharmony-arm64": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==",
|
"integrity": "sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1311,9 +1288,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-wasm32-wasi": {
|
"node_modules/@rolldown/binding-wasm32-wasi": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==",
|
"integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"wasm32"
|
"wasm32"
|
||||||
],
|
],
|
||||||
@@ -1330,9 +1307,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-win32-arm64-msvc": {
|
"node_modules/@rolldown/binding-win32-arm64-msvc": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==",
|
"integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1347,9 +1324,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-win32-x64-msvc": {
|
"node_modules/@rolldown/binding-win32-x64-msvc": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==",
|
"integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1364,9 +1341,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/pluginutils": {
|
"node_modules/@rolldown/pluginutils": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
|
"integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -1511,9 +1488,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tybys/wasm-util": {
|
"node_modules/@tybys/wasm-util": {
|
||||||
"version": "0.10.2",
|
"version": "0.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
|
||||||
"integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
|
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
@@ -1522,13 +1499,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "25.8.0",
|
"version": "25.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz",
|
||||||
"integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==",
|
"integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": ">=7.24.0 <7.24.7"
|
"undici-types": "~7.19.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/pluralize": {
|
"node_modules/@types/pluralize": {
|
||||||
@@ -2434,9 +2411,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/get-east-asian-width": {
|
"node_modules/get-east-asian-width": {
|
||||||
"version": "1.6.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
|
||||||
"integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
|
"integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -2747,6 +2724,16 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"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": {
|
"node_modules/is-what": {
|
||||||
"version": "4.1.16",
|
"version": "4.1.16",
|
||||||
"resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
|
"resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
|
||||||
@@ -3465,9 +3452,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.5.14",
|
"version": "8.5.10",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
|
||||||
"integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
|
"integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -3731,14 +3718,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rolldown": {
|
"node_modules/rolldown": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==",
|
"integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oxc-project/types": "=0.130.0",
|
"@oxc-project/types": "=0.127.0",
|
||||||
"@rolldown/pluginutils": "^1.0.0"
|
"@rolldown/pluginutils": "1.0.0-rc.17"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"rolldown": "bin/cli.mjs"
|
"rolldown": "bin/cli.mjs"
|
||||||
@@ -3747,21 +3734,21 @@
|
|||||||
"node": "^20.19.0 || >=22.12.0"
|
"node": "^20.19.0 || >=22.12.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rolldown/binding-android-arm64": "1.0.1",
|
"@rolldown/binding-android-arm64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-darwin-arm64": "1.0.1",
|
"@rolldown/binding-darwin-arm64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-darwin-x64": "1.0.1",
|
"@rolldown/binding-darwin-x64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-freebsd-x64": "1.0.1",
|
"@rolldown/binding-freebsd-x64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-arm-gnueabihf": "1.0.1",
|
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-arm64-gnu": "1.0.1",
|
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-arm64-musl": "1.0.1",
|
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-ppc64-gnu": "1.0.1",
|
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-s390x-gnu": "1.0.1",
|
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-x64-gnu": "1.0.1",
|
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-x64-musl": "1.0.1",
|
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-openharmony-arm64": "1.0.1",
|
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-wasm32-wasi": "1.0.1",
|
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-win32-arm64-msvc": "1.0.1",
|
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-win32-x64-msvc": "1.0.1"
|
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/run-parallel": {
|
"node_modules/run-parallel": {
|
||||||
@@ -4000,9 +3987,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/string-width": {
|
"node_modules/string-width": {
|
||||||
"version": "8.2.1",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz",
|
||||||
"integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
|
"integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -4049,9 +4036,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/stylelint": {
|
"node_modules/stylelint": {
|
||||||
"version": "17.11.1",
|
"version": "17.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.9.0.tgz",
|
||||||
"integrity": "sha512-+smN/HqVTggUx3iuAzOi9fPh8SrH+cJWlZrYVldXoJ06orWBhZ4Ue/QEp64oei6pVrAh4w3tG+Y12Vw7MbCFRQ==",
|
"integrity": "sha512-xO0jeY6z1/urFL5L/BZLmB1yYlbRiRMQnYH6ArZIDWJ+SZXGssOY7XoYb1JIv/L220+EBnwwJXJS4Mt/F96SvA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -4086,16 +4073,17 @@
|
|||||||
"html-tags": "^5.1.0",
|
"html-tags": "^5.1.0",
|
||||||
"ignore": "^7.0.5",
|
"ignore": "^7.0.5",
|
||||||
"import-meta-resolve": "^4.2.0",
|
"import-meta-resolve": "^4.2.0",
|
||||||
|
"is-plain-object": "^5.0.0",
|
||||||
"mathml-tag-names": "^4.0.0",
|
"mathml-tag-names": "^4.0.0",
|
||||||
"meow": "^14.1.0",
|
"meow": "^14.1.0",
|
||||||
"micromatch": "^4.0.8",
|
"micromatch": "^4.0.8",
|
||||||
"normalize-path": "^3.0.0",
|
"normalize-path": "^3.0.0",
|
||||||
"picocolors": "^1.1.1",
|
"picocolors": "^1.1.1",
|
||||||
"postcss": "^8.5.14",
|
"postcss": "^8.5.9",
|
||||||
"postcss-safe-parser": "^7.0.1",
|
"postcss-safe-parser": "^7.0.1",
|
||||||
"postcss-selector-parser": "^7.1.1",
|
"postcss-selector-parser": "^7.1.1",
|
||||||
"postcss-value-parser": "^4.2.0",
|
"postcss-value-parser": "^4.2.0",
|
||||||
"string-width": "^8.2.1",
|
"string-width": "^8.2.0",
|
||||||
"supports-hyperlinks": "^4.4.0",
|
"supports-hyperlinks": "^4.4.0",
|
||||||
"svg-tags": "^1.0.0",
|
"svg-tags": "^1.0.0",
|
||||||
"table": "^6.9.0",
|
"table": "^6.9.0",
|
||||||
@@ -4467,9 +4455,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici-types": {
|
"node_modules/undici-types": {
|
||||||
"version": "7.24.6",
|
"version": "7.19.2",
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
|
||||||
"integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
|
"integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -4534,16 +4522,16 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "8.0.13",
|
"version": "8.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz",
|
||||||
"integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==",
|
"integrity": "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lightningcss": "^1.32.0",
|
"lightningcss": "^1.32.0",
|
||||||
"picomatch": "^4.0.4",
|
"picomatch": "^4.0.4",
|
||||||
"postcss": "^8.5.14",
|
"postcss": "^8.5.10",
|
||||||
"rolldown": "1.0.1",
|
"rolldown": "1.0.0-rc.17",
|
||||||
"tinyglobby": "^0.2.16"
|
"tinyglobby": "^0.2.16"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -4560,7 +4548,7 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@types/node": "^20.19.0 || >=22.12.0",
|
"@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",
|
"esbuild": "^0.27.0 || ^0.28.0",
|
||||||
"jiti": ">=1.21.0",
|
"jiti": ">=1.21.0",
|
||||||
"less": "^4.0.0",
|
"less": "^4.0.0",
|
||||||
@@ -4612,9 +4600,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite-bundle-analyzer": {
|
"node_modules/vite-bundle-analyzer": {
|
||||||
"version": "1.3.8",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.3.7.tgz",
|
||||||
"integrity": "sha512-IIk7WPhoYs7pyo75jwI+dFt7yykgjK7NY+dqnJtiZnyqP2k6NgPb3TY80FLFjtgnfk/o+OjI18+anKyeviCbRA==",
|
"integrity": "sha512-dYlW6iM0Gq7+uSEfXytDC+UjruUMgEKhXwQUbw4cJUgHA6FdEhpLgIrL5OZEyabrzVen0mZyfOSESyZ7nGyT8g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|||||||
@@ -29,8 +29,8 @@
|
|||||||
"swiped-events": "1.2.0"
|
"swiped-events": "1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.4.15",
|
"@biomejs/biome": "2.4.13",
|
||||||
"@types/node": "^25.8.0",
|
"@types/node": "^25.6.0",
|
||||||
"browserslist": "^4.28.2",
|
"browserslist": "^4.28.2",
|
||||||
"browserslist-to-esbuild": "^2.1.1",
|
"browserslist-to-esbuild": "^2.1.1",
|
||||||
"edge.js": "^6.5.0",
|
"edge.js": "^6.5.0",
|
||||||
@@ -38,12 +38,12 @@
|
|||||||
"mathjs": "^15.2.0",
|
"mathjs": "^15.2.0",
|
||||||
"sharp": "~0.34.5",
|
"sharp": "~0.34.5",
|
||||||
"sort-package-json": "^3.6.1",
|
"sort-package-json": "^3.6.1",
|
||||||
"stylelint": "^17.11.1",
|
"stylelint": "^17.9.0",
|
||||||
"stylelint-config-standard-less": "^4.1.0",
|
"stylelint-config-standard-less": "^4.1.0",
|
||||||
"stylelint-prettier": "^5.0.3",
|
"stylelint-prettier": "^5.0.3",
|
||||||
"svgo": "^4.0.1",
|
"svgo": "^4.0.1",
|
||||||
"typescript": "~6.0.3",
|
"typescript": "~6.0.3",
|
||||||
"vite": "^8.0.13",
|
"vite": "^8.0.10",
|
||||||
"vite-bundle-analyzer": "^1.3.8"
|
"vite-bundle-analyzer": "^1.3.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
-57
@@ -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
@@ -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;
|
||||||
|
}
|
||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
[theme]
|
||||||
|
inherit = pocoo
|
||||||
|
stylesheet = searxng.css
|
||||||
|
|
||||||
|
[options]
|
||||||
|
touch_icon =
|
||||||
|
globaltoc_maxdepth = 5
|
||||||
@@ -4,6 +4,11 @@
|
|||||||
Buildhosts
|
Buildhosts
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
To get best results from build, it's recommend to install additional packages on
|
To get best results from build, it's recommend to install additional packages on
|
||||||
build hosts (see :ref:`searxng.sh`).
|
build hosts (see :ref:`searxng.sh`).
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,11 @@ section might give you some guidance.
|
|||||||
- `Apache Fedora`_
|
- `Apache Fedora`_
|
||||||
- `Apache directives`_
|
- `Apache directives`_
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
The Apache HTTP server
|
The Apache HTTP server
|
||||||
======================
|
======================
|
||||||
|
|||||||
@@ -41,6 +41,12 @@ section might give you some guidance.
|
|||||||
- `uWSGI support from nginx`_
|
- `uWSGI support from nginx`_
|
||||||
|
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
The nginx HTTP server
|
The nginx HTTP server
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Step by step installation
|
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
|
In this section we show the setup of a SearXNG instance that will be installed
|
||||||
by the :ref:`installation scripts`.
|
by the :ref:`installation scripts`.
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ uWSGI
|
|||||||
- `systemd.unit`_
|
- `systemd.unit`_
|
||||||
- `uWSGI Emperor`_
|
- `uWSGI Emperor`_
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _systemd.unit: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
|
.. _systemd.unit: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
|
||||||
.. _One service per app in systemd:
|
.. _One service per app in systemd:
|
||||||
https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
|
https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
|
||||||
|
|||||||
@@ -8,6 +8,11 @@ Favicons
|
|||||||
|
|
||||||
Don't activate the favicons before reading the documentation.
|
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
|
Activating the favicons in SearXNG is very easy, but this **generates a
|
||||||
significantly higher load** in the client/server communication and increases
|
significantly higher load** in the client/server communication and increases
|
||||||
resources needed on the server.
|
resources needed on the server.
|
||||||
@@ -245,3 +250,4 @@ into the *proxy*:
|
|||||||
.. _data URL:
|
.. _data URL:
|
||||||
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
|
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
|
||||||
.. _FQN: https://en.wikipedia.org/wiki/Fully_qualified_name
|
.. _FQN: https://en.wikipedia.org/wiki/Fully_qualified_name
|
||||||
|
|
||||||
|
|||||||
@@ -8,5 +8,10 @@ Limiter
|
|||||||
|
|
||||||
The limiter requires a :ref:`Valkey <settings valkey>` database.
|
The limiter requires a :ref:`Valkey <settings valkey>` database.
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.limiter
|
.. automodule:: searx.limiter
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ file.
|
|||||||
- :ref:`use_default_settings.yml`
|
- :ref:`use_default_settings.yml`
|
||||||
- :ref:`search API`
|
- :ref:`search API`
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. _settings location:
|
.. _settings location:
|
||||||
|
|
||||||
settings.yml location
|
settings.yml location
|
||||||
|
|||||||
@@ -102,18 +102,11 @@ The built-in plugins are all located in the namespace `searx.plugins`.
|
|||||||
external 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:
|
.. _Only show green hosted results:
|
||||||
https://github.com/return42/tgwf-searx-plugins/
|
https://github.com/return42/tgwf-searx-plugins/
|
||||||
|
|
||||||
.. _SearXNG BM25 Reranker:
|
SearXNG supports *external plugins* / there is no need to install one, SearXNG
|
||||||
https://github.com/Oaklight/searxng-bm25-reranker
|
runs out of the box.
|
||||||
|
|
||||||
|
- `Only show green hosted results`_
|
||||||
|
- ..
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ SearXNG maintenance
|
|||||||
- :ref:`toolboxing`
|
- :ref:`toolboxing`
|
||||||
- :ref:`uWSGI maintenance`
|
- :ref:`uWSGI maintenance`
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. _update searxng:
|
.. _update searxng:
|
||||||
|
|
||||||
How to update
|
How to update
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ ${fedora_build}
|
|||||||
$ sudo -H -u ${SERVICE_USER} -i
|
$ sudo -H -u ${SERVICE_USER} -i
|
||||||
(${SERVICE_USER})$ cd ${SEARXNG_SRC}
|
(${SERVICE_USER})$ cd ${SEARXNG_SRC}
|
||||||
(${SERVICE_USER})$ export SEARXNG_SETTINGS_PATH=\"${SEARXNG_SETTINGS_PATH}\"
|
(${SERVICE_USER})$ export SEARXNG_SETTINGS_PATH=\"${SEARXNG_SETTINGS_PATH}\"
|
||||||
(${SERVICE_USER})$ python -m searx.webapp
|
(${SERVICE_USER})$ python searx/webapp.py
|
||||||
|
|
||||||
# disable debug
|
# disable debug
|
||||||
$ sudo -H sed -i -e \"s/debug : True/debug : False/g\" \"$SEARXNG_SETTINGS_PATH\"
|
$ sudo -H sed -i -e \"s/debug : True/debug : False/g\" \"$SEARXNG_SETTINGS_PATH\"
|
||||||
|
|||||||
+34
-41
@@ -1,7 +1,8 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
import os
|
import sys, os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from pallets_sphinx_themes import ProjectLink
|
||||||
|
|
||||||
from searx import get_setting
|
from searx import get_setting
|
||||||
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
|
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['origin'] = (GIT_URL + '/blob/' + GIT_BRANCH + '/%s', 'git://%s')
|
||||||
extlinks['patch'] = (GIT_URL + '/commit/%s', '#%s')
|
extlinks['patch'] = (GIT_URL + '/commit/%s', '#%s')
|
||||||
extlinks['docs'] = (DOCS_URL + '/%s', 'docs: %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['man'] = ('https://manpages.debian.org/jump?q=%s', '%s')
|
||||||
#extlinks['role'] = (
|
#extlinks['role'] = (
|
||||||
# 'https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-%s', '')
|
# 'https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-%s', '')
|
||||||
@@ -115,6 +117,7 @@ extensions = [
|
|||||||
'sphinx.ext.viewcode',
|
'sphinx.ext.viewcode',
|
||||||
"sphinx.ext.autodoc",
|
"sphinx.ext.autodoc",
|
||||||
"sphinx.ext.intersphinx",
|
"sphinx.ext.intersphinx",
|
||||||
|
"pallets_sphinx_themes",
|
||||||
"sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst
|
"sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst
|
||||||
"sphinx_jinja", # https://github.com/tardyp/sphinx-jinja
|
"sphinx_jinja", # https://github.com/tardyp/sphinx-jinja
|
||||||
"sphinxcontrib.programoutput", # https://github.com/NextThought/sphinxcontrib-programoutput
|
"sphinxcontrib.programoutput", # https://github.com/NextThought/sphinxcontrib-programoutput
|
||||||
@@ -155,49 +158,15 @@ issues_github_path = "searxng/searxng"
|
|||||||
|
|
||||||
# HTML -----------------------------------------------------------------
|
# 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": "💾",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "searx.space",
|
|
||||||
"url": "https://searx.space/",
|
|
||||||
"html": "🌐",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
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://searxng.github.io/searxng --> '/searxng/'
|
||||||
# https://docs.searxng.org --> '/'
|
# https://docs.searxng.org --> '/'
|
||||||
notfound_urls_prefix = '/'
|
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
|
# sphinx.ext.imgmath setup
|
||||||
html_math_renderer = 'imgmath'
|
html_math_renderer = 'imgmath'
|
||||||
imgmath_image_format = 'svg'
|
imgmath_image_format = 'svg'
|
||||||
@@ -205,10 +174,34 @@ imgmath_font_size = 14
|
|||||||
# sphinx.ext.imgmath setup END
|
# sphinx.ext.imgmath setup END
|
||||||
|
|
||||||
html_show_sphinx = False
|
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_logo = "../client/simple/src/brand/searxng-wordmark.svg"
|
||||||
html_title = "SearXNG Documentation ({})".format(VERSION_STRING)
|
html_title = "SearXNG Documentation ({})".format(VERSION_STRING)
|
||||||
html_show_sourcelink = True
|
html_show_sourcelink = True
|
||||||
html_copy_source = True
|
|
||||||
|
|
||||||
# LaTeX ----------------------------------------------------------------
|
# LaTeX ----------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
How to contribute
|
How to contribute
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
Prime directives: Privacy, Hackability
|
Prime directives: Privacy, Hackability
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Demo Offline Engine
|
Demo Offline Engine
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.demo_offline
|
.. automodule:: searx.engines.demo_offline
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Demo Online Engine
|
Demo Online Engine
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.demo_online
|
.. automodule:: searx.engines.demo_online
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Engine Overview
|
Engine Overview
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. _metasearch-engine: https://en.wikipedia.org/wiki/Metasearch_engine
|
.. _metasearch-engine: https://en.wikipedia.org/wiki/Metasearch_engine
|
||||||
|
|
||||||
.. sidebar:: Further reading ..
|
.. sidebar:: Further reading ..
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Engine Implementations
|
Engine Implementations
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Framework Components
|
:caption: Framework Components
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
JSON Engine
|
JSON Engine
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.json_engine
|
.. automodule:: searx.engines.json_engine
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
MediaWiki Engine
|
MediaWiki Engine
|
||||||
================
|
================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.mediawiki
|
.. automodule:: searx.engines.mediawiki
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ Command Line Engines
|
|||||||
- :origin:`command.py <searx/engines/command.py>`
|
- :origin:`command.py <searx/engines/command.py>`
|
||||||
- :ref:`offline engines`
|
- :ref:`offline engines`
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. sidebar:: info
|
.. sidebar:: info
|
||||||
|
|
||||||
Initial sponsored by `Search and Discovery Fund
|
Initial sponsored by `Search and Discovery Fund
|
||||||
|
|||||||
@@ -6,16 +6,21 @@ NoSQL databases
|
|||||||
|
|
||||||
.. sidebar:: further read
|
.. sidebar:: further read
|
||||||
|
|
||||||
- `NoSQL database <https://en.wikipedia.org/wiki/NoSQL>`_
|
- `NoSQL databases <https://en.wikipedia.org/wiki/NoSQL>`_
|
||||||
- `valkey.io <https://valkey.io/>`_
|
- `valkey.io <https://valkey.io/>`_
|
||||||
- `MongoDB <https://www.mongodb.com>`_
|
- `MongoDB <https://www.mongodb.com>`_
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. sidebar:: info
|
.. sidebar:: info
|
||||||
|
|
||||||
Initial sponsored by `Search and Discovery Fund
|
Initial sponsored by `Search and Discovery Fund
|
||||||
<https://nlnet.nl/discovery>`_ of `NLnet Foundation <https://nlnet.nl/>`_.
|
<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 valkey_server`
|
||||||
- :ref:`engine mongodb`
|
- :ref:`engine mongodb`
|
||||||
@@ -52,7 +57,7 @@ instance. To switch into the environment (:ref:`searxng-src`) you can use
|
|||||||
Configure the engines
|
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.
|
their structure.
|
||||||
|
|
||||||
|
|
||||||
@@ -70,13 +75,13 @@ Valkey Server
|
|||||||
- :origin:`valkey_server.py <searx/engines/valkey_server.py>`
|
- :origin:`valkey_server.py <searx/engines/valkey_server.py>`
|
||||||
|
|
||||||
.. automodule:: searx.engines.valkey_server
|
.. automodule:: searx.engines.valkey_server
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|
||||||
.. _engine mongodb:
|
.. _engine mongodb:
|
||||||
|
|
||||||
MongoDB / PyMongo
|
MongoDB
|
||||||
-----------------
|
-------
|
||||||
|
|
||||||
.. _pymongo: https://github.com/mongodb/mongo-python-driver#installation
|
.. _pymongo: https://github.com/mongodb/mongo-python-driver#installation
|
||||||
|
|
||||||
@@ -88,4 +93,4 @@ MongoDB / PyMongo
|
|||||||
|
|
||||||
|
|
||||||
.. automodule:: searx.engines.mongodb
|
.. automodule:: searx.engines.mongodb
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ Local Search APIs
|
|||||||
- `Comparison to alternatives
|
- `Comparison to alternatives
|
||||||
<https://docs.meilisearch.com/learn/what_is_meilisearch/comparison_to_alternatives.html>`_
|
<https://docs.meilisearch.com/learn/what_is_meilisearch/comparison_to_alternatives.html>`_
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 1
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. sidebar:: info
|
.. sidebar:: info
|
||||||
|
|
||||||
Initial sponsored by `Search and Discovery Fund
|
Initial sponsored by `Search and Discovery Fund
|
||||||
@@ -32,8 +37,8 @@ in section :ref:`private engines`.
|
|||||||
|
|
||||||
.. _engine meilisearch:
|
.. _engine meilisearch:
|
||||||
|
|
||||||
MeiliSearch Engine
|
MeiliSearch
|
||||||
==================
|
===========
|
||||||
|
|
||||||
.. automodule:: searx.engines.meilisearch
|
.. automodule:: searx.engines.meilisearch
|
||||||
:members:
|
:members:
|
||||||
@@ -41,16 +46,17 @@ MeiliSearch Engine
|
|||||||
|
|
||||||
.. _engine elasticsearch:
|
.. _engine elasticsearch:
|
||||||
|
|
||||||
Elasticsearch Engine
|
Elasticsearch
|
||||||
====================
|
=============
|
||||||
|
|
||||||
.. automodule:: searx.engines.elasticsearch
|
.. automodule:: searx.engines.elasticsearch
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
.. _engine solr:
|
.. _engine solr:
|
||||||
|
|
||||||
Solr Engine
|
Solr
|
||||||
===========
|
====
|
||||||
|
|
||||||
.. automodule:: searx.engines.solr
|
.. automodule:: searx.engines.solr
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ SQL Engines
|
|||||||
- `PostgreSQL <https://www.postgresql.org>`_
|
- `PostgreSQL <https://www.postgresql.org>`_
|
||||||
- `MySQL <https://www.mysql.com>`_
|
- `MySQL <https://www.mysql.com>`_
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. sidebar:: info
|
.. sidebar:: info
|
||||||
|
|
||||||
Initial sponsored by `Search and Discovery Fund
|
Initial sponsored by `Search and Discovery Fund
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
.. _500px engine:
|
|
||||||
|
|
||||||
=====
|
|
||||||
500px
|
|
||||||
=====
|
|
||||||
|
|
||||||
.. automodule:: searx.engines.500px
|
|
||||||
:members:
|
|
||||||
@@ -4,5 +4,10 @@
|
|||||||
Adobe Stock
|
Adobe Stock
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.adobe_stock
|
.. automodule:: searx.engines.adobe_stock
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Alpine Linux Packages
|
Alpine Linux Packages
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.alpinelinux
|
.. automodule:: searx.engines.alpinelinux
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Anna's Archive
|
Anna's Archive
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.annas_archive
|
.. automodule:: searx.engines.annas_archive
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Arch Linux
|
Arch Linux
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.archlinux
|
.. automodule:: searx.engines.archlinux
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Bing Engines
|
Bing Engines
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _bing web engine:
|
.. _bing web engine:
|
||||||
|
|
||||||
Bing WEB
|
Bing WEB
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Bpb
|
Bpb
|
||||||
===
|
===
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.bpb
|
.. automodule:: searx.engines.bpb
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
Brave Engines
|
Brave Engines
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
Brave offers two different engines for SearXNG:
|
Brave offers two different engines for SearXNG:
|
||||||
|
|
||||||
1. The standard engine (``brave``) uses the web interface.
|
1. The standard engine (``brave``) uses the web interface.
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
BT4G
|
BT4G
|
||||||
====
|
====
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.bt4g
|
.. automodule:: searx.engines.bt4g
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
.. _cara engine:
|
|
||||||
|
|
||||||
===========
|
|
||||||
Cara Images
|
|
||||||
===========
|
|
||||||
|
|
||||||
.. automodule:: searx.engines.cara
|
|
||||||
:members:
|
|
||||||
@@ -4,5 +4,10 @@
|
|||||||
CORE
|
CORE
|
||||||
====
|
====
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.core
|
.. automodule:: searx.engines.core
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Dailymotion
|
Dailymotion
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.dailymotion
|
.. automodule:: searx.engines.dailymotion
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
DuckDuckGo Engines
|
DuckDuckGo Engines
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.duckduckgo
|
.. automodule:: searx.engines.duckduckgo
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Google Engines
|
Google Engines
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _google API:
|
.. _google API:
|
||||||
|
|
||||||
Google API
|
Google API
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Lemmy
|
Lemmy
|
||||||
=====
|
=====
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.lemmy
|
.. automodule:: searx.engines.lemmy
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Library of Congress
|
Library of Congress
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.loc
|
.. automodule:: searx.engines.loc
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Mastodon
|
Mastodon
|
||||||
========
|
========
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.mastodon
|
.. automodule:: searx.engines.mastodon
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Moviepilot
|
Moviepilot
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.moviepilot
|
.. automodule:: searx.engines.moviepilot
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Matrix Rooms Search (MRS)
|
Matrix Rooms Search (MRS)
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.mrs
|
.. automodule:: searx.engines.mrs
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Mwmbl Engine
|
Mwmbl Engine
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _mwmbl web engine:
|
.. _mwmbl web engine:
|
||||||
|
|
||||||
Mwmbl WEB
|
Mwmbl WEB
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Odysee
|
Odysee
|
||||||
======
|
======
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.odysee
|
.. automodule:: searx.engines.odysee
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Peertube Engines
|
Peertube Engines
|
||||||
================
|
================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _peertube video engine:
|
.. _peertube video engine:
|
||||||
|
|
||||||
Peertube Video
|
Peertube Video
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Piped
|
Piped
|
||||||
=====
|
=====
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.piped
|
.. automodule:: searx.engines.piped
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Presearch Engine
|
Presearch Engine
|
||||||
================
|
================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.presearch
|
.. automodule:: searx.engines.presearch
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Qwant
|
Qwant
|
||||||
=====
|
=====
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.qwant
|
.. automodule:: searx.engines.qwant
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
RadioBrowser
|
RadioBrowser
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.radio_browser
|
.. automodule:: searx.engines.radio_browser
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Recoll Engine
|
Recoll Engine
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.recoll
|
.. automodule:: searx.engines.recoll
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Soundcloud
|
Soundcloud
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.soundcloud
|
.. automodule:: searx.engines.soundcloud
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Startpage Engines
|
Startpage Engines
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.startpage
|
.. automodule:: searx.engines.startpage
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Tagesschau API
|
Tagesschau API
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.tagesschau
|
.. automodule:: searx.engines.tagesschau
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Torznab WebAPI
|
Torznab WebAPI
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.torznab
|
.. automodule:: searx.engines.torznab
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Void Linux binary packages
|
Void Linux binary packages
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.voidlinux
|
.. automodule:: searx.engines.voidlinux
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Wallhaven
|
Wallhaven
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.wallhaven
|
.. automodule:: searx.engines.wallhaven
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Wikimedia
|
Wikimedia
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _wikipedia engine:
|
.. _wikipedia engine:
|
||||||
|
|
||||||
Wikipedia
|
Wikipedia
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Yacy
|
Yacy
|
||||||
====
|
====
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.yacy
|
.. automodule:: searx.engines.yacy
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Yahoo Engine
|
Yahoo Engine
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.yahoo
|
.. automodule:: searx.engines.yahoo
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
Z-Library
|
Z-Library
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.zlibrary
|
.. automodule:: searx.engines.zlibrary
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Tineye
|
Tineye
|
||||||
======
|
======
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.tineye
|
.. automodule:: searx.engines.tineye
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
XPath Engine
|
XPath Engine
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.engines.xpath
|
.. automodule:: searx.engines.xpath
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ Makefiles, we recommend to read gnu-make_ introduction.
|
|||||||
To install developer requirements follow :ref:`buildhosts`.
|
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.
|
The usage is simple, just type ``make {target-name}`` to *build* a target.
|
||||||
Calling the ``help`` target gives a first overview (``make help``):
|
Calling the ``help`` target gives a first overview (``make help``):
|
||||||
|
|
||||||
|
|||||||
+1
-19
@@ -60,29 +60,11 @@ into the developer environment and start a python based HTTP server by::
|
|||||||
|
|
||||||
$ ./manage dev.env
|
$ ./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
|
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.
|
``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
|
.. sidebar:: further read
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,12 @@ docs.live <make docs.live>` to build HTML while editing.
|
|||||||
- SVG_, ImageMagick_
|
- SVG_, ImageMagick_
|
||||||
- DOT_, `Graphviz's dot`_, Graphviz_
|
- 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
|
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]`_.
|
used in popular projects, e.g the Linux kernel documentation `[kernel doc]`_.
|
||||||
|
|
||||||
|
|||||||
@@ -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``
|
set another media-type as :ref:`template default`, the field ``template``
|
||||||
in the result item must be set to the desired type.
|
in the result item must be set to the desired type.
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
.. _result template macros:
|
.. _result template macros:
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ Why use a private instance?
|
|||||||
\.\.\.is a common question among SearXNG users. Before answering this
|
\.\.\.is a common question among SearXNG users. Before answering this
|
||||||
question, see what options a SearXNG user has.
|
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
|
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
|
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
|
instances can be used by a select group of people, such as a SearXNG instance for a
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Bot Detection
|
Bot Detection
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.botdetection
|
.. automodule:: searx.botdetection
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Favicons (source)
|
Favicons (source)
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.favicons
|
.. automodule:: searx.favicons
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@@ -38,3 +43,6 @@ Favicons Cache
|
|||||||
|
|
||||||
.. automodule:: searx.favicons.cache
|
.. automodule:: searx.favicons.cache
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@
|
|||||||
Locales
|
Locales
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. automodule:: searx.locales
|
.. automodule:: searx.locales
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
Search processors
|
Search processors
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
Abstract processor class
|
Abstract processor class
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,11 @@ Configured Engines
|
|||||||
called *tabs*), engines can be queried by their name or the categories they
|
called *tabs*), engines can be queried by their name or the categories they
|
||||||
belong to, by using a :ref:`\!bing syntax <search-syntax>`.
|
belong to, by using a :ref:`\!bing syntax <search-syntax>`.
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. jinja:: searx
|
.. jinja:: searx
|
||||||
|
|
||||||
{% for category, engines in categories_as_tabs.items() %}
|
{% for category, engines in categories_as_tabs.items() %}
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
User information
|
User information
|
||||||
================
|
================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,12 @@ script :origin:`utils/searxng.sh`.
|
|||||||
- :ref:`installation nginx`
|
- :ref:`installation nginx`
|
||||||
- :ref:`installation apache`
|
- :ref:`installation apache`
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
|
||||||
Install
|
Install
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
|||||||
@@ -4,25 +4,23 @@ cov-core==1.15.0
|
|||||||
black==25.9.0
|
black==25.9.0
|
||||||
pylint==4.0.5
|
pylint==4.0.5
|
||||||
splinter==0.21.0
|
splinter==0.21.0
|
||||||
selenium==4.44.0
|
selenium==4.43.0
|
||||||
Sphinx==8.2.3;python_version <= "3.11"
|
Pallets-Sphinx-Themes==2.5.0
|
||||||
Sphinx==9.1.0; python_version > "3.11"
|
Sphinx==8.2.3
|
||||||
sphinx-issues==6.0.0
|
sphinx-issues==6.0.0
|
||||||
sphinx-jinja==2.0.2
|
sphinx-jinja==2.0.2
|
||||||
sphinx-tabs==3.5.0
|
sphinx-tabs==3.5.0
|
||||||
furo==2025.12.19
|
|
||||||
sphinxcontrib-programoutput==0.19
|
sphinxcontrib-programoutput==0.19
|
||||||
sphinx-autobuild==2025.8.25
|
sphinx-autobuild==2025.8.25
|
||||||
sphinx-notfound-page==1.1.0
|
sphinx-notfound-page==1.1.0
|
||||||
myst-parser==5.0.0
|
myst-parser==5.0.0
|
||||||
linuxdoc==20260504
|
linuxdoc==20240924
|
||||||
aiounittest==1.5.0
|
aiounittest==1.5.0
|
||||||
yamllint==1.38.0
|
yamllint==1.38.0
|
||||||
wlc==2.0.0
|
wlc==1.17.2
|
||||||
coloredlogs==15.0.1
|
coloredlogs==15.0.1
|
||||||
docutils>=0.21.2;python_version <= "3.11"
|
docutils>=0.22.4
|
||||||
docutils>=0.22.4; python_version > "3.11"
|
|
||||||
parameterized==0.9.0
|
parameterized==0.9.0
|
||||||
granian[reload]==2.7.4
|
granian[reload]==2.7.4
|
||||||
basedpyright==1.39.4
|
basedpyright==1.39.3
|
||||||
types-lxml==2026.2.16
|
types-lxml==2026.2.16
|
||||||
|
|||||||
+2
-2
@@ -11,9 +11,9 @@ httpx[http2]==0.28.1
|
|||||||
httpx-socks[asyncio]==0.10.0
|
httpx-socks[asyncio]==0.10.0
|
||||||
sniffio==1.3.1
|
sniffio==1.3.1
|
||||||
valkey==6.1.1
|
valkey==6.1.1
|
||||||
markdown-it-py==4.2.0
|
markdown-it-py==4.0.0
|
||||||
msgspec==0.21.1
|
msgspec==0.21.1
|
||||||
typer==0.25.1
|
typer==0.25.0
|
||||||
isodate==0.7.2
|
isodate==0.7.2
|
||||||
whitenoise==6.12.0
|
whitenoise==6.12.0
|
||||||
typing-extensions==4.15.0
|
typing-extensions==4.15.0
|
||||||
|
|||||||
+1
-7
@@ -114,13 +114,7 @@ class ExpireCacheStats:
|
|||||||
if expire:
|
if expire:
|
||||||
valid_until = datetime.datetime.fromtimestamp(expire).strftime("%Y-%m-%d %H:%M:%S")
|
valid_until = datetime.datetime.fromtimestamp(expire).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
c_kv += 1
|
c_kv += 1
|
||||||
value_str = str(value)
|
lines.append(f"[{ctx_name:20s}] {valid_until} {key:12}" f" --> ({type(value).__name__}) {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"Number of contexts: {c_ctx}")
|
lines.append(f"Number of contexts: {c_ctx}")
|
||||||
lines.append(f"number of key/value pairs: {c_kv}")
|
lines.append(f"number of key/value pairs: {c_kv}")
|
||||||
|
|||||||
@@ -4079,7 +4079,6 @@
|
|||||||
"bg-BG": "BG:bg",
|
"bg-BG": "BG:bg",
|
||||||
"bn-BD": "BD:bn",
|
"bn-BD": "BD:bn",
|
||||||
"bn-IN": "IN:bn",
|
"bn-IN": "IN:bn",
|
||||||
"ca-ES": "ES:ca",
|
|
||||||
"cs-CZ": "CZ:cs",
|
"cs-CZ": "CZ:cs",
|
||||||
"de-AT": "AT:de",
|
"de-AT": "AT:de",
|
||||||
"de-CH": "CH:de",
|
"de-CH": "CH:de",
|
||||||
@@ -4111,15 +4110,16 @@
|
|||||||
"es-CO": "CO:es-419",
|
"es-CO": "CO:es-419",
|
||||||
"es-CU": "CU:es-419",
|
"es-CU": "CU:es-419",
|
||||||
"es-ES": "ES:es",
|
"es-ES": "ES:es",
|
||||||
"et-EE": "EE:et",
|
"es-MX": "MX:es-419",
|
||||||
"fi-FI": "FI:fi",
|
"es-PE": "PE:es-419",
|
||||||
|
"es-US": "US:es-419",
|
||||||
|
"es-VE": "VE:es-419",
|
||||||
"fr-BE": "BE:fr",
|
"fr-BE": "BE:fr",
|
||||||
"fr-CA": "CA:fr",
|
"fr-CA": "CA:fr",
|
||||||
"fr-CH": "CH:fr",
|
"fr-CH": "CH:fr",
|
||||||
"fr-FR": "FR:fr",
|
"fr-FR": "FR:fr",
|
||||||
"fr-MA": "MA:fr",
|
"fr-MA": "MA:fr",
|
||||||
"fr-SN": "SN:fr",
|
"fr-SN": "SN:fr",
|
||||||
"gu-IN": "IN:gu",
|
|
||||||
"he-IL": "IL:he",
|
"he-IL": "IL:he",
|
||||||
"hi-IN": "IN:hi",
|
"hi-IN": "IN:hi",
|
||||||
"hu-HU": "HU:hu",
|
"hu-HU": "HU:hu",
|
||||||
@@ -4131,13 +4131,12 @@
|
|||||||
"lv-LV": "LV:lv",
|
"lv-LV": "LV:lv",
|
||||||
"ml-IN": "IN:ml",
|
"ml-IN": "IN:ml",
|
||||||
"mr-IN": "IN:mr",
|
"mr-IN": "IN:mr",
|
||||||
"ms-MY": "MY:ms",
|
|
||||||
"nb-NO": "NO:no",
|
"nb-NO": "NO:no",
|
||||||
"nl-BE": "BE:nl",
|
"nl-BE": "BE:nl",
|
||||||
"nl-NL": "NL:nl",
|
"nl-NL": "NL:nl",
|
||||||
"pa-IN": "IN:pa",
|
|
||||||
"pl-PL": "PL:pl",
|
"pl-PL": "PL:pl",
|
||||||
"pt-BR": "BR:pt-419",
|
"pt-BR": "BR:pt-419",
|
||||||
|
"pt-PT": "PT:pt-150",
|
||||||
"ro-RO": "RO:ro",
|
"ro-RO": "RO:ro",
|
||||||
"ru-RU": "RU:ru",
|
"ru-RU": "RU:ru",
|
||||||
"ru-UA": "UA:ru",
|
"ru-UA": "UA:ru",
|
||||||
@@ -4152,7 +4151,8 @@
|
|||||||
"uk-UA": "UA:uk",
|
"uk-UA": "UA:uk",
|
||||||
"vi-VN": "VN:vi",
|
"vi-VN": "VN:vi",
|
||||||
"zh-CN": "CN:zh-Hans",
|
"zh-CN": "CN:zh-Hans",
|
||||||
"zh-HK": "HK:zh-Hant"
|
"zh-HK": "HK:zh-Hant",
|
||||||
|
"zh-TW": "TW:zh-Hant"
|
||||||
},
|
},
|
||||||
"supported_domains": {}
|
"supported_domains": {}
|
||||||
},
|
},
|
||||||
@@ -8513,177 +8513,6 @@
|
|||||||
"zh-classical": "zh-classical"
|
"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": {
|
"z-library": {
|
||||||
"all_locale": "",
|
"all_locale": "",
|
||||||
"custom": {
|
"custom": {
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
There is a command line for developer purposes and for deeper analysis. Here is
|
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::
|
an example in which the command line is called in the development environment::
|
||||||
|
|
||||||
$ ./manage dev.env
|
$ ./manage pyenv.cmd bash --norc --noprofile
|
||||||
(dev.env)$ python -m searx.enginelib --help
|
(py3) python -m searx.enginelib --help
|
||||||
|
|
||||||
.. hint::
|
.. hint::
|
||||||
|
|
||||||
@@ -46,7 +46,6 @@ ENGINES_CACHE: ExpireCacheSQLite = ExpireCacheSQLite.build_cache(
|
|||||||
name="ENGINES_CACHE",
|
name="ENGINES_CACHE",
|
||||||
MAXHOLD_TIME=60 * 60 * 24 * 7, # 7 days
|
MAXHOLD_TIME=60 * 60 * 24 * 7, # 7 days
|
||||||
MAINTENANCE_PERIOD=60 * 60, # 2h
|
MAINTENANCE_PERIOD=60 * 60, # 2h
|
||||||
MAX_VALUE_LEN=1024 * 1024 * 1024, # 1MB
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
"""Global :py:obj:`searx.cache.ExpireCacheSQLite` instance where the cached
|
"""Global :py:obj:`searx.cache.ExpireCacheSQLite` instance where the cached
|
||||||
@@ -72,9 +71,9 @@ def state():
|
|||||||
|
|
||||||
|
|
||||||
@app.command()
|
@app.command()
|
||||||
def maintenance(force: bool = True, truncate: bool = False):
|
def maintenance(force: bool = True):
|
||||||
"""Carry out maintenance on cache of the engines."""
|
"""Carry out maintenance on cache of the engines."""
|
||||||
ENGINES_CACHE.maintenance(force=force, truncate=truncate)
|
ENGINES_CACHE.maintenance(force=force)
|
||||||
|
|
||||||
|
|
||||||
class EngineCache:
|
class EngineCache:
|
||||||
@@ -112,8 +111,8 @@ class EngineCache:
|
|||||||
For introspection of the DB, jump into developer environment and run command to
|
For introspection of the DB, jump into developer environment and run command to
|
||||||
show cache state::
|
show cache state::
|
||||||
|
|
||||||
$ ./manage dev.env
|
$ ./manage pyenv.cmd bash --norc --noprofile
|
||||||
(dev.env)$ python -m searx.enginelib cache state
|
(py3) python -m searx.enginelib cache state
|
||||||
|
|
||||||
cache tables and key/values
|
cache tables and key/values
|
||||||
===========================
|
===========================
|
||||||
@@ -160,8 +159,7 @@ class EngineCache:
|
|||||||
def __init__(self, engine_name: str, expire: int | None = None):
|
def __init__(self, engine_name: str, expire: int | None = None):
|
||||||
self.expire: int = expire or ENGINES_CACHE.cfg.MAXHOLD_TIME
|
self.expire: int = expire or ENGINES_CACHE.cfg.MAXHOLD_TIME
|
||||||
_valid = "-_." + string.ascii_letters + string.digits
|
_valid = "-_." + string.ascii_letters + string.digits
|
||||||
# engine_name is a table and SQL table names must start with a letter
|
self.table_name: str = "".join([c if c in _valid else "_" for c in engine_name])
|
||||||
self.table_name: str = "eng_" + "".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:
|
def set(self, key: str, value: t.Any, expire: int | None = None) -> bool:
|
||||||
return ENGINES_CACHE.set(
|
return ENGINES_CACHE.set(
|
||||||
|
|||||||
@@ -116,6 +116,19 @@ class EngineTraits:
|
|||||||
return self.all_locale
|
return self.all_locale
|
||||||
return locales.get_engine_locale(searxng_locale, self.regions, default=default)
|
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):
|
def copy(self):
|
||||||
"""Create a copy of the dataclass object."""
|
"""Create a copy of the dataclass object."""
|
||||||
return EngineTraits(**dataclasses.asdict(self))
|
return EngineTraits(**dataclasses.asdict(self))
|
||||||
|
|||||||
@@ -84,10 +84,6 @@ def request(query, params):
|
|||||||
|
|
||||||
|
|
||||||
def response(resp):
|
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)
|
dom = html.fromstring(resp.text)
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
|
||||||
@@ -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
@@ -1,23 +1,15 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
"""Fyyd (podcasts)"""
|
"""Fyyd (podcasts)"""
|
||||||
|
|
||||||
import typing as t
|
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from urllib.parse import urlencode
|
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 = {
|
about = {
|
||||||
"website": "https://fyyd.de",
|
'website': 'https://fyyd.de',
|
||||||
"official_api_documentation": "https://github.com/eazyliving/fyyd-api",
|
'official_api_documentation': 'https://github.com/eazyliving/fyyd-api',
|
||||||
"use_official_api": True,
|
'use_official_api': True,
|
||||||
"require_api_key": False,
|
'require_api_key': False,
|
||||||
"results": "JSON",
|
'results': 'JSON',
|
||||||
}
|
}
|
||||||
categories = []
|
categories = []
|
||||||
paging = True
|
paging = True
|
||||||
@@ -26,30 +18,31 @@ base_url = "https://api.fyyd.de"
|
|||||||
page_size = 10
|
page_size = 10
|
||||||
|
|
||||||
|
|
||||||
def request(query: str, params: "OnlineParams") -> None:
|
def request(query, params):
|
||||||
args = {
|
args = {
|
||||||
"term": query,
|
'term': query,
|
||||||
"count": page_size,
|
'count': page_size,
|
||||||
"page": params["pageno"] - 1,
|
'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"):
|
def response(resp):
|
||||||
res = EngineResults()
|
results = []
|
||||||
|
|
||||||
json_results: list[dict[str, str]] = resp.json()["data"] # pyright: ignore[reportAny]
|
json_results = resp.json()['data']
|
||||||
|
|
||||||
for result in json_results:
|
for result in json_results:
|
||||||
res.add(
|
results.append(
|
||||||
res.types.MainResult(
|
{
|
||||||
url=result["htmlURL"],
|
'url': result['htmlURL'],
|
||||||
title=result["title"],
|
'title': result['title'],
|
||||||
content=result["description"],
|
'content': result['description'],
|
||||||
thumbnail=result["smallImageURL"],
|
'thumbnail': result['smallImageURL'],
|
||||||
publishedDate=datetime.strptime(result["status_since"], "%Y-%m-%d %H:%M:%S"),
|
'publishedDate': datetime.strptime(result['status_since'], '%Y-%m-%d %H:%M:%S'),
|
||||||
metadata=f"Rank: {result['rank']} || {result['episode_count']} episodes",
|
'metadata': f"Rank: {result['rank']} || {result['episode_count']} episodes",
|
||||||
)
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return res
|
return results
|
||||||
|
|||||||
+1
-19
@@ -278,28 +278,10 @@ def get_google_info(params: "OnlineParams", eng_traits: EngineTraits) -> dict[st
|
|||||||
return ret_val
|
return ret_val
|
||||||
|
|
||||||
|
|
||||||
def detect_google_sorry(resp: "SXNG_Response"):
|
def detect_google_sorry(resp):
|
||||||
"""Detect Google's bot-protection responses (CAPTCHA / sorry pages).
|
|
||||||
|
|
||||||
Google may block requests in several ways:
|
|
||||||
|
|
||||||
1. Redirect to sorry.google.com (standard CAPTCHA).
|
|
||||||
2. HTTP 302 redirect to ``/sorry/index?...`` on the same host -- when the
|
|
||||||
HTTP client doesn't follow the redirect, the response body is a short
|
|
||||||
HTML stub with a link to the sorry page.
|
|
||||||
3. Short HTML response (<2000 bytes) containing "/sorry/" -- a meta-refresh
|
|
||||||
or JS redirect variant.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if resp.url.host == "sorry.google.com" or resp.url.path.startswith("/sorry"):
|
if resp.url.host == "sorry.google.com" or resp.url.path.startswith("/sorry"):
|
||||||
raise SearxEngineCaptchaException()
|
raise SearxEngineCaptchaException()
|
||||||
|
|
||||||
if resp.status_code == 302:
|
|
||||||
raise SearxEngineCaptchaException()
|
|
||||||
|
|
||||||
if len(resp.text) < 2000 and "/sorry/" in resp.text:
|
|
||||||
raise SearxEngineCaptchaException()
|
|
||||||
|
|
||||||
|
|
||||||
def request(query: str, params: "OnlineParams") -> None:
|
def request(query: str, params: "OnlineParams") -> None:
|
||||||
"""Google search request"""
|
"""Google search request"""
|
||||||
|
|||||||
+159
-188
@@ -23,11 +23,9 @@ The google news API ignores some parameters from the common :ref:`google API`:
|
|||||||
.. _num: https://developers.google.com/custom-search/docs/xml_results#numsp
|
.. _num: https://developers.google.com/custom-search/docs/xml_results#numsp
|
||||||
.. _save: https://developers.google.com/custom-search/docs/xml_results#safesp
|
.. _save: https://developers.google.com/custom-search/docs/xml_results#safesp
|
||||||
"""
|
"""
|
||||||
import typing as t
|
|
||||||
|
|
||||||
import json
|
|
||||||
import base64
|
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
import base64
|
||||||
from lxml import html
|
from lxml import html
|
||||||
import babel
|
import babel
|
||||||
|
|
||||||
@@ -46,24 +44,18 @@ from searx.engines.google import (
|
|||||||
)
|
)
|
||||||
from searx.enginelib.traits import EngineTraits
|
from searx.enginelib.traits import EngineTraits
|
||||||
|
|
||||||
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
|
||||||
about = {
|
about = {
|
||||||
"website": "https://news.google.com",
|
"website": 'https://news.google.com',
|
||||||
"wikidata_id": "Q12020",
|
"wikidata_id": 'Q12020',
|
||||||
"official_api_documentation": "https://developers.google.com/custom-search",
|
"official_api_documentation": 'https://developers.google.com/custom-search',
|
||||||
"use_official_api": False,
|
"use_official_api": False,
|
||||||
"require_api_key": False,
|
"require_api_key": False,
|
||||||
"results": "HTML",
|
"results": 'HTML',
|
||||||
}
|
}
|
||||||
|
|
||||||
# engine dependent config
|
# engine dependent config
|
||||||
categories = ["news"]
|
categories = ['news']
|
||||||
paging = False
|
paging = False
|
||||||
time_range_support = False
|
time_range_support = False
|
||||||
|
|
||||||
@@ -72,252 +64,231 @@ time_range_support = False
|
|||||||
#
|
#
|
||||||
# safesearch : results are identical for safesearch=0 and safesearch=2
|
# safesearch : results are identical for safesearch=0 and safesearch=2
|
||||||
safesearch = True
|
safesearch = True
|
||||||
base_url: str = "https://news.google.com"
|
|
||||||
|
|
||||||
|
|
||||||
def request(query: str, params: "OnlineParams") -> None:
|
def request(query, params):
|
||||||
"""Google-News search request"""
|
"""Google-News search request"""
|
||||||
|
|
||||||
sxng_locale = params.get("searxng_locale", "en-US")
|
sxng_locale = params.get('searxng_locale', 'en-US')
|
||||||
ceid: str = locales.get_engine_locale(
|
ceid = locales.get_engine_locale(sxng_locale, traits.custom['ceid'], default='US:en')
|
||||||
sxng_locale, traits.custom["ceid"], default="US:en"
|
|
||||||
) # pyright: ignore[reportAssignmentType]
|
|
||||||
google_info = get_google_info(params, traits)
|
google_info = get_google_info(params, traits)
|
||||||
google_info["subdomain"] = "news.google.com" # google news has only one domain
|
google_info['subdomain'] = 'news.google.com' # google news has only one domain
|
||||||
|
|
||||||
ceid_region, ceid_lang = ceid.split(":")
|
ceid_region, ceid_lang = ceid.split(':')
|
||||||
ceid_lang, ceid_suffix = (
|
ceid_lang, ceid_suffix = (
|
||||||
ceid_lang.split(":")
|
ceid_lang.split('-')
|
||||||
+ [
|
+ [
|
||||||
"",
|
None,
|
||||||
]
|
]
|
||||||
)[:2]
|
)[:2]
|
||||||
|
|
||||||
google_info["params"]["hl"] = ceid_lang
|
google_info['params']['hl'] = ceid_lang
|
||||||
|
|
||||||
if ceid_suffix and ceid_suffix not in ["Hans", "Hant"]:
|
if ceid_suffix and ceid_suffix not in ['Hans', 'Hant']:
|
||||||
|
|
||||||
if ceid_region.lower() == ceid_lang:
|
if ceid_region.lower() == ceid_lang:
|
||||||
google_info["params"]["hl"] = ceid_lang + "-" + ceid_region
|
google_info['params']['hl'] = ceid_lang + '-' + ceid_region
|
||||||
else:
|
else:
|
||||||
google_info["params"]["hl"] = ceid_lang + "-" + ceid_suffix
|
google_info['params']['hl'] = ceid_lang + '-' + ceid_suffix
|
||||||
|
|
||||||
elif ceid_region.lower() != ceid_lang:
|
elif ceid_region.lower() != ceid_lang:
|
||||||
|
|
||||||
if ceid_region in ["AT", "BE", "CH", "IL", "SA", "IN", "BD", "PT"]:
|
if ceid_region in ['AT', 'BE', 'CH', 'IL', 'SA', 'IN', 'BD', 'PT']:
|
||||||
google_info["params"]["hl"] = ceid_lang
|
google_info['params']['hl'] = ceid_lang
|
||||||
else:
|
else:
|
||||||
google_info["params"]["hl"] = ceid_lang + "-" + ceid_region
|
google_info['params']['hl'] = ceid_lang + '-' + ceid_region
|
||||||
|
|
||||||
google_info["params"]["lr"] = "lang_" + ceid_lang.split("-")[0]
|
google_info['params']['lr'] = 'lang_' + ceid_lang.split('-')[0]
|
||||||
google_info["params"]["gl"] = ceid_region
|
google_info['params']['gl'] = ceid_region
|
||||||
|
|
||||||
query_url = (
|
query_url = (
|
||||||
"https://"
|
'https://'
|
||||||
+ google_info["subdomain"]
|
+ google_info['subdomain']
|
||||||
+ "/search?"
|
+ "/search?"
|
||||||
+ urlencode(
|
+ urlencode(
|
||||||
{"q": query, **google_info["params"]},
|
{
|
||||||
|
'q': query,
|
||||||
|
**google_info['params'],
|
||||||
|
}
|
||||||
)
|
)
|
||||||
# ceid includes a ':' character which must not be urlencoded
|
# ceid includes a ':' character which must not be urlencoded
|
||||||
+ ("&ceid=%s" % ceid)
|
+ ('&ceid=%s' % ceid)
|
||||||
)
|
)
|
||||||
|
|
||||||
params["url"] = query_url
|
params['url'] = query_url
|
||||||
params["cookies"] = google_info["cookies"]
|
params['cookies'] = google_info['cookies']
|
||||||
params["headers"].update(google_info["headers"])
|
params['headers'].update(google_info['headers'])
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
def response(resp: "SXNG_Response") -> EngineResults:
|
def response(resp):
|
||||||
"""Get response from google's search request"""
|
"""Get response from google's search request"""
|
||||||
|
results = []
|
||||||
res = EngineResults()
|
|
||||||
|
|
||||||
detect_google_sorry(resp)
|
detect_google_sorry(resp)
|
||||||
|
|
||||||
# convert the text to dom
|
# convert the text to dom
|
||||||
dom = html.fromstring(resp.text)
|
dom = html.fromstring(resp.text)
|
||||||
|
|
||||||
for result in eval_xpath_list(dom, "//div[@jslog and @data-n-tid and @jsdata]"):
|
for result in eval_xpath_list(dom, '//div[@class="xrnccd"]'):
|
||||||
|
|
||||||
url: str = eval_xpath_getindex(result, "./a[@target='_blank']/@href", 0, default=0)
|
# The first <a> tag in the <article> contains the link to the article
|
||||||
if not url:
|
# The href attribute of the <a> tag is a google internal link, we have
|
||||||
continue
|
# to decode
|
||||||
if url.startswith("./"):
|
|
||||||
url = base_url + url[1:]
|
|
||||||
|
|
||||||
# The real URL is often encoded in the "jslog" attribute
|
href = eval_xpath_getindex(result, './article/a/@href', 0)
|
||||||
jslog: str | None = eval_xpath_getindex(result, "./a[@target='_blank']/@jslog", 0, default=None)
|
href = href.split('?')[0]
|
||||||
|
href = href.split('/')[-1]
|
||||||
|
href = base64.urlsafe_b64decode(href + '====')
|
||||||
|
href = href[href.index(b'http') :].split(b'\xd2')[0]
|
||||||
|
href = href.decode()
|
||||||
|
|
||||||
# Try to extract the real URL from jslog
|
title = extract_text(eval_xpath(result, './article/h3[1]'))
|
||||||
real_url: str | None = None
|
|
||||||
if jslog:
|
|
||||||
# jslog format is usually: "95014; 5:<base64>; track:click,vis". We
|
|
||||||
# want the second part (index 1) after splitting by ";"
|
|
||||||
parts: list[str] = jslog.split(";")
|
|
||||||
if len(parts) > 1:
|
|
||||||
b64_data: str = parts[1].split(":")[-1].strip()
|
|
||||||
# Pad base64 if necessary
|
|
||||||
b64_data += "=" * (-len(b64_data) % 4)
|
|
||||||
decoded_data: list[str | None] = json.loads(base64.b64decode(b64_data).decode("utf-8"))
|
|
||||||
# The URL is typically the last element in the decoded array
|
|
||||||
if (
|
|
||||||
isinstance(decoded_data, list)
|
|
||||||
and isinstance(decoded_data[-1], str)
|
|
||||||
and decoded_data[-1].startswith("http")
|
|
||||||
):
|
|
||||||
real_url = decoded_data[-1]
|
|
||||||
if real_url:
|
|
||||||
url = real_url
|
|
||||||
else:
|
|
||||||
logger.error(f"no real-url found: {url}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
title = extract_text(eval_xpath(result, "./h4")) or ""
|
# The pub_date is mostly a string like 'yesterday', not a real
|
||||||
|
# timezone date or time. Therefore we can't use publishedDate.
|
||||||
|
pub_date = extract_text(eval_xpath(result, './article//time'))
|
||||||
|
pub_origin = extract_text(eval_xpath(result, './article//a[@data-n-tid]'))
|
||||||
|
|
||||||
# The pub_date is mostly a string like 'yesterday', not a real timezone
|
content = ' / '.join([x for x in [pub_origin, pub_date] if x])
|
||||||
# date or time. Therefore we can't use publishedDate and place the
|
|
||||||
# *pub* sting into the content.
|
|
||||||
|
|
||||||
pub_date = extract_text(eval_xpath(result, ".//time"))
|
# The image URL is located in a preceding sibling <img> tag, e.g.:
|
||||||
pub_origin = extract_text(eval_xpath(result, ".//div[contains(@class, 'vr1PYe')]"))
|
# "https://lh3.googleusercontent.com/DjhQh7DMszk.....z=-p-h100-w100"
|
||||||
content = " / ".join([x for x in [pub_origin, pub_date] if x])
|
# These URL are long but not personalized (double checked via tor).
|
||||||
|
|
||||||
thumbnail: str = eval_xpath_getindex(result, ".//figure/img/@src", 0, default="")
|
thumbnail = extract_text(result.xpath('preceding-sibling::a/figure/img/@src'))
|
||||||
if thumbnail and thumbnail.startswith("/"):
|
|
||||||
thumbnail = base_url + thumbnail
|
|
||||||
|
|
||||||
res.add(
|
results.append(
|
||||||
res.types.MainResult(
|
{
|
||||||
url=url,
|
'url': href,
|
||||||
title=title,
|
'title': title,
|
||||||
content=content,
|
'content': content,
|
||||||
thumbnail=thumbnail,
|
'thumbnail': thumbnail,
|
||||||
)
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return res
|
# return results
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
ceid_list = [
|
ceid_list = [
|
||||||
"AE:ar",
|
'AE:ar',
|
||||||
"AR:es-419",
|
'AR:es-419',
|
||||||
"AT:de",
|
'AT:de',
|
||||||
"AU:en",
|
'AU:en',
|
||||||
"BD:bn",
|
'BD:bn',
|
||||||
"BE:fr",
|
'BE:fr',
|
||||||
"BE:nl",
|
'BE:nl',
|
||||||
"BG:bg",
|
'BG:bg',
|
||||||
"BR:pt-419",
|
'BR:pt-419',
|
||||||
"BW:en",
|
'BW:en',
|
||||||
"CA:en",
|
'CA:en',
|
||||||
"CA:fr",
|
'CA:fr',
|
||||||
"CH:de",
|
'CH:de',
|
||||||
"CH:fr",
|
'CH:fr',
|
||||||
"CL:es-419",
|
'CL:es-419',
|
||||||
"CN:zh-Hans",
|
'CN:zh-Hans',
|
||||||
"CO:es-419",
|
'CO:es-419',
|
||||||
"CU:es-419",
|
'CU:es-419',
|
||||||
"CZ:cs",
|
'CZ:cs',
|
||||||
"DE:de",
|
'DE:de',
|
||||||
"EE:et",
|
'EG:ar',
|
||||||
"EG:ar",
|
'ES:es',
|
||||||
"ES:ca",
|
'ET:en',
|
||||||
"ES:es",
|
'FR:fr',
|
||||||
"ET:en",
|
'GB:en',
|
||||||
"FI:fi",
|
'GH:en',
|
||||||
"FR:fr",
|
'GR:el',
|
||||||
"GB:en",
|
'HK:zh-Hant',
|
||||||
"GH:en",
|
'HU:hu',
|
||||||
"GR:el",
|
'ID:en',
|
||||||
"HK:zh-Hant",
|
'ID:id',
|
||||||
"HU:hu",
|
'IE:en',
|
||||||
"ID:en",
|
'IL:en',
|
||||||
"ID:id",
|
'IL:he',
|
||||||
"IE:en",
|
'IN:bn',
|
||||||
"IL:en",
|
'IN:en',
|
||||||
"IL:he",
|
'IN:hi',
|
||||||
"IN:bn",
|
'IN:ml',
|
||||||
"IN:en",
|
'IN:mr',
|
||||||
"IN:gu",
|
'IN:ta',
|
||||||
"IN:hi",
|
'IN:te',
|
||||||
"IN:ml",
|
'IT:it',
|
||||||
"IN:mr",
|
'JP:ja',
|
||||||
"IN:pa",
|
'KE:en',
|
||||||
"IN:ta",
|
'KR:ko',
|
||||||
"IN:te",
|
'LB:ar',
|
||||||
"IT:it",
|
'LT:lt',
|
||||||
"JP:ja",
|
'LV:en',
|
||||||
"KE:en",
|
'LV:lv',
|
||||||
"KR:ko",
|
'MA:fr',
|
||||||
"LB:ar",
|
'MX:es-419',
|
||||||
"LT:lt",
|
'MY:en',
|
||||||
"LV:en",
|
'NA:en',
|
||||||
"LV:lv",
|
'NG:en',
|
||||||
"MA:fr",
|
'NL:nl',
|
||||||
"MY:en",
|
'NO:no',
|
||||||
"MY:ms",
|
'NZ:en',
|
||||||
"NA:en",
|
'PE:es-419',
|
||||||
"NG:en",
|
'PH:en',
|
||||||
"NL:nl",
|
'PK:en',
|
||||||
"NO:no",
|
'PL:pl',
|
||||||
"NZ:en",
|
'PT:pt-150',
|
||||||
"PH:en",
|
'RO:ro',
|
||||||
"PK:en",
|
'RS:sr',
|
||||||
"PL:pl",
|
'RU:ru',
|
||||||
"RO:ro",
|
'SA:ar',
|
||||||
"RS:sr",
|
'SE:sv',
|
||||||
"RU:ru",
|
'SG:en',
|
||||||
"SA:ar",
|
'SI:sl',
|
||||||
"SE:sv",
|
'SK:sk',
|
||||||
"SG:en",
|
'SN:fr',
|
||||||
"SI:sl",
|
'TH:th',
|
||||||
"SK:sk",
|
'TR:tr',
|
||||||
"SN:fr",
|
'TW:zh-Hant',
|
||||||
"TH:th",
|
'TZ:en',
|
||||||
"TR:tr",
|
'UA:ru',
|
||||||
"TZ:en",
|
'UA:uk',
|
||||||
"UA:ru",
|
'UG:en',
|
||||||
"UA:uk",
|
'US:en',
|
||||||
"UG:en",
|
'US:es-419',
|
||||||
"US:en",
|
'VE:es-419',
|
||||||
"VN:vi",
|
'VN:vi',
|
||||||
"ZA:en",
|
'ZA:en',
|
||||||
"ZW:en",
|
'ZW:en',
|
||||||
]
|
]
|
||||||
"""List of region/language combinations supported by Google News. Values of the
|
"""List of region/language combinations supported by Google News. Values of the
|
||||||
``ceid`` argument of the Google News REST API."""
|
``ceid`` argument of the Google News REST API."""
|
||||||
|
|
||||||
|
|
||||||
_skip_values = [
|
_skip_values = [
|
||||||
"ET:en", # english (ethiopia)
|
'ET:en', # english (ethiopia)
|
||||||
"ID:en", # english (indonesia)
|
'ID:en', # english (indonesia)
|
||||||
"LV:en", # english (latvia)
|
'LV:en', # english (latvia)
|
||||||
]
|
]
|
||||||
|
|
||||||
_ceid_locale_map = {"NO:no": "nb-NO"}
|
_ceid_locale_map = {'NO:no': 'nb-NO'}
|
||||||
|
|
||||||
|
|
||||||
def fetch_traits(engine_traits: EngineTraits):
|
def fetch_traits(engine_traits: EngineTraits):
|
||||||
_fetch_traits(engine_traits, add_domains=False)
|
_fetch_traits(engine_traits, add_domains=False)
|
||||||
|
|
||||||
engine_traits.custom["ceid"] = {}
|
engine_traits.custom['ceid'] = {}
|
||||||
|
|
||||||
for ceid in ceid_list:
|
for ceid in ceid_list:
|
||||||
if ceid in _skip_values:
|
if ceid in _skip_values:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
region, lang = ceid.split(":")
|
region, lang = ceid.split(':')
|
||||||
x = lang.split("-")
|
x = lang.split('-')
|
||||||
if len(x) > 1:
|
if len(x) > 1:
|
||||||
if x[1] not in ["Hant", "Hans"]:
|
if x[1] not in ['Hant', 'Hans']:
|
||||||
lang = x[0]
|
lang = x[0]
|
||||||
|
|
||||||
sxng_locale = _ceid_locale_map.get(ceid, lang + "-" + region)
|
sxng_locale = _ceid_locale_map.get(ceid, lang + '-' + region)
|
||||||
try:
|
try:
|
||||||
locale = babel.Locale.parse(sxng_locale, sep="-")
|
locale = babel.Locale.parse(sxng_locale, sep='-')
|
||||||
except babel.UnknownLocaleError:
|
except babel.UnknownLocaleError:
|
||||||
print("ERROR: %s -> %s is unknown by babel" % (ceid, sxng_locale))
|
print("ERROR: %s -> %s is unknown by babel" % (ceid, sxng_locale))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
engine_traits.custom["ceid"][locales.region_tag(locale)] = ceid
|
engine_traits.custom['ceid'][locales.region_tag(locale)] = ceid
|
||||||
|
|||||||
@@ -39,12 +39,11 @@ def response(resp):
|
|||||||
|
|
||||||
for result in json_results:
|
for result in json_results:
|
||||||
title_parts = [title['value'] for title in result['title']]
|
title_parts = [title['value'] for title in result['title']]
|
||||||
extract_parts = [extract['value'] for extract in result.get('extract', [])]
|
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
'url': result['url'],
|
'url': result['url'],
|
||||||
'title': ''.join(title_parts),
|
'title': ''.join(title_parts),
|
||||||
'content': ''.join(extract_parts),
|
'content': result['extract'][0]['value'],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -345,10 +345,7 @@ def _get_news_result(result):
|
|||||||
|
|
||||||
publishedDate = None
|
publishedDate = None
|
||||||
if result.get("date"):
|
if result.get("date"):
|
||||||
try:
|
publishedDate = datetime.fromtimestamp(result["date"] / 1000)
|
||||||
publishedDate = datetime.fromtimestamp(int(result["date"]) / 1000)
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
thumbnailUrl = None
|
thumbnailUrl = None
|
||||||
if result.get("thumbnailUrl"):
|
if result.get("thumbnailUrl"):
|
||||||
|
|||||||
+498
-552
File diff suppressed because it is too large
Load Diff
+11
-12
@@ -87,6 +87,7 @@ def request(query, params):
|
|||||||
|
|
||||||
def response(resp):
|
def response(resp):
|
||||||
if search_type == 'web':
|
if search_type == 'web':
|
||||||
|
|
||||||
catch_bad_response(resp)
|
catch_bad_response(resp)
|
||||||
|
|
||||||
dom = html.fromstring(resp.text)
|
dom = html.fromstring(resp.text)
|
||||||
@@ -105,6 +106,7 @@ def response(resp):
|
|||||||
return results
|
return results
|
||||||
|
|
||||||
if search_type == 'images':
|
if search_type == 'images':
|
||||||
|
|
||||||
catch_bad_response(resp)
|
catch_bad_response(resp)
|
||||||
|
|
||||||
html_data = html.fromstring(resp.text)
|
html_data = html.fromstring(resp.text)
|
||||||
@@ -125,25 +127,22 @@ def response(resp):
|
|||||||
for _, item_data in json_resp['initialState']['serpList']['items']['entities'].items():
|
for _, item_data in json_resp['initialState']['serpList']['items']['entities'].items():
|
||||||
title = item_data['snippet']['title']
|
title = item_data['snippet']['title']
|
||||||
source = item_data['snippet']['url']
|
source = item_data['snippet']['url']
|
||||||
|
thumb = item_data['image']
|
||||||
image_source = item_data["viewerData"]["thumb"]
|
fullsize_image = item_data['viewerData']['dups'][0]['url']
|
||||||
for i in item_data['viewerData']['dups'] + item_data['viewerData']['preview']:
|
height = item_data['viewerData']['dups'][0]['h']
|
||||||
if i["h"] > image_source["h"]:
|
width = item_data['viewerData']['dups'][0]['w']
|
||||||
image_source = i
|
filesize = item_data['viewerData']['dups'][0]['fileSizeInBytes']
|
||||||
|
humanized_filesize = humanize_bytes(filesize)
|
||||||
humanized_filesize = None
|
|
||||||
if image_source.get("fileSizeInBytes"):
|
|
||||||
humanized_filesize = humanize_bytes(image_source["fileSizeInBytes"])
|
|
||||||
|
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
'title': title,
|
'title': title,
|
||||||
'url': source,
|
'url': source,
|
||||||
'img_src': image_source["url"],
|
'img_src': fullsize_image,
|
||||||
'filesize': humanized_filesize,
|
'filesize': humanized_filesize,
|
||||||
'thumbnail_src': item_data["image"],
|
'thumbnail_src': thumb,
|
||||||
'template': 'images.html',
|
'template': 'images.html',
|
||||||
'resolution': f'{image_source["w"]} x {image_source["h"]}',
|
'resolution': f'{width} x {height}',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+47
-97
@@ -1,19 +1,9 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
"""Yep (general, images, news)"""
|
"""Yep (general, images, news)"""
|
||||||
|
|
||||||
import re
|
from datetime import datetime
|
||||||
|
|
||||||
import typing as t
|
|
||||||
|
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
from searx.utils import html_to_text
|
||||||
from searx.result_types import EngineResults
|
|
||||||
from searx.utils import html_to_text, eval_xpath_getindex, extract_text
|
|
||||||
|
|
||||||
if t.TYPE_CHECKING:
|
|
||||||
from searx.enginelib.traits import EngineTraits
|
|
||||||
from searx.extended_types import SXNG_Response
|
|
||||||
from searx.search.processors import OnlineParams
|
|
||||||
|
|
||||||
about = {
|
about = {
|
||||||
'website': 'https://yep.com/',
|
'website': 'https://yep.com/',
|
||||||
@@ -24,109 +14,69 @@ about = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
base_url = "https://api.yep.com"
|
base_url = "https://api.yep.com"
|
||||||
|
search_type = "web" # 'web', 'images', 'news'
|
||||||
|
|
||||||
safesearch = True
|
safesearch = True
|
||||||
safesearch_map = {0: 'off', 1: 'moderate', 2: 'strict'}
|
safesearch_map = {0: 'off', 1: 'moderate', 2: 'strict'}
|
||||||
|
|
||||||
enable_http2 = False
|
enable_http2 = False
|
||||||
|
|
||||||
results_per_page = 20
|
|
||||||
|
|
||||||
_IMPORT_RE = re.compile(r"import\"(.*?)\";")
|
|
||||||
_LANGUAGE_RE = re.compile(r"\{english:\".*?\",code_string:\"(.*?)\",code:\".*?\"\}")
|
|
||||||
|
|
||||||
|
|
||||||
def request(query: str, params: 'OnlineParams') -> None:
|
|
||||||
args = {'query': query, 'safeSearch': safesearch_map[params['safesearch']], 'limit': results_per_page}
|
|
||||||
|
|
||||||
engine_language: str = traits.get_language(params["searxng_locale"])
|
|
||||||
if engine_language:
|
|
||||||
args["hl"] = engine_language
|
|
||||||
|
|
||||||
|
def request(query, params):
|
||||||
|
args = {
|
||||||
|
'client': 'web',
|
||||||
|
'no_correct': 'false',
|
||||||
|
'q': query,
|
||||||
|
'safeSearch': safesearch_map[params['safesearch']],
|
||||||
|
'type': search_type,
|
||||||
|
}
|
||||||
params['url'] = f"{base_url}/fs/2/search?{urlencode(args)}"
|
params['url'] = f"{base_url}/fs/2/search?{urlencode(args)}"
|
||||||
params['headers']['Referer'] = 'https://yep.com/'
|
params['headers']['Referer'] = 'https://yep.com/'
|
||||||
params['headers']['Origin'] = 'https://yep.com'
|
params['headers']['Origin'] = 'https://yep.com'
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
def response(resp: 'SXNG_Response') -> EngineResults:
|
def _web_result(result):
|
||||||
res = EngineResults()
|
return {
|
||||||
|
'url': result['url'],
|
||||||
for result in resp.json()[1]['results']:
|
'title': result['title'],
|
||||||
res.add(
|
'content': html_to_text(result['snippet']),
|
||||||
res.types.MainResult(
|
|
||||||
url=result['url'],
|
|
||||||
title=result['title'],
|
|
||||||
content=html_to_text(result['snippet']),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_traits(engine_traits: 'EngineTraits'):
|
|
||||||
"""Fetch :ref:`languages <yep languages>` and :ref:`regions <yep
|
|
||||||
regions>` from Yep.
|
|
||||||
|
|
||||||
The language options are very well hidden on Yep. To get it, we have to do the following:
|
|
||||||
- Load the yep.com mainpage and extract the URL of the JavaScript app
|
|
||||||
- Load the JavaScript source code and extract the URL of all imported modules from it
|
|
||||||
- Load the imported modules to search for the right one that contains the languages
|
|
||||||
"""
|
|
||||||
|
|
||||||
# pylint: disable=import-outside-toplevel, too-many-branches
|
|
||||||
|
|
||||||
from lxml import html
|
|
||||||
import babel
|
|
||||||
|
|
||||||
from searx.locales import language_tag
|
|
||||||
from searx.network import get # see https://github.com/searxng/searxng/issues/762
|
|
||||||
|
|
||||||
from searx.utils import gen_useragent
|
|
||||||
|
|
||||||
web_base_url = "https://yep.com"
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
"User-Agent": gen_useragent(),
|
|
||||||
"Referer": f"{web_base_url}/",
|
|
||||||
"Sec-Fetch-Dest": "document",
|
|
||||||
"Sec-Fetch-Mode": "navigate",
|
|
||||||
"Sec-Fetch-Site": "same-origin",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resp = get(web_base_url, headers=headers, timeout=5)
|
|
||||||
if not resp.ok:
|
|
||||||
raise RuntimeError("Response from Yep languages is not OK.")
|
|
||||||
|
|
||||||
doc = html.fromstring(resp.text)
|
def _images_result(result):
|
||||||
url = eval_xpath_getindex(doc, "//script[contains(@src, 'PageApp')]/@src", index=0)
|
return {
|
||||||
|
'template': 'images.html',
|
||||||
|
'url': result['host_page'],
|
||||||
|
'title': result.get('title', ''),
|
||||||
|
'content': '',
|
||||||
|
'img_src': result['image_id'],
|
||||||
|
'thumbnail_src': result['src'],
|
||||||
|
}
|
||||||
|
|
||||||
resp = get("https:" + extract_text(url), headers=headers, timeout=5)
|
|
||||||
if not resp.ok:
|
|
||||||
raise RuntimeError("Response from Yep languages is not OK.")
|
|
||||||
|
|
||||||
language_codes = []
|
def _news_result(result):
|
||||||
for script_path in _IMPORT_RE.findall(resp.text):
|
return {
|
||||||
resp = get(f"{web_base_url}{script_path}", headers=headers, timeout=5)
|
'url': result['url'],
|
||||||
if not resp.ok:
|
'title': result['title'],
|
||||||
raise RuntimeError("Response from Yep languages is not OK.")
|
'content': html_to_text(result['snippet']),
|
||||||
|
'publishedDate': datetime.strptime(result['first_seen'][:19], '%Y-%m-%dT%H:%M:%S'),
|
||||||
|
}
|
||||||
|
|
||||||
for match in _LANGUAGE_RE.findall(resp.text):
|
|
||||||
language_codes.append(match)
|
|
||||||
|
|
||||||
if language_codes:
|
def response(resp):
|
||||||
break
|
results = []
|
||||||
|
|
||||||
for language_code in language_codes:
|
for result in resp.json()[1]['results']:
|
||||||
try:
|
if search_type == "web":
|
||||||
sxng_tag = language_tag(babel.Locale.parse(language_code, sep="-"))
|
if result['type'] != 'Organic':
|
||||||
except babel.UnknownLocaleError:
|
continue
|
||||||
# silently ignore unknown languages
|
results.append(_web_result(result))
|
||||||
continue
|
elif search_type == "images":
|
||||||
# print("%-20s: %s <-- %s" % (extract_text(option), country_tag, sxng_tag))
|
results.append(_images_result(result))
|
||||||
|
elif search_type == "news":
|
||||||
|
results.append(_news_result(result))
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unsupported yep search type: {search_type}")
|
||||||
|
|
||||||
conflict = engine_traits.languages.get(sxng_tag)
|
return results
|
||||||
if conflict:
|
|
||||||
if conflict != sxng_tag:
|
|
||||||
print("CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, language_code))
|
|
||||||
continue
|
|
||||||
engine_traits.languages[sxng_tag] = language_code
|
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ IMDB_PREFIX_TO_URL_ID = {
|
|||||||
HTTP_WIKIMEDIA_IMAGE = 'http://commons.wikimedia.org/wiki/Special:FilePath/'
|
HTTP_WIKIMEDIA_IMAGE = 'http://commons.wikimedia.org/wiki/Special:FilePath/'
|
||||||
|
|
||||||
|
|
||||||
def get_imdb_url_id(imdb_item_id: str):
|
def get_imdb_url_id(imdb_item_id):
|
||||||
id_prefix = imdb_item_id[:2]
|
id_prefix = imdb_item_id[:2]
|
||||||
return IMDB_PREFIX_TO_URL_ID.get(id_prefix)
|
return IMDB_PREFIX_TO_URL_ID.get(id_prefix)
|
||||||
|
|
||||||
|
|
||||||
def get_wikimedia_image_id(url: str):
|
def get_wikimedia_image_id(url):
|
||||||
if url.startswith(HTTP_WIKIMEDIA_IMAGE):
|
if url.startswith(HTTP_WIKIMEDIA_IMAGE):
|
||||||
return url[len(HTTP_WIKIMEDIA_IMAGE) :]
|
return url[len(HTTP_WIKIMEDIA_IMAGE) :]
|
||||||
if url.startswith('File:'):
|
if url.startswith('File:'):
|
||||||
@@ -29,7 +29,7 @@ def get_wikimedia_image_id(url: str):
|
|||||||
return url
|
return url
|
||||||
|
|
||||||
|
|
||||||
def get_external_url(url_id: str, item_id: str | None, alternative: str = "default") -> str | None:
|
def get_external_url(url_id, item_id, alternative="default"):
|
||||||
"""Return an external URL or None if url_id is not found.
|
"""Return an external URL or None if url_id is not found.
|
||||||
|
|
||||||
url_id can take value from data/external_urls.json
|
url_id can take value from data/external_urls.json
|
||||||
|
|||||||
+23
-18
@@ -302,7 +302,7 @@ engines:
|
|||||||
- name: 360search
|
- name: 360search
|
||||||
engine: 360search
|
engine: 360search
|
||||||
shortcut: 360so
|
shortcut: 360so
|
||||||
timeout: 20.0
|
timeout: 10.0
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: 360search videos
|
- name: 360search videos
|
||||||
@@ -310,12 +310,6 @@ engines:
|
|||||||
shortcut: 360sov
|
shortcut: 360sov
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: 500px
|
|
||||||
engine: 500px
|
|
||||||
shortcut: "500"
|
|
||||||
disabled: true
|
|
||||||
timeout: 5
|
|
||||||
|
|
||||||
- name: 9gag
|
- name: 9gag
|
||||||
engine: 9gag
|
engine: 9gag
|
||||||
shortcut: 9g
|
shortcut: 9g
|
||||||
@@ -475,6 +469,11 @@ engines:
|
|||||||
engine: arxiv
|
engine: arxiv
|
||||||
shortcut: arx
|
shortcut: arx
|
||||||
|
|
||||||
|
- name: ask
|
||||||
|
engine: ask
|
||||||
|
shortcut: ask
|
||||||
|
disabled: true
|
||||||
|
|
||||||
- name: azure
|
- name: azure
|
||||||
engine: azure
|
engine: azure
|
||||||
shortcut: az
|
shortcut: az
|
||||||
@@ -601,11 +600,6 @@ engines:
|
|||||||
shortcut: cos
|
shortcut: cos
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: cara
|
|
||||||
engine: cara
|
|
||||||
shortcut: ca
|
|
||||||
disabled: true
|
|
||||||
|
|
||||||
- name: chefkoch
|
- name: chefkoch
|
||||||
engine: chefkoch
|
engine: chefkoch
|
||||||
shortcut: chef
|
shortcut: chef
|
||||||
@@ -694,6 +688,22 @@ engines:
|
|||||||
engine: yep
|
engine: yep
|
||||||
shortcut: yep
|
shortcut: yep
|
||||||
categories: general
|
categories: general
|
||||||
|
search_type: web
|
||||||
|
timeout: 15
|
||||||
|
disabled: true
|
||||||
|
|
||||||
|
- name: yep images
|
||||||
|
engine: yep
|
||||||
|
shortcut: yepi
|
||||||
|
categories: images
|
||||||
|
search_type: images
|
||||||
|
disabled: true
|
||||||
|
|
||||||
|
- name: yep news
|
||||||
|
engine: yep
|
||||||
|
shortcut: yepn
|
||||||
|
categories: news
|
||||||
|
search_type: news
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: currency
|
- name: currency
|
||||||
@@ -1209,7 +1219,6 @@ engines:
|
|||||||
categories: [general, web]
|
categories: [general, web]
|
||||||
search_type: web
|
search_type: web
|
||||||
shortcut: ka
|
shortcut: ka
|
||||||
inactive: true
|
|
||||||
|
|
||||||
- name: karmasearch images
|
- name: karmasearch images
|
||||||
engine: karmasearch
|
engine: karmasearch
|
||||||
@@ -1217,21 +1226,18 @@ engines:
|
|||||||
search_type: images
|
search_type: images
|
||||||
shortcut: kai
|
shortcut: kai
|
||||||
paging: false
|
paging: false
|
||||||
inactive: true
|
|
||||||
|
|
||||||
- name: karmasearch videos
|
- name: karmasearch videos
|
||||||
engine: karmasearch
|
engine: karmasearch
|
||||||
categories: [videos, web]
|
categories: [general, web]
|
||||||
search_type: videos
|
search_type: videos
|
||||||
shortcut: kav
|
shortcut: kav
|
||||||
inactive: true
|
|
||||||
|
|
||||||
- name: karmasearch news
|
- name: karmasearch news
|
||||||
engine: karmasearch
|
engine: karmasearch
|
||||||
categories: [news, web]
|
categories: [news, web]
|
||||||
search_type: news
|
search_type: news
|
||||||
shortcut: kan
|
shortcut: kan
|
||||||
inactive: true
|
|
||||||
|
|
||||||
- name: kickass
|
- name: kickass
|
||||||
engine: kickass
|
engine: kickass
|
||||||
@@ -2159,7 +2165,6 @@ engines:
|
|||||||
- name: yahoo news
|
- name: yahoo news
|
||||||
engine: yahoo_news
|
engine: yahoo_news
|
||||||
shortcut: yhn
|
shortcut: yhn
|
||||||
inactive: true
|
|
||||||
|
|
||||||
- name: youtube
|
- name: youtube
|
||||||
shortcut: yt
|
shortcut: yt
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user