Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
0f705a5
style: use oxlint-plugin-eslint for unimplemented eslint rules
TonyRL Apr 1, 2026
7774bf7
chore(deps): bump undici from 7.24.6 to 7.24.7 (#21590)
dependabot[bot] Apr 1, 2026
39058be
feat(router/acfun): add embed option (#21589)
TonyRL Apr 1, 2026
bba9145
chore(deps): bump hono from 4.12.8 to 4.12.9 (#21600)
dependabot[bot] Apr 2, 2026
a5e4c47
chore(deps-dev): bump @cloudflare/workers-types in the cloudflare gro…
dependabot[bot] Apr 2, 2026
ebfc707
chore(deps): bump dotenv from 17.3.1 to 17.4.0 (#21599)
dependabot[bot] Apr 2, 2026
6cd8be3
chore(deps): bump dotenv from 17.3.1 to 17.4.0 (#21599)
dependabot[bot] Apr 2, 2026
f2ed334
fix(route/gameapps): add item category extraction and clean up unwant…
TonyRL Apr 2, 2026
d42e134
fix(wechat2rss): update item parsing to use isoDate and remove unused…
TonyRL Apr 2, 2026
b0dd795
feat(route/castanet): add Castanet news (#21607)
TonyRL Apr 2, 2026
4258c50
chore(deps): bump hono from 4.12.9 to 4.12.10 (#21613)
dependabot[bot] Apr 3, 2026
c021017
chore(deps-dev): bump discord-api-types from 0.38.43 to 0.38.44 (#21614)
dependabot[bot] Apr 3, 2026
ad46a24
chore(deps): bump re2js from 1.3.0 to 1.3.1 (#21615)
dependabot[bot] Apr 3, 2026
f36812c
chore(deps): bump dawidd6/action-download-artifact from 19 to 20 (#21…
dependabot[bot] Apr 3, 2026
cf2c62b
chore(deps): bump docker/login-action from 4.0.0 to 4.1.0 (#21612)
dependabot[bot] Apr 3, 2026
de181a6
chore(deps-dev): bump the cloudflare group with 2 updates (#21611)
dependabot[bot] Apr 3, 2026
6288f06
fix(route/dailypush): use puppeteer (#21160)
TheGeeKing Apr 3, 2026
e334550
feat(route): add Peter Wunder achievements badges feed (#21580)
LinxHex Apr 4, 2026
99e31eb
fix: Update javdb domain in utils.ts (#21392)
colaa-boom Apr 4, 2026
39cbdc3
feat(route/infoq): add article cover url (#21608)
baiyunchen Apr 6, 2026
22e11c6
style: auto format
github-actions[bot] Apr 6, 2026
21d3fef
chore(deps): bump pac-proxy-agent in the proxy-agent group (#21629)
dependabot[bot] Apr 6, 2026
cffaf76
chore(deps): bump tldts from 7.0.27 to 7.0.28 (#21632)
dependabot[bot] Apr 6, 2026
c8abab1
chore(deps): bump hono from 4.12.10 to 4.12.11 (#21630)
dependabot[bot] Apr 6, 2026
243c3b6
chore(deps): bump @scalar/hono-api-reference from 0.10.5 to 0.10.6 (#…
dependabot[bot] Apr 6, 2026
2376080
chore(deps-dev): bump @types/node from 25.5.0 to 25.5.2 (#21635)
dependabot[bot] Apr 6, 2026
ddf383e
chore(deps): bump dotenv from 17.4.0 to 17.4.1 (#21637)
dependabot[bot] Apr 6, 2026
8cc2405
chore(deps): bump fastify/github-action-merge-dependabot (#21627)
dependabot[bot] Apr 6, 2026
9638fe0
chore(deps-dev): bump @cloudflare/workers-types in the cloudflare gro…
dependabot[bot] Apr 6, 2026
880d4ab
chore(deps): bump re2js from 1.3.1 to 1.3.2 (#21631)
dependabot[bot] Apr 6, 2026
58c4752
chore(deps): bump rate-limiter-flexible from 10.0.1 to 11.0.0 (#21636)
dependabot[bot] Apr 6, 2026
3de0cb7
chore(deps): bump lru-cache from 11.2.7 to 11.3.0 (#21633)
dependabot[bot] Apr 6, 2026
a99452b
chore(deps-dev): bump eslint from 10.1.0 to 10.2.0 in the eslint grou…
dependabot[bot] Apr 6, 2026
8ac41e7
fix(xiaohongshu): fix broken img tag in user notes description (#21638)
humgent Apr 6, 2026
d8eaee5
fix(route/twitter): dynamically resolve GraphQL query IDs and fix pro…
yuguorui Apr 6, 2026
2933f89
feat(route/thinkingmachines): add news route for Thinking Machines La…
w3nhao Apr 6, 2026
8d333a1
chore(deps): bump jsdom from 29.0.1 to 29.0.2 (#21646)
dependabot[bot] Apr 7, 2026
a808c20
chore(deps-dev): bump @cloudflare/containers in the cloudflare group …
dependabot[bot] Apr 7, 2026
fa458f5
chore(deps): bump @hono/node-server from 1.19.12 to 1.19.13 (#21649)
dependabot[bot] Apr 7, 2026
409bd66
chore(deps): bump lru-cache from 11.3.0 to 11.3.2 (#21648)
dependabot[bot] Apr 7, 2026
b021302
chore(deps): bump hono from 4.12.11 to 4.12.12 (#21647)
dependabot[bot] Apr 7, 2026
838b681
chore(deps-dev): bump eslint-plugin-simple-import-sort (#21645)
dependabot[bot] Apr 7, 2026
0283f3a
chore(deps-dev): bump msw from 2.12.14 to 2.13.0 (#21644)
dependabot[bot] Apr 7, 2026
15ee2e7
chore: use dependabot for nix update
TonyRL Apr 7, 2026
4cc3470
chore(deps-dev): bump msw from 2.13.0 to 2.13.1 (#21653)
dependabot[bot] Apr 7, 2026
9453dbe
chore(deps): bump devenv from `47a243b` to `35b8c42` (#21650)
dependabot[bot] Apr 7, 2026
1c79c45
chore(deps): bump @notionhq/client from 5.16.0 to 5.17.0 (#21652)
dependabot[bot] Apr 7, 2026
91401de
chore(deps): bump nixpkgs from `2fad6ea` to `68d8aa3` (#21651)
dependabot[bot] Apr 7, 2026
94cfb2e
chore(deps-dev): bump the oxc group across 1 directory with 5 updates…
dependabot[bot] Apr 7, 2026
3e09b3e
chore(nix): update dependencies hash to sha256-T3dvpRn24HKzSZ6sl1tYVM…
github-actions[bot] Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ updates:
- '@oxlint/*'
- 'oxfmt'
- 'oxlint'
- 'oxlint-plugin-eslint'
- 'oxlint-tsgolint'
proxy-agent:
patterns:
Expand All @@ -45,6 +46,15 @@ updates:
patterns:
- '@typescript-eslint/*'

- package-ecosystem: 'nix'
directory: '/'
schedule:
interval: daily
time: '08:00'
open-pull-requests-limit: 100
labels:
- dependencies

- package-ecosystem: 'github-actions'
directory: '/'
schedule:
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/docker-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,13 @@ jobs:
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

- name: Log in to Docker Hub
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
username: ${{ vars.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Log in to the Container registry
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down Expand Up @@ -207,13 +207,13 @@ jobs:
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

- name: Log in to Docker Hub
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
username: ${{ vars.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Log in to the Container registry
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-test-cont.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:

- name: Fetch Docker image
if: (env.TEST_CONTINUE)
uses: dawidd6/action-download-artifact@8a338493df3d275e4a7a63bcff3b8fe97e51a927 # v19
uses: dawidd6/action-download-artifact@8305c0f1062bb0d184d09ef4493ecb9288447732 # v20
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
run_id: ${{ github.event.workflow_run.id }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ jobs:
pull-requests: write
contents: write
steps:
- uses: fastify/github-action-merge-dependabot@1b2ed42db8f9d81a46bac83adedfc03eb5149dff # v3.11.2
- uses: fastify/github-action-merge-dependabot@30c3f8f14a4f7b315ba38dbc1b793d27128fef82 # v3.12.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
target: patch
56 changes: 46 additions & 10 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@
},
"plugins": ["eslint", "typescript", "node", "unicorn", "import"],
"jsPlugins": [
"@stylistic/eslint-plugin",
{ "name": "import-x-js", "specifier": "eslint-plugin-import-x" },
{ "name": "n", "specifier": "eslint-plugin-n" },
{ "name": "unicorn-js", "specifier": "eslint-plugin-unicorn" },
"@stylistic/eslint-plugin",
"eslint-plugin-simple-import-sort",
"oxlint-plugin-eslint",
"./eslint-plugins/no-then.js",
"./eslint-plugins/nsfw-flag.js"
],
Expand Down Expand Up @@ -325,27 +326,60 @@
}
],

// "no-implicit-globals": "error", // not yet implemented
"eslint-js/no-implicit-globals": "error", // use jsPlugins
"no-labels": "error",
"no-lonely-if": "error",
"no-multi-str": "error",
"no-new-func": "error",

"eslint-js/no-restricted-syntax": [
"error", // use jsPlugins
{
"selector": "CallExpression[callee.property.name='get'][arguments.length=0]",
"message": "Please use .toArray() instead."
},
{
"selector": "CallExpression[callee.property.name='toArray'] MemberExpression[object.callee.property.name='map']",
"message": "Please use .toArray() before .map()."
},
{
"selector": "CallExpression[callee.property.name=\"catch\"] > ArrowFunctionExpression[params.length=0][body.value=null]",
"message": "Usage of .catch(() => null) is not allowed. Please handle the error appropriately."
},
{
"selector": "CallExpression[callee.property.name=\"catch\"] > ArrowFunctionExpression[params.length=0][body.type=\"Identifier\"][body.name=\"undefined\"]",
"message": "Usage of .catch(() => undefined) is not allowed. Please handle the error appropriately."
},
{
"selector": "CallExpression[callee.property.name=\"catch\"] > ArrowFunctionExpression[params.length=0] > ArrayExpression[elements.length=0]",
"message": "Usage of .catch(() => []) is not allowed. Please handle the error appropriately."
},
{
"selector": "CallExpression[callee.property.name=\"catch\"] > ArrowFunctionExpression[params.length=0] > BlockStatement[body.length=0]",
"message": "Usage of .catch(() => {}) is not allowed. Please handle the error appropriately."
},
{
"selector": "CallExpression[callee.name=\"load\"] AwaitExpression > CallExpression",
"message": "Do not use await in call expressions. Extract the result into a variable first."
}
],

"no-unneeded-ternary": "error",
"no-useless-computed-key": "error",
"no-useless-concat": "warn",
"no-useless-rename": "error",
"no-var": "error",
// "object-shorthand": "error", // not yet implemented
// "prefer-arrow-callback'": "error", // not yet implemented
"eslint-js/object-shorthand": "error", // use jsPlugins
"eslint-js/prefer-arrow-callback": "error", // use jsPlugins
"prefer-const": "error",
"prefer-object-has-own": "error",
"eslint-js/prefer-regex-literals": [
"error", // use jsPlugins
{
"disallowRedundantWrapping": true
}
],
"require-await": "error",
// "prefer-regex-literals": [ // not yet implemented
// "error",
// {
// "disallowRedundantWrapping": true
// }
// ],
// #endregion

// #region --- TypeScript ---
Expand All @@ -354,6 +388,7 @@
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/consistent-indexed-object-style": "off", // stylistic
"@typescript-eslint/consistent-type-definitions": "off", // stylistic
"@typescript-eslint/dot-notation": "error", // type-aware
"@typescript-eslint/no-empty-function": "off", // stylistic && tests
"@typescript-eslint/no-explicit-any": "off",

Expand Down Expand Up @@ -397,6 +432,7 @@
"unicorn/no-null": "off",
"unicorn/no-object-as-default-parameter": "warn",
"unicorn/no-process-exit": "off",
"unicorn/no-useless-iterator-to-array": "off",
"unicorn/no-useless-switch-case": "off",

"unicorn/no-useless-undefined": ["error", { "checkArguments": false }],
Expand Down
161 changes: 1 addition & 160 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,41 +1,26 @@
import js from '@eslint/js';
import stylistic from '@stylistic/eslint-plugin';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
// import { importX } from 'eslint-plugin-import-x';
import n from 'eslint-plugin-n';
// import simpleImportSort from 'eslint-plugin-simple-import-sort';
import eslintPluginYml from 'eslint-plugin-yml';
import { defineConfig } from 'eslint/config';
import globals from 'globals';

// import github from './eslint-plugins/no-then.js';
// import nsfwFlagPlugin from './eslint-plugins/nsfw-flag.js';

const SOURCE_FILES_GLOB = '**/*.?([cm])[jt]s?(x)';

export default defineConfig([
// {
// plugins: {
// '@rsshub/nsfw-flag': nsfwFlagPlugin,
// },
// rules: {
// '@rsshub/nsfw-flag/add-nsfw-flag': 'error',
// },
// },
{
ignores: ['**/coverage', '**/.vscode', '**/docker-compose.yml', '!.github', 'assets/build', 'lib/routes-deprecated', 'lib/router.js', 'dist', 'dist-lib', 'dist-worker'],
},
{
files: [SOURCE_FILES_GLOB],
plugins: {
'@stylistic': stylistic,
'@typescript-eslint': typescriptEslint,
// github,
js,
n,
},
// extends: [js.configs.recommended, typescriptEslint.configs['flat/recommended'], typescriptEslint.configs['flat/stylistic'], n.configs['flat/recommended-script']],
// extends: [typescriptEslint.configs['flat/recommended'], typescriptEslint.configs['flat/stylistic'], n.configs['flat/recommended-script']],

languageOptions: {
globals: {
Expand All @@ -53,101 +38,6 @@ export default defineConfig([
},

rules: {
// #region possible problems
/*
'array-callback-return': ['error', { allowImplicit: true }],

'no-await-in-loop': 'error',
'no-control-regex': 'off',
'no-prototype-builtins': 'off',
*/
// #endregion

// #region suggestions
/*
'arrow-body-style': 'error',
'block-scoped-var': 'error',
curly: 'error',
'dot-notation': 'error',
eqeqeq: 'error',

'default-case': ['warn', { commentPattern: '^no default$' }],

'default-case-last': 'error',
'no-console': 'error',
'no-eval': 'error',
'no-extend-native': 'error',
'no-extra-label': 'error',

'no-implicit-coercion': [
'error',
{
boolean: false,
number: false,
string: false,
disallowTemplateShorthand: true,
},
],

'no-implicit-globals': 'error',
'no-labels': 'error',
'no-lonely-if': 'error',
'no-multi-str': 'error',
'no-new-func': 'error',
*/
'no-restricted-syntax': [
'error',
{
selector: "CallExpression[callee.property.name='get'][arguments.length=0]",
message: 'Please use .toArray() instead.',
},
{
selector: "CallExpression[callee.property.name='toArray'] MemberExpression[object.callee.property.name='map']",
message: 'Please use .toArray() before .map().',
},
{
selector: 'CallExpression[callee.property.name="catch"] > ArrowFunctionExpression[params.length=0][body.value=null]',
message: 'Usage of .catch(() => null) is not allowed. Please handle the error appropriately.',
},
{
selector: 'CallExpression[callee.property.name="catch"] > ArrowFunctionExpression[params.length=0][body.type="Identifier"][body.name="undefined"]',
message: 'Usage of .catch(() => undefined) is not allowed. Please handle the error appropriately.',
},
{
selector: 'CallExpression[callee.property.name="catch"] > ArrowFunctionExpression[params.length=0] > ArrayExpression[elements.length=0]',
message: 'Usage of .catch(() => []) is not allowed. Please handle the error appropriately.',
},
{
selector: 'CallExpression[callee.property.name="catch"] > ArrowFunctionExpression[params.length=0] > BlockStatement[body.length=0]',
message: 'Usage of .catch(() => {}) is not allowed. Please handle the error appropriately.',
},
{
selector: 'CallExpression[callee.name="load"] AwaitExpression > CallExpression',
message: 'Do not use await in call expressions. Extract the result into a variable first.',
},
],
/*
'no-unneeded-ternary': 'error',
'no-useless-computed-key': 'error',
'no-useless-concat': 'warn',
'no-useless-rename': 'error',
'no-var': 'error',
'object-shorthand': 'error',
'prefer-arrow-callback': 'error',
'prefer-const': 'error',
'prefer-object-has-own': 'error',

'prefer-regex-literals': [
'error',
{
disallowRedundantWrapping: true,
},
],

'require-await': 'error',
*/
// #endregion

// #region typescript
/*
'@typescript-eslint/array-type': ['error', { default: 'array-simple' }],
Expand All @@ -163,55 +53,6 @@ export default defineConfig([
'@typescript-eslint/no-unused-vars': ['error', { args: 'after-used', argsIgnorePattern: '^_' }],
*/
// #endregion

// #region stylistic
/*
'@stylistic/arrow-parens': 'error',
'@stylistic/arrow-spacing': 'error',
'@stylistic/comma-spacing': 'error',
'@stylistic/comma-style': 'error',
'@stylistic/function-call-spacing': 'error',
'@stylistic/keyword-spacing': 'off',
'@stylistic/linebreak-style': 'error',

'@stylistic/lines-around-comment': ['error', { beforeBlockComment: false }],

'@stylistic/no-multiple-empty-lines': 'error',
'@stylistic/no-trailing-spaces': 'error',
'@stylistic/rest-spread-spacing': 'error',
'@stylistic/semi': 'error',
'@stylistic/space-before-blocks': 'error',
'@stylistic/space-in-parens': 'error',
'@stylistic/space-infix-ops': 'error',
'@stylistic/space-unary-ops': 'error',
'@stylistic/spaced-comment': 'error',
*/
// #endregion

// #region node specific rules
/*
'n/no-extraneous-require': 'error',
'n/no-deprecated-api': 'warn',
'n/no-missing-import': 'off',
'n/no-missing-require': 'off',
'n/no-process-exit': 'off',
'n/no-unpublished-import': 'off',

'n/no-unpublished-require': ['error', { allowModules: ['tosource'] }],

'n/no-unsupported-features/node-builtins': [
'error',
{
version: '^22.20.0 || ^24',
allowExperimental: true,
ignores: [],
},
],
*/
// #endregion

// github
// 'github/no-then': 'warn',
},
},
{
Expand Down
Loading