From fbe1a460182241cd962656c735f9f99491db5674 Mon Sep 17 00:00:00 2001
From: Tony
Date: Thu, 4 Jun 2026 05:25:46 +0800
Subject: [PATCH 001/126] fix(route/twitter): throw exception on invalid user
---
lib/routes/twitter/api/web-api/api.ts | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/lib/routes/twitter/api/web-api/api.ts b/lib/routes/twitter/api/web-api/api.ts
index b412517badef..d6801babbd17 100644
--- a/lib/routes/twitter/api/web-api/api.ts
+++ b/lib/routes/twitter/api/web-api/api.ts
@@ -164,6 +164,13 @@ const getList = async (id: string, params?: Record) =>
const getUser = async (id: string) => {
const userData: any = await getUserData(id);
+
+ if (!userData.data.user) {
+ throw new InvalidParameterError("This account doesn't exist");
+ } else if (userData.data.user.result.__typename === 'UserUnavailable') {
+ throw new InvalidParameterError(userData.data.user.result.message || 'User is unavailable');
+ }
+
return {
profile_image_url: userData.data?.user?.result?.avatar?.image_url,
...userData.data?.user?.result?.core,
From f5dc400cb2b6655623e57d665fdb723141e6ee4a Mon Sep 17 00:00:00 2001
From: CaoMeiYouRen233 <87434371+CaoMeiYouRen233@users.noreply.github.com>
Date: Thu, 4 Jun 2026 05:30:53 +0800
Subject: [PATCH 002/126] =?UTF-8?q?fix(route/iwara):=20=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=20apiRootUrl=20=E5=BC=95=E7=94=A8=E9=94=99=E8=AF=AF=20(#22176)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/routes/iwara/ranking.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/routes/iwara/ranking.ts b/lib/routes/iwara/ranking.ts
index fe2aef5abb10..f08a0c90ef0d 100644
--- a/lib/routes/iwara/ranking.ts
+++ b/lib/routes/iwara/ranking.ts
@@ -4,7 +4,7 @@ import cache from '@/utils/cache';
import { parseDate } from '@/utils/parse-date';
import { getPlaywrightPage } from '@/utils/playwright';
-import { apiqRootUrl, parseThumbnail, rootUrl, typeMap } from './utils';
+import { apiRootUrl, parseThumbnail, rootUrl, typeMap } from './utils';
const sortMap = {
date: 'Latest',
@@ -53,7 +53,7 @@ async function handler(ctx) {
const { type = 'video', sort = 'date', rating = 'ecchi' } = ctx.req.param();
const limit = ctx.req.query('limit') || 32;
- const url = `${apiqRootUrl}/${type === 'video' ? 'videos' : 'images'}?sort=${sort}&rating=${rating}&limit=${limit}`;
+ const url = `${apiRootUrl}/${type === 'video' ? 'videos' : 'images'}?sort=${sort}&rating=${rating}&limit=${limit}`;
const items = await cache.tryGet(
`iwara:ranking:${type}:${sort}:${rating}`,
From 2fa4fd6d582297eb584ee54934d6e6cc3a0d7dfc Mon Sep 17 00:00:00 2001
From: Tony
Date: Thu, 4 Jun 2026 05:45:02 +0800
Subject: [PATCH 003/126] revert: "chore: workaround playwright install hangs
in node 26.1.0"
This reverts commit f20edaf7c7191ff2d525e9d0cf88dbcea79be159.
refs: https://github.com/microsoft/playwright/issues/40724
---
.github/workflows/test.yml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index aedd27b554ed..7efaa00416dd 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -27,8 +27,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- # playwright install hangs in node v26.1.0, https://github.com/microsoft/playwright/issues/40724
- node-version: [26.0.0, lts/*, lts/-1]
+ node-version: [latest, lts/*, lts/-1]
name: Vitest on Node ${{ matrix.node-version }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -63,7 +62,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- node-version: [26.0.0, lts/*, lts/-1]
+ node-version: [latest, lts/*, lts/-1]
chromium:
- name: bundled Chromium
dependency: ''
From 7a8c5c6c62bb7b7342d0f7a9eb40e30edf95a34d Mon Sep 17 00:00:00 2001
From: Jiamin
Date: Thu, 4 Jun 2026 06:03:31 +0800
Subject: [PATCH 004/126] feat(route): add Henan Museum exhibition route
(#22138)
* feat(route): add Henan Museum exhibition route
* fix: remove trim for title
---
lib/routes/chnmus/exhibition.tsx | 210 +++++++++++++++++++++++++++++++
lib/routes/chnmus/namespace.ts | 10 ++
2 files changed, 220 insertions(+)
create mode 100644 lib/routes/chnmus/exhibition.tsx
create mode 100644 lib/routes/chnmus/namespace.ts
diff --git a/lib/routes/chnmus/exhibition.tsx b/lib/routes/chnmus/exhibition.tsx
new file mode 100644
index 000000000000..96bf680ef668
--- /dev/null
+++ b/lib/routes/chnmus/exhibition.tsx
@@ -0,0 +1,210 @@
+import { load } from 'cheerio';
+import { renderToString } from 'hono/jsx/dom/server';
+
+import type { DataItem, Route } from '@/types';
+import cache from '@/utils/cache';
+import got from '@/utils/got';
+import { parseDate } from '@/utils/parse-date';
+
+import { namespace } from './namespace';
+
+// format the date to YYYY-MM-DD and handle missing year or month
+const extractDates = (durationStr: string) => {
+ let startDate: string | undefined;
+ let endDate: string | undefined;
+
+ if (!durationStr) {
+ return { startDate, endDate };
+ }
+
+ const parts = durationStr.split(/——|-|—|~/).map((p) => p.trim()); // currently ——and- is used, add — or ~ for redundency
+ const startStr = parts[0];
+ const endStr = parts[1];
+
+ let startYear: string | undefined;
+ let startMonth: string | undefined;
+
+ const startRegex = /(\d{4})年(\d{1,2})月(\d{1,2})日/;
+ const startMatch = startStr.match(startRegex);
+
+ if (startMatch) {
+ startYear = startMatch[1];
+ startMonth = startMatch[2].padStart(2, '0');
+ const startDay = startMatch[3].padStart(2, '0');
+ startDate = `${startYear}-${startMonth}-${startDay}`;
+ }
+
+ if (endStr && startDate) {
+ const endRegex = /(?:(\d{4})年)?(?:(\d{1,2})月)?(\d{1,2})日/;
+ const endMatch = endStr.match(endRegex);
+
+ if (endMatch) {
+ const matchYear = endMatch[1];
+ const matchMonth = endMatch[2]?.padStart(2, '0');
+ const matchDay = endMatch[3].padStart(2, '0');
+
+ const finalEndYear = matchYear || startYear;
+ const finalEndMonth = matchMonth || startMonth;
+ const finalEndDay = matchDay;
+ endDate = `${finalEndYear}-${finalEndMonth}-${finalEndDay}`;
+ }
+ }
+
+ return { startDate, endDate };
+};
+
+export const route: Route = {
+ path: '/information/exhibition/:type?',
+ categories: ['travel'],
+ example: '/chnmus/information/exhibition/special',
+ parameters: {
+ type: 'Exhibition type, supported values: special(特展详情). Default: All.',
+ },
+ name: 'Special Exhibitions',
+ maintainers: ['magazian'],
+ radar: [
+ {
+ source: ['www.chnmus.net/ch/information/exhibition/index.html'],
+ target: '/information/exhibition',
+ },
+ ],
+
+ handler: async (ctx) => {
+ const type = ctx.req.param('type');
+ const isSpecial = type === 'special';
+
+ const baseUrl = 'https://www.chnmus.net';
+ const apiUrl = `${baseUrl}/ch/information/exhibition/index.html`;
+ const museumName = namespace.zh?.name || namespace.name;
+
+ const response = await got({
+ method: 'get',
+ url: apiUrl,
+ });
+
+ const $ = load(response.data);
+
+ const list = $('.col-md-6.d-flex.fadeInBottom')
+ .toArray()
+ .map((item) => {
+ const $item = $(item);
+ const link = $item.attr('href');
+ const imgUrlRaw = $item.find('.lazyload').attr('data-bg');
+ const listTitle = $item.find('.common-component-box-title').text();
+
+ return {
+ title: listTitle,
+ itemLink: `https:${link}`,
+ imgUrl: `https:${imgUrlRaw}`,
+ };
+ });
+
+ const items = await Promise.all(
+ list.map((item) => {
+ // use seperate cache key for special path
+ const cacheKey = isSpecial ? `${item.itemLink}-special` : item.itemLink;
+
+ return cache.tryGet(cacheKey, async (): Promise> => {
+ const detailResponse = await got({
+ method: 'get',
+ url: item.itemLink,
+ });
+ const content = load(detailResponse.data);
+
+ const pubDateRaw = content('.common-component-content-attribute-item')
+ .toArray()
+ .map((el) => content(el).text())
+ .find((text) => text.includes('发布日期'))!
+ .replaceAll('发布日期:', '')
+ .trim();
+ const pubDate = parseDate(pubDateRaw);
+
+ // Default path: return as news, no detail information for return
+ if (!isSpecial) {
+ return {
+ title: item.title,
+ link: item.itemLink,
+ pubDate,
+ description: renderToString(
+
+

+
+ ),
+ } as Record;
+ }
+
+ // Special path to return detail exhibition information
+ const texts = content('.common-component-content-text p')
+ .toArray()
+ .map((el) => content(el).text());
+
+ const title = texts.find((text) => text.includes('展览名称:'))?.replaceAll('展览名称:', '');
+
+ // filter out items without title, for example: https://www.chnmus.net/ch/information/exhibition/details.html?id=7400076083917230080#list
+ if (!title) {
+ return {} as Record;
+ }
+
+ const location = texts
+ .find((text) => text.includes('展览地点:'))!
+ .replaceAll('展览地点:', '')
+ .trim();
+
+ const fullDuration = texts
+ .find((text) => text.includes('展览时间:') || text.includes('开展时间:'))
+ ?.replaceAll(/(展览|开展)时间:/g, '')
+ ?.trim();
+
+ const { startDate, endDate } = extractDates(fullDuration || '');
+ const { imgUrl, itemLink } = item;
+
+ const description = renderToString(
+
+

+
+
+ 地点:
+ {location}
+
+
+ 开展:
+ {startDate ?? '未定/常设'}
+
+
+ 闭展:
+ {endDate ?? '未定/常设'}
+
+ {fullDuration && (
+
+ 原始展期:{fullDuration}
+
+ )}
+
+ );
+
+ return {
+ title,
+ link: itemLink,
+ pubDate,
+ description,
+ _extra: {
+ museumName,
+ title,
+ location,
+ startDate,
+ endDate,
+ itemLink,
+ },
+ } as Record;
+ }) as Promise;
+ })
+ );
+
+ return {
+ title: `${museumName} - 展览资讯${isSpecial ? ' - 特展详情' : ''}`,
+ link: apiUrl,
+ language: 'zh-CN',
+ item: items.filter((item) => item.title) as DataItem[],
+ };
+ },
+};
diff --git a/lib/routes/chnmus/namespace.ts b/lib/routes/chnmus/namespace.ts
new file mode 100644
index 000000000000..e5fe10c6228f
--- /dev/null
+++ b/lib/routes/chnmus/namespace.ts
@@ -0,0 +1,10 @@
+import type { Namespace } from '@/types';
+
+export const namespace: Namespace = {
+ name: 'Henan Museum',
+ url: 'www.chnmus.net',
+
+ zh: {
+ name: '河南博物院',
+ },
+};
From 0a2e5b91db4c3b8686c6486c52597f1d874afbca Mon Sep 17 00:00:00 2001
From: TonyRL
Date: Wed, 3 Jun 2026 22:50:26 +0000
Subject: [PATCH 005/126] fix: fromCodePoint RangeError error
#22172
---
lib/routes/toutiao/a-bogus.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/routes/toutiao/a-bogus.ts b/lib/routes/toutiao/a-bogus.ts
index e3b916232b62..adf82161a7ce 100644
--- a/lib/routes/toutiao/a-bogus.ts
+++ b/lib/routes/toutiao/a-bogus.ts
@@ -304,7 +304,7 @@ function generate_rc4_bb_str(url_search_params, user_agent, window_env_str, suff
// 对后缀两次sm3之的结果
const cus = sm3.sum(sm3.sum(suffix));
// 对ua处理之后的结果
- const ua = sm3.sum(result_encrypt(rc4_encrypt(user_agent, Reflect.apply(String.fromCodePoint, null, [0.003_906_25, 1, 14])), 's3'));
+ const ua = sm3.sum(result_encrypt(rc4_encrypt(user_agent, Reflect.apply(String.fromCodePoint, null, [Math.floor(0.003_906_25), 1, 14])), 's3'));
//
const end_time = Date.now();
// b
From 3ce8fda699cd6246f6150144d436a28b742b9950 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 3 Jun 2026 23:13:31 +0000
Subject: [PATCH 006/126] chore(deps): bump actions/checkout from 6.0.2 to
6.0.3 (#22177)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 6.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/build-assets.yml | 4 ++--
.github/workflows/codeql.yml | 2 +-
.github/workflows/comment-on-issue.yml | 4 ++--
.github/workflows/dependabot-fork.yml | 2 +-
.github/workflows/docker-release.yml | 4 ++--
.github/workflows/docker-test-cont.yml | 2 +-
.github/workflows/docker-test.yml | 2 +-
.github/workflows/format.yml | 2 +-
.github/workflows/issue-command.yml | 8 ++++----
.github/workflows/lint.yml | 4 ++--
.github/workflows/npm-publish.yml | 2 +-
.github/workflows/pr-review.yml | 2 +-
.github/workflows/semgrep.yml | 2 +-
.github/workflows/similar-issues.yml | 2 +-
.github/workflows/test-full-routes.yml | 2 +-
.github/workflows/test.yml | 6 +++---
.github/workflows/update-nix-hash.yml | 2 +-
17 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/.github/workflows/build-assets.yml b/.github/workflows/build-assets.yml
index 44e45a852264..1b7a88b6a84d 100644
--- a/.github/workflows/build-assets.yml
+++ b/.github/workflows/build-assets.yml
@@ -18,7 +18,7 @@ jobs:
contents: write
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Install pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- name: Use Node.js Active LTS
@@ -51,7 +51,7 @@ jobs:
if: ${{ env.DOCS_API_TOKEN != '' }}
run: echo "defined=true" >> $GITHUB_OUTPUT
- name: Checkout docs
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
if: steps.check-docs-env.outputs.defined == 'true'
with:
repository: 'RSSNext/rsshub-docs'
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index a870789efa99..1b1c81be83f4 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -48,7 +48,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
# Initializes the CodeQL tools for scanning.
# TODO: use hash pinning when https://github.com/dependabot/dependabot-core/pull/13007 pass
diff --git a/.github/workflows/comment-on-issue.yml b/.github/workflows/comment-on-issue.yml
index 06d6825c0088..f39a8c99dee1 100644
--- a/.github/workflows/comment-on-issue.yml
+++ b/.github/workflows/comment-on-issue.yml
@@ -26,7 +26,7 @@ jobs:
outputs:
closed: ${{ steps.check.outputs.closed }}
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
@@ -60,7 +60,7 @@ jobs:
(needs.checkIssue.result == 'success' || needs.checkIssue.result == 'skipped') &&
needs.checkIssue.outputs.closed != 'true'
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
diff --git a/.github/workflows/dependabot-fork.yml b/.github/workflows/dependabot-fork.yml
index 40494f4e0b40..48b76b399419 100644
--- a/.github/workflows/dependabot-fork.yml
+++ b/.github/workflows/dependabot-fork.yml
@@ -10,7 +10,7 @@ jobs:
timeout-minutes: 5
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Comment Dependabot PR
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml
index 9c542fad47ad..d0775bcc611e 100644
--- a/.github/workflows/docker-release.yml
+++ b/.github/workflows/docker-release.yml
@@ -61,7 +61,7 @@ jobs:
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Extract repository name
id: repo-name
@@ -277,7 +277,7 @@ jobs:
if: needs.check-env.outputs.check-docker == 'true'
timeout-minutes: 5
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Docker Hub Description
uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5.0.0
diff --git a/.github/workflows/docker-test-cont.yml b/.github/workflows/docker-test-cont.yml
index 71de05f45bbe..3bf00faeb22d 100644
--- a/.github/workflows/docker-test-cont.yml
+++ b/.github/workflows/docker-test-cont.yml
@@ -13,7 +13,7 @@ jobs:
pull-requests: write
if: ${{ github.event.workflow_run.conclusion == 'success' }} # skip if unsuccessful
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
# https://github.com/orgs/community/discussions/25220#discussioncomment-11316244
- name: Search the PR that triggered this workflow
diff --git a/.github/workflows/docker-test.yml b/.github/workflows/docker-test.yml
index 80e317c45364..71f5dc94965f 100644
--- a/.github/workflows/docker-test.yml
+++ b/.github/workflows/docker-test.yml
@@ -27,7 +27,7 @@ jobs:
timeout-minutes: 10
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Set up Docker Buildx # needed by `cache-from`
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index 776717f4fc1c..254304d1204d 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -14,7 +14,7 @@ jobs:
timeout-minutes: 15
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
diff --git a/.github/workflows/issue-command.yml b/.github/workflows/issue-command.yml
index 87e7edd967d4..e56334150310 100644
--- a/.github/workflows/issue-command.yml
+++ b/.github/workflows/issue-command.yml
@@ -15,7 +15,7 @@ jobs:
pull-requests: write
steps:
- name: Checkout the latest code
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0
- name: Automatic Rebase
@@ -49,7 +49,7 @@ jobs:
group: vouch-manage
cancel-in-progress: false
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- id: vouch
uses: mitchellh/vouch/action/manage-by-issue@c6d80ead49839655b61b422700b7a3bc9d0804a9 # v1.4.2
@@ -102,11 +102,11 @@ jobs:
- name: Checkout
if: ${{ !github.event.issue.pull_request }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Checkout PR
if: github.event.issue.pull_request
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ fromJson(steps.pr-data.outputs.data).head.ref }}
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index c269b1497144..fd649a1ffcb0 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -20,7 +20,7 @@ jobs:
permissions:
security-events: write
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
@@ -80,7 +80,7 @@ jobs:
timeout-minutes: 5
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Check if PR author is denounced
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml
index 5dcd201dc749..c81a75ce1f53 100644
--- a/.github/workflows/npm-publish.yml
+++ b/.github/workflows/npm-publish.yml
@@ -22,7 +22,7 @@ jobs:
env:
HUSKY: 0
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
diff --git a/.github/workflows/pr-review.yml b/.github/workflows/pr-review.yml
index 512b7b734d51..eb21a98f0b30 100644
--- a/.github/workflows/pr-review.yml
+++ b/.github/workflows/pr-review.yml
@@ -22,7 +22,7 @@ jobs:
pull-requests: write
steps:
- name: Checkout repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
# https://github.com/orgs/community/discussions/25220#discussioncomment-11316244
- name: Search the PR that triggered this workflow
diff --git a/.github/workflows/semgrep.yml b/.github/workflows/semgrep.yml
index b7bda03ddc4f..be4068a3bdc5 100644
--- a/.github/workflows/semgrep.yml
+++ b/.github/workflows/semgrep.yml
@@ -22,7 +22,7 @@ jobs:
permissions:
security-events: write
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- run: semgrep ci --sarif > semgrep.sarif
env:
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
diff --git a/.github/workflows/similar-issues.yml b/.github/workflows/similar-issues.yml
index 95372a91e63f..496219130867 100644
--- a/.github/workflows/similar-issues.yml
+++ b/.github/workflows/similar-issues.yml
@@ -18,7 +18,7 @@ jobs:
issues: write
steps:
- name: Checkout repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Set up Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
diff --git a/.github/workflows/test-full-routes.yml b/.github/workflows/test-full-routes.yml
index bf306839795d..27efbe25c481 100644
--- a/.github/workflows/test-full-routes.yml
+++ b/.github/workflows/test-full-routes.yml
@@ -14,7 +14,7 @@ jobs:
contents: write
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Install pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- name: Use Node.js Active LTS
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 7efaa00416dd..05b04ca7ad2e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -30,7 +30,7 @@ jobs:
node-version: [latest, lts/*, lts/-1]
name: Vitest on Node ${{ matrix.node-version }}
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
@@ -75,7 +75,7 @@ jobs:
environment: '{ "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1" }'
name: Vitest Playwright on Node ${{ matrix.node-version }} with ${{ matrix.chromium.name }}
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
@@ -124,7 +124,7 @@ jobs:
node-version: [26, 24, 22]
name: Build radar and maintainer on Node ${{ matrix.node-version }}
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
diff --git a/.github/workflows/update-nix-hash.yml b/.github/workflows/update-nix-hash.yml
index 51f1f97812c6..01828d0303ac 100644
--- a/.github/workflows/update-nix-hash.yml
+++ b/.github/workflows/update-nix-hash.yml
@@ -18,7 +18,7 @@ jobs:
timeout-minutes: 10
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Install Nix
uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
with:
From 5b1c0c0b275d32e45c64d1af671bdf2a23564d1c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 3 Jun 2026 23:21:03 +0000
Subject: [PATCH 007/126] chore(deps): bump @scalar/hono-api-reference from
0.10.19 to 0.10.20 (#22180)
Bumps [@scalar/hono-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/hono) from 0.10.19 to 0.10.20.
- [Release notes](https://github.com/scalar/scalar/releases)
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/hono/CHANGELOG.md)
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/hono)
---
updated-dependencies:
- dependency-name: "@scalar/hono-api-reference"
dependency-version: 0.10.20
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 46 +++++++++++++++++++++++-----------------------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/package.json b/package.json
index b868841f9c6c..5570491d9a02 100644
--- a/package.json
+++ b/package.json
@@ -73,7 +73,7 @@
"@opentelemetry/sdk-trace-base": "2.7.1",
"@opentelemetry/semantic-conventions": "1.41.1",
"@rss3/sdk": "0.0.25",
- "@scalar/hono-api-reference": "0.10.19",
+ "@scalar/hono-api-reference": "0.10.20",
"@sentry/node": "10.55.0",
"aes-js": "3.1.2",
"cheerio": "1.2.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1718807cf95e..d66e50226a2a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -80,8 +80,8 @@ importers:
specifier: 0.0.25
version: 0.0.25
'@scalar/hono-api-reference':
- specifier: 0.10.19
- version: 0.10.19(hono@4.12.23)
+ specifier: 0.10.20
+ version: 0.10.20(hono@4.12.23)
'@sentry/node':
specifier: 10.55.0
version: 10.55.0(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))
@@ -2496,26 +2496,26 @@ packages:
'@rss3/sdk@0.0.25':
resolution: {integrity: sha512-jyXT4YTwefxxRZ0tt5xjbnw8e7zPg2OGdo/0xb+h/7qWnMNhLtWpc95DsYs/1C/I0rIyiDpZBhLI2DieQ9y+tw==}
- '@scalar/client-side-rendering@0.1.12':
- resolution: {integrity: sha512-prwHK4ozTU268BHZ/5OstoKB23JSidDuvddAOp0bVz9c29ZxsyzzxPtPcVgF7X16LiZnS1OzY030FoDCM+iC9Q==}
+ '@scalar/client-side-rendering@0.1.13':
+ resolution: {integrity: sha512-p8V4HgEWjaCpqsnhclg1pTfjE9JA0AWRr0ocBQHexoHo+pqnSs1d83Mv9rjH7R0FZJrlCSandZZeY3DMX2gYXQ==}
engines: {node: '>=22'}
- '@scalar/helpers@0.8.0':
- resolution: {integrity: sha512-gmOC6VravNB9VDl6wnt/GOj4K/hn48tj5bpW4AM4MhH8Ubil6uu7g1DSoKHwltu8Ks79KEtR6JmOrROi9R7jaQ==}
+ '@scalar/helpers@0.8.1':
+ resolution: {integrity: sha512-yuiuBCadP5bjAnIv23QvifVN/NaMi9xBF6b8Wdk4QOzwzLPJmp699MAdf33J0A5i2qKcvnu32iz/VkEJmQRe5g==}
engines: {node: '>=22'}
- '@scalar/hono-api-reference@0.10.19':
- resolution: {integrity: sha512-6EfwN/lfPvePzAxe9UE8fr/ZuAAqS6ttUwQu9JTgk2Xl/clicaVVSOc0gyGt+8GLXdysoNinjZ74we8xqNWyCA==}
+ '@scalar/hono-api-reference@0.10.20':
+ resolution: {integrity: sha512-/Ae0M9rOpsJJb5b121G8LX4vvBo1t2qFX1ffRKkTgCS9VWfpsfq11r0yBcYy1fmAn1x8YLO21Ls1/9h8LzHuDw==}
engines: {node: '>=22'}
peerDependencies:
hono: ^4.12.5
- '@scalar/schemas@0.3.2':
- resolution: {integrity: sha512-iadXBgJ02XUU5C5s6/xh/PmGLzUPd7X8upXIvPWBXDcQ4FHACNgkG8PPZ/beYM8UPDDkTUPM3ygEs0G6jKwGjQ==}
+ '@scalar/schemas@0.3.3':
+ resolution: {integrity: sha512-qDcgFu6ta5Z90L9D2P6DFKzYesU+FW5+m55SGmdI4iRMRCwj5umHpec2Y2W/SJcCF6bbUZawMxuOH2Ja6rUNpQ==}
engines: {node: '>=22'}
- '@scalar/types@0.12.2':
- resolution: {integrity: sha512-EzLkubCb7xioiTm9eYnmn/032akaq4kkrrdclgV2uezwtniR8ErQICjhMl2AjBWL6nstHiFZ9RnPZm2Z2/KM0Q==}
+ '@scalar/types@0.12.3':
+ resolution: {integrity: sha512-7zaXafbgTFmsJ/9AwYeExUWzXoZNyKOL0SEVAUWRaOndcjxpFCtwzuPrc1elMEWdHopWbY1Qe5pWKbE2aqG2HA==}
engines: {node: '>=22'}
'@scalar/validation@0.6.0':
@@ -3394,7 +3394,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
difflib@https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed:
- resolution: {gitHosted: true, tarball: https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed}
+ resolution: {tarball: https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed}
version: 0.2.6
discord-api-types@0.38.48:
@@ -7563,27 +7563,27 @@ snapshots:
'@rss3/api-core': 0.0.25
'@rss3/api-utils': 0.0.25
- '@scalar/client-side-rendering@0.1.12':
+ '@scalar/client-side-rendering@0.1.13':
dependencies:
- '@scalar/schemas': 0.3.2
- '@scalar/types': 0.12.2
+ '@scalar/schemas': 0.3.3
+ '@scalar/types': 0.12.3
'@scalar/validation': 0.6.0
- '@scalar/helpers@0.8.0': {}
+ '@scalar/helpers@0.8.1': {}
- '@scalar/hono-api-reference@0.10.19(hono@4.12.23)':
+ '@scalar/hono-api-reference@0.10.20(hono@4.12.23)':
dependencies:
- '@scalar/client-side-rendering': 0.1.12
+ '@scalar/client-side-rendering': 0.1.13
hono: 4.12.23
- '@scalar/schemas@0.3.2':
+ '@scalar/schemas@0.3.3':
dependencies:
- '@scalar/helpers': 0.8.0
+ '@scalar/helpers': 0.8.1
'@scalar/validation': 0.6.0
- '@scalar/types@0.12.2':
+ '@scalar/types@0.12.3':
dependencies:
- '@scalar/helpers': 0.8.0
+ '@scalar/helpers': 0.8.1
nanoid: 5.1.11
type-fest: 5.7.0
zod: 4.4.3
From 9a02b25b9d7fedc575ee672f38a9267ecc06c8fc Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 08:39:33 +0800
Subject: [PATCH 008/126] chore(deps-dev): bump the cloudflare group with 2
updates (#22178)
Bumps the cloudflare group with 2 updates: [@cloudflare/workers-types](https://github.com/cloudflare/workerd) and [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler).
Updates `@cloudflare/workers-types` from 4.20260602.1 to 4.20260603.1
- [Release notes](https://github.com/cloudflare/workerd/releases)
- [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
- [Commits](https://github.com/cloudflare/workerd/commits)
Updates `wrangler` from 4.96.0 to 4.97.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/wrangler@4.97.0/packages/wrangler)
---
updated-dependencies:
- dependency-name: "@cloudflare/workers-types"
dependency-version: 4.20260603.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: cloudflare
- dependency-name: wrangler
dependency-version: 4.97.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: cloudflare
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 4 +--
pnpm-lock.yaml | 88 +++++++++++++++++++++++++-------------------------
2 files changed, 46 insertions(+), 46 deletions(-)
diff --git a/package.json b/package.json
index 5570491d9a02..942305e2a7c6 100644
--- a/package.json
+++ b/package.json
@@ -147,7 +147,7 @@
"@bbob/types": "4.3.1",
"@cloudflare/containers": "0.3.6",
"@cloudflare/playwright": "1.3.0",
- "@cloudflare/workers-types": "4.20260602.1",
+ "@cloudflare/workers-types": "4.20260603.1",
"@eslint/eslintrc": "3.3.5",
"@eslint/js": "10.0.1",
"@oxlint/plugins": "1.68.0",
@@ -204,7 +204,7 @@
"unified": "11.0.5",
"vite-tsconfig-paths": "6.1.1",
"vitest": "4.1.8",
- "wrangler": "4.96.0",
+ "wrangler": "4.97.0",
"yaml-eslint-parser": "2.0.0"
},
"lint-staged": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d66e50226a2a..1440481d931f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -297,8 +297,8 @@ importers:
specifier: 1.3.0
version: 1.3.0
'@cloudflare/workers-types':
- specifier: 4.20260602.1
- version: 4.20260602.1
+ specifier: 4.20260603.1
+ version: 4.20260603.1
'@eslint/eslintrc':
specifier: 3.3.5
version: 3.3.5
@@ -468,8 +468,8 @@ importers:
specifier: 4.1.8
version: 4.1.8(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(jsdom@29.1.1(@noble/hashes@2.2.0))(msw@2.13.4(@types/node@25.9.1)(typescript@5.9.3))(vite@7.3.1(@types/node@25.9.1)(jiti@2.6.1)(tsx@4.22.4)(yaml@2.9.0))
wrangler:
- specifier: 4.96.0
- version: 4.96.0(@cloudflare/workers-types@4.20260602.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ specifier: 4.97.0
+ version: 4.97.0(@cloudflare/workers-types@4.20260603.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10)
yaml-eslint-parser:
specifier: 2.0.0
version: 2.0.0
@@ -624,38 +624,38 @@ packages:
workerd:
optional: true
- '@cloudflare/workerd-darwin-64@1.20260529.1':
- resolution: {integrity: sha512-gxh5sXw0CsBxNCNj8uJnrAxqFM7+R8SZI9WIqYMKz6uaPxgg+eTcBDTxjKczMs6bS21FkTEF6ohIzB5+UvxwKw==}
+ '@cloudflare/workerd-darwin-64@1.20260601.1':
+ resolution: {integrity: sha512-iXZBVuRbvuVqQ/63wul01hHCv/3R8G5S8zbkjfoHvyPZFynmlKTV59Hk+H8whyGwFAZuB71UJGLr+G5mJKfjWA==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
- '@cloudflare/workerd-darwin-arm64@1.20260529.1':
- resolution: {integrity: sha512-B8xOwqd8ok8oaWBPhrpmNVSYou6AejFrYf3VzsJF6pg6TEA2tYbdThAGXgtLPQ8d1RD7GXYjVth2dSMg9napDA==}
+ '@cloudflare/workerd-darwin-arm64@1.20260601.1':
+ resolution: {integrity: sha512-veGpZQGBw07Twt+Y4z3oyo+/obKHt0iWUwvDV5GOiDAYjC/zW+YGstgVzg4SHq+k1sLH3ElqL2TXx20I5WBv3Q==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
- '@cloudflare/workerd-linux-64@1.20260529.1':
- resolution: {integrity: sha512-M1EKzsfoKmmno7MNPkuIc8iOdHLhFnE7ltEYaGGEoOj1MTJfMBK/JkIrhdkzc/06wpyPZPiBfBBmUppbeaMqUg==}
+ '@cloudflare/workerd-linux-64@1.20260601.1':
+ resolution: {integrity: sha512-n/9hDz7fPGpYF0J684+Xr5zgjcS2jdmY2Of5m6e+eQ/M9+RfR+UaU8Ee/tkA1dDC0LYQB13hfPafZG66Ff1CsA==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
- '@cloudflare/workerd-linux-arm64@1.20260529.1':
- resolution: {integrity: sha512-Mn/Qpl1FAHDLtPthw6ti5gsHRj582jJdtK4OMUlW1CN0v+pmmxaav3KSqq7CS6a+5W0o2e8o9fKnjVilBxVVmQ==}
+ '@cloudflare/workerd-linux-arm64@1.20260601.1':
+ resolution: {integrity: sha512-VHRZZbexATS+n+1j3x/CZaYbIJEye0J3iIHgG0Wp+l+NrZCKQ8qi8Lq1uTV0dLJQ67FuZtJtWdQ95mm9F7Fc+A==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
- '@cloudflare/workerd-windows-64@1.20260529.1':
- resolution: {integrity: sha512-78xgJJeXxkKYumWdKGH1pybUsEjTreSvbJqirW9cth7ZGonqdv5pzAVt+WWcbu0OFcSHrtQFX6zWioPNFp0/xQ==}
+ '@cloudflare/workerd-windows-64@1.20260601.1':
+ resolution: {integrity: sha512-ye0C7MFLkeH16iTo8Tcjv2KiFmp23+sZGvUzSQa4xhP0QMe6EoJ+H/4SqqvnZ5nfN54slqKvx2VnXceENWe2CQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
- '@cloudflare/workers-types@4.20260602.1':
- resolution: {integrity: sha512-0VssYYXHUn4VR1BaV+GXfhFpI53P2f6AIi17qyA9lQFyTs/u5ZF6IDPda2enDTIPFz/02872RM8CYVlXvRKtUA==}
+ '@cloudflare/workers-types@4.20260603.1':
+ resolution: {integrity: sha512-TLeVHoBbcYv35S5TdRWUoj3IJ56BhHtrsuci+O7ithU8yz7ttNdCk6rAl1QUSGNVEWSIp54bWOuV/xmX1zu79g==}
'@colors/colors@1.6.0':
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
@@ -4594,8 +4594,8 @@ packages:
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- miniflare@4.20260529.0:
- resolution: {integrity: sha512-4pj7WZQR/uYqVMa0cpAmmPBKEb0JegSocuystaXCubY455iqWdPUqgVD9R6N28oneWyPiUyAu5N8QpLbK+MU/Q==}
+ miniflare@4.20260601.0:
+ resolution: {integrity: sha512-56TFiulSEQu43cYxdXgCiA3U3i+Ls0NoXwJXd6DmpNsx8yl/1Il2T3DQ4CMXjR6yfE7CSvC5MuXaqcSAMREjgw==}
engines: {node: '>=22.0.0'}
hasBin: true
@@ -5963,17 +5963,17 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
- workerd@1.20260529.1:
- resolution: {integrity: sha512-G1rurOKEdzCtFE0yUPR9J9mUnPzMU8NdsD7NKM1/oMyCr1j3VEtWJzc5VbhgFQHNBVWrHzCL0JgVPuBirRW31g==}
+ workerd@1.20260601.1:
+ resolution: {integrity: sha512-Bg4+HF3B8TW0urAv8chiz25HSQ/aJxMBjgheUzu/nB1NQa+CaKGrUPv+Z3bf0np/WxLHYW1kcseVEtzZVPbX4g==}
engines: {node: '>=16'}
hasBin: true
- wrangler@4.96.0:
- resolution: {integrity: sha512-8WuiMutalyfBB74wwRyy4VKKJEHjQuEnwcvdUav1M5AfQ8VaTYY5ZQnzvVZPOVXap40k5Mntz1LY3SPWpPukTg==}
+ wrangler@4.97.0:
+ resolution: {integrity: sha512-jzW/aNvjerV+4TmwbvwGY6lpcuBk7EFUTonMDNfci45wSmMTj2/OJN+83cc/CeepKdb+6ZjGJw9NRjmcQoxqRg==}
engines: {node: '>=22.0.0'}
hasBin: true
peerDependencies:
- '@cloudflare/workers-types': ^4.20260529.1
+ '@cloudflare/workers-types': ^4.20260601.1
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -6278,28 +6278,28 @@ snapshots:
'@cloudflare/playwright@1.3.0': {}
- '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260529.1)':
+ '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1)':
dependencies:
unenv: 2.0.0-rc.24
optionalDependencies:
- workerd: 1.20260529.1
+ workerd: 1.20260601.1
- '@cloudflare/workerd-darwin-64@1.20260529.1':
+ '@cloudflare/workerd-darwin-64@1.20260601.1':
optional: true
- '@cloudflare/workerd-darwin-arm64@1.20260529.1':
+ '@cloudflare/workerd-darwin-arm64@1.20260601.1':
optional: true
- '@cloudflare/workerd-linux-64@1.20260529.1':
+ '@cloudflare/workerd-linux-64@1.20260601.1':
optional: true
- '@cloudflare/workerd-linux-arm64@1.20260529.1':
+ '@cloudflare/workerd-linux-arm64@1.20260601.1':
optional: true
- '@cloudflare/workerd-windows-64@1.20260529.1':
+ '@cloudflare/workerd-windows-64@1.20260601.1':
optional: true
- '@cloudflare/workers-types@4.20260602.1': {}
+ '@cloudflare/workers-types@4.20260603.1': {}
'@colors/colors@1.6.0': {}
@@ -10044,12 +10044,12 @@ snapshots:
mimic-response@4.0.0: {}
- miniflare@4.20260529.0(bufferutil@4.1.0)(utf-8-validate@5.0.10):
+ miniflare@4.20260601.0(bufferutil@4.1.0)(utf-8-validate@5.0.10):
dependencies:
'@cspotcode/source-map-support': 0.8.1
sharp: 0.34.5
undici: 7.24.8
- workerd: 1.20260529.1
+ workerd: 1.20260601.1
ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)
youch: 4.1.0-beta.10
transitivePeerDependencies:
@@ -11504,26 +11504,26 @@ snapshots:
word-wrap@1.2.5: {}
- workerd@1.20260529.1:
+ workerd@1.20260601.1:
optionalDependencies:
- '@cloudflare/workerd-darwin-64': 1.20260529.1
- '@cloudflare/workerd-darwin-arm64': 1.20260529.1
- '@cloudflare/workerd-linux-64': 1.20260529.1
- '@cloudflare/workerd-linux-arm64': 1.20260529.1
- '@cloudflare/workerd-windows-64': 1.20260529.1
+ '@cloudflare/workerd-darwin-64': 1.20260601.1
+ '@cloudflare/workerd-darwin-arm64': 1.20260601.1
+ '@cloudflare/workerd-linux-64': 1.20260601.1
+ '@cloudflare/workerd-linux-arm64': 1.20260601.1
+ '@cloudflare/workerd-windows-64': 1.20260601.1
- wrangler@4.96.0(@cloudflare/workers-types@4.20260602.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10):
+ wrangler@4.97.0(@cloudflare/workers-types@4.20260603.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10):
dependencies:
'@cloudflare/kv-asset-handler': 0.5.0
- '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260529.1)
+ '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1)
blake3-wasm: 2.1.5
esbuild: 0.27.3
- miniflare: 4.20260529.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ miniflare: 4.20260601.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.24
- workerd: 1.20260529.1
+ workerd: 1.20260601.1
optionalDependencies:
- '@cloudflare/workers-types': 4.20260602.1
+ '@cloudflare/workers-types': 4.20260603.1
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil
From 527577627b0b898b59e4e549e68c3215da9c62d6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 09:24:26 +0800
Subject: [PATCH 009/126] chore(deps): bump devenv from `d5e9138` to `57f7e43`
(#22181)
Bumps [devenv](https://github.com/cachix/devenv) from `d5e9138` to `57f7e43`.
- [Release notes](https://github.com/cachix/devenv/releases)
- [Commits](https://github.com/cachix/devenv/compare/d5e9138bae90fe199fbe5de7675014d76d28873b...57f7e43b3c8adb43a7f3df0d393a87e6939d5141)
---
updated-dependencies:
- dependency-name: devenv
dependency-version: 57f7e43b3c8adb43a7f3df0d393a87e6939d5141
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
flake.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flake.lock b/flake.lock
index cef7e05c4f14..0570de84d449 100644
--- a/flake.lock
+++ b/flake.lock
@@ -64,11 +64,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
- "lastModified": 1780316214,
- "narHash": "sha256-X3EG0oxt03MegwC/MnQv1saoq9nphEGSSGEAj8mZQOg=",
+ "lastModified": 1780511534,
+ "narHash": "sha256-AFc1M/svHCsGWO+tA/t7ZeWckFIuJpML0vJpxGW65Us=",
"owner": "cachix",
"repo": "devenv",
- "rev": "d5e9138bae90fe199fbe5de7675014d76d28873b",
+ "rev": "57f7e43b3c8adb43a7f3df0d393a87e6939d5141",
"type": "github"
},
"original": {
From 0ab40d02a4869f7fa739e5c59e4ae3ced434fc30 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 09:39:17 +0800
Subject: [PATCH 010/126] chore(deps): bump @sentry/node from 10.55.0 to
10.56.0 (#22179)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 10.55.0 to 10.56.0.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.55.0...10.56.0)
---
updated-dependencies:
- dependency-name: "@sentry/node"
dependency-version: 10.56.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 49 +++++++++++++++++++++++++++++--------------------
2 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/package.json b/package.json
index 942305e2a7c6..96942334f4c3 100644
--- a/package.json
+++ b/package.json
@@ -74,7 +74,7 @@
"@opentelemetry/semantic-conventions": "1.41.1",
"@rss3/sdk": "0.0.25",
"@scalar/hono-api-reference": "0.10.20",
- "@sentry/node": "10.55.0",
+ "@sentry/node": "10.56.0",
"aes-js": "3.1.2",
"cheerio": "1.2.0",
"city-timezones": "1.3.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1440481d931f..a6274638bba8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -83,8 +83,8 @@ importers:
specifier: 0.10.20
version: 0.10.20(hono@4.12.23)
'@sentry/node':
- specifier: 10.55.0
- version: 10.55.0(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))
+ specifier: 10.56.0
+ version: 10.56.0(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))
aes-js:
specifier: 3.1.2
version: 3.1.2
@@ -2533,12 +2533,16 @@ packages:
peerDependencies:
selderee: ~0.12.0
- '@sentry/core@10.55.0':
- resolution: {integrity: sha512-XUyoNtDSYCvgJnoNzlh+YeAXfIPhCRIXbhWqqM3GQ3AFtZICi85lkyfsrwXEl9wzlPGYnU+Eg8F4tOfScx+FcQ==}
+ '@sentry-internal/server-utils@10.56.0':
+ resolution: {integrity: sha512-6kuZI/vAjyVKMm1cTzc2pdUmVR4Px4etMG6wnCPyFnwEaGbUKQnTynUBFpTuo/q6Js6QBQvhLNoAnO4YsOfW4w==}
engines: {node: '>=18'}
- '@sentry/node-core@10.55.0':
- resolution: {integrity: sha512-M8XMMIk9Y0PGZoEt37Oe5dQCdqDdJlBcwLXidpz/s5k4QtJvCO/BbtcivcuKI2htw5FwxJkSrHUzRvT36tlDpg==}
+ '@sentry/core@10.56.0':
+ resolution: {integrity: sha512-L+u1dIz5SANrmST5jhIwETtt4apILgKrylv12X4hKJU0PvZl+NorjeV/ty3MwzpKQPg6b6q6qMOSLc1rLpy3iQ==}
+ engines: {node: '>=18'}
+
+ '@sentry/node-core@10.56.0':
+ resolution: {integrity: sha512-61lD2Wjtv5Lw2F3lJarcD0ORjR4GlVxrEd6w6Of/uF3DH73dD6K3n/3wXEeCIRfV/kgiCFIrCIq76nz0LVgE5g==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -2561,12 +2565,12 @@ packages:
'@opentelemetry/semantic-conventions':
optional: true
- '@sentry/node@10.55.0':
- resolution: {integrity: sha512-+fB/ByoHVWPLGgoafYciiMatTNyX1FHj1bsqZBN+Pw3McbuEU1nwCPLt9zuyZZiWlQtXKsyuACS4ZhXnID5l8A==}
+ '@sentry/node@10.56.0':
+ resolution: {integrity: sha512-qvgtXHkcR4CH3fh0VEVyw4Ysc6MMiAnm727NdTTm0yU5e53erCeo2521+yfJkqmRTGiOSgwA7B5Bs+ot9j0vFQ==}
engines: {node: '>=18'}
- '@sentry/opentelemetry@10.55.0':
- resolution: {integrity: sha512-0+YrNmVNrttki4rWP4DW+UTt5MziepwDLNBde39tgc3cGCcy5fLSdDfhb4JfTaE5TXt4kd5XrkgvS/sDgm3RZg==}
+ '@sentry/opentelemetry@10.56.0':
+ resolution: {integrity: sha512-PtMudApHMHvttjos3b7JZ2gJ+nstHAOYE3vKPYB5o0WQO95ldiaYnpLKMCRIGZWF3Dk7ynrqqnBpn8LZLt+Mrg==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -7600,12 +7604,16 @@ snapshots:
domhandler: 5.0.3
selderee: 0.12.0
- '@sentry/core@10.55.0': {}
+ '@sentry-internal/server-utils@10.56.0':
+ dependencies:
+ '@sentry/core': 10.56.0
+
+ '@sentry/core@10.56.0': {}
- '@sentry/node-core@10.55.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)':
+ '@sentry/node-core@10.56.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)':
dependencies:
- '@sentry/core': 10.55.0
- '@sentry/opentelemetry': 10.55.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
+ '@sentry/core': 10.56.0
+ '@sentry/opentelemetry': 10.56.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
import-in-the-middle: 3.0.1
optionalDependencies:
'@opentelemetry/api': 1.9.1
@@ -7615,28 +7623,29 @@ snapshots:
'@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1)
'@opentelemetry/semantic-conventions': 1.41.1
- '@sentry/node@10.55.0(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))':
+ '@sentry/node@10.56.0(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))':
dependencies:
'@opentelemetry/api': 1.9.1
'@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
'@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1)
'@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1)
'@opentelemetry/semantic-conventions': 1.41.1
- '@sentry/core': 10.55.0
- '@sentry/node-core': 10.55.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
- '@sentry/opentelemetry': 10.55.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
+ '@sentry-internal/server-utils': 10.56.0
+ '@sentry/core': 10.56.0
+ '@sentry/node-core': 10.56.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.218.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
+ '@sentry/opentelemetry': 10.56.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)
import-in-the-middle: 3.0.1
transitivePeerDependencies:
- '@opentelemetry/exporter-trace-otlp-http'
- supports-color
- '@sentry/opentelemetry@10.55.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)':
+ '@sentry/opentelemetry@10.56.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.41.1)':
dependencies:
'@opentelemetry/api': 1.9.1
'@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1)
'@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1)
'@opentelemetry/semantic-conventions': 1.41.1
- '@sentry/core': 10.55.0
+ '@sentry/core': 10.56.0
'@sindresorhus/is@4.6.0': {}
From 42e99cb1c5ddf08563c8836cdf30fe9b69964b08 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 10:00:47 +0800
Subject: [PATCH 011/126] chore(deps): bump undici from 7.25.0 to 8.3.0
(#22032)
Bumps [undici](https://github.com/nodejs/undici) from 7.25.0 to 8.3.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.25.0...v8.3.0)
---
updated-dependencies:
- dependency-name: undici
dependency-version: 8.3.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 34 ++++++++++++++++++++--------------
2 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/package.json b/package.json
index 96942334f4c3..b659c748d1dc 100644
--- a/package.json
+++ b/package.json
@@ -133,7 +133,7 @@
"tsx": "4.22.4",
"twitter-api-v2": "1.29.0",
"ufo": "1.6.4",
- "undici": "7.25.0",
+ "undici": "8.3.0",
"uuid": "14.0.0",
"winston": "3.19.0",
"xxhash-wasm": "1.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a6274638bba8..1f49f909bd1d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -138,7 +138,7 @@ importers:
version: 10.0.0
http-cookie-agent:
specifier: 8.0.0
- version: 8.0.0(tough-cookie@6.0.1)(undici@7.25.0)
+ version: 8.0.0(tough-cookie@6.0.1)(undici@8.3.0)
https-proxy-agent:
specifier: 9.0.0
version: 9.0.0
@@ -260,8 +260,8 @@ importers:
specifier: 1.6.4
version: 1.6.4
undici:
- specifier: 7.25.0
- version: 7.25.0
+ specifier: 8.3.0
+ version: 8.3.0
uuid:
specifier: 14.0.0
version: 14.0.0
@@ -427,7 +427,7 @@ importers:
version: 2.13.4(@types/node@25.9.1)(typescript@5.9.3)
node-network-devtools:
specifier: 1.0.30
- version: 1.0.30(undici@7.25.0)(utf-8-validate@5.0.10)
+ version: 1.0.30(undici@8.3.0)(utf-8-validate@5.0.10)
oxfmt:
specifier: 0.53.0
version: 0.53.0
@@ -5691,8 +5691,8 @@ packages:
undici-types@7.25.0:
resolution: {integrity: sha512-AXNgS1Byr27fTI+2bsPEkV9CxkT8H6xNyRI68b3TatlZo3RkzlqQBLL+w7SmGPVpokjHbcuNVQUWE7FRTg+LRA==}
- undici@6.25.0:
- resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==}
+ undici@6.26.0:
+ resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==}
engines: {node: '>=18.17'}
undici@7.24.8:
@@ -5703,6 +5703,10 @@ packages:
resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==}
engines: {node: '>=20.18.1'}
+ undici@8.3.0:
+ resolution: {integrity: sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q==}
+ engines: {node: '>=22.19.0'}
+
unenv@2.0.0-rc.24:
resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
@@ -6142,17 +6146,17 @@ snapshots:
'@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6)
'@octokit/request': 10.0.8
'@octokit/request-error': 7.1.0
- undici: 6.25.0
+ undici: 6.26.0
'@actions/http-client@3.0.2':
dependencies:
tunnel: 0.0.6
- undici: 6.25.0
+ undici: 6.26.0
'@actions/http-client@4.0.1':
dependencies:
tunnel: 0.0.6
- undici: 6.25.0
+ undici: 6.26.0
'@actions/io@3.0.2': {}
@@ -9244,12 +9248,12 @@ snapshots:
http-cache-semantics@4.2.0: {}
- http-cookie-agent@8.0.0(tough-cookie@6.0.1)(undici@7.25.0):
+ http-cookie-agent@8.0.0(tough-cookie@6.0.1)(undici@8.3.0):
dependencies:
agent-base: 9.0.0
tough-cookie: 6.0.1
optionalDependencies:
- undici: 7.25.0
+ undici: 8.3.0
http-proxy-agent@9.0.0:
dependencies:
@@ -10159,13 +10163,13 @@ snapshots:
dependencies:
write-file-atomic: 1.3.4
- node-network-devtools@1.0.30(undici@7.25.0)(utf-8-validate@5.0.10):
+ node-network-devtools@1.0.30(undici@8.3.0)(utf-8-validate@5.0.10):
dependencies:
bufferutil: 4.1.0
iconv-lite: 0.7.2
inspector: 0.5.0
open: 8.4.2
- undici: 7.25.0
+ undici: 8.3.0
ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
transitivePeerDependencies:
- utf-8-validate
@@ -11257,12 +11261,14 @@ snapshots:
undici-types@7.25.0: {}
- undici@6.25.0: {}
+ undici@6.26.0: {}
undici@7.24.8: {}
undici@7.25.0: {}
+ undici@8.3.0: {}
+
unenv@2.0.0-rc.24:
dependencies:
pathe: 2.0.3
From 6c037dd734e5b94cebc9c9ba445fe65733efe3fc Mon Sep 17 00:00:00 2001
From: Andvari <31068367+dzx-dzx@users.noreply.github.com>
Date: Thu, 4 Jun 2026 21:15:03 +0800
Subject: [PATCH 012/126] fix(route/apnews): Change default path for mobile API
(#22105)
* fix(route/apnews): Change default path for mobile API
* Update mobile-api.ts
* Update mobile-api.ts
---
lib/routes/apnews/mobile-api.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/routes/apnews/mobile-api.ts b/lib/routes/apnews/mobile-api.ts
index 3c894ca3a36e..ac182d98c7bc 100644
--- a/lib/routes/apnews/mobile-api.ts
+++ b/lib/routes/apnews/mobile-api.ts
@@ -10,12 +10,12 @@ import { fetchArticle } from './utils';
export const route: Route = {
path: '/mobile/:path{.+}?',
categories: ['traditional-media'],
- example: '/apnews/mobile/ap-top-news',
+ example: '/apnews/mobile',
view: ViewType.Articles,
parameters: {
path: {
description: 'Corresponding path from AP News website',
- default: 'ap-top-news',
+ default: '/',
},
},
features: {
@@ -37,7 +37,7 @@ export const route: Route = {
};
async function handler(ctx) {
- const path = ctx.req.param('path') ? `/${ctx.req.param('path')}` : '/hub/ap-top-news';
+ const path = ctx.req.param('path') ? `/${ctx.req.param('path')}` : '/';
const apiRootUrl = 'https://apnews.com/graphql/delivery/ap/v1';
const res = await ofetch(apiRootUrl, {
query: {
From 3173ff1d5c93869df805676e2f7526dab5c654c9 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 21:23:09 +0800
Subject: [PATCH 013/126] chore(deps-dev): bump @cloudflare/workers-types in
the cloudflare group (#22182)
Bumps the cloudflare group with 1 update: [@cloudflare/workers-types](https://github.com/cloudflare/workerd).
Updates `@cloudflare/workers-types` from 4.20260603.1 to 4.20260604.1
- [Release notes](https://github.com/cloudflare/workerd/releases)
- [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
- [Commits](https://github.com/cloudflare/workerd/commits)
---
updated-dependencies:
- dependency-name: "@cloudflare/workers-types"
dependency-version: 4.20260604.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: cloudflare
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 236 ++++++++++++++++++++++++-------------------------
2 files changed, 119 insertions(+), 119 deletions(-)
diff --git a/package.json b/package.json
index b659c748d1dc..109a1564f554 100644
--- a/package.json
+++ b/package.json
@@ -147,7 +147,7 @@
"@bbob/types": "4.3.1",
"@cloudflare/containers": "0.3.6",
"@cloudflare/playwright": "1.3.0",
- "@cloudflare/workers-types": "4.20260603.1",
+ "@cloudflare/workers-types": "4.20260604.1",
"@eslint/eslintrc": "3.3.5",
"@eslint/js": "10.0.1",
"@oxlint/plugins": "1.68.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1f49f909bd1d..b536ceaf922e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -297,8 +297,8 @@ importers:
specifier: 1.3.0
version: 1.3.0
'@cloudflare/workers-types':
- specifier: 4.20260603.1
- version: 4.20260603.1
+ specifier: 4.20260604.1
+ version: 4.20260604.1
'@eslint/eslintrc':
specifier: 3.3.5
version: 3.3.5
@@ -367,7 +367,7 @@ importers:
version: 8.60.1(eslint@10.4.1(jiti@2.6.1))(typescript@5.9.3)
'@vercel/nft':
specifier: 1.10.2
- version: 1.10.2(rollup@4.61.0)
+ version: 1.10.2(rollup@4.61.1)
'@vitest/coverage-v8':
specifier: 4.1.8
version: 4.1.8(vitest@4.1.8)
@@ -469,7 +469,7 @@ importers:
version: 4.1.8(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(jsdom@29.1.1(@noble/hashes@2.2.0))(msw@2.13.4(@types/node@25.9.1)(typescript@5.9.3))(vite@7.3.1(@types/node@25.9.1)(jiti@2.6.1)(tsx@4.22.4)(yaml@2.9.0))
wrangler:
specifier: 4.97.0
- version: 4.97.0(@cloudflare/workers-types@4.20260603.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ version: 4.97.0(@cloudflare/workers-types@4.20260604.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10)
yaml-eslint-parser:
specifier: 2.0.0
version: 2.0.0
@@ -654,8 +654,8 @@ packages:
cpu: [x64]
os: [win32]
- '@cloudflare/workers-types@4.20260603.1':
- resolution: {integrity: sha512-TLeVHoBbcYv35S5TdRWUoj3IJ56BhHtrsuci+O7ithU8yz7ttNdCk6rAl1QUSGNVEWSIp54bWOuV/xmX1zu79g==}
+ '@cloudflare/workers-types@4.20260604.1':
+ resolution: {integrity: sha512-nVTydUwPcz9WfwZ/6xAmqs8uUVeGbDVmyPvSYrYAo4CQTyi0122SoE1Suw8RvqnN60XXHPChAjDqSIjnr/mbmg==}
'@colors/colors@1.6.0':
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
@@ -2349,141 +2349,141 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.61.0':
- resolution: {integrity: sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ==}
+ '@rollup/rollup-android-arm-eabi@4.61.1':
+ resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.61.0':
- resolution: {integrity: sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg==}
+ '@rollup/rollup-android-arm64@4.61.1':
+ resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.61.0':
- resolution: {integrity: sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w==}
+ '@rollup/rollup-darwin-arm64@4.61.1':
+ resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.61.0':
- resolution: {integrity: sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg==}
+ '@rollup/rollup-darwin-x64@4.61.1':
+ resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.61.0':
- resolution: {integrity: sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw==}
+ '@rollup/rollup-freebsd-arm64@4.61.1':
+ resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.61.0':
- resolution: {integrity: sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q==}
+ '@rollup/rollup-freebsd-x64@4.61.1':
+ resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.61.0':
- resolution: {integrity: sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.61.1':
+ resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.61.0':
- resolution: {integrity: sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.61.1':
+ resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.61.0':
- resolution: {integrity: sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q==}
+ '@rollup/rollup-linux-arm64-gnu@4.61.1':
+ resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.61.0':
- resolution: {integrity: sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw==}
+ '@rollup/rollup-linux-arm64-musl@4.61.1':
+ resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.61.0':
- resolution: {integrity: sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA==}
+ '@rollup/rollup-linux-loong64-gnu@4.61.1':
+ resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-loong64-musl@4.61.0':
- resolution: {integrity: sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g==}
+ '@rollup/rollup-linux-loong64-musl@4.61.1':
+ resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==}
cpu: [loong64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-ppc64-gnu@4.61.0':
- resolution: {integrity: sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA==}
+ '@rollup/rollup-linux-ppc64-gnu@4.61.1':
+ resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-musl@4.61.0':
- resolution: {integrity: sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw==}
+ '@rollup/rollup-linux-ppc64-musl@4.61.1':
+ resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==}
cpu: [ppc64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-riscv64-gnu@4.61.0':
- resolution: {integrity: sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg==}
+ '@rollup/rollup-linux-riscv64-gnu@4.61.1':
+ resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.61.0':
- resolution: {integrity: sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw==}
+ '@rollup/rollup-linux-riscv64-musl@4.61.1':
+ resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.61.0':
- resolution: {integrity: sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA==}
+ '@rollup/rollup-linux-s390x-gnu@4.61.1':
+ resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.61.0':
- resolution: {integrity: sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==}
+ '@rollup/rollup-linux-x64-gnu@4.61.1':
+ resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.61.0':
- resolution: {integrity: sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw==}
+ '@rollup/rollup-linux-x64-musl@4.61.1':
+ resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.61.0':
- resolution: {integrity: sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg==}
+ '@rollup/rollup-openbsd-x64@4.61.1':
+ resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.61.0':
- resolution: {integrity: sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w==}
+ '@rollup/rollup-openharmony-arm64@4.61.1':
+ resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.61.0':
- resolution: {integrity: sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg==}
+ '@rollup/rollup-win32-arm64-msvc@4.61.1':
+ resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.61.0':
- resolution: {integrity: sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg==}
+ '@rollup/rollup-win32-ia32-msvc@4.61.1':
+ resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.61.0':
- resolution: {integrity: sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ==}
+ '@rollup/rollup-win32-x64-gnu@4.61.1':
+ resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.61.0':
- resolution: {integrity: sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw==}
+ '@rollup/rollup-win32-x64-msvc@4.61.1':
+ resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==}
cpu: [x64]
os: [win32]
@@ -3398,7 +3398,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
difflib@https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed:
- resolution: {tarball: https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed}
+ resolution: {gitHosted: true, tarball: https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed}
version: 0.2.6
discord-api-types@0.38.48:
@@ -5193,8 +5193,8 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- rollup@4.61.0:
- resolution: {integrity: sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==}
+ rollup@4.61.1:
+ resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -6307,7 +6307,7 @@ snapshots:
'@cloudflare/workerd-windows-64@1.20260601.1':
optional: true
- '@cloudflare/workers-types@4.20260603.1': {}
+ '@cloudflare/workers-types@4.20260604.1': {}
'@colors/colors@1.6.0': {}
@@ -7473,87 +7473,87 @@ snapshots:
'@rolldown/pluginutils@1.0.1': {}
- '@rollup/pluginutils@5.3.0(rollup@4.61.0)':
+ '@rollup/pluginutils@5.3.0(rollup@4.61.1)':
dependencies:
'@types/estree': 1.0.9
estree-walker: 2.0.2
picomatch: 4.0.4
optionalDependencies:
- rollup: 4.61.0
+ rollup: 4.61.1
- '@rollup/rollup-android-arm-eabi@4.61.0':
+ '@rollup/rollup-android-arm-eabi@4.61.1':
optional: true
- '@rollup/rollup-android-arm64@4.61.0':
+ '@rollup/rollup-android-arm64@4.61.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.61.0':
+ '@rollup/rollup-darwin-arm64@4.61.1':
optional: true
- '@rollup/rollup-darwin-x64@4.61.0':
+ '@rollup/rollup-darwin-x64@4.61.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.61.0':
+ '@rollup/rollup-freebsd-arm64@4.61.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.61.0':
+ '@rollup/rollup-freebsd-x64@4.61.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.61.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.61.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.61.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.61.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.61.0':
+ '@rollup/rollup-linux-arm64-gnu@4.61.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.61.0':
+ '@rollup/rollup-linux-arm64-musl@4.61.1':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.61.0':
+ '@rollup/rollup-linux-loong64-gnu@4.61.1':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.61.0':
+ '@rollup/rollup-linux-loong64-musl@4.61.1':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.61.0':
+ '@rollup/rollup-linux-ppc64-gnu@4.61.1':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.61.0':
+ '@rollup/rollup-linux-ppc64-musl@4.61.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.61.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.61.1':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.61.0':
+ '@rollup/rollup-linux-riscv64-musl@4.61.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.61.0':
+ '@rollup/rollup-linux-s390x-gnu@4.61.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.61.0':
+ '@rollup/rollup-linux-x64-gnu@4.61.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.61.0':
+ '@rollup/rollup-linux-x64-musl@4.61.1':
optional: true
- '@rollup/rollup-openbsd-x64@4.61.0':
+ '@rollup/rollup-openbsd-x64@4.61.1':
optional: true
- '@rollup/rollup-openharmony-arm64@4.61.0':
+ '@rollup/rollup-openharmony-arm64@4.61.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.61.0':
+ '@rollup/rollup-win32-arm64-msvc@4.61.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.61.0':
+ '@rollup/rollup-win32-ia32-msvc@4.61.1':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.61.0':
+ '@rollup/rollup-win32-x64-gnu@4.61.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.61.0':
+ '@rollup/rollup-win32-x64-msvc@4.61.1':
optional: true
'@rss3/api-core@0.0.25':
@@ -7937,10 +7937,10 @@ snapshots:
'@typescript-eslint/types': 8.60.1
eslint-visitor-keys: 5.0.1
- '@vercel/nft@1.10.2(rollup@4.61.0)':
+ '@vercel/nft@1.10.2(rollup@4.61.1)':
dependencies:
'@mapbox/node-pre-gyp': 2.0.3
- '@rollup/pluginutils': 5.3.0(rollup@4.61.0)
+ '@rollup/pluginutils': 5.3.0(rollup@4.61.1)
acorn: 8.16.0
acorn-import-attributes: 1.9.5(acorn@8.16.0)
async-sema: 3.1.1
@@ -10758,35 +10758,35 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.3
'@rolldown/binding-win32-x64-msvc': 1.0.3
- rollup@4.61.0:
+ rollup@4.61.1:
dependencies:
'@types/estree': 1.0.9
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.61.0
- '@rollup/rollup-android-arm64': 4.61.0
- '@rollup/rollup-darwin-arm64': 4.61.0
- '@rollup/rollup-darwin-x64': 4.61.0
- '@rollup/rollup-freebsd-arm64': 4.61.0
- '@rollup/rollup-freebsd-x64': 4.61.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.61.0
- '@rollup/rollup-linux-arm-musleabihf': 4.61.0
- '@rollup/rollup-linux-arm64-gnu': 4.61.0
- '@rollup/rollup-linux-arm64-musl': 4.61.0
- '@rollup/rollup-linux-loong64-gnu': 4.61.0
- '@rollup/rollup-linux-loong64-musl': 4.61.0
- '@rollup/rollup-linux-ppc64-gnu': 4.61.0
- '@rollup/rollup-linux-ppc64-musl': 4.61.0
- '@rollup/rollup-linux-riscv64-gnu': 4.61.0
- '@rollup/rollup-linux-riscv64-musl': 4.61.0
- '@rollup/rollup-linux-s390x-gnu': 4.61.0
- '@rollup/rollup-linux-x64-gnu': 4.61.0
- '@rollup/rollup-linux-x64-musl': 4.61.0
- '@rollup/rollup-openbsd-x64': 4.61.0
- '@rollup/rollup-openharmony-arm64': 4.61.0
- '@rollup/rollup-win32-arm64-msvc': 4.61.0
- '@rollup/rollup-win32-ia32-msvc': 4.61.0
- '@rollup/rollup-win32-x64-gnu': 4.61.0
- '@rollup/rollup-win32-x64-msvc': 4.61.0
+ '@rollup/rollup-android-arm-eabi': 4.61.1
+ '@rollup/rollup-android-arm64': 4.61.1
+ '@rollup/rollup-darwin-arm64': 4.61.1
+ '@rollup/rollup-darwin-x64': 4.61.1
+ '@rollup/rollup-freebsd-arm64': 4.61.1
+ '@rollup/rollup-freebsd-x64': 4.61.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.61.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.61.1
+ '@rollup/rollup-linux-arm64-gnu': 4.61.1
+ '@rollup/rollup-linux-arm64-musl': 4.61.1
+ '@rollup/rollup-linux-loong64-gnu': 4.61.1
+ '@rollup/rollup-linux-loong64-musl': 4.61.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.61.1
+ '@rollup/rollup-linux-ppc64-musl': 4.61.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.61.1
+ '@rollup/rollup-linux-riscv64-musl': 4.61.1
+ '@rollup/rollup-linux-s390x-gnu': 4.61.1
+ '@rollup/rollup-linux-x64-gnu': 4.61.1
+ '@rollup/rollup-linux-x64-musl': 4.61.1
+ '@rollup/rollup-openbsd-x64': 4.61.1
+ '@rollup/rollup-openharmony-arm64': 4.61.1
+ '@rollup/rollup-win32-arm64-msvc': 4.61.1
+ '@rollup/rollup-win32-ia32-msvc': 4.61.1
+ '@rollup/rollup-win32-x64-gnu': 4.61.1
+ '@rollup/rollup-win32-x64-msvc': 4.61.1
fsevents: 2.3.3
rss-parser@3.13.0(patch_hash=afac79a31a3db94c953d49680bc5528468f051957d461e913d2e2dbf5cd22a8d):
@@ -11406,7 +11406,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
postcss: 8.5.15
- rollup: 4.61.0
+ rollup: 4.61.1
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 25.9.1
@@ -11527,7 +11527,7 @@ snapshots:
'@cloudflare/workerd-linux-arm64': 1.20260601.1
'@cloudflare/workerd-windows-64': 1.20260601.1
- wrangler@4.97.0(@cloudflare/workers-types@4.20260603.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10):
+ wrangler@4.97.0(@cloudflare/workers-types@4.20260604.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10):
dependencies:
'@cloudflare/kv-asset-handler': 0.5.0
'@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1)
@@ -11538,7 +11538,7 @@ snapshots:
unenv: 2.0.0-rc.24
workerd: 1.20260601.1
optionalDependencies:
- '@cloudflare/workers-types': 4.20260603.1
+ '@cloudflare/workers-types': 4.20260604.1
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil
From 4eeb5ae4ec0172d0e50722d654c79baeb9dd1628 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 21:33:21 +0800
Subject: [PATCH 014/126] chore(deps): bump devenv from `57f7e43` to `f693b47`
(#22183)
Bumps [devenv](https://github.com/cachix/devenv) from `57f7e43` to `f693b47`.
- [Release notes](https://github.com/cachix/devenv/releases)
- [Commits](https://github.com/cachix/devenv/compare/57f7e43b3c8adb43a7f3df0d393a87e6939d5141...f693b472c731e7dda69402daa88c06369d54fd3a)
---
updated-dependencies:
- dependency-name: devenv
dependency-version: f693b472c731e7dda69402daa88c06369d54fd3a
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
flake.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flake.lock b/flake.lock
index 0570de84d449..fd1d053b5677 100644
--- a/flake.lock
+++ b/flake.lock
@@ -64,11 +64,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
- "lastModified": 1780511534,
- "narHash": "sha256-AFc1M/svHCsGWO+tA/t7ZeWckFIuJpML0vJpxGW65Us=",
+ "lastModified": 1780543372,
+ "narHash": "sha256-FCGxk82Lc4koWcFw5xgr+W5vbwLVFLCnSMwm2gQOgr0=",
"owner": "cachix",
"repo": "devenv",
- "rev": "57f7e43b3c8adb43a7f3df0d393a87e6939d5141",
+ "rev": "f693b472c731e7dda69402daa88c06369d54fd3a",
"type": "github"
},
"original": {
From 6135a6db71f55abf39c2d973a561eb789b8e8707 Mon Sep 17 00:00:00 2001
From: Andvari <31068367+dzx-dzx@users.noreply.github.com>
Date: Thu, 4 Jun 2026 21:50:02 +0800
Subject: [PATCH 015/126] fix(route/apnews): Adapt to new author format
(#22184)
---
lib/routes/apnews/utils.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/routes/apnews/utils.ts b/lib/routes/apnews/utils.ts
index 083c19fb9aa7..6ccca1098359 100644
--- a/lib/routes/apnews/utils.ts
+++ b/lib/routes/apnews/utils.ts
@@ -45,7 +45,7 @@ export function fetchArticle(item) {
description: $('div.RichTextStoryBody').html() || $(':is(.VideoLead, .VideoPage-pageSubHeading)').html(),
category: [...(section ? [section] : []), ...(ldjson.keywords ?? [])],
guid: $("meta[name='brightspot.contentId']").attr('content'),
- author: ldjson.author?.map((e) => e.mainEntity),
+ author: ldjson.author,
};
} else {
// Live
From 3567ced4d2a6646311f5f8667933689a2acc63ba Mon Sep 17 00:00:00 2001
From: Cod1doc
Date: Fri, 5 Jun 2026 03:51:04 +0800
Subject: [PATCH 016/126] fix: transform json number item link (#22168)
* fix: transform json number item link
* docs(route/rsshub): use concrete json transform example
* Revert "docs(route/rsshub): use concrete json transform example"
This reverts commit e4d916451afa2207959312d999dfbc6c71919e55.
---------
Co-authored-by: jack
Co-authored-by: jack
---
lib/routes/rsshub/transform/json.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/routes/rsshub/transform/json.ts b/lib/routes/rsshub/transform/json.ts
index 0786c8f172ae..c39e979e4f95 100644
--- a/lib/routes/rsshub/transform/json.ts
+++ b/lib/routes/rsshub/transform/json.ts
@@ -93,7 +93,7 @@ async function handler(ctx) {
}
const items = jsonGet(response.data, routeParams.get('item')).map((item) => {
- let link = jsonGet(item, routeParams.get('itemLink')).trim();
+ let link = String(jsonGet(item, routeParams.get('itemLink')) ?? '').trim();
const linkPrefix = routeParams.get('itemLinkPrefix');
if (link && linkPrefix) {
From 08c3ba83f9dae83c2b16a24fce8519994dae6a99 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 5 Jun 2026 08:12:37 +0000
Subject: [PATCH 017/126] chore(deps): bump ioredis from 5.11.0 to 5.11.1
(#22191)
Bumps [ioredis](https://github.com/luin/ioredis) from 5.11.0 to 5.11.1.
- [Release notes](https://github.com/luin/ioredis/releases)
- [Changelog](https://github.com/redis/ioredis/blob/main/CHANGELOG.md)
- [Commits](https://github.com/luin/ioredis/compare/v5.11.0...v5.11.1)
---
updated-dependencies:
- dependency-name: ioredis
dependency-version: 5.11.1
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index 109a1564f554..e212440bb395 100644
--- a/package.json
+++ b/package.json
@@ -97,7 +97,7 @@
"iconv-lite": "0.7.2",
"imapflow": "1.3.5",
"instagram-private-api": "1.46.1",
- "ioredis": "5.11.0",
+ "ioredis": "5.11.1",
"ip-regex": "5.0.0",
"jsdom": "29.1.1",
"json-bigint": "1.0.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b536ceaf922e..eb3c5febb771 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -152,8 +152,8 @@ importers:
specifier: 1.46.1
version: 1.46.1
ioredis:
- specifier: 5.11.0
- version: 5.11.0
+ specifier: 5.11.1
+ version: 5.11.1
ip-regex:
specifier: 5.0.0
version: 5.0.0
@@ -3398,7 +3398,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
difflib@https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed:
- resolution: {gitHosted: true, tarball: https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed}
+ resolution: {tarball: https://codeload.github.com/postlight/difflib.js/tar.gz/32e8e38c7fcd935241b9baab71bb432fd9b166ed}
version: 0.2.6
discord-api-types@0.38.48:
@@ -4101,8 +4101,8 @@ packages:
re2:
optional: true
- ioredis@5.11.0:
- resolution: {integrity: sha512-EZBErytyVovD8f6pDfG3Kb37N6Y3lmDA9NNj+4+IP13CzzHGeX+OyeRM2Um13khRzoBSzzL+5lVnCX8V2RLeMg==}
+ ioredis@5.11.1:
+ resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==}
engines: {node: '>=12.22.0'}
ip-address@10.2.0:
@@ -9378,7 +9378,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ioredis@5.11.0:
+ ioredis@5.11.1:
dependencies:
'@ioredis/commands': 1.10.0
cluster-key-slot: 1.1.1
From 7ab88a5059e7b031712fc45c1ab334fcdfe9f48d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 5 Jun 2026 08:15:10 +0000
Subject: [PATCH 018/126] chore(deps-dev): bump tsdown from 0.22.1 to 0.22.2
(#22192)
Bumps [tsdown](https://github.com/rolldown/tsdown) from 0.22.1 to 0.22.2.
- [Release notes](https://github.com/rolldown/tsdown/releases)
- [Commits](https://github.com/rolldown/tsdown/compare/v0.22.1...v0.22.2)
---
updated-dependencies:
- dependency-name: tsdown
dependency-version: 0.22.2
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 246 ++++++++++++++++++++++---------------------------
2 files changed, 112 insertions(+), 136 deletions(-)
diff --git a/package.json b/package.json
index e212440bb395..716836e24639 100644
--- a/package.json
+++ b/package.json
@@ -199,7 +199,7 @@
"remark-gfm": "4.0.1",
"remark-pangu": "2.2.0",
"remark-parse": "11.0.0",
- "tsdown": "0.22.1",
+ "tsdown": "0.22.2",
"typescript": "5.9.3",
"unified": "11.0.5",
"vite-tsconfig-paths": "6.1.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index eb3c5febb771..7afdb4e7851f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -453,8 +453,8 @@ importers:
specifier: 11.0.0
version: 11.0.0
tsdown:
- specifier: 0.22.1
- version: 0.22.1(tsx@4.22.4)(typescript@5.9.3)(unrun@0.2.37(synckit@0.11.12))
+ specifier: 0.22.2
+ version: 0.22.2(tsx@4.22.4)(typescript@5.9.3)(unrun@0.2.37(synckit@0.11.12))
typescript:
specifier: 5.9.3
version: 5.9.3
@@ -518,8 +518,8 @@ packages:
resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@8.0.0-rc.5':
- resolution: {integrity: sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg==}
+ '@babel/generator@8.0.0-rc.6':
+ resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==}
engines: {node: ^22.18.0 || >=24.11.0}
'@babel/helper-string-parser@7.29.7':
@@ -538,10 +538,6 @@ packages:
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@8.0.0-rc.5':
- resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==}
- engines: {node: ^22.18.0 || >=24.11.0}
-
'@babel/helper-validator-identifier@8.0.0-rc.6':
resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==}
engines: {node: ^22.18.0 || >=24.11.0}
@@ -551,11 +547,6 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/parser@8.0.0-rc.4':
- resolution: {integrity: sha512-0S/1yefMa15N4i2v3t8Fw9pgMHhf2gF6Lc1UEXI96Ls6FNAjqvHHZouZ2ZS/deqLhbMFtmfVeFac6iTsvFbLwA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
-
'@babel/parser@8.0.0-rc.6':
resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==}
engines: {node: ^22.18.0 || >=24.11.0}
@@ -1796,8 +1787,8 @@ packages:
'@oxc-project/types@0.127.0':
resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
- '@oxc-project/types@0.133.0':
- resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==}
+ '@oxc-project/types@0.134.0':
+ resolution: {integrity: sha512-T0xuRRKrQFmocH8y+jGfpmSkGcheaJExY9lEihmR1Gm2aH+75B8CzgU2rABRQSzzDxLjZ15Sc0bRVLj5lVeNXQ==}
'@oxfmt/binding-android-arm-eabi@0.53.0':
resolution: {integrity: sha512-XfVM8AmIovBTKXCt14Op5wbfcoM8418nttd+nhMgM3RAVaJg1MtJc73FyWfUt0oxLyBGVwfniNVUsbV/b3VmPg==}
@@ -2150,8 +2141,8 @@ packages:
cpu: [arm64]
os: [android]
- '@rolldown/binding-android-arm64@1.0.3':
- resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==}
+ '@rolldown/binding-android-arm64@1.1.0':
+ resolution: {integrity: sha512-gCYzGOSkYY6Z034suzd20euvds7lPzMEEla62DJGE/ZAlR4OMBnNbvnBSsIGUCAr52gaWMsloGxP4tVGtN5aCA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
@@ -2162,8 +2153,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@rolldown/binding-darwin-arm64@1.0.3':
- resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==}
+ '@rolldown/binding-darwin-arm64@1.1.0':
+ resolution: {integrity: sha512-JQBD77MNgu+4Z6RAyg69acugdrhhVoWesr3l47zohYZ2YV2fwkWMArkN/2p4l6Ei+Sno7W5q+UsKdVWq5Ens0w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
@@ -2174,8 +2165,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@rolldown/binding-darwin-x64@1.0.3':
- resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==}
+ '@rolldown/binding-darwin-x64@1.1.0':
+ resolution: {integrity: sha512-p/8cXUTK4Sob604e+xxPhVSbDFf29E6J0l/xESM9rdCfn3aDai3nEs6TnMHUsdD5aNlFz0+gDbiGlozLKGa2YA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
@@ -2186,8 +2177,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@rolldown/binding-freebsd-x64@1.0.3':
- resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==}
+ '@rolldown/binding-freebsd-x64@1.1.0':
+ resolution: {integrity: sha512-KbtOSlVv6fElujiZWMcC3aQYhEwLVVf073RcwlSmpGQvIsKZFUqc0ef4sjUuurRwfbiI6JJXji9DQn+86hawmQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
@@ -2198,8 +2189,8 @@ packages:
cpu: [arm]
os: [linux]
- '@rolldown/binding-linux-arm-gnueabihf@1.0.3':
- resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.0':
+ resolution: {integrity: sha512-9fZ9i0o0/MQaw7om6Z6TsT7tfCk0jtbEFtC+aPqZL5RNsGWNcHvn6EHgL3dAprjq+AZzPTAQjg2JtpJaMt+6pg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -2211,8 +2202,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-arm64-gnu@1.0.3':
- resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==}
+ '@rolldown/binding-linux-arm64-gnu@1.1.0':
+ resolution: {integrity: sha512-+tog7T66i+yFyIuuAnjL6xmW182W/qTBOUt6BtQ6lBIM1Eikh/fSMz4HGgvuCp5uU0zuIVWng7kDYthjCMOHcg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -2225,8 +2216,8 @@ packages:
os: [linux]
libc: [musl]
- '@rolldown/binding-linux-arm64-musl@1.0.3':
- resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==}
+ '@rolldown/binding-linux-arm64-musl@1.1.0':
+ resolution: {integrity: sha512-4b7yruLIIj/oZ3GpcLOvxcLCLDMraohn3IhQfN2hBP4w9UekG0DTIajWguJosRGfySf/+h/NwRUiMKoCpxCrqQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -2239,8 +2230,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-ppc64-gnu@1.0.3':
- resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==}
+ '@rolldown/binding-linux-ppc64-gnu@1.1.0':
+ resolution: {integrity: sha512-QRDOVZd0bhQ5jLsUsCC3dUxDWdTSVY9WMznowZgCGOrZfLLgctWpelhUASEiBwsXfat/JwYnVd1EaxMhqyT+UQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
@@ -2253,8 +2244,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-s390x-gnu@1.0.3':
- resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==}
+ '@rolldown/binding-linux-s390x-gnu@1.1.0':
+ resolution: {integrity: sha512-ypxT+Hq76NFG7woFbNbySnGEajFuYuIXeKz/jfCU+lXUoxfi3zLE6OG/ZQNeK3RpZSYJlAe2bokpsQ046CaieQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
@@ -2267,8 +2258,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-x64-gnu@1.0.3':
- resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==}
+ '@rolldown/binding-linux-x64-gnu@1.1.0':
+ resolution: {integrity: sha512-IdovCmfROFmpTLahdecTDFL74aLERVYN68F/mLZjfVh6LfoplPfI6deyHNMTcVujbokDV5k05XrFO22zfv+qjg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -2281,8 +2272,8 @@ packages:
os: [linux]
libc: [musl]
- '@rolldown/binding-linux-x64-musl@1.0.3':
- resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==}
+ '@rolldown/binding-linux-x64-musl@1.1.0':
+ resolution: {integrity: sha512-pcA8xlFp2tyk9T2R6Fi/rPe3bQ1MA+sSMDNUU5Ogu80GHOatkE4P8YCreGAvZErm5Ho2YRXnyvNrWiRncfVysQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -2294,8 +2285,8 @@ packages:
cpu: [arm64]
os: [openharmony]
- '@rolldown/binding-openharmony-arm64@1.0.3':
- resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==}
+ '@rolldown/binding-openharmony-arm64@1.1.0':
+ resolution: {integrity: sha512-4+fexHayrLCWpriPh4c6dNvL4an34DEZCG7zOM/FD5QNF6h8DT+bDXzyB/kfC8lDJbaFb7jKShtnjDQFXVQEjg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
@@ -2305,8 +2296,8 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [wasm32]
- '@rolldown/binding-wasm32-wasi@1.0.3':
- resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==}
+ '@rolldown/binding-wasm32-wasi@1.1.0':
+ resolution: {integrity: sha512-SbL++MNmOw6QamrwIGDMSSfM4ceTzFr+RjbOExJSLLBinScU4WI5OdA413h1qwPw2yH7lVF1+H4svQ+6mSXKTQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [wasm32]
@@ -2316,8 +2307,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-arm64-msvc@1.0.3':
- resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==}
+ '@rolldown/binding-win32-arm64-msvc@1.1.0':
+ resolution: {integrity: sha512-+xTE6XC7wBgk0VKRXGG+QAnyW5S9b8vfsFpiMjf0waQTmSQSU8onsH/beyZ8X4aXVveJnotiy7VDjLOaW8bTrg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
@@ -2328,8 +2319,8 @@ packages:
cpu: [x64]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.0.3':
- resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==}
+ '@rolldown/binding-win32-x64-msvc@1.1.0':
+ resolution: {integrity: sha512-Ogji1TQNqH3ACLnYr+1Ns1nyrJ0CO2P585u9Hsh02pXvtFiFpgtgT2b3P4PnCOU86VVCvqtAeCN4OftMT8KU4w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -2934,8 +2925,8 @@ packages:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
- ansis@4.3.0:
- resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==}
+ ansis@4.3.1:
+ resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
engines: {node: '>=14'}
arg@5.0.2:
@@ -4757,6 +4748,10 @@ packages:
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+ obug@2.1.2:
+ resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==}
+ engines: {node: '>=12.20.0'}
+
ofetch@1.5.1:
resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
@@ -5164,8 +5159,8 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rolldown-plugin-dts@0.25.1:
- resolution: {integrity: sha512-zK82aC/8z1iVW+g0bCnlQZq04Y5bNeL/RcRwTYBwsnU6wH0N+6vpIFkN7JC0kYRS5qKA+pxQyfIPvXJ6Q5xSpQ==}
+ rolldown-plugin-dts@0.25.2:
+ resolution: {integrity: sha512-nMhN/R+vmR8GM45ZW1FWMSjRTSDDn/6w4GTf8RNrEFCBdl8B1kySWrU1ixPtbwzXoRlcO+R/S88VgXuJQwfdDg==}
engines: {node: ^22.18.0 || >=24.0.0}
peerDependencies:
'@ts-macro/tsc': ^0.3.6
@@ -5188,8 +5183,8 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- rolldown@1.0.3:
- resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==}
+ rolldown@1.1.0:
+ resolution: {integrity: sha512-zpMvlJhs5PkXRTtKc0CaLBVI9AR/VDiJFpM+kx//hgToEca7FgMlGjaRIisXBcb19T76LswgmKECSQ96hjWr5A==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -5228,8 +5223,8 @@ packages:
engines: {node: '>=10'}
hasBin: true
- semver@7.8.1:
- resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==}
+ semver@7.8.2:
+ resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==}
engines: {node: '>=10'}
hasBin: true
@@ -5454,18 +5449,10 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@1.2.2:
- resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==}
- engines: {node: '>=18'}
-
tinyexec@1.2.4:
resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
engines: {node: '>=18'}
- tinyglobby@0.2.16:
- resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
- engines: {node: '>=12.0.0'}
-
tinyglobby@0.2.17:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
@@ -5568,14 +5555,14 @@ packages:
typescript:
optional: true
- tsdown@0.22.1:
- resolution: {integrity: sha512-Ldx1jLyDFEzsN/fMBi2TBVaZe4fuEJhIiHjQhX0pV7oa5uYz5Imdivs5mNzEXOrMEtFRR6C9BQ2YqLoroffB+Q==}
+ tsdown@0.22.2:
+ resolution: {integrity: sha512-VX9gsyKXsTnBZjnIM4jsHl9aRv+GfgkE/k1hQslilaBfZMlaw3JuGR+6yhiU0QxWBtOCDnTjwOSoXzgB7Rr50g==}
engines: {node: ^22.18.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@arethetypeswrong/core': ^0.18.1
- '@tsdown/css': 0.22.1
- '@tsdown/exe': 0.22.1
+ '@tsdown/css': 0.22.2
+ '@tsdown/exe': 0.22.2
'@vitejs/devtools': '*'
publint: ^0.3.8
tsx: '*'
@@ -6191,7 +6178,7 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/generator@8.0.0-rc.5':
+ '@babel/generator@8.0.0-rc.6':
dependencies:
'@babel/parser': 8.0.0-rc.6
'@babel/types': 8.0.0-rc.6
@@ -6208,18 +6195,12 @@ snapshots:
'@babel/helper-validator-identifier@7.29.7': {}
- '@babel/helper-validator-identifier@8.0.0-rc.5': {}
-
'@babel/helper-validator-identifier@8.0.0-rc.6': {}
'@babel/parser@7.29.7':
dependencies:
'@babel/types': 7.29.7
- '@babel/parser@8.0.0-rc.4':
- dependencies:
- '@babel/types': 8.0.0-rc.6
-
'@babel/parser@8.0.0-rc.6':
dependencies:
'@babel/types': 8.0.0-rc.6
@@ -6947,7 +6928,7 @@ snapshots:
https-proxy-agent: 7.0.6
node-fetch: 2.7.0
nopt: 8.1.0
- semver: 7.8.1
+ semver: 7.8.2
tar: 7.5.15
transitivePeerDependencies:
- encoding
@@ -7168,7 +7149,7 @@ snapshots:
'@oxc-project/types@0.127.0':
optional: true
- '@oxc-project/types@0.133.0': {}
+ '@oxc-project/types@0.134.0': {}
'@oxfmt/binding-android-arm-eabi@0.53.0':
optional: true
@@ -7373,73 +7354,73 @@ snapshots:
'@rolldown/binding-android-arm64@1.0.0-rc.17':
optional: true
- '@rolldown/binding-android-arm64@1.0.3':
+ '@rolldown/binding-android-arm64@1.1.0':
optional: true
'@rolldown/binding-darwin-arm64@1.0.0-rc.17':
optional: true
- '@rolldown/binding-darwin-arm64@1.0.3':
+ '@rolldown/binding-darwin-arm64@1.1.0':
optional: true
'@rolldown/binding-darwin-x64@1.0.0-rc.17':
optional: true
- '@rolldown/binding-darwin-x64@1.0.3':
+ '@rolldown/binding-darwin-x64@1.1.0':
optional: true
'@rolldown/binding-freebsd-x64@1.0.0-rc.17':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.3':
+ '@rolldown/binding-freebsd-x64@1.1.0':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.3':
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.0':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.3':
+ '@rolldown/binding-linux-arm64-gnu@1.1.0':
optional: true
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.3':
+ '@rolldown/binding-linux-arm64-musl@1.1.0':
optional: true
'@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-ppc64-gnu@1.0.3':
+ '@rolldown/binding-linux-ppc64-gnu@1.1.0':
optional: true
'@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-s390x-gnu@1.0.3':
+ '@rolldown/binding-linux-s390x-gnu@1.1.0':
optional: true
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.3':
+ '@rolldown/binding-linux-x64-gnu@1.1.0':
optional: true
'@rolldown/binding-linux-x64-musl@1.0.0-rc.17':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.3':
+ '@rolldown/binding-linux-x64-musl@1.1.0':
optional: true
'@rolldown/binding-openharmony-arm64@1.0.0-rc.17':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.3':
+ '@rolldown/binding-openharmony-arm64@1.1.0':
optional: true
'@rolldown/binding-wasm32-wasi@1.0.0-rc.17':
@@ -7449,7 +7430,7 @@ snapshots:
'@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.3':
+ '@rolldown/binding-wasm32-wasi@1.1.0':
dependencies:
'@emnapi/core': 1.10.0
'@emnapi/runtime': 1.10.0
@@ -7459,13 +7440,13 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17':
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.0.3':
+ '@rolldown/binding-win32-arm64-msvc@1.1.0':
optional: true
'@rolldown/binding-win32-x64-msvc@1.0.0-rc.17':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.0.3':
+ '@rolldown/binding-win32-x64-msvc@1.1.0':
optional: true
'@rolldown/pluginutils@1.0.0-rc.17':
@@ -7914,7 +7895,7 @@ snapshots:
'@typescript-eslint/visitor-keys': 8.60.1
debug: 4.4.3
minimatch: 10.2.5
- semver: 7.8.1
+ semver: 7.8.2
tinyglobby: 0.2.17
ts-api-utils: 2.5.0(typescript@5.9.3)
typescript: 5.9.3
@@ -8068,7 +8049,7 @@ snapshots:
ansi-styles@6.2.3: {}
- ansis@4.3.0: {}
+ ansis@4.3.1: {}
arg@5.0.2: {}
@@ -8084,7 +8065,7 @@ snapshots:
ast-kit@3.0.0-beta.1:
dependencies:
- '@babel/parser': 8.0.0-rc.4
+ '@babel/parser': 8.0.0-rc.6
estree-walker: 3.0.3
pathe: 2.0.3
@@ -8550,7 +8531,7 @@ snapshots:
'@one-ini/wasm': 0.1.1
commander: 10.0.1
minimatch: 9.0.9
- semver: 7.8.1
+ semver: 7.8.2
electron-to-chromium@1.5.330: {}
@@ -8727,7 +8708,7 @@ snapshots:
eslint-compat-utils@0.5.1(eslint@10.4.1(jiti@2.6.1)):
dependencies:
eslint: 10.4.1(jiti@2.6.1)
- semver: 7.7.4
+ semver: 7.8.2
eslint-filtered-fix@0.3.0(eslint@10.4.1(jiti@2.6.1)):
dependencies:
@@ -9710,7 +9691,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.8.1
+ semver: 7.8.2
map-obj@4.3.0: {}
@@ -10209,6 +10190,8 @@ snapshots:
obug@2.1.1: {}
+ obug@2.1.2: {}
+
ofetch@1.5.1:
dependencies:
destr: 2.0.5
@@ -10699,17 +10682,17 @@ snapshots:
rfdc@1.4.1: {}
- rolldown-plugin-dts@0.25.1(rolldown@1.0.3)(typescript@5.9.3):
+ rolldown-plugin-dts@0.25.2(rolldown@1.1.0)(typescript@5.9.3):
dependencies:
- '@babel/generator': 8.0.0-rc.5
- '@babel/helper-validator-identifier': 8.0.0-rc.5
- '@babel/parser': 8.0.0-rc.4
+ '@babel/generator': 8.0.0-rc.6
+ '@babel/helper-validator-identifier': 8.0.0-rc.6
+ '@babel/parser': 8.0.0-rc.6
ast-kit: 3.0.0-beta.1
birpc: 4.0.0
dts-resolver: 3.0.0
get-tsconfig: 5.0.0-beta.5
- obug: 2.1.1
- rolldown: 1.0.3
+ obug: 2.1.2
+ rolldown: 1.1.0
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
@@ -10737,26 +10720,26 @@ snapshots:
'@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17
optional: true
- rolldown@1.0.3:
+ rolldown@1.1.0:
dependencies:
- '@oxc-project/types': 0.133.0
+ '@oxc-project/types': 0.134.0
'@rolldown/pluginutils': 1.0.1
optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.3
- '@rolldown/binding-darwin-arm64': 1.0.3
- '@rolldown/binding-darwin-x64': 1.0.3
- '@rolldown/binding-freebsd-x64': 1.0.3
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.3
- '@rolldown/binding-linux-arm64-gnu': 1.0.3
- '@rolldown/binding-linux-arm64-musl': 1.0.3
- '@rolldown/binding-linux-ppc64-gnu': 1.0.3
- '@rolldown/binding-linux-s390x-gnu': 1.0.3
- '@rolldown/binding-linux-x64-gnu': 1.0.3
- '@rolldown/binding-linux-x64-musl': 1.0.3
- '@rolldown/binding-openharmony-arm64': 1.0.3
- '@rolldown/binding-wasm32-wasi': 1.0.3
- '@rolldown/binding-win32-arm64-msvc': 1.0.3
- '@rolldown/binding-win32-x64-msvc': 1.0.3
+ '@rolldown/binding-android-arm64': 1.1.0
+ '@rolldown/binding-darwin-arm64': 1.1.0
+ '@rolldown/binding-darwin-x64': 1.1.0
+ '@rolldown/binding-freebsd-x64': 1.1.0
+ '@rolldown/binding-linux-arm-gnueabihf': 1.1.0
+ '@rolldown/binding-linux-arm64-gnu': 1.1.0
+ '@rolldown/binding-linux-arm64-musl': 1.1.0
+ '@rolldown/binding-linux-ppc64-gnu': 1.1.0
+ '@rolldown/binding-linux-s390x-gnu': 1.1.0
+ '@rolldown/binding-linux-x64-gnu': 1.1.0
+ '@rolldown/binding-linux-x64-musl': 1.1.0
+ '@rolldown/binding-openharmony-arm64': 1.1.0
+ '@rolldown/binding-wasm32-wasi': 1.1.0
+ '@rolldown/binding-win32-arm64-msvc': 1.1.0
+ '@rolldown/binding-win32-x64-msvc': 1.1.0
rollup@4.61.1:
dependencies:
@@ -10822,7 +10805,7 @@ snapshots:
semver@7.7.4: {}
- semver@7.8.1: {}
+ semver@7.8.2: {}
set-cookie-parser@3.1.0: {}
@@ -10830,7 +10813,7 @@ snapshots:
dependencies:
'@img/colour': 1.1.0
detect-libc: 2.1.2
- semver: 7.8.1
+ semver: 7.8.2
optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.5
@@ -11076,15 +11059,8 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@1.2.2: {}
-
tinyexec@1.2.4: {}
- tinyglobby@0.2.16:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.4)
- picomatch: 4.0.4
-
tinyglobby@0.2.17:
dependencies:
fdir: 6.5.0(picomatch@4.0.4)
@@ -11163,21 +11139,21 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- tsdown@0.22.1(tsx@4.22.4)(typescript@5.9.3)(unrun@0.2.37(synckit@0.11.12)):
+ tsdown@0.22.2(tsx@4.22.4)(typescript@5.9.3)(unrun@0.2.37(synckit@0.11.12)):
dependencies:
- ansis: 4.3.0
+ ansis: 4.3.1
cac: 7.0.0
defu: 6.1.7
empathic: 2.0.1
hookable: 6.1.1
import-without-cache: 0.4.0
- obug: 2.1.1
+ obug: 2.1.2
picomatch: 4.0.4
- rolldown: 1.0.3
- rolldown-plugin-dts: 0.25.1(rolldown@1.0.3)(typescript@5.9.3)
- semver: 7.8.1
- tinyexec: 1.2.2
- tinyglobby: 0.2.16
+ rolldown: 1.1.0
+ rolldown-plugin-dts: 0.25.2(rolldown@1.1.0)(typescript@5.9.3)
+ semver: 7.8.2
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
tree-kill: 1.2.2
unconfig-core: 7.5.0
optionalDependencies:
From 742f49e61d0ad60f206d7c8762beefc93ca5a345 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 5 Jun 2026 19:33:48 +0800
Subject: [PATCH 019/126] chore(deps-dev): bump the cloudflare group with 3
updates (#22190)
Bumps the cloudflare group with 3 updates: [@cloudflare/containers](https://github.com/cloudflare/containers), [@cloudflare/workers-types](https://github.com/cloudflare/workerd) and [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler).
Updates `@cloudflare/containers` from 0.3.6 to 0.3.7
- [Release notes](https://github.com/cloudflare/containers/releases)
- [Changelog](https://github.com/cloudflare/containers/blob/main/CHANGELOG.md)
- [Commits](https://github.com/cloudflare/containers/compare/v0.3.6...v0.3.7)
Updates `@cloudflare/workers-types` from 4.20260604.1 to 4.20260605.1
- [Release notes](https://github.com/cloudflare/workerd/releases)
- [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
- [Commits](https://github.com/cloudflare/workerd/commits)
Updates `wrangler` from 4.97.0 to 4.98.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/HEAD/packages/wrangler)
---
updated-dependencies:
- dependency-name: "@cloudflare/containers"
dependency-version: 0.3.7
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: cloudflare
- dependency-name: "@cloudflare/workers-types"
dependency-version: 4.20260605.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: cloudflare
- dependency-name: wrangler
dependency-version: 4.98.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: cloudflare
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 6 +--
pnpm-lock.yaml | 105 ++++++++++++++++++++++++++-----------------------
2 files changed, 59 insertions(+), 52 deletions(-)
diff --git a/package.json b/package.json
index 716836e24639..7098c691f57e 100644
--- a/package.json
+++ b/package.json
@@ -145,9 +145,9 @@
"@actions/core": "3.0.1",
"@actions/github": "9.1.1",
"@bbob/types": "4.3.1",
- "@cloudflare/containers": "0.3.6",
+ "@cloudflare/containers": "0.3.7",
"@cloudflare/playwright": "1.3.0",
- "@cloudflare/workers-types": "4.20260604.1",
+ "@cloudflare/workers-types": "4.20260605.1",
"@eslint/eslintrc": "3.3.5",
"@eslint/js": "10.0.1",
"@oxlint/plugins": "1.68.0",
@@ -204,7 +204,7 @@
"unified": "11.0.5",
"vite-tsconfig-paths": "6.1.1",
"vitest": "4.1.8",
- "wrangler": "4.97.0",
+ "wrangler": "4.98.0",
"yaml-eslint-parser": "2.0.0"
},
"lint-staged": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7afdb4e7851f..565988640ae9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -291,14 +291,14 @@ importers:
specifier: 4.3.1
version: 4.3.1
'@cloudflare/containers':
- specifier: 0.3.6
- version: 0.3.6
+ specifier: 0.3.7
+ version: 0.3.7
'@cloudflare/playwright':
specifier: 1.3.0
version: 1.3.0
'@cloudflare/workers-types':
- specifier: 4.20260604.1
- version: 4.20260604.1
+ specifier: 4.20260605.1
+ version: 4.20260605.1
'@eslint/eslintrc':
specifier: 3.3.5
version: 3.3.5
@@ -468,8 +468,8 @@ importers:
specifier: 4.1.8
version: 4.1.8(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(jsdom@29.1.1(@noble/hashes@2.2.0))(msw@2.13.4(@types/node@25.9.1)(typescript@5.9.3))(vite@7.3.1(@types/node@25.9.1)(jiti@2.6.1)(tsx@4.22.4)(yaml@2.9.0))
wrangler:
- specifier: 4.97.0
- version: 4.97.0(@cloudflare/workers-types@4.20260604.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ specifier: 4.98.0
+ version: 4.98.0(@cloudflare/workers-types@4.20260605.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10)
yaml-eslint-parser:
specifier: 2.0.0
version: 2.0.0
@@ -596,8 +596,8 @@ packages:
'@bufbuild/protobuf@2.11.0':
resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==}
- '@cloudflare/containers@0.3.6':
- resolution: {integrity: sha512-8RrbK/Et165gjvXccui3pgkUuySVWysTC6bJRXfgqmbCA2vAmh8pm7cAKDh2nZFR/GSjW4BgxeKpffCTD8SJEg==}
+ '@cloudflare/containers@0.3.7':
+ resolution: {integrity: sha512-DM9dm3FnIBSyiSJ1FLavKwl/lk3oAmTaynCzZQ9pZR0ncRPquSxkxd8Nu2MFILxmDDsPkxKsSNEh9mHHMty4Fw==}
'@cloudflare/kv-asset-handler@0.5.0':
resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==}
@@ -615,38 +615,38 @@ packages:
workerd:
optional: true
- '@cloudflare/workerd-darwin-64@1.20260601.1':
- resolution: {integrity: sha512-iXZBVuRbvuVqQ/63wul01hHCv/3R8G5S8zbkjfoHvyPZFynmlKTV59Hk+H8whyGwFAZuB71UJGLr+G5mJKfjWA==}
+ '@cloudflare/workerd-darwin-64@1.20260603.1':
+ resolution: {integrity: sha512-cEXDWu6V3ZrpmwWkM4OJE9AeXjdAgOY5rh8EHhcBVCuP5rxnzUbPzLtrVOHx0UUUAcCrFq0Xsa6mZKL1VUZsKQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
- '@cloudflare/workerd-darwin-arm64@1.20260601.1':
- resolution: {integrity: sha512-veGpZQGBw07Twt+Y4z3oyo+/obKHt0iWUwvDV5GOiDAYjC/zW+YGstgVzg4SHq+k1sLH3ElqL2TXx20I5WBv3Q==}
+ '@cloudflare/workerd-darwin-arm64@1.20260603.1':
+ resolution: {integrity: sha512-uBPK4LaWJNbbCYwPnUAehlHbbVulhVZPZsdcAhBPfZhHb3QAuAEPAQepO/P67R3V6Cni4YGx1fLbL8A5wwoaNA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
- '@cloudflare/workerd-linux-64@1.20260601.1':
- resolution: {integrity: sha512-n/9hDz7fPGpYF0J684+Xr5zgjcS2jdmY2Of5m6e+eQ/M9+RfR+UaU8Ee/tkA1dDC0LYQB13hfPafZG66Ff1CsA==}
+ '@cloudflare/workerd-linux-64@1.20260603.1':
+ resolution: {integrity: sha512-ht9l6/8Tk7Rp6kA4S9oFZ4X8u0VjnnFdmU/6B3fnABYKREYTKh2RdOqXqXxcp5eNJseireKnWik/hQOPK1CutQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
- '@cloudflare/workerd-linux-arm64@1.20260601.1':
- resolution: {integrity: sha512-VHRZZbexATS+n+1j3x/CZaYbIJEye0J3iIHgG0Wp+l+NrZCKQ8qi8Lq1uTV0dLJQ67FuZtJtWdQ95mm9F7Fc+A==}
+ '@cloudflare/workerd-linux-arm64@1.20260603.1':
+ resolution: {integrity: sha512-LJZ6x00rAjSrobV4m0ZW0TpH5ilBbKcWBzlH+y+KOUsIE/CpTuhAzKV43TbSnFLRX5+jrWKiz2v0hO91lPXy6A==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
- '@cloudflare/workerd-windows-64@1.20260601.1':
- resolution: {integrity: sha512-ye0C7MFLkeH16iTo8Tcjv2KiFmp23+sZGvUzSQa4xhP0QMe6EoJ+H/4SqqvnZ5nfN54slqKvx2VnXceENWe2CQ==}
+ '@cloudflare/workerd-windows-64@1.20260603.1':
+ resolution: {integrity: sha512-DvwqkXMAJRPoDN4PxapAwhlz/6ouD+6R1ttbAEK3cWD/QBvFF5STx7Ds/9Irf+rBly3np3uHWkeX+wZnNFEuzA==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
- '@cloudflare/workers-types@4.20260604.1':
- resolution: {integrity: sha512-nVTydUwPcz9WfwZ/6xAmqs8uUVeGbDVmyPvSYrYAo4CQTyi0122SoE1Suw8RvqnN60XXHPChAjDqSIjnr/mbmg==}
+ '@cloudflare/workers-types@4.20260605.1':
+ resolution: {integrity: sha512-9YJaGPQwuQYFHoElVhJP40ZmUO/Z2OiBon58sKpHjgwq5btC/B2BZLC45AQ14k+1I+hjcY2z2t2R6uUxU9AqwQ==}
'@colors/colors@1.6.0':
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
@@ -4589,8 +4589,8 @@ packages:
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- miniflare@4.20260601.0:
- resolution: {integrity: sha512-56TFiulSEQu43cYxdXgCiA3U3i+Ls0NoXwJXd6DmpNsx8yl/1Il2T3DQ4CMXjR6yfE7CSvC5MuXaqcSAMREjgw==}
+ miniflare@4.20260603.0:
+ resolution: {integrity: sha512-+kMQYB82gC8MPOuojHur3icQsUeZUEJ+Sphuo5rVC3Ri9txBLAW/mH33b9OVrpmkogQeaaqPS4tPtugJZhk5Kw==}
engines: {node: '>=22.0.0'}
hasBin: true
@@ -5228,6 +5228,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.8.2:
+ resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
set-cookie-parser@3.1.0:
resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==}
@@ -5958,17 +5963,17 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
- workerd@1.20260601.1:
- resolution: {integrity: sha512-Bg4+HF3B8TW0urAv8chiz25HSQ/aJxMBjgheUzu/nB1NQa+CaKGrUPv+Z3bf0np/WxLHYW1kcseVEtzZVPbX4g==}
+ workerd@1.20260603.1:
+ resolution: {integrity: sha512-NPcbhI1++CS+fnELyXtsIR52en+5kwr/OrKeiQeYXGy10HxmPdsQBv9N+DU7hJIOOmBHhOGAAsoGDjyiQ2YCaA==}
engines: {node: '>=16'}
hasBin: true
- wrangler@4.97.0:
- resolution: {integrity: sha512-jzW/aNvjerV+4TmwbvwGY6lpcuBk7EFUTonMDNfci45wSmMTj2/OJN+83cc/CeepKdb+6ZjGJw9NRjmcQoxqRg==}
+ wrangler@4.98.0:
+ resolution: {integrity: sha512-cXfFUuF4rMIvE0hiMnXjEAB27ERryaCgquBJdUoPIjFzYYE1rbRdMUkEdQ18qDPUtsPvhJdqxLntixT9OfSzQw==}
engines: {node: '>=22.0.0'}
hasBin: true
peerDependencies:
- '@cloudflare/workers-types': ^4.20260601.1
+ '@cloudflare/workers-types': ^4.20260603.1
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -6261,34 +6266,34 @@ snapshots:
'@bufbuild/protobuf@2.11.0': {}
- '@cloudflare/containers@0.3.6': {}
+ '@cloudflare/containers@0.3.7': {}
'@cloudflare/kv-asset-handler@0.5.0': {}
'@cloudflare/playwright@1.3.0': {}
- '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1)':
+ '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260603.1)':
dependencies:
unenv: 2.0.0-rc.24
optionalDependencies:
- workerd: 1.20260601.1
+ workerd: 1.20260603.1
- '@cloudflare/workerd-darwin-64@1.20260601.1':
+ '@cloudflare/workerd-darwin-64@1.20260603.1':
optional: true
- '@cloudflare/workerd-darwin-arm64@1.20260601.1':
+ '@cloudflare/workerd-darwin-arm64@1.20260603.1':
optional: true
- '@cloudflare/workerd-linux-64@1.20260601.1':
+ '@cloudflare/workerd-linux-64@1.20260603.1':
optional: true
- '@cloudflare/workerd-linux-arm64@1.20260601.1':
+ '@cloudflare/workerd-linux-arm64@1.20260603.1':
optional: true
- '@cloudflare/workerd-windows-64@1.20260601.1':
+ '@cloudflare/workerd-windows-64@1.20260603.1':
optional: true
- '@cloudflare/workers-types@4.20260604.1': {}
+ '@cloudflare/workers-types@4.20260605.1': {}
'@colors/colors@1.6.0': {}
@@ -10038,12 +10043,12 @@ snapshots:
mimic-response@4.0.0: {}
- miniflare@4.20260601.0(bufferutil@4.1.0)(utf-8-validate@5.0.10):
+ miniflare@4.20260603.0(bufferutil@4.1.0)(utf-8-validate@5.0.10):
dependencies:
'@cspotcode/source-map-support': 0.8.1
sharp: 0.34.5
undici: 7.24.8
- workerd: 1.20260601.1
+ workerd: 1.20260603.1
ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)
youch: 4.1.0-beta.10
transitivePeerDependencies:
@@ -10807,6 +10812,8 @@ snapshots:
semver@7.8.2: {}
+ semver@7.8.2: {}
+
set-cookie-parser@3.1.0: {}
sharp@0.34.5:
@@ -11495,26 +11502,26 @@ snapshots:
word-wrap@1.2.5: {}
- workerd@1.20260601.1:
+ workerd@1.20260603.1:
optionalDependencies:
- '@cloudflare/workerd-darwin-64': 1.20260601.1
- '@cloudflare/workerd-darwin-arm64': 1.20260601.1
- '@cloudflare/workerd-linux-64': 1.20260601.1
- '@cloudflare/workerd-linux-arm64': 1.20260601.1
- '@cloudflare/workerd-windows-64': 1.20260601.1
+ '@cloudflare/workerd-darwin-64': 1.20260603.1
+ '@cloudflare/workerd-darwin-arm64': 1.20260603.1
+ '@cloudflare/workerd-linux-64': 1.20260603.1
+ '@cloudflare/workerd-linux-arm64': 1.20260603.1
+ '@cloudflare/workerd-windows-64': 1.20260603.1
- wrangler@4.97.0(@cloudflare/workers-types@4.20260604.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10):
+ wrangler@4.98.0(@cloudflare/workers-types@4.20260605.1)(bufferutil@4.1.0)(utf-8-validate@5.0.10):
dependencies:
'@cloudflare/kv-asset-handler': 0.5.0
- '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1)
+ '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260603.1)
blake3-wasm: 2.1.5
esbuild: 0.27.3
- miniflare: 4.20260601.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ miniflare: 4.20260603.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.24
- workerd: 1.20260601.1
+ workerd: 1.20260603.1
optionalDependencies:
- '@cloudflare/workers-types': 4.20260604.1
+ '@cloudflare/workers-types': 4.20260605.1
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil
From 433c3ad12d938b14d17ae71426d69b69fa1d764f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 5 Jun 2026 19:36:37 +0800
Subject: [PATCH 020/126] chore(deps): bump devenv from `f693b47` to `90ed622`
(#22193)
Bumps [devenv](https://github.com/cachix/devenv) from `f693b47` to `90ed622`.
- [Release notes](https://github.com/cachix/devenv/releases)
- [Commits](https://github.com/cachix/devenv/compare/f693b472c731e7dda69402daa88c06369d54fd3a...90ed6227ab389dd4e874a69a724f25dba312b754)
---
updated-dependencies:
- dependency-name: devenv
dependency-version: 90ed6227ab389dd4e874a69a724f25dba312b754
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
flake.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flake.lock b/flake.lock
index fd1d053b5677..dbe055057f10 100644
--- a/flake.lock
+++ b/flake.lock
@@ -64,11 +64,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
- "lastModified": 1780543372,
- "narHash": "sha256-FCGxk82Lc4koWcFw5xgr+W5vbwLVFLCnSMwm2gQOgr0=",
+ "lastModified": 1780630679,
+ "narHash": "sha256-hhQyVAYmNKziZ0T+T4Gsk0PYmnz4vdzOzpkJAmDASKM=",
"owner": "cachix",
"repo": "devenv",
- "rev": "f693b472c731e7dda69402daa88c06369d54fd3a",
+ "rev": "90ed6227ab389dd4e874a69a724f25dba312b754",
"type": "github"
},
"original": {
From bedeb4edaac3b7628e6f45bcf614e024cf8ac6ec Mon Sep 17 00:00:00 2001
From: TonyRL
Date: Fri, 5 Jun 2026 12:01:56 +0000
Subject: [PATCH 021/126] chore: fix pnpm lock
---
pnpm-lock.yaml | 183 +++++++------------------------------------------
1 file changed, 25 insertions(+), 158 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 565988640ae9..1d66ca14c9a9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -530,10 +530,6 @@ packages:
resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==}
engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-validator-identifier@7.28.5':
- resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-identifier@7.29.7':
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
@@ -1225,10 +1221,6 @@ packages:
resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/plugin-kit@0.7.1':
- resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
'@eslint/plugin-kit@0.7.2':
resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
@@ -2117,9 +2109,6 @@ packages:
'@protobufjs/float@1.0.2':
resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
- '@protobufjs/inquire@1.1.0':
- resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
-
'@protobufjs/inquire@1.1.1':
resolution: {integrity: sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==}
@@ -2641,9 +2630,6 @@ packages:
'@types/esrecurse@4.3.1':
resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
'@types/estree@1.0.9':
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
@@ -2790,10 +2776,6 @@ packages:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.58.0':
- resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/types@8.60.1':
resolution: {integrity: sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -2899,9 +2881,6 @@ packages:
resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==}
engines: {node: '>= 20'}
- ajv@6.14.0:
- resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
-
ajv@6.15.0:
resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
@@ -3082,10 +3061,6 @@ packages:
resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
engines: {node: '>=14.16'}
- cacheable-request@13.0.18:
- resolution: {integrity: sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==}
- engines: {node: '>=18'}
-
cacheable-request@13.0.19:
resolution: {integrity: sha512-SVXGH037+Mo1aIMO5B2UcleR43FGjFdN+M8JObSyEoQ2Mn4CODRWx28gN5jiTF0n5ItsgtIZfyargMNs8GX4kg==}
engines: {node: '>=18'}
@@ -4745,9 +4720,6 @@ packages:
oauth-sign@0.9.0:
resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
- obug@2.1.1:
- resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
-
obug@2.1.2:
resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==}
engines: {node: '>=12.20.0'}
@@ -4959,10 +4931,6 @@ packages:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
- postcss@8.5.14:
- resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==}
- engines: {node: ^10 || ^12 || >=14}
-
postcss@8.5.15:
resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14}
@@ -5218,16 +5186,6 @@ packages:
selderee@0.12.0:
resolution: {integrity: sha512-b1YMh3+DHZp59DLna3qVwQ5iOla/nrI6mLBNW02XxU77M3046Df6VLkoaJyFz20VsGIG5kkp+FK0kg4K4HnUFw==}
- semver@7.7.4:
- resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
- engines: {node: '>=10'}
- hasBin: true
-
- semver@7.8.2:
- resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==}
- engines: {node: '>=10'}
- hasBin: true
-
semver@7.8.2:
resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==}
engines: {node: '>=10'}
@@ -5285,10 +5243,6 @@ packages:
resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
engines: {node: '>= 14'}
- socks@2.8.7:
- resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
- engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
-
socks@2.8.9:
resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
@@ -5638,14 +5592,6 @@ packages:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
- type-fest@5.5.0:
- resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==}
- engines: {node: '>=20'}
-
- type-fest@5.6.0:
- resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
- engines: {node: '>=20'}
-
type-fest@5.7.0:
resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==}
engines: {node: '>=20'}
@@ -5683,8 +5629,8 @@ packages:
undici-types@7.25.0:
resolution: {integrity: sha512-AXNgS1Byr27fTI+2bsPEkV9CxkT8H6xNyRI68b3TatlZo3RkzlqQBLL+w7SmGPVpokjHbcuNVQUWE7FRTg+LRA==}
- undici@6.26.0:
- resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==}
+ undici@6.25.0:
+ resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==}
engines: {node: '>=18.17'}
undici@7.24.8:
@@ -6004,18 +5950,6 @@ packages:
ws@0.7.2:
resolution: {integrity: sha512-8mJ1Ku743qD/PKmO9Dg+y7BXTwzUgKdXguecfIyOVHFmez4JMqMF+V+M684btmQXHlwzyrJqRl3NYDltGDf6CQ==}
- ws@8.20.0:
- resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
ws@8.20.1:
resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==}
engines: {node: '>=10.0.0'}
@@ -6066,11 +6000,6 @@ packages:
resolution: {integrity: sha512-h0uDm97wvT2bokfwwTmY6kJ1hp6YDFL0nRHwNKz8s/VD1FH/vvZjAKoMUE+un0eaYBSG7/c6h+lJTP+31tjgTw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- yaml@2.8.3:
- resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
- engines: {node: '>= 14.6'}
- hasBin: true
-
yaml@2.9.0:
resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
engines: {node: '>= 14.6'}
@@ -6138,17 +6067,17 @@ snapshots:
'@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6)
'@octokit/request': 10.0.8
'@octokit/request-error': 7.1.0
- undici: 6.26.0
+ undici: 6.25.0
'@actions/http-client@3.0.2':
dependencies:
tunnel: 0.0.6
- undici: 6.26.0
+ undici: 6.25.0
'@actions/http-client@4.0.1':
dependencies:
tunnel: 0.0.6
- undici: 6.26.0
+ undici: 6.25.0
'@actions/io@3.0.2': {}
@@ -6179,7 +6108,7 @@ snapshots:
'@babel/code-frame@7.29.0':
dependencies:
- '@babel/helper-validator-identifier': 7.28.5
+ '@babel/helper-validator-identifier': 7.29.7
js-tokens: 4.0.0
picocolors: 1.1.1
@@ -6196,8 +6125,6 @@ snapshots:
'@babel/helper-string-parser@8.0.0-rc.6': {}
- '@babel/helper-validator-identifier@7.28.5': {}
-
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/helper-validator-identifier@8.0.0-rc.6': {}
@@ -6618,7 +6545,7 @@ snapshots:
'@eslint/eslintrc@3.3.5':
dependencies:
- ajv: 6.14.0
+ ajv: 6.15.0
debug: 4.4.3
espree: 10.4.0
globals: 14.0.0
@@ -6636,11 +6563,6 @@ snapshots:
'@eslint/object-schema@3.0.5': {}
- '@eslint/plugin-kit@0.7.1':
- dependencies:
- '@eslint/core': 1.2.1
- levn: 0.4.1
-
'@eslint/plugin-kit@0.7.2':
dependencies:
'@eslint/core': 1.2.1
@@ -7338,12 +7260,10 @@ snapshots:
'@protobufjs/fetch@1.1.0':
dependencies:
'@protobufjs/aspromise': 1.1.2
- '@protobufjs/inquire': 1.1.0
+ '@protobufjs/inquire': 1.1.1
'@protobufjs/float@1.0.2': {}
- '@protobufjs/inquire@1.1.0': {}
-
'@protobufjs/inquire@1.1.1': {}
'@protobufjs/path@1.1.2': {}
@@ -7655,7 +7575,7 @@ snapshots:
'@stylistic/eslint-plugin@5.10.0(eslint@10.4.1(jiti@2.6.1))':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.6.1))
- '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/types': 8.60.1
eslint: 10.4.1(jiti@2.6.1)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -7703,13 +7623,11 @@ snapshots:
'@types/eslint@9.6.1':
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
'@types/json-schema': 7.0.15
'@types/esrecurse@4.3.1': {}
- '@types/estree@1.0.8': {}
-
'@types/estree@1.0.9': {}
'@types/etag@1.8.4':
@@ -7888,8 +7806,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.58.0': {}
-
'@typescript-eslint/types@8.60.1': {}
'@typescript-eslint/typescript-estree@8.60.1(typescript@5.9.3)':
@@ -7951,7 +7867,7 @@ snapshots:
istanbul-lib-report: 3.0.1
istanbul-reports: 3.2.0
magicast: 0.5.3
- obug: 2.1.1
+ obug: 2.1.2
std-env: 4.1.0
tinyrainbow: 3.1.0
vitest: 4.1.8(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(jsdom@29.1.1(@noble/hashes@2.2.0))(msw@2.13.4(@types/node@25.9.1)(typescript@5.9.3))(vite@7.3.1(@types/node@25.9.1)(jiti@2.6.1)(tsx@4.22.4)(yaml@2.9.0))
@@ -8026,13 +7942,6 @@ snapshots:
agent-base@9.0.0: {}
- ajv@6.14.0:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
-
ajv@6.15.0:
dependencies:
fast-deep-equal: 3.1.3
@@ -8189,16 +8098,6 @@ snapshots:
cacheable-lookup@7.0.0: {}
- cacheable-request@13.0.18:
- dependencies:
- '@types/http-cache-semantics': 4.2.0
- get-stream: 9.0.1
- http-cache-semantics: 4.2.0
- keyv: 5.6.0
- mimic-response: 4.0.0
- normalize-url: 8.1.1
- responselike: 4.0.2
-
cacheable-request@13.0.19:
dependencies:
'@types/http-cache-semantics': 4.2.0
@@ -8751,7 +8650,7 @@ snapshots:
globals: 15.15.0
globrex: 0.1.2
ignore: 5.3.2
- semver: 7.7.4
+ semver: 7.8.2
optionalDependencies:
ts-declaration-location: 1.0.7(typescript@5.9.3)
typescript: 5.9.3
@@ -8762,7 +8661,7 @@ snapshots:
eslint-plugin-unicorn@64.0.0(eslint@10.4.1(jiti@2.6.1)):
dependencies:
- '@babel/helper-validator-identifier': 7.28.5
+ '@babel/helper-validator-identifier': 7.29.7
'@eslint-community/eslint-utils': 4.9.1(eslint@10.4.1(jiti@2.6.1))
change-case: 5.4.4
ci-info: 4.4.0
@@ -8777,13 +8676,13 @@ snapshots:
pluralize: 8.0.0
regexp-tree: 0.1.27
regjsparser: 0.13.0
- semver: 7.7.4
+ semver: 7.8.2
strip-indent: 4.1.1
eslint-plugin-yml@3.4.0(eslint@10.4.1(jiti@2.6.1)):
dependencies:
'@eslint/core': 1.2.1
- '@eslint/plugin-kit': 0.7.1
+ '@eslint/plugin-kit': 0.7.2
'@ota-meshi/ast-token-store': 0.3.0
diff-sequences: 29.6.3
escape-string-regexp: 5.0.0
@@ -9157,14 +9056,14 @@ snapshots:
'@sindresorhus/is': 8.0.0
byte-counter: 0.1.0
cacheable-lookup: 7.0.0
- cacheable-request: 13.0.18
+ cacheable-request: 13.0.19
chunk-data: 0.1.0
decompress-response: 10.0.0
http2-wrapper: 2.2.1
keyv: 5.6.0
lowercase-keys: 4.0.1
responselike: 4.0.2
- type-fest: 5.6.0
+ type-fest: 5.7.0
uint8array-extras: 1.5.0
graceful-fs@4.2.11: {}
@@ -10102,7 +10001,7 @@ snapshots:
statuses: 2.0.2
strict-event-emitter: 0.5.1
tough-cookie: 6.0.1
- type-fest: 5.5.0
+ type-fest: 5.7.0
until-async: 3.0.2
yargs: 17.7.2
optionalDependencies:
@@ -10156,7 +10055,7 @@ snapshots:
inspector: 0.5.0
open: 8.4.2
undici: 8.3.0
- ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)
transitivePeerDependencies:
- utf-8-validate
@@ -10193,8 +10092,6 @@ snapshots:
oauth-sign@0.9.0: {}
- obug@2.1.1: {}
-
obug@2.1.2: {}
ofetch@1.5.1:
@@ -10446,12 +10343,6 @@ snapshots:
pluralize@8.0.0: {}
- postcss@8.5.14:
- dependencies:
- nanoid: 3.3.12
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
postcss@8.5.15:
dependencies:
nanoid: 3.3.12
@@ -10796,7 +10687,7 @@ snapshots:
is-plain-object: 5.0.0
launder: 1.7.1
parse-srcset: 1.0.2
- postcss: 8.5.14
+ postcss: 8.5.15
sax@1.6.0: {}
@@ -10808,10 +10699,6 @@ snapshots:
dependencies:
parseley: 0.13.1
- semver@7.7.4: {}
-
- semver@7.8.2: {}
-
semver@7.8.2: {}
set-cookie-parser@3.1.0: {}
@@ -10882,7 +10769,7 @@ snapshots:
dependencies:
agent-base: 9.0.0
debug: 4.4.3
- socks: 2.8.7
+ socks: 2.8.9
transitivePeerDependencies:
- supports-color
@@ -10894,11 +10781,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- socks@2.8.7:
- dependencies:
- ip-address: 10.2.0
- smart-buffer: 4.2.0
-
socks@2.8.9:
dependencies:
ip-address: 10.2.0
@@ -11041,7 +10923,7 @@ snapshots:
pako: 2.1.0
path-browserify: 1.0.1
real-cancellable-promise: 1.2.3
- socks: 2.8.7
+ socks: 2.8.9
store2: 2.14.4
ts-custom-error: 3.3.1
websocket: 1.0.35
@@ -11207,14 +11089,6 @@ snapshots:
type-fest@4.41.0: {}
- type-fest@5.5.0:
- dependencies:
- tagged-tag: 1.0.0
-
- type-fest@5.6.0:
- dependencies:
- tagged-tag: 1.0.0
-
type-fest@5.7.0:
dependencies:
tagged-tag: 1.0.0
@@ -11244,7 +11118,7 @@ snapshots:
undici-types@7.25.0: {}
- undici@6.26.0: {}
+ undici@6.25.0: {}
undici@7.24.8: {}
@@ -11410,7 +11284,7 @@ snapshots:
es-module-lexer: 2.1.0
expect-type: 1.3.0
magic-string: 0.30.21
- obug: 2.1.1
+ obug: 2.1.2
pathe: 2.0.3
picomatch: 4.0.4
std-env: 4.1.0
@@ -11571,11 +11445,6 @@ snapshots:
bufferutil: 1.1.0
utf-8-validate: 1.1.0
- ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10):
- optionalDependencies:
- bufferutil: 4.1.0
- utf-8-validate: 5.0.10
-
ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@5.0.10):
optionalDependencies:
bufferutil: 4.1.0
@@ -11607,9 +11476,7 @@ snapshots:
yaml-eslint-parser@2.0.0:
dependencies:
eslint-visitor-keys: 5.0.1
- yaml: 2.8.3
-
- yaml@2.8.3: {}
+ yaml: 2.9.0
yaml@2.9.0: {}
From 75d43dd0868d3a169cb0bc94eabf354d26af5e9c Mon Sep 17 00:00:00 2001
From: Tony
Date: Fri, 5 Jun 2026 20:04:39 +0800
Subject: [PATCH 022/126] chore: add eslint-plugin-regexp (#22189)
* chore: add eslint-plugin-regexp
* chore: autofix
* chore: fix no-useless-flag
* chore: fix optimal-lookaround-quantifier
* chore: fix no-lazy-ends
* chore: fix no-contradiction-with-assertion
* chore: fix no-useless-assertions
* chore: fix no-useless-quantifier
* chore: fix remaining regexp issues
* fix: regex for WFU news link validation
---
.oxlintrc.json | 73 +++++++++++++++++--
lib/middleware/anti-hotlink.ts | 4 +-
lib/middleware/template.tsx | 5 +-
lib/routes/12371/zxfb.ts | 2 +-
lib/routes/163/news/special.ts | 4 +-
lib/routes/163/open/vip.tsx | 2 +-
lib/routes/2048/index.tsx | 2 +-
lib/routes/36kr/hot-list.ts | 2 +-
lib/routes/36kr/index.ts | 4 +-
lib/routes/36kr/utils.ts | 2 +-
lib/routes/3dmgame/utils.ts | 2 +-
lib/routes/4ksj/forum.tsx | 2 +-
lib/routes/69shu/article.ts | 6 +-
lib/routes/6park/index.ts | 2 +-
lib/routes/6park/news.ts | 2 +-
lib/routes/9to5/utils.ts | 2 +-
lib/routes/abc/index.ts | 4 +-
lib/routes/acfun/video.ts | 2 +-
lib/routes/aip/journal.ts | 2 +-
lib/routes/altotrain/news.ts | 2 +-
lib/routes/anthropic/research.ts | 2 +-
lib/routes/aqara/news.ts | 2 +-
lib/routes/arcteryx/regear-new-arrivals.tsx | 2 +-
lib/routes/bbc/utils.tsx | 2 +-
lib/routes/bilibili/cache.ts | 4 +-
lib/routes/bjsk/index.ts | 3 +-
lib/routes/bjtu/gs.ts | 2 +-
lib/routes/bjwxdxh/index.ts | 2 +-
lib/routes/bloomberg/utils.ts | 2 +-
lib/routes/booru/mmda.ts | 2 +-
lib/routes/bse/index.ts | 2 +-
lib/routes/caixin/category.ts | 2 +-
lib/routes/caixin/utils-fulltext.ts | 2 +-
lib/routes/cas/sim/kyjz.ts | 2 +-
lib/routes/chinaratings/credit-research.ts | 2 +-
lib/routes/chnmus/exhibition.tsx | 2 +-
lib/routes/cih-index/report.ts | 2 +-
lib/routes/cisia/index.ts | 2 +-
lib/routes/cline/blog.ts | 2 +-
lib/routes/cool18/index.ts | 2 +-
lib/routes/ctinews/topic.ts | 2 +-
lib/routes/dailypush/utils.ts | 2 +-
lib/routes/daum/potplayer.ts | 6 +-
lib/routes/dayanzai/index.ts | 2 +-
lib/routes/dcard/utils.ts | 2 +-
lib/routes/dealstreetasia/home.ts | 2 +-
lib/routes/dedao/knowledge.tsx | 2 +-
lib/routes/dedao/user.tsx | 2 +-
lib/routes/dehenglaw/index.ts | 2 +-
lib/routes/dianping/user.ts | 2 +-
lib/routes/dlnews/category.tsx | 2 +-
lib/routes/dnaindia/common.ts | 2 +-
lib/routes/domp4/detail.ts | 2 +-
lib/routes/dongqiudi/utils.ts | 2 +-
lib/routes/dora-world/article.ts | 2 +-
lib/routes/douban/other/replied.ts | 2 +-
lib/routes/douban/other/replies.ts | 2 +-
lib/routes/dribbble/utils.tsx | 2 +-
lib/routes/ehentai/ehapi.ts | 2 +-
lib/routes/fanqienovel/page.ts | 2 +-
lib/routes/flashcat/blog.ts | 34 ++++-----
lib/routes/gamer/ani/anime.ts | 2 +-
lib/routes/getitfree/index.ts | 2 +-
lib/routes/gigazine/en.ts | 2 +-
lib/routes/globallawreview/index.ts | 2 +-
lib/routes/google/album.ts | 2 +-
lib/routes/google/scholar.ts | 2 +-
lib/routes/gov/beijing/kw/index.ts | 4 +-
lib/routes/gov/cac/index.ts | 2 +-
lib/routes/gov/ccdi/utils.ts | 2 +-
lib/routes/gov/cn/news/index.ts | 8 +-
lib/routes/gov/general/general.ts | 4 +-
lib/routes/gov/guangdong/tqyb/tfxtq.tsx | 2 +-
lib/routes/gov/miit/wjfb.ts | 2 +-
lib/routes/gov/miit/yjzj.ts | 2 +-
lib/routes/gov/mofcom/article.ts | 2 +-
lib/routes/gov/nrta/news.ts | 2 +-
lib/routes/gov/nsfc/index.ts | 2 +-
lib/routes/gov/stats/index.tsx | 2 +-
lib/routes/gov/zhengce/govall.ts | 2 +-
lib/routes/gov/zj/ningbogzw-notice.ts | 2 +-
lib/routes/gov/zj/ningborsjnotice.ts | 2 +-
lib/routes/guancha/personalpage.ts | 2 +-
lib/routes/hk01/utils.tsx | 2 +-
lib/routes/hkej/index.tsx | 2 +-
lib/routes/hongkong/chp.ts | 2 +-
lib/routes/hpoi/utils.ts | 4 +-
lib/routes/hupu/utils.ts | 4 +-
lib/routes/hypergryph/arknights/arktca.ts | 2 +-
lib/routes/ifeng/feng.ts | 2 +-
lib/routes/ifeng/news.tsx | 6 +-
lib/routes/inewsweek/index.ts | 2 +-
lib/routes/iwara/utils.ts | 2 +-
lib/routes/ixigua/user-video.tsx | 2 +-
lib/routes/jandan/utils.ts | 2 +-
lib/routes/javbus/index.tsx | 4 +-
lib/routes/jiemian/common.tsx | 2 +-
lib/routes/jike/user.ts | 2 +-
lib/routes/jike/utils.ts | 2 +-
lib/routes/jimmyspa/books.ts | 2 +-
lib/routes/kunchengblog/essay.ts | 2 +-
.../leetcode/dailyquestion-solution-cn.ts | 2 +-
lib/routes/lfsyd/utils.tsx | 2 +-
lib/routes/line/utils.ts | 2 +-
lib/routes/lorientlejour/index.tsx | 2 +-
lib/routes/luolei/index.tsx | 2 +-
lib/routes/magazinelib/latest-magazine.tsx | 2 +-
lib/routes/mastodon/utils.ts | 4 +-
lib/routes/maven/central.ts | 2 +-
lib/routes/metacritic/index.tsx | 2 +-
lib/routes/meteor/utils.ts | 2 +-
lib/routes/mirror/index.ts | 2 +-
lib/routes/modelscope/community.tsx | 2 +-
lib/routes/mrinalxdev/blog.ts | 2 +-
lib/routes/mydrivers/index.tsx | 2 +-
lib/routes/mydrivers/rank.ts | 2 +-
lib/routes/natgeo/dailyphoto.tsx | 2 +-
.../nationalgeographic/latest-stories.tsx | 2 +-
lib/routes/nature/utils.ts | 2 +-
lib/routes/ncpssd/newlist.ts | 2 +-
lib/routes/neu/yz.ts | 2 +-
lib/routes/nga/forum.ts | 4 +-
lib/routes/nga/post.ts | 36 ++++-----
lib/routes/nhentai/util.tsx | 2 +-
lib/routes/nikkei/cn/index.ts | 2 +-
lib/routes/nintendo/eshop-hk.ts | 4 +-
lib/routes/nintendo/system-update.ts | 2 +-
lib/routes/nowcoder/discuss.ts | 2 +-
lib/routes/odaily/activity.ts | 2 +-
lib/routes/odaily/post.ts | 2 +-
lib/routes/oeeee/utils.ts | 2 +-
lib/routes/outagereport/index.ts | 4 +-
lib/routes/papers/category.ts | 2 +-
lib/routes/parliament/section77.ts | 4 +-
lib/routes/patreon/feed.tsx | 2 +-
lib/routes/pixiv/novel-api/content/utils.ts | 4 +-
lib/routes/playno1/av.ts | 2 +-
lib/routes/qingting/channel.ts | 2 +-
lib/routes/qingting/podcast.ts | 2 +-
lib/routes/quantamagazine/archive.ts | 6 +-
lib/routes/rawkuma/manga.tsx | 2 +-
lib/routes/readhub/index.ts | 2 +-
lib/routes/readhub/util.ts | 2 +-
lib/routes/reuters/common.tsx | 4 +-
lib/routes/runyeah/posts.ts | 2 +-
lib/routes/shisu/en.ts | 4 +-
lib/routes/sina/utils.tsx | 2 +-
lib/routes/sis001/common.ts | 4 +-
lib/routes/smartlink/index.ts | 2 +-
lib/routes/sohu/mobile.ts | 2 +-
lib/routes/sohu/mp.tsx | 2 +-
lib/routes/solidot/_article.ts | 2 +-
lib/routes/sony/downloads.ts | 2 +-
lib/routes/steam/curator.tsx | 2 +-
lib/routes/steam/news.ts | 6 +-
lib/routes/steam/workshop-search.tsx | 2 +-
lib/routes/supchina/index.ts | 4 +-
lib/routes/swjtu/gsee/yjs.ts | 2 +-
lib/routes/swjtu/scai.ts | 2 +-
lib/routes/swjtu/sports.ts | 2 +-
lib/routes/swpu/utils.ts | 2 +-
lib/routes/szse/disclosure/listed-notice.ts | 2 +-
lib/routes/tass/news.ts | 2 +-
lib/routes/tencent/news/author.tsx | 2 +-
lib/routes/tesla/cx.ts | 2 +-
lib/routes/threads/utils.ts | 2 +-
lib/routes/transcriptforest/index.ts | 2 +-
.../twitter/api/web-api/gql-id-resolver.ts | 2 +-
lib/routes/twitter/utils.ts | 2 +-
lib/routes/txrjy/fornumtopic.tsx | 4 +-
lib/routes/udn/breaking-news.tsx | 4 +-
lib/routes/upc/jwc.ts | 2 +-
lib/routes/ups/track.ts | 4 +-
lib/routes/uptimerobot/rss.tsx | 2 +-
lib/routes/vcb-s/category.ts | 2 +-
lib/routes/vcb-s/index.ts | 2 +-
lib/routes/weibo/utils.ts | 6 +-
lib/routes/wenku8/volume.ts | 2 +-
lib/routes/wfu/news.ts | 2 +-
lib/routes/wikipedia/current-events.ts | 8 +-
lib/routes/wmc-bj/publish.tsx | 2 +-
lib/routes/wnacg/common.tsx | 2 +-
lib/routes/wordpress/index.ts | 4 +-
lib/routes/wsj/news.ts | 2 +-
lib/routes/xaufe/jiaowu.ts | 2 +-
lib/routes/xhamster/index.ts | 2 +-
lib/routes/xinpianchang/index.ts | 2 +-
lib/routes/xueqiu/snb.ts | 2 +-
lib/routes/xueqiu/user.ts | 2 +-
lib/routes/xys/new.tsx | 2 +-
lib/routes/yamibo/utils.ts | 6 +-
lib/routes/yicai/utils.ts | 2 +-
lib/routes/ynet/list.ts | 2 +-
lib/routes/youtube/api/google.ts | 2 +-
lib/routes/youtube/community.tsx | 2 +-
lib/routes/youtube/custom.ts | 2 +-
lib/routes/zaker/utils.ts | 2 +-
lib/routes/zaobao/util.tsx | 2 +-
lib/routes/zhihu/utils.ts | 4 +-
lib/routes/zhonglun/index.ts | 2 +-
lib/utils/camelcase-keys.ts | 2 +-
lib/utils/common-config.ts | 2 +-
lib/utils/parse-date.ts | 12 +--
lib/utils/valid-host.ts | 2 +-
lib/utils/wechat-mp.ts | 2 +-
package.json | 1 +
pnpm-lock.yaml | 59 +++++++++++++++
scripts/workflow/format-description.ts | 2 +-
208 files changed, 418 insertions(+), 295 deletions(-)
diff --git a/.oxlintrc.json b/.oxlintrc.json
index 85967256d352..f3a91894a809 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -14,6 +14,7 @@
"jsPlugins": [
{ "name": "n", "specifier": "eslint-plugin-n" },
{ "name": "unicorn-js", "specifier": "eslint-plugin-unicorn" },
+ { "name": "regexp", "specifier": "eslint-plugin-regexp" },
"@stylistic/eslint-plugin",
"eslint-plugin-simple-import-sort",
"oxlint-plugin-eslint",
@@ -32,19 +33,19 @@
"no-const-assign": "error",
"no-constant-binary-expression": "error",
"no-constant-condition": "error",
- // "no-control-regex": "error", -> off
+ "no-control-regex": "error",
"no-debugger": "error",
"no-dupe-class-members": "error",
"no-dupe-else-if": "error",
"no-dupe-keys": "error",
"no-duplicate-case": "error",
- "no-empty-character-class": "error",
+ // "no-empty-character-class": "error", -> off, handled by eslint-plugin-regexp
"no-empty-pattern": "error",
"no-ex-assign": "error",
"no-fallthrough": "error",
"no-func-assign": "error",
"no-import-assign": "error",
- "no-invalid-regexp": "error",
+ // "no-invalid-regexp": "error", -> off, handled by eslint-plugin-regexp
"no-irregular-whitespace": "error",
"no-loss-of-precision": "error",
"no-misleading-character-class": "error",
@@ -65,7 +66,7 @@
"no-unsafe-optional-chaining": "error",
"no-unused-private-class-members": "error",
// "no-unused-vars": "error", -> off for @typescript-eslint/no-unused-vars
- "no-useless-backreference": "error",
+ // "no-useless-backreference": "error", -> off, handled by eslint-plugin-regexp
"use-isnan": "error",
"valid-typeof": "error",
// #endregion
@@ -289,12 +290,74 @@
"unicorn/throw-new-error": "error",
// #endregion
+ // #region --- regexp recommended ---
+ "regexp/confusing-quantifier": "warn",
+ "regexp/control-character-escape": "error",
+ "regexp/match-any": "error",
+ "regexp/negation": "error",
+ "regexp/no-contradiction-with-assertion": "error",
+ "regexp/no-dupe-characters-character-class": "error",
+ "regexp/no-dupe-disjunctions": "error",
+ "regexp/no-empty-alternative": "warn",
+ "regexp/no-empty-capturing-group": "error",
+ "regexp/no-empty-character-class": "error",
+ "regexp/no-empty-group": "error",
+ "regexp/no-empty-lookarounds-assertion": "error",
+ "regexp/no-empty-string-literal": "error",
+ "regexp/no-escape-backspace": "error",
+ "regexp/no-extra-lookaround-assertions": "error",
+ "regexp/no-invalid-regexp": "error",
+ "regexp/no-invisible-character": "error",
+ "regexp/no-lazy-ends": "warn",
+ "regexp/no-legacy-features": "error",
+ "regexp/no-misleading-capturing-group": "error",
+ "regexp/no-misleading-unicode-character": "error",
+ "regexp/no-missing-g-flag": "error",
+ "regexp/no-non-standard-flag": "error",
+ "regexp/no-obscure-range": "error",
+ "regexp/no-optional-assertion": "error",
+ "regexp/no-potentially-useless-backreference": "warn",
+ "regexp/no-super-linear-backtracking": "error",
+ "regexp/no-trivially-nested-assertion": "error",
+ "regexp/no-trivially-nested-quantifier": "error",
+ "regexp/no-unused-capturing-group": "error",
+ "regexp/no-useless-assertions": "error",
+ "regexp/no-useless-backreference": "error",
+ "regexp/no-useless-character-class": "error",
+ "regexp/no-useless-dollar-replacements": "error",
+ "regexp/no-useless-escape": "error",
+ "regexp/no-useless-flag": "warn",
+ "regexp/no-useless-lazy": "error",
+ "regexp/no-useless-non-capturing-group": "error",
+ "regexp/no-useless-quantifier": "error",
+ "regexp/no-useless-range": "error",
+ "regexp/no-useless-set-operand": "error",
+ "regexp/no-useless-string-literal": "error",
+ "regexp/no-useless-two-nums-quantifier": "error",
+ "regexp/no-zero-quantifier": "error",
+ "regexp/optimal-lookaround-quantifier": "warn",
+ "regexp/optimal-quantifier-concatenation": "error",
+ "regexp/prefer-character-class": "error",
+ "regexp/prefer-d": "error",
+ "regexp/prefer-plus-quantifier": "error",
+ "regexp/prefer-predefined-assertion": "error",
+ "regexp/prefer-question-quantifier": "error",
+ "regexp/prefer-range": "error",
+ "regexp/prefer-set-operation": "error",
+ "regexp/prefer-star-quantifier": "error",
+ "regexp/prefer-unicode-codepoint-escapes": "error",
+ "regexp/prefer-w": "error",
+ "regexp/simplify-set-operations": "error",
+ "regexp/sort-flags": "error",
+ "regexp/strict": "error",
+ "regexp/use-ignore-case": "error",
+ // #endregion
+
// --- custom rules ---
// #region --- possible problems ---
"array-callback-return": ["error", { "allowImplicit": true }],
"no-await-in-loop": "error",
- "no-control-regex": "off",
"no-prototype-builtins": "off",
"no-undef": "off", // typescript/eslint-recommended, ts(2552)
// #endregion
diff --git a/lib/middleware/anti-hotlink.ts b/lib/middleware/anti-hotlink.ts
index 49a849570b04..7dd6e897661d 100644
--- a/lib/middleware/anti-hotlink.ts
+++ b/lib/middleware/anti-hotlink.ts
@@ -6,7 +6,7 @@ import { config } from '@/config';
import type { Data } from '@/types';
import logger from '@/utils/logger';
-const templateRegex = /\${([^{}]+)}/g;
+const templateRegex = /\$\{([^{}]+)\}/g;
const allowedUrlProperties = new Set(['hash', 'host', 'hostname', 'href', 'origin', 'password', 'pathname', 'port', 'protocol', 'search', 'searchParams', 'username']);
// match path or sub-path
@@ -150,7 +150,7 @@ const middleware: MiddlewareHandler = async (ctx, next) => {
if (item.enclosure_url && item.enclosure_type) {
if (item.enclosure_type.startsWith('image/')) {
item.enclosure_url = replaceUrl(imageHotlinkTemplate, item.enclosure_url);
- } else if (/^(video|audio)\//.test(item.enclosure_type)) {
+ } else if (/^(?:video|audio)\//.test(item.enclosure_type)) {
item.enclosure_url = replaceUrl(multimediaHotlinkTemplate, item.enclosure_url);
}
}
diff --git a/lib/middleware/template.tsx b/lib/middleware/template.tsx
index d9f5ed98655c..78673a9504a5 100644
--- a/lib/middleware/template.tsx
+++ b/lib/middleware/template.tsx
@@ -28,7 +28,7 @@ const middleware: MiddlewareHandler = async (ctx, next) => {
return ctx.json(ctx.get('json') || { message: 'plugin does not set debug json' });
}
- if (/(\d+)\.debug\.html$/.test(outputType)) {
+ if (/\d+\.debug\.html$/.test(outputType)) {
const index = Number.parseInt(outputType.match(/(\d+)\.debug\.html$/)?.[1] || '0');
return ctx.html(data?.item?.[index]?.description || `data.item[${index}].description not found`);
}
@@ -58,7 +58,8 @@ const middleware: MiddlewareHandler = async (ctx, next) => {
// https://stackoverflow.com/questions/1497885/remove-control-characters-from-php-string/1497928#1497928
// remove unicode control characters
// see #14940 #14943 #15262
- item.description = item.description.replaceAll(/[\u0000-\u0009\u000B\u000C\u000E-\u001F\u007F\u200B\uFFFF]/g, '');
+ // oxlint-disable-next-line no-control-regex
+ item.description = item.description.replaceAll(/[\u0000-\u0009\v\f\u000E-\u001F\u007F\u200B\uFFFF]/g, '');
}
if (typeof item.author === 'string') {
diff --git a/lib/routes/12371/zxfb.ts b/lib/routes/12371/zxfb.ts
index e5049220597f..b6b521b9254a 100644
--- a/lib/routes/12371/zxfb.ts
+++ b/lib/routes/12371/zxfb.ts
@@ -16,7 +16,7 @@ const handler = async (ctx) => {
const $ = cheerio.load(response.data);
- const pattern = /item=(\[{.*?}]);/;
+ const pattern = /item=(\[\{.*?\}\]);/;
const newsList = JSON.parse($('script[language="javascript"]').text().match(pattern)?.[1].replaceAll("'", '"') || '[]');
const topNewsList = newsList.slice(0, limit).map((item) => ({
diff --git a/lib/routes/163/news/special.ts b/lib/routes/163/news/special.ts
index ea7d1948c278..86f93caba8df 100644
--- a/lib/routes/163/news/special.ts
+++ b/lib/routes/163/news/special.ts
@@ -102,7 +102,7 @@ async function handler(ctx) {
const url = `https://3g.163.com/touch/reconstruct/article/list/${type}/0-20.html`;
const response = await got(url);
const data = response.data;
- const matches = data.replaceAll(/\s/g, '').match(/artiList\((.*?)]}\)/);
+ const matches = data.replaceAll(/\s/g, '').match(/artiList\((.*?)\]\}\)/);
const articlelist0 = matches[1].replace(/".*?wangning/, '"articles') + ']}';
const articlelist = JSON.parse(articlelist0);
const articles = articlelist.articles;
@@ -112,7 +112,7 @@ async function handler(ctx) {
let url = article.url;
if (url === null || article.skipType === 'video') {
const skipurl = article.skipURL;
- const vid = skipurl.match(/vid=(.*?)$/);
+ const vid = skipurl.match(/vid=(.*)$/);
if (vid !== null) {
url = `https://3g.163.com/exclusive/video/${vid[1]}.html`;
}
diff --git a/lib/routes/163/open/vip.tsx b/lib/routes/163/open/vip.tsx
index 4ee699dbc0dd..e34a1da598a2 100644
--- a/lib/routes/163/open/vip.tsx
+++ b/lib/routes/163/open/vip.tsx
@@ -65,7 +65,7 @@ async function handler() {
const initialState = JSON.parse(
$('script')
.text()
- .match(/window\.__INITIAL_STATE__=(.*);\(function\(\){var/)[1]
+ .match(/window\.__INITIAL_STATE__=(.*);\(function\(\)\{var/)[1]
);
const list = Object.values(initialState.courseindex.myModules).flatMap((mod) =>
diff --git a/lib/routes/2048/index.tsx b/lib/routes/2048/index.tsx
index 46c1e53563c2..4cf967857835 100644
--- a/lib/routes/2048/index.tsx
+++ b/lib/routes/2048/index.tsx
@@ -164,7 +164,7 @@ async function handler(ctx) {
}
}
if (!item.enclosure_url) {
- const hashMatch = readTpcHtml.match(/哈希校验[^;]*;\s*([a-fA-F0-9]{40})\s*[;;]/);
+ const hashMatch = readTpcHtml.match(/哈希校验[^;]*;\s*([a-f0-9]{40})\s*[;;]/i);
const magnetFromHash = hashMatch ? `magnet:?xt=urn:btih:${hashMatch[1]}` : null;
const magnetFromText = magnetText.match(/magnet:\?xt=urn:btih:[^\s"'<>]+/)?.[0];
const magnetLink = magnetFromText ?? readTpcHtml.match(/magnet:\?xt=urn:btih:[^\s"'<>]+/)?.[0] ?? magnetFromHash ?? copyLink;
diff --git a/lib/routes/36kr/hot-list.ts b/lib/routes/36kr/hot-list.ts
index c28b4f287e81..61825e4e6b3e 100644
--- a/lib/routes/36kr/hot-list.ts
+++ b/lib/routes/36kr/hot-list.ts
@@ -79,7 +79,7 @@ async function handler(ctx) {
},
});
- const data = getProperty(JSON.parse(response.data.match(/window.initialState=({.*})/)[1]), categories[category].key);
+ const data = getProperty(JSON.parse(response.data.match(/window.initialState=(\{.*\})/)[1]), categories[category].key);
let items = data
.slice(0, ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 10)
diff --git a/lib/routes/36kr/index.ts b/lib/routes/36kr/index.ts
index 6c24a1d83726..e3b085f41cec 100644
--- a/lib/routes/36kr/index.ts
+++ b/lib/routes/36kr/index.ts
@@ -48,7 +48,7 @@ async function handler(ctx) {
const $ = load(response.data);
- const data = JSON.parse(response.data.match(/"itemList":(\[.*?])/)[1]);
+ const data = JSON.parse(response.data.match(/"itemList":(\[.*?\])/)[1]);
let items = data
.slice(0, ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 30)
@@ -64,7 +64,7 @@ async function handler(ctx) {
};
});
- if (!/^\/(search|newsflashes)/.test(path)) {
+ if (!/^\/(?:search|newsflashes)/.test(path)) {
items = await Promise.all(items.map((item) => ProcessItem(item, cache.tryGet)));
}
diff --git a/lib/routes/36kr/utils.ts b/lib/routes/36kr/utils.ts
index 5149e1ae2864..a909ece47841 100644
--- a/lib/routes/36kr/utils.ts
+++ b/lib/routes/36kr/utils.ts
@@ -11,7 +11,7 @@ export const ProcessItem = (item, tryGet) =>
tryGet(item.link, async () => {
const detailResponse = await ofetch(item.link);
- const cipherTextList = detailResponse.match(/{"state":"(.*)","isEncrypt":true}/) ?? [];
+ const cipherTextList = detailResponse.match(/\{"state":"(.*)","isEncrypt":true\}/) ?? [];
if (cipherTextList.length === 0) {
const $ = load(detailResponse);
diff --git a/lib/routes/3dmgame/utils.ts b/lib/routes/3dmgame/utils.ts
index 37bda824243a..e714f989c81b 100644
--- a/lib/routes/3dmgame/utils.ts
+++ b/lib/routes/3dmgame/utils.ts
@@ -11,7 +11,7 @@ const parseArticle = (item, tryGet) =>
if (item.link.startsWith('https://dl.3dmgame.com/')) {
const lis = $('.patchtop .lis');
- const [, category, pubDate, author] = lis.text().match(/补丁类型:(.*?)\n.*整理时间:(.*?)\n.*补丁制作:(.*?)\n/s);
+ const [, category, pubDate, author] = lis.text().match(/补丁类型:([^\n]*)\n.*整理时间:([^\n]*)\n.*补丁制作:([^\n]*)\n/s);
item.description = lis.html() + $('.L_title').html() + $('.GmL_1').html();
item.category = category;
diff --git a/lib/routes/4ksj/forum.tsx b/lib/routes/4ksj/forum.tsx
index 4762c3e87bb8..ae514a5d4c10 100644
--- a/lib/routes/4ksj/forum.tsx
+++ b/lib/routes/4ksj/forum.tsx
@@ -114,7 +114,7 @@ async function handler(ctx) {
const scriptUrl = new URL(scriptPath, rootUrl).href;
const scriptResponse = await ofetch(scriptUrl);
- const key = scriptResponse.match(/{var key="(.*?)"/)?.[1];
+ const key = scriptResponse.match(/\{var key="(.*?)"/)?.[1];
const value = scriptResponse.match(/",value="(.*?)"/)?.[1];
const getPath = scriptResponse.match(/\.get\("(.*?&key=)"/)?.[1];
diff --git a/lib/routes/69shu/article.ts b/lib/routes/69shu/article.ts
index bc13b6c30ce7..39ca17180054 100644
--- a/lib/routes/69shu/article.ts
+++ b/lib/routes/69shu/article.ts
@@ -54,8 +54,8 @@ const createItem = (url: string) =>
cache.tryGet(url, async () => {
const html = await get(url);
const $ = load(html);
- const { articleid, chapterid, chaptername } = parseObject(/bookinfo\s?=\s?{[\S\s]+?}/, $('head>script:not([src])').text());
- const decryptionMap = parseObject(/_\d+\s?=\s?{[\S\s]+?}/, $('.txtnav+script').text());
+ const { articleid, chapterid, chaptername } = parseObject(/bookinfo\s?=\s?\{[\s\S]+?\}/, $('head>script:not([src])').text());
+ const decryptionMap = parseObject(/_\d+\s?=\s?\{[\s\S]+?\}/, $('.txtnav+script').text());
return {
title: chaptername,
@@ -70,7 +70,7 @@ const parseObject = (reg: RegExp, str: string): Record => {
const obj = {};
const match = reg.exec(str);
if (match) {
- for (const line of match[0].matchAll(/(\w+):\s?["']?([\S\s]+?)["']?[\n,}]/g)) {
+ for (const line of match[0].matchAll(/(\w+):\s?["']?([\s\S]+?)["']?[\n,}]/g)) {
obj[line[1]] = line[2];
}
}
diff --git a/lib/routes/6park/index.ts b/lib/routes/6park/index.ts
index 4e2015f42835..e3904f8f9342 100644
--- a/lib/routes/6park/index.ts
+++ b/lib/routes/6park/index.ts
@@ -66,7 +66,7 @@ async function handler(ctx) {
const content = load(detailResponse.data);
item.title = content('title').text().replace(' -6park.com', '');
- item.author = detailResponse.data.match(/送交者: .*>(.*)<.*\[/)[1];
+ item.author = detailResponse.data.match(/送交者:[^>]*>([^<]*)<\/a>/)[1].trim();
item.pubDate = timezone(parseDate(detailResponse.data.match(/于 (.*) 已读/)[1], 'YYYY-MM-DD h:m'), +8);
item.description = content('pre')
.html()
diff --git a/lib/routes/6park/news.ts b/lib/routes/6park/news.ts
index 2050185e5d8e..30941bde8440 100644
--- a/lib/routes/6park/news.ts
+++ b/lib/routes/6park/news.ts
@@ -76,7 +76,7 @@ async function handler(ctx) {
const content = load(detailResponse.data);
- const matches = detailResponse.data.match(/新闻来源:(.*?)于.*(\d{4}(?:-\d{2}){2} (?:\d{1,2}:){2}\d{1,2})/);
+ const matches = detailResponse.data.match(/新闻来源:([^于]*)于.*(\d{4}(?:-\d{2}){2} (?:\d{1,2}:){2}\d{1,2})/);
item.title = content('h2').text();
item.author = matches[1].trim();
diff --git a/lib/routes/9to5/utils.ts b/lib/routes/9to5/utils.ts
index 3cbb329b1fc7..f4c39a2a89ab 100644
--- a/lib/routes/9to5/utils.ts
+++ b/lib/routes/9to5/utils.ts
@@ -22,7 +22,7 @@ const ProcessFeed = (data) => {
content.find('div').each((i, e) => {
if ($(e)[0].attribs.class) {
const classes = $(e)[0].attribs.class;
- if (/\w{10}\s\w{10}/g.test(classes)) {
+ if (/\w{10}\s\w{10}/.test(classes)) {
$(e).remove();
}
}
diff --git a/lib/routes/abc/index.ts b/lib/routes/abc/index.ts
index a4eea519884e..89a9b57ed96c 100644
--- a/lib/routes/abc/index.ts
+++ b/lib/routes/abc/index.ts
@@ -49,7 +49,7 @@ async function handler(ctx) {
const feedUrl = new URL(`news/feed/${documentId}/rss.xml`, rootUrl).href;
const feedResponse = await ofetch(feedUrl);
- currentUrl = feedResponse.match(/([\w-./:?]+)<\/link>/)[1];
+ currentUrl = feedResponse.match(/([\w./:?-]+)<\/link>/)[1];
}
const currentResponse = await ofetch(currentUrl);
@@ -124,7 +124,7 @@ async function handler(ctx) {
item.title = content('meta[property="og:title"]').prop('content');
item.description = '';
- const enclosurePattern = String.raw`"(?:MIME|content)?Type":"([\w]+/[\w]+)".*?"(?:fileS|s)?ize":(\d+),.*?"url":"([\w-.:/?]+)"`;
+ const enclosurePattern = String.raw`"(?:MIME|content)?Type":"(\w+/\w+)".*?"(?:fileS|s)?ize":(\d+),.*?"url":"([\w.:/?-]+)"`;
const enclosureMatches = detailResponse.match(new RegExp(enclosurePattern, 'g'));
diff --git a/lib/routes/acfun/video.ts b/lib/routes/acfun/video.ts
index 39ca0200be73..d6732a0dc41a 100644
--- a/lib/routes/acfun/video.ts
+++ b/lib/routes/acfun/video.ts
@@ -40,7 +40,7 @@ async function handler(ctx) {
const list = $('#ac-space-video-list a').toArray();
const image = $('head style:contains("user-photo")')
.text()
- .match(/.user-photo{\n\s*background:url\((.*)\) 0% 0% \/ 100% no-repeat;/)?.[1];
+ .match(/.user-photo\{\n\s*background:url\((.*)\) 0% 0% \/ 100% no-repeat;/)?.[1];
return {
title,
diff --git a/lib/routes/aip/journal.ts b/lib/routes/aip/journal.ts
index 68bea00e2867..f5c718e57e89 100644
--- a/lib/routes/aip/journal.ts
+++ b/lib/routes/aip/journal.ts
@@ -43,7 +43,7 @@ async function handler(ctx) {
const $ = load(response);
const jrnlName = $('meta[property="og:title"]')
.attr('content')
- .match(/(?:[^=]*=)?\s*([^>]+)\s*/)[1];
+ .match(/(?:[^=]*=)?\s*([^>]+)/)[1];
const publication = $('.al-article-item-wrap.al-normal');
const list = publication.toArray().map((item) => {
diff --git a/lib/routes/altotrain/news.ts b/lib/routes/altotrain/news.ts
index f541b8ed2bb3..8bfbe028df29 100644
--- a/lib/routes/altotrain/news.ts
+++ b/lib/routes/altotrain/news.ts
@@ -71,7 +71,7 @@ function extractItem(a: Cheerio, language: string) {
const descEl = a.find('p').first();
const description = descEl.text().trim();
- const dateMatch = language === 'fr' ? description.match(/(\d{1,2} [a-zéû]+[.]? \d{4})/i) : description.match(/([A-Z][a-z]+[.]? \d{1,2}, \d{4})/);
+ const dateMatch = language === 'fr' ? description.match(/(\d{1,2} [a-zéû]+\.? \d{4})/i) : description.match(/([A-Z][a-z]+\.? \d{1,2}, \d{4})/);
const pubDateStr = dateMatch ? dateMatch[1].trim() : '';
const pubDate = parseDate(pubDateStr);
diff --git a/lib/routes/anthropic/research.ts b/lib/routes/anthropic/research.ts
index cfba01932e4d..c19564ebf810 100644
--- a/lib/routes/anthropic/research.ts
+++ b/lib/routes/anthropic/research.ts
@@ -47,7 +47,7 @@ async function handler() {
}
}
- const partRegex = /^([0-9a-zA-Z]+):([0-9a-zA-Z]+)?(\[.*)$/;
+ const partRegex = /^([0-9a-z]+):([0-9a-z]+)?(\[.*)$/i;
const fd = textList
.join('')
.split('\n')
diff --git a/lib/routes/aqara/news.ts b/lib/routes/aqara/news.ts
index 898ea0dac62d..6dc95b0fe148 100644
--- a/lib/routes/aqara/news.ts
+++ b/lib/routes/aqara/news.ts
@@ -23,7 +23,7 @@ async function handler(ctx) {
const $ = load(response);
let items = response
- .match(/(parm\.newsTitle[\S\s]*?arr\.push\(parm\))/g)
+ .match(/(parm\.newsTitle[\s\S]*?arr\.push\(parm\))/g)
.slice(0, limit)
.map((item) => ({
title: item.match(/parm\.newsTitle = '(.*?)'/)[1],
diff --git a/lib/routes/arcteryx/regear-new-arrivals.tsx b/lib/routes/arcteryx/regear-new-arrivals.tsx
index 6785aa96c410..7394abf81ec0 100644
--- a/lib/routes/arcteryx/regear-new-arrivals.tsx
+++ b/lib/routes/arcteryx/regear-new-arrivals.tsx
@@ -42,7 +42,7 @@ async function handler() {
const data = response.data;
const $ = load(data);
const contents = $('script:contains("window.__PRELOADED_STATE__")').text();
- const regex = /{.*}/;
+ const regex = /\{.*\}/;
let items = JSON.parse(contents.match(regex)[0]).shop.items;
items = items.filter((item) => item.availableSizes.length !== 0);
diff --git a/lib/routes/bbc/utils.tsx b/lib/routes/bbc/utils.tsx
index abfd5d3bc272..54b8a277ead9 100644
--- a/lib/routes/bbc/utils.tsx
+++ b/lib/routes/bbc/utils.tsx
@@ -355,7 +355,7 @@ export const extractInitialData = ($: CheerioAPI): any => {
const initialDataText = JSON.parse(
$('script:contains("window.__INITIAL_DATA__")')
.text()
- .match(/window\.__INITIAL_DATA__\s*=\s*(.*);/)?.[1] ?? '"{}"'
+ .match(/window\.__INITIAL_DATA__\s*=\s*(\S.*)?;/)?.[1] ?? '"{}"'
);
return JSON.parse(initialDataText);
diff --git a/lib/routes/bilibili/cache.ts b/lib/routes/bilibili/cache.ts
index 213727ec6635..c37546af9bcc 100644
--- a/lib/routes/bilibili/cache.ts
+++ b/lib/routes/bilibili/cache.ts
@@ -117,7 +117,7 @@ const getWbiVerifyString = () => {
// 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,
// 62, 11, 36, 20, 34, 44, 52,
// ];
- const array = JSON.parse(jsResponse.match(/\[(?:\d+,){63}\d+]/));
+ const array = JSON.parse(jsResponse.match(/\[(?:\d+,){63}\d+\]/));
const o = [];
for (const t of array) {
r.charAt(t) && o.push(r.charAt(t));
@@ -350,7 +350,7 @@ const getArticleDataFromCvid = async (cvid, uid) => {
const newFormatData = JSON.parse(
$('script:contains("window.__INITIAL_STATE__")')
.text()
- .match(/window\.__INITIAL_STATE__\s*=\s*(.*?);\(/)[1]
+ .match(/window\.__INITIAL_STATE__\s*=\s*(\S.*?)?;\(/)[1]
);
if (newFormatData?.readInfo?.opus?.content?.paragraphs) {
diff --git a/lib/routes/bjsk/index.ts b/lib/routes/bjsk/index.ts
index 11bf8d02db69..e5deceeea0ae 100644
--- a/lib/routes/bjsk/index.ts
+++ b/lib/routes/bjsk/index.ts
@@ -55,7 +55,8 @@ async function handler(ctx) {
item.description = $('.article-main').html();
item.author = $('.info')
.text()
- .match(/作者:(.*)\s+来源/)[1];
+ .match(/作者:(.*?)来源/)[1]
+ .trim();
return item;
})
)
diff --git a/lib/routes/bjtu/gs.ts b/lib/routes/bjtu/gs.ts
index dec0963cf217..4711d23ba439 100644
--- a/lib/routes/bjtu/gs.ts
+++ b/lib/routes/bjtu/gs.ts
@@ -130,7 +130,7 @@ const getItem = (item, selector) => {
const newsDate = item
.find('span')
.text()
- .match(/\d{4}(-|\/|.)\d{1,2}\1\d{1,2}/)[0];
+ .match(/\d{4}(.)\d{1,2}\1\d{1,2}/)[0];
const infoTitle = newsInfo.text();
const link = rootURL + newsInfo.attr('href');
diff --git a/lib/routes/bjwxdxh/index.ts b/lib/routes/bjwxdxh/index.ts
index b90d7a8aff02..d8060cc9afcd 100644
--- a/lib/routes/bjwxdxh/index.ts
+++ b/lib/routes/bjwxdxh/index.ts
@@ -59,7 +59,7 @@ async function handler(ctx) {
const content = load(response.data);
const info = content('div.info')
.text()
- .match(/作者:(.*?)\s+发布于:(.*?\s+.*?)\s/);
+ .match(/作者:(\S*)\s+发布于:(\S*\s+.*?)\s/);
item.author = info[1];
item.pubDate = timezone(parseDate(info[2], 'YYYY-MM-DD HH:mm:ss'), +8);
item.description = content('div#con').html().trim().replaceAll('\n', '');
diff --git a/lib/routes/bloomberg/utils.ts b/lib/routes/bloomberg/utils.ts
index 215c3b716a57..3d9da657224d 100644
--- a/lib/routes/bloomberg/utils.ts
+++ b/lib/routes/bloomberg/utils.ts
@@ -55,7 +55,7 @@ const apiEndpoints = {
},
};
-const pageTypeRegex1 = /\/(?[\w-]*?)\/(?\d{4}-\d{2}-\d{2}\/.*)/;
+const pageTypeRegex1 = /\/(?[\w-]*)\/(?\d{4}-\d{2}-\d{2}\/.*)/;
const pageTypeRegex2 = /(?features\/|graphics\/)(?.*)/;
const regex = [pageTypeRegex1, pageTypeRegex2];
diff --git a/lib/routes/booru/mmda.ts b/lib/routes/booru/mmda.ts
index 69cc18361fa6..779af1236384 100644
--- a/lib/routes/booru/mmda.ts
+++ b/lib/routes/booru/mmda.ts
@@ -95,7 +95,7 @@ async function handler(ctx) {
statisticsTages.find('li, br, strong').remove();
const statisticsStr = statisticsTages.text();
- const regex = /(?[^\s:]+)\s*:\s*(?.+)/gm;
+ const regex = /(?[^\s:]+)\s*:\s*(?.+)/g;
const result = {};
for (const match of statisticsStr.matchAll(regex)) {
const { key, value } = match.groups ?? ({} as { key: string; value: string });
diff --git a/lib/routes/bse/index.ts b/lib/routes/bse/index.ts
index 6154cf51cdc6..0add93200213 100644
--- a/lib/routes/bse/index.ts
+++ b/lib/routes/bse/index.ts
@@ -183,7 +183,7 @@ async function handler(ctx) {
},
});
- const data = JSON.parse(response.data.match(/null\(\[({.*})]\)/)[1]);
+ const data = JSON.parse(response.data.match(/null\(\[(\{.*\})\]\)/)[1]);
let items: DataItem[];
diff --git a/lib/routes/caixin/category.ts b/lib/routes/caixin/category.ts
index 0fd9f0e2072b..9e4e7dc832c0 100644
--- a/lib/routes/caixin/category.ts
+++ b/lib/routes/caixin/category.ts
@@ -60,7 +60,7 @@ async function handler(ctx) {
const entity = JSON.parse(
$('script')
.text()
- .match(/var entity = ({.*?})/)[1]
+ .match(/var entity = (\{.*?\})/)[1]
);
const {
diff --git a/lib/routes/caixin/utils-fulltext.ts b/lib/routes/caixin/utils-fulltext.ts
index e17c54b6b391..bc90876c35aa 100644
--- a/lib/routes/caixin/utils-fulltext.ts
+++ b/lib/routes/caixin/utils-fulltext.ts
@@ -14,7 +14,7 @@ export async function getFulltext(url: string) {
if (!config.caixin.cookie) {
return;
}
- if (!/(\d+)\.html/.test(url)) {
+ if (!/\d+\.html/.test(url)) {
return;
}
const articleID = url.match(/(\d+)\.html/)[1];
diff --git a/lib/routes/cas/sim/kyjz.ts b/lib/routes/cas/sim/kyjz.ts
index 116fc6ccb316..1e61deea23fd 100644
--- a/lib/routes/cas/sim/kyjz.ts
+++ b/lib/routes/cas/sim/kyjz.ts
@@ -55,7 +55,7 @@ async function handler() {
const $ = load(response.data);
const author = $('.qtinfo.hidden-lg.hidden-md.hidden-sm').text();
- const reg = /文章来源:(.*?)\|/g;
+ const reg = /文章来源:(.*?)\|/;
item.title = $('p.wztitle').text().trim();
item.author = reg.exec(author)[1].toString().trim();
diff --git a/lib/routes/chinaratings/credit-research.ts b/lib/routes/chinaratings/credit-research.ts
index 7baab932be09..55259a9f6a76 100644
--- a/lib/routes/chinaratings/credit-research.ts
+++ b/lib/routes/chinaratings/credit-research.ts
@@ -59,7 +59,7 @@ export const handler = async (ctx: Context): Promise => {
const metaStr: string = $$('div.newshead p span, div.title p span').text();
const pubDateStr: string | undefined = metaStr?.match(/(\d{4}-\d{2}-\d{2})/)?.[1];
- const authors: DataItem['author'] = metaStr?.match(/来源:(.*?)/)?.[1];
+ const authors: DataItem['author'] = metaStr?.match(/来源:(.*)/)?.[1];
const upDatedStr: string | undefined = pubDateStr;
let processedItem: DataItem = {
diff --git a/lib/routes/chnmus/exhibition.tsx b/lib/routes/chnmus/exhibition.tsx
index 96bf680ef668..8fae9bb87598 100644
--- a/lib/routes/chnmus/exhibition.tsx
+++ b/lib/routes/chnmus/exhibition.tsx
@@ -17,7 +17,7 @@ const extractDates = (durationStr: string) => {
return { startDate, endDate };
}
- const parts = durationStr.split(/——|-|—|~/).map((p) => p.trim()); // currently ——and- is used, add — or ~ for redundency
+ const parts = durationStr.split(/——|[-—~]/).map((p) => p.trim()); // currently ——and- is used, add — or ~ for redundency
const startStr = parts[0];
const endStr = parts[1];
diff --git a/lib/routes/cih-index/report.ts b/lib/routes/cih-index/report.ts
index b3f6a0263a49..a61197bdbdfe 100644
--- a/lib/routes/cih-index/report.ts
+++ b/lib/routes/cih-index/report.ts
@@ -40,7 +40,7 @@ async function handler(ctx) {
const initialState = JSON.parse(
$('script:contains("window.__INITIAL_STATE__")')
.text()
- .match(/window\.__INITIAL_STATE__\s*=\s*({.*?});/)?.[1] || '{}'
+ .match(/window\.__INITIAL_STATE__\s*=\s*(\{.*?\});/)?.[1] || '{}'
);
const { dataResult, indNavLists, secondNameFilter, tagList, param } = initialState.data;
diff --git a/lib/routes/cisia/index.ts b/lib/routes/cisia/index.ts
index c1e5832b935f..df9098622297 100644
--- a/lib/routes/cisia/index.ts
+++ b/lib/routes/cisia/index.ts
@@ -35,7 +35,7 @@ export const handler = async (ctx) => {
items = await Promise.all(
items.map((item) =>
cache.tryGet(item.link, async () => {
- if (!/^https?:\/\/www\.cisia\.org(\/[^\s]*)?$/.test(item.link)) {
+ if (!/^https?:\/\/www\.cisia\.org(?:\/\S*)?$/.test(item.link)) {
return item;
}
diff --git a/lib/routes/cline/blog.ts b/lib/routes/cline/blog.ts
index 7455759c8df2..4ae95ce50cea 100644
--- a/lib/routes/cline/blog.ts
+++ b/lib/routes/cline/blog.ts
@@ -21,7 +21,7 @@ function extractArticlesFromDOM($: CheerioAPI): DataItem[] {
// Extract date and author with single regex
const metaText = element.find('.text-sm.text-slate-500').text().trim();
- const metaMatch = metaText.match(/^([^•]+)\s*•\s*([A-Za-z]+\s+\d{1,2},?\s+\d{4})/);
+ const metaMatch = metaText.match(/^([^•]+)•\s*([A-Z]+\s+\d{1,2},?\s+\d{4})/i);
const author = metaMatch ? metaMatch[1].trim() : 'Cline Team';
const pubDate = metaMatch ? parseDate(metaMatch[2]) : undefined;
diff --git a/lib/routes/cool18/index.ts b/lib/routes/cool18/index.ts
index f9d9da1b1453..96b9f7b50aef 100644
--- a/lib/routes/cool18/index.ts
+++ b/lib/routes/cool18/index.ts
@@ -65,7 +65,7 @@ function buildUrl(rootUrl: string, type: PostType, keyword: string | undefined,
function extractHomeList($: CheerioAPI, rootUrl: string, limit: number): DataItem[] {
try {
const scriptText = $('script:contains("_PageData")').text();
- const match = scriptText.match(/const\s+_PageData\s*=\s*(\[[\s\S]*?]);/);
+ const match = scriptText.match(/const\s+_PageData\s*=\s*(\[[\s\S]*?\]);/);
if (!match?.[1]) {
return [];
diff --git a/lib/routes/ctinews/topic.ts b/lib/routes/ctinews/topic.ts
index ec1d4b745feb..9560bcacbfb1 100644
--- a/lib/routes/ctinews/topic.ts
+++ b/lib/routes/ctinews/topic.ts
@@ -88,7 +88,7 @@ async function handler(ctx) {
const $ = load(response);
if (item.link?.includes('/videos/')) {
const ldJson = JSON.parse($('script[type="application/ld+json"]:contains("VideoObject")').text());
- const videoId = ldJson.embedUrl.match(/embed\/([a-zA-Z0-9_-]+)/)?.[1];
+ const videoId = ldJson.embedUrl.match(/embed\/([\w-]+)/)?.[1];
item.description =
`
` +
diff --git a/lib/routes/dailypush/utils.ts b/lib/routes/dailypush/utils.ts
index 1fd24ec3ad85..8a55e7305ea0 100644
--- a/lib/routes/dailypush/utils.ts
+++ b/lib/routes/dailypush/utils.ts
@@ -143,7 +143,7 @@ function extractCategories(article: ReturnType, $: CheerioAPI): stri
const tagText = tagElement.text().trim();
// Skip summary/stats links and navigation
- if (tagHref && tagText && !tagHref.includes('article/') && !tagHref.includes('Summary') && tagText.length < 50 && !/^(Summary|stats|About|Tags|Toggle|Trending|Latest|Previous|Next)$/i.test(tagText)) {
+ if (tagHref && tagText && !tagHref.includes('article/') && !tagHref.includes('Summary') && tagText.length < 50 && !/^(?:Summary|stats|About|Tags|Toggle|Trending|Latest|Previous|Next)$/i.test(tagText)) {
return tagText;
}
return null;
diff --git a/lib/routes/daum/potplayer.ts b/lib/routes/daum/potplayer.ts
index 919afa2166b1..960c98389b6d 100644
--- a/lib/routes/daum/potplayer.ts
+++ b/lib/routes/daum/potplayer.ts
@@ -20,14 +20,14 @@ export const handler = async (ctx: Context): Promise => {
// Group 3: Trailing hyphens (unused, but for context)
// Group 4: Update content
// Uses global and multiline flags for all matches and line start/end anchors
- const updateRegex = /^(-+)\s*\n(.*?)\s*\n(-+)\s*\n([\s\S]*?)(?=\n-{2,}|<\/p>)/gm;
+ const updateRegex = /^-+[^\S\n]*\n(.*)\r?\n-+[^\S\n]*\n([\s\S]*?)(?=\n-{2}|<\/p>)/gm;
const items: DataItem[] = [];
let match: RegExpExecArray | null;
while ((match = updateRegex.exec(response)) !== null && items.length < limit) {
- const headerLine: string | undefined = match[2].trim();
- const description: string | undefined = match[4].trim()?.replaceAll(/(\s[+-])/g, '
$1');
+ const headerLine: string | undefined = match[1].trim();
+ const description: string | undefined = match[2].trim()?.replaceAll(/(\s[+-])/g, '
$1');
let version = 'N/A';
let pubDateStr: string | undefined = undefined;
diff --git a/lib/routes/dayanzai/index.ts b/lib/routes/dayanzai/index.ts
index abb37cb3ab5c..11db2149fedd 100644
--- a/lib/routes/dayanzai/index.ts
+++ b/lib/routes/dayanzai/index.ts
@@ -41,7 +41,7 @@ async function handler(ctx) {
const response = await got.get(currentUrl);
const $ = load(response.data);
const lists = $('div.c-box > div > div.c-zx-list > ul > li');
- const reg = /日期:(.*?(\s\(.*?\))?)\s/;
+ const reg = /日期:(.*?(?:\s\(.*?\))?)\s/;
const list = lists.toArray().map((item) => {
item = $(item).find('div');
let date = reg.exec(item.find('div.r > p.other').text())[1];
diff --git a/lib/routes/dcard/utils.ts b/lib/routes/dcard/utils.ts
index 083c736d6dd6..35bdc8594370 100644
--- a/lib/routes/dcard/utils.ts
+++ b/lib/routes/dcard/utils.ts
@@ -28,7 +28,7 @@ const ProcessFeed = async (items, cookies, browser, limit, cache) => {
const data = JSON.parse(response);
let body = data.content;
body = body.replaceAll(/(?=https?:\/\/).*?(?<=\.(jpe?g|gif|png))/gi, (m) => `
`);
- body = body.replaceAll(/(?=https?:\/\/).*(??)$/gim, (m) => `${m}`);
+ body = body.replaceAll(/(?=https?:\/\/).+(??)$/gim, (m) => `${m}`);
body = body.replaceAll('\n', '
');
return body;
diff --git a/lib/routes/dealstreetasia/home.ts b/lib/routes/dealstreetasia/home.ts
index e0959e5b0ef0..177bbf62e7ce 100644
--- a/lib/routes/dealstreetasia/home.ts
+++ b/lib/routes/dealstreetasia/home.ts
@@ -60,7 +60,7 @@ async function fetchPage() {
link: item.post_url || item.link || '',
description: item.post_excerpt || item.excerpt || '',
pubDate: item.post_date ? new Date(item.post_date).toUTCString() : item.date ? new Date(item.date).toUTCString() : '',
- category: item.category_link ? item.category_link.replaceAll(/(<([^>]+)>)/gi, '') : '', // Clean HTML if category_link exists
+ category: item.category_link ? item.category_link.replaceAll(/(<([^>]+)>)/g, '') : '', // Clean HTML if category_link exists
image: item.image_url ? item.image_url.replace(/\?.*$/, '') : '', // Remove query parameters if image_url exists
}));
diff --git a/lib/routes/dedao/knowledge.tsx b/lib/routes/dedao/knowledge.tsx
index 076b8e9a7ba4..d5eb7c28c293 100644
--- a/lib/routes/dedao/knowledge.tsx
+++ b/lib/routes/dedao/knowledge.tsx
@@ -5,7 +5,7 @@ import type { Route } from '@/types';
import got from '@/utils/got';
import { parseDate } from '@/utils/parse-date';
-const mentionPattern = /<\u2267\u2746>{"name":"(.*?)","uid":"\d+","at":"1"}<\/\u2266\u2746>/g;
+const mentionPattern = /<\u2267\u2746>\{"name":"(.*?)","uid":"\d+","at":"1"\}<\/\u2266\u2746>/g;
const formatNoteText = (text = '') => text.replaceAll('\n\n', '
').replaceAll(mentionPattern, ' @$1');
diff --git a/lib/routes/dedao/user.tsx b/lib/routes/dedao/user.tsx
index 164618039768..39ebb3772c8d 100644
--- a/lib/routes/dedao/user.tsx
+++ b/lib/routes/dedao/user.tsx
@@ -11,7 +11,7 @@ const types = {
12: '视频',
};
-const mentionPattern = /<\u2267\u2746>{"name":"(.*?)","uid":"\d+","at":"1"}<\/\u2266\u2746>/g;
+const mentionPattern = /<\u2267\u2746>\{"name":"(.*?)","uid":"\d+","at":"1"\}<\/\u2266\u2746>/g;
const formatNoteText = (text = '') => text.replaceAll('\n\n', '
').replaceAll(mentionPattern, ' @$1');
diff --git a/lib/routes/dehenglaw/index.ts b/lib/routes/dehenglaw/index.ts
index c5966d874ace..325ecf55d099 100644
--- a/lib/routes/dehenglaw/index.ts
+++ b/lib/routes/dehenglaw/index.ts
@@ -70,7 +70,7 @@ export const handler = async (ctx) => {
return {
title: $('title')
.text()
- .replace(/\|.*?$/, `| ${$('li.onthis').text()}`),
+ .replace(/\|.*$/, `| ${$('li.onthis').text()}`),
description: $('meta[name="Description"]').prop('content'),
link: currentUrl,
item: items,
diff --git a/lib/routes/dianping/user.ts b/lib/routes/dianping/user.ts
index 6698f1aaeb0c..9f7cf14ab99f 100644
--- a/lib/routes/dianping/user.ts
+++ b/lib/routes/dianping/user.ts
@@ -75,7 +75,7 @@ async function handler(ctx) {
headerGeneratorOptions: PRESETS.MODERN_IOS,
});
- const nickNameReg = /window\.nickName = "(.*?)"/g;
+ const nickNameReg = /window\.nickName = "(.*?)"/;
const nickName = nickNameReg.exec(pageResponse as string)?.[1];
const response = await ofetch(`https://m.dianping.com/member/ajax/NobleUserFeeds?userId=${id}`, {
diff --git a/lib/routes/dlnews/category.tsx b/lib/routes/dlnews/category.tsx
index a30277817a10..d813b90c0731 100644
--- a/lib/routes/dlnews/category.tsx
+++ b/lib/routes/dlnews/category.tsx
@@ -69,7 +69,7 @@ const extractArticle = (item) =>
const { data: response } = await got(item.link);
const $ = load(response);
const scriptTagContent = $('script#fusion-metadata').text();
- const jsonData = JSON.parse(scriptTagContent.match(/Fusion\.globalContent=({.*?});Fusion\.globalContentConfig/)[1]).content_elements;
+ const jsonData = JSON.parse(scriptTagContent.match(/Fusion\.globalContent=(\{.*?\});Fusion\.globalContentConfig/)[1]).content_elements;
const filteredData = [];
for (const v of jsonData) {
if (v.type === 'header' && v.content.includes('What we’re reading')) {
diff --git a/lib/routes/dnaindia/common.ts b/lib/routes/dnaindia/common.ts
index e501d9b50378..180919d42009 100644
--- a/lib/routes/dnaindia/common.ts
+++ b/lib/routes/dnaindia/common.ts
@@ -44,7 +44,7 @@ export async function handler(ctx) {
.map((item) => $(item).find('a').text());
// Process date
const timeText = $('p.dna-update').text();
- const dateMatch = timeText.match(/Updated\s*:\s*([\w\s,:\d]+?)(?:\s*\||$)/);
+ const dateMatch = timeText.match(/Updated\s*:([\w\s,:]+)/);
let time = dateMatch ? dateMatch[1].trim() : '';
time = time.replace(/\s+IST$/, '');
const pubDate = timezone(parseDate(time), +5.5);
diff --git a/lib/routes/domp4/detail.ts b/lib/routes/domp4/detail.ts
index ddeaf4515008..a8500872b358 100644
--- a/lib/routes/domp4/detail.ts
+++ b/lib/routes/domp4/detail.ts
@@ -30,7 +30,7 @@ function getDomList($, detailUrl) {
export function getItemList($, detailUrl, second) {
const encoded = $('.article script[type]')
.text()
- .match(/return p}\('(.*)',(\d+),(\d+),'(.*)'.split\(/);
+ .match(/return p\}\('(.*)',(\d+),(\d+),'(.*)'.split\(/);
// 若 script 标签没有内容,直接解析 dom
if (!encoded) {
return getDomList($, detailUrl);
diff --git a/lib/routes/dongqiudi/utils.ts b/lib/routes/dongqiudi/utils.ts
index c927dd76828b..7d1b116ca7e0 100644
--- a/lib/routes/dongqiudi/utils.ts
+++ b/lib/routes/dongqiudi/utils.ts
@@ -145,7 +145,7 @@ const ProcessFeedType3 = (item, response) => {
const initialState = JSON.parse(
$('script:contains("window.__INITIAL_STATE__")')
.text()
- .match(/window\.__INITIAL_STATE__\s*=\s*(.*?);\(/)[1]
+ .match(/window\.__INITIAL_STATE__\s*=\s*((?:\S.*?)??);\(/)[1]
);
// filter out undefined item
diff --git a/lib/routes/dora-world/article.ts b/lib/routes/dora-world/article.ts
index c903ee1cce78..4c44d1392599 100644
--- a/lib/routes/dora-world/article.ts
+++ b/lib/routes/dora-world/article.ts
@@ -85,6 +85,6 @@ async function getContent(nextBuildId: string, contentId: string) {
content
.html()
?.replaceAll(rubyRegex, '$1($2)')
- ?.replaceAll(/[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm, '') ?? '';
+ ?.replaceAll(/[^\t\n\r\u0020-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/g, '') ?? '';
return description;
}
diff --git a/lib/routes/douban/other/replied.ts b/lib/routes/douban/other/replied.ts
index 23767e6ce856..c231d97ee642 100644
--- a/lib/routes/douban/other/replied.ts
+++ b/lib/routes/douban/other/replied.ts
@@ -56,7 +56,7 @@ async function handler(ctx) {
method: 'get',
url: item.link,
});
- const match = detailResponse.data.match(/'comments':(.*)}],/);
+ const match = detailResponse.data.match(/'comments':(.*)\}\],/);
if (match.length > 1) {
const content = load(detailResponse.data);
diff --git a/lib/routes/douban/other/replies.ts b/lib/routes/douban/other/replies.ts
index 7d2515a6137a..f77c32e03a9f 100644
--- a/lib/routes/douban/other/replies.ts
+++ b/lib/routes/douban/other/replies.ts
@@ -55,7 +55,7 @@ async function handler(ctx) {
url: item.link,
});
- const comments = JSON.parse(detailResponse.data.match(/'comments':(.*)}],/)[1] + '}]');
+ const comments = JSON.parse(detailResponse.data.match(/'comments':(.*)\}\],/)[1] + '}]');
for (const c of comments) {
if (c.id === item.link.split('#')[1]) {
diff --git a/lib/routes/dribbble/utils.tsx b/lib/routes/dribbble/utils.tsx
index c7438b556977..c82870fce1b7 100644
--- a/lib/routes/dribbble/utils.tsx
+++ b/lib/routes/dribbble/utils.tsx
@@ -17,7 +17,7 @@ async function loadContent(link) {
const shotData = JSON.parse(
$('script')
.text()
- .match(/shotData:\s({.+?}),\n/)?.[1] ?? '{}'
+ .match(/shotData:\s(\{.+?\}),\n/)?.[1] ?? '{}'
);
// Join multiple shots together by selecting elements with class 'media-shot' or 'main-shot' or 'block-media-wrapper'
diff --git a/lib/routes/ehentai/ehapi.ts b/lib/routes/ehentai/ehapi.ts
index ba9284beaa7c..271f2fd86f62 100644
--- a/lib/routes/ehentai/ehapi.ts
+++ b/lib/routes/ehentai/ehapi.ts
@@ -161,7 +161,7 @@ function getBittorrent(cache, bittorrent_page_url) {
const match = onclick.match(/'(.*?)'/);
if (match) {
bittorrent_url = match[1];
- const match_p = bittorrent_url.match(/torrent\?p=(.*?)$/);
+ const match_p = bittorrent_url.match(/torrent\?p=(.*)$/);
if (match_p) {
p = match_p[1];
}
diff --git a/lib/routes/fanqienovel/page.ts b/lib/routes/fanqienovel/page.ts
index 58bc7e73e4da..11fc5bf9d131 100644
--- a/lib/routes/fanqienovel/page.ts
+++ b/lib/routes/fanqienovel/page.ts
@@ -76,7 +76,7 @@ async function handler(ctx: Context): Promise {
const initialState = JSON.parse(
$('script:contains("window.__INITIAL_STATE__")')
.text()
- .match(/window\.__INITIAL_STATE__\s*=\s*(.*);/)?.[1] ?? '{}'
+ .match(/window\.__INITIAL_STATE__\s*=\s*(\S.*);/)?.[1] ?? '{}'
);
const page = initialState.page as Page;
diff --git a/lib/routes/flashcat/blog.ts b/lib/routes/flashcat/blog.ts
index 8c01e75106e9..0cb95e409253 100644
--- a/lib/routes/flashcat/blog.ts
+++ b/lib/routes/flashcat/blog.ts
@@ -29,34 +29,32 @@ export const route: Route = {
};
async function handlerRoute(): Promise {
- const response = await ofetch('https://flashcat.cloud/blog/');
+ const baseUrl = 'https://flashcat.cloud';
+ const link = `${baseUrl}/blog/`;
+ const response = await ofetch(link);
const $ = load(response);
- const items = $('.post-preview')
+ const items = $('.fc-content-card')
.toArray()
.map((elem) => {
- const $elem = $(elem);
+ const $item = $(elem);
+ const [author, date] = $item
+ .find('.fc-content-card-meta')
+ .text()
+ .split('·')
+ .map((s) => s.trim());
return {
- title: $elem.find('.post-title').text(),
- description: $elem.find('.post-content-preview').text(),
- link: $elem.find('a').attr('href'),
- pubDate: parseDate(
- $elem
- .find('.post-meta')
- .text()
- .match(/on\s+(\w+,\s+\w+\s+\d{1,2},\s+\d{4})/)?.[1] || ''
- ),
- author:
- $elem
- .find('.post-meta')
- .text()
- .match(/by\s+(.+?)\s+on/)?.[1] || '',
+ title: $item.find('.fc-content-card-title').text(),
+ description: $item.find('.fc-content-card-summary').text().trim(),
+ link: new URL($item.find('.fc-content-card-link').attr('href')!, baseUrl).href,
+ pubDate: date ? parseDate(date, 'YYYY-MM-DD') : undefined,
+ author,
};
});
return {
title: 'Flashcat 快猫星云博客',
- link: 'https://flashcat.cloud/blog/',
+ link,
item: items,
};
}
diff --git a/lib/routes/gamer/ani/anime.ts b/lib/routes/gamer/ani/anime.ts
index b73df201138a..0f8a527fac12 100644
--- a/lib/routes/gamer/ani/anime.ts
+++ b/lib/routes/gamer/ani/anime.ts
@@ -41,7 +41,7 @@ async function handler(ctx) {
}
const anime = response.data.anime;
- const title = anime.title.replaceAll(/\[\d+?]$/g, '').trim();
+ const title = anime.title.replaceAll(/\[\d+\]$/g, '').trim();
const items = anime.volumes[0]
.map((item) => ({
diff --git a/lib/routes/getitfree/index.ts b/lib/routes/getitfree/index.ts
index 47998a802eb7..988886abf8d6 100644
--- a/lib/routes/getitfree/index.ts
+++ b/lib/routes/getitfree/index.ts
@@ -31,7 +31,7 @@ async function handler(ctx) {
const { data: response } = await got(apiUrl);
- const items = (Array.isArray(response) ? response : JSON.parse(response.match(/(\[.*])$/)[1])).slice(0, limit).map((item) => {
+ const items = (Array.isArray(response) ? response : JSON.parse(response.match(/(\[.*\])$/)[1])).slice(0, limit).map((item) => {
const terminologies = item._embedded['wp:term'];
const content = load(item.content?.rendered ?? item.content);
diff --git a/lib/routes/gigazine/en.ts b/lib/routes/gigazine/en.ts
index bd9127f7a4dc..1f0f191b9f11 100644
--- a/lib/routes/gigazine/en.ts
+++ b/lib/routes/gigazine/en.ts
@@ -22,7 +22,7 @@ const getAbsoluteUrl = (path: string | undefined) => (path ? new URL(path, ROOT_
const getArticleAuthor = ($: ReturnType) =>
$('#article .items p')
.text()
- .match(/Posted by\s+(.+)$/)?.[1]
+ .match(/Posted by\s+(\S.*)$/)?.[1]
?.trim();
const getArticleCategories = ($: ReturnType) => [
...new Set(
diff --git a/lib/routes/globallawreview/index.ts b/lib/routes/globallawreview/index.ts
index ea64e6d401a9..7fcf2210623b 100644
--- a/lib/routes/globallawreview/index.ts
+++ b/lib/routes/globallawreview/index.ts
@@ -50,7 +50,7 @@ async function handler(ctx) {
item
.find('p.p4')
.text()
- .match(/] (\d+\.\d+);/)[1],
+ .match(/\] (\d+\.\d+);/)[1],
],
enclosure_url: link,
enclosure_length:
diff --git a/lib/routes/google/album.ts b/lib/routes/google/album.ts
index 39f15f9a91ce..d62eae3dad9c 100644
--- a/lib/routes/google/album.ts
+++ b/lib/routes/google/album.ts
@@ -28,7 +28,7 @@ async function handler(ctx) {
const real_url = response.request.options.url.href;
- const info = JSON.parse(response.data.match(/AF_initDataCallback.*?data:(\[[\S\s]*])\s/m)[1]) || [];
+ const info = JSON.parse(response.data.match(/AF_initDataCallback.*?data:(\[[\s\S]*\])\s/)[1]) || [];
const album_name = info[3][1];
const owner_name = info[3][5][2];
diff --git a/lib/routes/google/scholar.ts b/lib/routes/google/scholar.ts
index 69465a1ad1e2..661518a0cd25 100644
--- a/lib/routes/google/scholar.ts
+++ b/lib/routes/google/scholar.ts
@@ -34,7 +34,7 @@ async function handler(ctx) {
let description = `Google Scholar Monitor Query: ${query}`;
if (params.includes('as_q=')) {
- const reg = /as_q=(.*?)&/g;
+ const reg = /as_q=(.*?)&/;
query = reg.exec(params)[1];
description = `Google Scholar Monitor Advanced Query: ${query}`;
} else {
diff --git a/lib/routes/gov/beijing/kw/index.ts b/lib/routes/gov/beijing/kw/index.ts
index bab38a33d515..e1e06e6c5dcc 100644
--- a/lib/routes/gov/beijing/kw/index.ts
+++ b/lib/routes/gov/beijing/kw/index.ts
@@ -23,10 +23,10 @@ async function handler(ctx) {
const title = $('a.bt_link').last().text().replace('>', '');
const dataJs = $('div.left.zhengce_right > script[language="javascript"]').html() || $('div.centent_width > script[language="javascript"]').html();
let items = dataJs
- .match(/urls\[i]='(.*?)';headers\[i]="(.*?)";year\[i]='(\d+)';month\[i]='(\d+)';day\[i]='(\d+)';/g)
+ .match(/urls\[i\]='(.*?)';headers\[i\]="(.*?)";year\[i\]='(\d+)';month\[i\]='(\d+)';day\[i\]='(\d+)';/g)
.slice(0, ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 25)
.map((item) => {
- const result = item.match(/urls\[i]='(.*?)';headers\[i]="(.*?)";year\[i]='(\d+)';month\[i]='(\d+)';day\[i]='(\d+)';/);
+ const result = item.match(/urls\[i\]='(.*?)';headers\[i\]="(.*?)";year\[i\]='(\d+)';month\[i\]='(\d+)';day\[i\]='(\d+)';/);
return {
title: load(result[2])('a').attr('title') || result[2],
link: new URL(result[1], rootUrl).href,
diff --git a/lib/routes/gov/cac/index.ts b/lib/routes/gov/cac/index.ts
index 1aec93ff592c..5ce00fb02fb3 100644
--- a/lib/routes/gov/cac/index.ts
+++ b/lib/routes/gov/cac/index.ts
@@ -29,7 +29,7 @@ async function handler(ctx) {
.toArray()
.map((item) => {
const href = $(item).attr('href');
- if (href && /(?:http:)?\/\/www\.cac\.gov\.cn(.*?)\/(A.*?\.htm)/.test(href)) {
+ if (href && /(?:http:)?\/\/www\.cac\.gov\.cn.*?\/A.*?\.htm/.test(href)) {
const matchArray = href.match(/(?:http:)?\/\/www\.cac\.gov\.cn(.*?)\/(A.*?\.htm)/);
if (matchArray && matchArray.length > 2) {
const path = matchArray[1];
diff --git a/lib/routes/gov/ccdi/utils.ts b/lib/routes/gov/ccdi/utils.ts
index ff1366a581c2..39a394241994 100644
--- a/lib/routes/gov/ccdi/utils.ts
+++ b/lib/routes/gov/ccdi/utils.ts
@@ -10,7 +10,7 @@ const cookieJar = new CookieJar();
const owner = '中央纪委国家监委网站';
const rootUrl = 'https://www.ccdi.gov.cn';
-const regex = /(?[A-Z_]+)=(?(?:.*?(?=; max-age)|[\dA-Fa-f]+))/gm;
+const regex = /(?[A-Z_]+)=(?.*?(?=; max-age)|[\dA-Fa-f]+)/g;
const parseCookie = async (body) => {
let m;
diff --git a/lib/routes/gov/cn/news/index.ts b/lib/routes/gov/cn/news/index.ts
index 326d19245287..3fa9e6252965 100644
--- a/lib/routes/gov/cn/news/index.ts
+++ b/lib/routes/gov/cn/news/index.ts
@@ -88,13 +88,13 @@ async function handler(ctx) {
let pubDate;
let author;
let category;
- if (/dysMiddleResultConItemTitle/g.test(item.html())) {
+ if (/dysMiddleResultConItemTitle/.test(item.html())) {
if (contentUrl.includes('content')) {
fullTextGet = await got.get(contentUrl);
fullTextData = load(fullTextGet.data);
fullTextData('.shuzi').remove(); // 移除videobg的图片
fullTextData('#myFlash').remove(); // 移除flash
- description = /pages_content/g.test(fullTextData.html()) ? fullTextData('.pages_content').html() : fullTextData('#UCAP-CONTENT').html();
+ description = /pages_content/.test(fullTextData.html()) ? fullTextData('.pages_content').html() : fullTextData('#UCAP-CONTENT').html();
} else {
description = item.find('a').text(); // 忽略获取吹风会的全文
}
@@ -105,13 +105,13 @@ async function handler(ctx) {
pubDate = timezone(parseDate(fullTextData('meta[name="firstpublishedtime"]').attr('content'), 'YYYY-MM-DD HH:mm:ss'), 8);
author = fullTextData('meta[name="author"]').attr('content');
category = fullTextData('meta[name="keywords"]').attr('content').split(/[,;]/);
- if (/zhengceku/g.test(contentUrl)) {
+ if (/zhengceku/.test(contentUrl)) {
// 政策文件库
description = fullTextData('.pages_content').html();
} else {
fullTextData('.shuzi').remove(); // 移除videobg的图片
fullTextData('#myFlash').remove(); // 移除flash
- description = /UCAP-CONTENT/g.test($1) ? fullTextData('#UCAP-CONTENT').html() : fullTextData('body').html();
+ description = /UCAP-CONTENT/.test($1) ? fullTextData('#UCAP-CONTENT').html() : fullTextData('body').html();
}
} else {
description = item.find('a').text(); // 忽略获取吹风会的全文
diff --git a/lib/routes/gov/general/general.ts b/lib/routes/gov/general/general.ts
index 7766acb8ab56..db03fe427ceb 100644
--- a/lib/routes/gov/general/general.ts
+++ b/lib/routes/gov/general/general.ts
@@ -186,7 +186,7 @@ const gdgov = async (info, ctx) => {
title: data.art_title,
description: renderZcjdpt(data),
pubDate: timezone(parseDate(data.pub_time), +8),
- author: /(本|本网|本站)/.test(data.pub_unite) ? authorisme : data.pub_unite,
+ author: /本/.test(data.pub_unite) ? authorisme : data.pub_unite,
};
});
} else if (idlink.host === 'mp.weixin.qq.com') {
@@ -217,7 +217,7 @@ const gdgov = async (info, ctx) => {
title,
description,
pubDate: timezone(parseDate(pubDate, pubDate_format), +8),
- author: /本|本网|本站/.test(author) ? authorisme : author,
+ author: /本/.test(author) ? authorisme : author,
};
});
}
diff --git a/lib/routes/gov/guangdong/tqyb/tfxtq.tsx b/lib/routes/gov/guangdong/tqyb/tfxtq.tsx
index 3dde4b33aa3d..a2c09e3e2e0b 100644
--- a/lib/routes/gov/guangdong/tqyb/tfxtq.tsx
+++ b/lib/routes/gov/guangdong/tqyb/tfxtq.tsx
@@ -34,7 +34,7 @@ async function handler() {
const tfxtqJsUrl = `${rootUrl}/data/gzWeather/weatherTips.js`;
const response = await got.get(tfxtqJsUrl);
- const data = JSON.parse(`[{${response.data.match(/Tips = {(.*?)}/)[1]}}]`);
+ const data = JSON.parse(`[{${response.data.match(/Tips = \{(.*?)\}/)[1]}}]`);
const items = data.map((item) => ({
title: item.title,
diff --git a/lib/routes/gov/miit/wjfb.ts b/lib/routes/gov/miit/wjfb.ts
index 13c53ff141a6..0f4252db3ff6 100644
--- a/lib/routes/gov/miit/wjfb.ts
+++ b/lib/routes/gov/miit/wjfb.ts
@@ -72,7 +72,7 @@ async function handler(ctx) {
item.description = content('#con_con')
.html()
- ?.replaceAll(/()/g, '$1' + rootUrl + '$2$3');
+ ?.replaceAll(/()/g, '$1' + rootUrl + '$2$3');
return item;
})
diff --git a/lib/routes/gov/miit/yjzj.ts b/lib/routes/gov/miit/yjzj.ts
index 2b9deec1dd29..8138f23f6458 100644
--- a/lib/routes/gov/miit/yjzj.ts
+++ b/lib/routes/gov/miit/yjzj.ts
@@ -71,7 +71,7 @@ async function handler() {
item.description = content('#con_con')
.html()
- ?.replaceAll(/()/g, '$1' + rootUrl + '$2$3');
+ ?.replaceAll(/()/g, '$1' + rootUrl + '$2$3');
return item;
})
diff --git a/lib/routes/gov/mofcom/article.ts b/lib/routes/gov/mofcom/article.ts
index 6fd06e75fc23..d861364e4c69 100644
--- a/lib/routes/gov/mofcom/article.ts
+++ b/lib/routes/gov/mofcom/article.ts
@@ -47,7 +47,7 @@ async function handler(ctx) {
cache.tryGet(item.link, async () => {
let responses = await got(item.link);
// xwfb/xwlxfbh || xwfb/xwztfbh
- const redirect = responses.data.match(/_cofing1={href:"(.*)",type/) || responses.data.match(/window\.location\.href='(.*)'/);
+ const redirect = responses.data.match(/_cofing1=\{href:"(.*)",type/) || responses.data.match(/window\.location\.href='(.*)'/);
if (redirect) {
responses = await got(redirect[1], {
headers: {
diff --git a/lib/routes/gov/nrta/news.ts b/lib/routes/gov/nrta/news.ts
index 8cd9d7ee0530..519f292405b2 100644
--- a/lib/routes/gov/nrta/news.ts
+++ b/lib/routes/gov/nrta/news.ts
@@ -45,7 +45,7 @@ async function handler(ctx) {
url: currentUrl,
});
- const regex = /(?=\s*<)/gi;
+ const regex = /(?=\s*<)/gi;
const data = response.data.replaceAll(regex, '$1');
const $ = load(data, {
diff --git a/lib/routes/gov/nsfc/index.ts b/lib/routes/gov/nsfc/index.ts
index 92a4320430e3..124e308b1f6b 100644
--- a/lib/routes/gov/nsfc/index.ts
+++ b/lib/routes/gov/nsfc/index.ts
@@ -46,7 +46,7 @@ async function handler(ctx) {
title: item.prop('title') ?? item.text(),
link: new URL(item.prop('href'), rootUrl).href,
guid: `nsfc-${item.prop('id')}`,
- pubDate: parseDate(item.next().text().replace(/\[]/g, '', ['YYYY-MM-DD', 'YY-MM-DD'])),
+ pubDate: parseDate(item.next().text().replace(/\[\]/g, '', ['YYYY-MM-DD', 'YY-MM-DD'])),
};
});
diff --git a/lib/routes/gov/stats/index.tsx b/lib/routes/gov/stats/index.tsx
index c7d31461d507..b43af12be027 100644
--- a/lib/routes/gov/stats/index.tsx
+++ b/lib/routes/gov/stats/index.tsx
@@ -115,7 +115,7 @@ async function handler(ctx) {
// articles from www.news.cn or www.gov.cn
- if (/(news\.cn|www\.gov\.cn)/.test(item.link)) {
+ if (/news\.cn|www\.gov\.cn/.test(item.link)) {
if (content('.year').text()) {
item.pubDate = timezone(parseDate(`${content('.year').text()}/${content('.day').text()} ${content('.time').text()}`, 'YYYY/MM/DD HH:mm:ss'), +8);
item.author = content('.source')
diff --git a/lib/routes/gov/zhengce/govall.ts b/lib/routes/gov/zhengce/govall.ts
index a1f13b5aa565..ca70133c1d3b 100644
--- a/lib/routes/gov/zhengce/govall.ts
+++ b/lib/routes/gov/zhengce/govall.ts
@@ -52,7 +52,7 @@ async function handler(ctx) {
});
const query = `${params.toString()}&${advance}`;
const res = await got.get(link, {
- searchParams: query.replaceAll(/([\u4E00-\u9FA5])/g, (str) => encodeURIComponent(str)),
+ searchParams: query.replaceAll(/[\u4E00-\u9FA5]/g, (str) => encodeURIComponent(str)),
});
const $ = load(res.data);
diff --git a/lib/routes/gov/zj/ningbogzw-notice.ts b/lib/routes/gov/zj/ningbogzw-notice.ts
index eda9789d0f27..61b26a86aafe 100644
--- a/lib/routes/gov/zj/ningbogzw-notice.ts
+++ b/lib/routes/gov/zj/ningbogzw-notice.ts
@@ -35,7 +35,7 @@ export const route: Route = {
return {
title: `宁波市国资委-${noticeCate}:${title.text()}`,
link: `http://gzw.ningbo.gov.cn${title.attr('href')}`,
- pubDate: parseDate($('p').text().replaceAll(/\[|]/g, '')),
+ pubDate: parseDate($('p').text().replaceAll(/\[|\]/g, '')),
author: '宁波市国资委',
description: title.text(),
};
diff --git a/lib/routes/gov/zj/ningborsjnotice.ts b/lib/routes/gov/zj/ningborsjnotice.ts
index e3f54a2b08fa..d9e06dad3f66 100644
--- a/lib/routes/gov/zj/ningborsjnotice.ts
+++ b/lib/routes/gov/zj/ningborsjnotice.ts
@@ -35,7 +35,7 @@ export const route: Route = {
return {
title: `宁波人社公告-${noticeCate}:${title.text()}`,
link: `http://rsj.ningbo.gov.cn${title.attr('href')}`,
- pubDate: parseDate($('.news_date').text().replaceAll(/\[|]/g, '')),
+ pubDate: parseDate($('.news_date').text().replaceAll(/\[|\]/g, '')),
author: '宁波市人力资源和社会保障局',
description: title.text(),
};
diff --git a/lib/routes/guancha/personalpage.ts b/lib/routes/guancha/personalpage.ts
index 74f482dde583..13f8118d93df 100644
--- a/lib/routes/guancha/personalpage.ts
+++ b/lib/routes/guancha/personalpage.ts
@@ -38,7 +38,7 @@ async function handler(ctx) {
const minuteRelativeTime = /(\d+)\s*分钟前/;
const hourRelativeTime = /(\d+)\s*小时前/;
const yesterdayRelativeTime = /昨天\s*(\d+):(\d+)/;
- const shortDate = /(\d+)-(\d+)\s*(\d+):(\d+)/;
+ const shortDate = /(\d+)-(\d+)\s+(\d+):(\d+)/;
// offset to ADD for transforming China time to UTC
const chinaToUtcOffset = -8 * 3600 * 1000;
diff --git a/lib/routes/hk01/utils.tsx b/lib/routes/hk01/utils.tsx
index 863be3af21b3..52ede4cd3bb4 100644
--- a/lib/routes/hk01/utils.tsx
+++ b/lib/routes/hk01/utils.tsx
@@ -110,7 +110,7 @@ const ProcessItems = (items, limit, tryGet) =>
url: item.link,
});
- const content = JSON.parse(detailResponse.data.match(/"__NEXT_DATA__" type="application\/json">({"props":.*})<\/script>/)[1]);
+ const content = JSON.parse(detailResponse.data.match(/"__NEXT_DATA__" type="application\/json">(\{"props":.*\})<\/script>/)[1]);
item.description = renderDescription({
image: content.props.initialProps.pageProps.article.originalImage.cdnUrl,
diff --git a/lib/routes/hkej/index.tsx b/lib/routes/hkej/index.tsx
index eeeacd849e3c..a1be1a98cc3b 100644
--- a/lib/routes/hkej/index.tsx
+++ b/lib/routes/hkej/index.tsx
@@ -158,7 +158,7 @@ async function handler(ctx) {
.toArray()
.map((e) => content(e).text().trim());
item.description = renderDesc(articleImg, content('div#article-content').html());
- item.pubDate = timezone(/(今|昨)/.test(pubDate) ? parseRelativeDate(pubDate) : parseDate(pubDate, 'YYYY M D'), +8);
+ item.pubDate = timezone(/今|昨/.test(pubDate) ? parseRelativeDate(pubDate) : parseDate(pubDate, 'YYYY M D'), +8);
return item;
})
diff --git a/lib/routes/hongkong/chp.ts b/lib/routes/hongkong/chp.ts
index 04de3eac81e6..916cd5f1d9cc 100644
--- a/lib/routes/hongkong/chp.ts
+++ b/lib/routes/hongkong/chp.ts
@@ -70,7 +70,7 @@ async function handler(ctx) {
url: apiUrl,
});
- const list = JSON.parse(response.data.match(/"data":(\[{.*}])}/)[1]).map((item) => {
+ const list = JSON.parse(response.data.match(/"data":(\[\{.*\}\])\}/)[1]).map((item) => {
let link: string;
if (item.UrlPath_en) {
diff --git a/lib/routes/hpoi/utils.ts b/lib/routes/hpoi/utils.ts
index 3ca6700c4200..5168114c2e71 100644
--- a/lib/routes/hpoi/utils.ts
+++ b/lib/routes/hpoi/utils.ts
@@ -24,7 +24,7 @@ const MAPs = {
};
const ProcessFeed = async (type, id, order) => {
- let link = MAPs[type].url.replace(/{id}/, id).replace(/{order}/, order || 'add');
+ let link = MAPs[type].url.replace(/\{id\}/, id).replace(/\{order\}/, order || 'add');
let response = await got({
method: 'get',
url: link,
@@ -35,7 +35,7 @@ const ProcessFeed = async (type, id, order) => {
let $ = load(response.data);
if (type === 'work') {
- const overviewLink = MAPs.overview.url.replace(/{id}/, id);
+ const overviewLink = MAPs.overview.url.replace(/\{id\}/, id);
const overviewResponse = await got({
method: 'get',
url: overviewLink,
diff --git a/lib/routes/hupu/utils.ts b/lib/routes/hupu/utils.ts
index 2e6dba7106c5..7cce28d1530d 100644
--- a/lib/routes/hupu/utils.ts
+++ b/lib/routes/hupu/utils.ts
@@ -238,8 +238,8 @@ export function getEntryDetails(item: DataItem): Promise {
// Possible formats: 10:21, 45分钟前, 09-15 19:57
const currentYear = new Date().getFullYear();
const currentDate = new Date();
- const monthDayTimePattern = /^(\d{2})-(\d{2}) (\d{2}):(\d{2})$/;
- const timeOnlyPattern = /^(\d{1,2}):(\d{2})$/;
+ const monthDayTimePattern = /^\d{2}-\d{2} \d{2}:\d{2}$/;
+ const timeOnlyPattern = /^\d{1,2}:\d{2}$/;
let processedDateString = pubDateString;
if (monthDayTimePattern.test(pubDateString)) {
diff --git a/lib/routes/hypergryph/arknights/arktca.ts b/lib/routes/hypergryph/arknights/arktca.ts
index 2a53156a8d92..53a08ca48efa 100644
--- a/lib/routes/hypergryph/arknights/arktca.ts
+++ b/lib/routes/hypergryph/arknights/arktca.ts
@@ -48,7 +48,7 @@ async function handler() {
allUrlList.map(async (item) => {
const { data: response } = await got(item);
const $$ = load(response);
- const regVol = /(?<=Vol. )(\w+)/;
+ const regVol = /(?<=Vol. )\w+/;
const match = regVol.exec($$('div.vp-page-title').find('h1').text());
const volume = match ? match[0] : '';
const links = $$('div.theme-hope-content > ul a')
diff --git a/lib/routes/ifeng/feng.ts b/lib/routes/ifeng/feng.ts
index edea32c3d7fe..3f5b86db2bb9 100644
--- a/lib/routes/ifeng/feng.ts
+++ b/lib/routes/ifeng/feng.ts
@@ -67,7 +67,7 @@ async function handler(ctx) {
const _allData = JSON.parse(
$('script')
.text()
- .match(/var allData = ({.*?});/)[1]
+ .match(/var allData = (\{.*?\});/)[1]
);
if (type === 'doc') {
item.description = extractDoc(_allData.docData.contentData.contentList);
diff --git a/lib/routes/ifeng/news.tsx b/lib/routes/ifeng/news.tsx
index b8b86ec9d35a..050b5119a27d 100644
--- a/lib/routes/ifeng/news.tsx
+++ b/lib/routes/ifeng/news.tsx
@@ -29,7 +29,7 @@ async function handler(ctx) {
const $ = load(response.data);
- const newsStream = JSON.parse(response.data.match(/"newsstream":(\[.*?]),"cooperation"/)[1]);
+ const newsStream = JSON.parse(response.data.match(/"newsstream":(\[.*?\]),"cooperation"/)[1]);
let items = newsStream.slice(0, limit).map((item) => ({
title: item.title,
@@ -47,9 +47,9 @@ async function handler(ctx) {
});
item.author = detailResponse.data.match(/"editorName":"(.*?)",/)[1];
- item.category = detailResponse.data.match(/},"keywords":"(.*?)",/)[1].split(',');
+ item.category = detailResponse.data.match(/\},"keywords":"(.*?)",/)[1].split(',');
const image = item.description;
- const description = JSON.parse(detailResponse.data.match(/"contentList":(\[.*?]),/)[1]).map((content) => content.data);
+ const description = JSON.parse(detailResponse.data.match(/"contentList":(\[.*?\]),/)[1]).map((content) => content.data);
item.description = renderToString(
<>
{image ? (
diff --git a/lib/routes/inewsweek/index.ts b/lib/routes/inewsweek/index.ts
index 24233919e50a..0fc92c9ca186 100644
--- a/lib/routes/inewsweek/index.ts
+++ b/lib/routes/inewsweek/index.ts
@@ -62,7 +62,7 @@ async function handler(ctx) {
parseDate(
$('div.editor')
.html()
- .split(/(\s\s+)/)[2]
+ .split(/(\s{2,})/)[2]
),
+8
);
diff --git a/lib/routes/iwara/utils.ts b/lib/routes/iwara/utils.ts
index 573e3a1ef114..90f05e4a3371 100644
--- a/lib/routes/iwara/utils.ts
+++ b/lib/routes/iwara/utils.ts
@@ -19,7 +19,7 @@ export const parseThumbnail = (type: 'video' | 'image', item: any) => {
}
// regex borrowed from https://stackoverflow.com/a/3726073
- const match = /https?:\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w-]*)(&(amp;)?[\w=?]*)?/.exec(item.embedUrl);
+ const match = /https?:\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w-]*)(?:&(?:amp;)?[\w=?]*)?/.exec(item.embedUrl);
if (match) {
return `
`;
}
diff --git a/lib/routes/ixigua/user-video.tsx b/lib/routes/ixigua/user-video.tsx
index 6e87671c00b4..0b0ad9cead79 100644
--- a/lib/routes/ixigua/user-video.tsx
+++ b/lib/routes/ixigua/user-video.tsx
@@ -44,7 +44,7 @@ async function handler(ctx) {
throw new Error('Failed to find SSR_HYDRATED_DATA');
}
- const jsonData = JSON.parse(jsData.match(/var\s+data\s*=\s*({.*?});/s)?.[1].replaceAll('undefined', 'null') || '{}');
+ const jsonData = JSON.parse(jsData.match(/var\s+data\s*=\s*(\{.*?\});/s)?.[1].replaceAll('undefined', 'null') || '{}');
const {
AuthorVideoList: { videoList: videoInfos },
diff --git a/lib/routes/jandan/utils.ts b/lib/routes/jandan/utils.ts
index 040d4ff00b5d..95af854819fa 100644
--- a/lib/routes/jandan/utils.ts
+++ b/lib/routes/jandan/utils.ts
@@ -20,7 +20,7 @@ export const extractPageId = async (url: string, referer: string): Promise {
const content = $(script).html() || '';
- const match = content.match(/PAGE\s*=\s*{\s*id\s*:\s*(\d+)\s*}/);
+ const match = content.match(/PAGE\s*=\s*\{\s*id\s*:\s*(\d+)\s*\}/);
if (match) {
pageId = match[1];
}
diff --git a/lib/routes/javbus/index.tsx b/lib/routes/javbus/index.tsx
index f5070c88b952..bef6d7791368 100644
--- a/lib/routes/javbus/index.tsx
+++ b/lib/routes/javbus/index.tsx
@@ -12,7 +12,7 @@ import got from '@/utils/got';
import { parseDate } from '@/utils/parse-date';
const toSize = (raw) => {
- const matches = raw.match(/(\d+(\.\d+)?)(\w+)/);
+ const matches = raw.match(/(\d+(\.\d+)?)(\D\w*)/);
return matches[3] === 'GB' ? matches[1] * 1024 : matches[1];
};
@@ -154,7 +154,7 @@ async function handler(ctx) {
// To fetch magnets.
try {
- const matches = detailResponse.data.match(/var gid = (\d+);[\S\s]*var uc = (\d+);[\S\s]*var img = '(.*)';/);
+ const matches = detailResponse.data.match(/var gid = (\d+);[\s\S]*var uc = (\d+);[\s\S]*var img = '(.*)';/);
const magnetResponse = await got({
method: 'get',
diff --git a/lib/routes/jiemian/common.tsx b/lib/routes/jiemian/common.tsx
index 1a226134008b..5ced6cb40a4f 100644
--- a/lib/routes/jiemian/common.tsx
+++ b/lib/routes/jiemian/common.tsx
@@ -34,7 +34,7 @@ export const handler = async (ctx): Promise => {
const href = item.prop('href');
const link = href ? (href.startsWith('/') ? new URL(href, rootUrl).href : href) : undefined;
- if (link && /\/(article|video)\/\w+\.html/.test(link)) {
+ if (link && /\/(?:article|video)\/\w+\.html/.test(link)) {
items[link] = {
title: item.text(),
link,
diff --git a/lib/routes/jike/user.ts b/lib/routes/jike/user.ts
index be9308c43155..dafa0a0b0f1a 100644
--- a/lib/routes/jike/user.ts
+++ b/lib/routes/jike/user.ts
@@ -139,7 +139,7 @@ async function handler(ctx) {
const single = {
title: `${typeMap[item.type]}了: ${shortenTitle}`,
- description: `${content}${linkTemplate}${imgTemplate}`.replace(/(
|\s)+$/, ''),
+ description: `${content}${linkTemplate}${imgTemplate}`.replace(/(?:
|\s)+$/, ''),
pubDate: parseDate(item.createdAt),
link: getLink(item.id, item.type),
_extra: repostContent && {
diff --git a/lib/routes/jike/utils.ts b/lib/routes/jike/utils.ts
index 9fbe7b082de0..9fa9653a9567 100644
--- a/lib/routes/jike/utils.ts
+++ b/lib/routes/jike/utils.ts
@@ -117,7 +117,7 @@ const topicDataHanding = (data, ctx) =>
// default:
// break;
// }
- const imgUrl = /\.[\da-z]+?\?imageMogr2/.test(pic.picUrl) ? pic.picUrl.split('?imageMogr2/')[0] : pic.picUrl.replace(/thumbnail\/.+/, '');
+ const imgUrl = /\.[\da-z]+\?imageMogr2/.test(pic.picUrl) ? pic.picUrl.split('?imageMogr2/')[0] : pic.picUrl.replace(/thumbnail\/.+/, '');
description += `
`;
// description += `
{
+ imgTag.replaceAll(/\b(src|data-src)="(?!http|\/\/)([^"]*)"/g, (_, attrName, relativePath) => {
const absoluteImageUrl = new URL(relativePath, baseUrl).href;
return `${attrName}="${absoluteImageUrl}"`;
})
diff --git a/lib/routes/kunchengblog/essay.ts b/lib/routes/kunchengblog/essay.ts
index 3bb85f90f8e6..82ef34f8ed33 100644
--- a/lib/routes/kunchengblog/essay.ts
+++ b/lib/routes/kunchengblog/essay.ts
@@ -53,7 +53,7 @@ async function handler(ctx) {
.map((item) => {
const source = consumer.sourceContentFor(item).replaceAll(/\s\n/g, '');
- const processedSource = source.replaceAll(/(\w+)={+([^{}]+)}+/g, (match, key, value) => {
+ const processedSource = source.replaceAll(/(\w+)=\{+([^{}]+)\}+/g, (match, key, value) => {
const processedValue = value.slice(1, -1).replaceAll('"', "'").trim();
return `${key}="${processedValue}"`;
});
diff --git a/lib/routes/leetcode/dailyquestion-solution-cn.ts b/lib/routes/leetcode/dailyquestion-solution-cn.ts
index eb19f5c5a5e9..bcc30f5b0677 100644
--- a/lib/routes/leetcode/dailyquestion-solution-cn.ts
+++ b/lib/routes/leetcode/dailyquestion-solution-cn.ts
@@ -186,7 +186,7 @@ async function handler() {
const handleText = (s) => {
// 处理多语言代码展示问题
- s = s.replaceAll(/(```)([\d#+A-Za-z-]+)\s*?(\[.*?])?\n/g, '\r\n###$2\r\n$1$2\r\n');
+ s = s.replaceAll(/(```)([\d#+A-Z-]+)\s*?(\[.*?\])?\n/gi, '\r\n###$2\r\n$1$2\r\n');
return s;
};
return {
diff --git a/lib/routes/lfsyd/utils.tsx b/lib/routes/lfsyd/utils.tsx
index 160de968bb64..0a5f05fe437a 100644
--- a/lib/routes/lfsyd/utils.tsx
+++ b/lib/routes/lfsyd/utils.tsx
@@ -46,7 +46,7 @@ const ProcessForm = (form, type) => {
};
const cleanHtml = (htmlString) => {
- const regex = /(|
)(.*?)?
(标准|狂野)日报投稿.*?<\/strong>(.*?)?(<\/p>|<\/div>)(.|\n)*$/;
+ const regex = /(|
)(.*?)
(标准|狂野)日报投稿.*?<\/strong>(.*?)(<\/p>|<\/div>)(.|\n)*$/;
const $ = load(htmlString.replace(regex, ''));
$('.yingdi-car,.bbspost,.deck-set').each((i, e) => {
diff --git a/lib/routes/line/utils.ts b/lib/routes/line/utils.ts
index 087ddc3655ab..190ab04615c1 100644
--- a/lib/routes/line/utils.ts
+++ b/lib/routes/line/utils.ts
@@ -20,7 +20,7 @@ const parseItems = (list) =>
Promise.all(
list.map((item) =>
cache.tryGet(item.link, async () => {
- const edition = item.link.match(/today\.line\.me\/(\w+?)\/v[23]\/.*$/)[1];
+ const edition = item.link.match(/today\.line\.me\/(\w+)\/v[23]\/.*$/)[1];
let data;
try {
const response = await got(`${baseUrl}/webapi/portal/page/setting/article`, {
diff --git a/lib/routes/lorientlejour/index.tsx b/lib/routes/lorientlejour/index.tsx
index 0d54c8adfd16..f996e275d600 100644
--- a/lib/routes/lorientlejour/index.tsx
+++ b/lib/routes/lorientlejour/index.tsx
@@ -86,7 +86,7 @@ async function viewCategory(category: string) {
}
async function handler(ctx) {
- const categoryId = (ctx.req.param('category') ?? '977-Lebanon').split('|').map((item) => item.match(/^(\d+)/i)[0] ?? item);
+ const categoryId = (ctx.req.param('category') ?? '977-Lebanon').split('|').map((item) => item.match(/^(\d+)/)[0] ?? item);
const limit = ctx.req.query('limit') ?? 25;
let token;
diff --git a/lib/routes/luolei/index.tsx b/lib/routes/luolei/index.tsx
index 49e7a0822c3f..50ce10c8b2fa 100644
--- a/lib/routes/luolei/index.tsx
+++ b/lib/routes/luolei/index.tsx
@@ -70,7 +70,7 @@ export const handler = async (ctx) => {
const { data: themeResponse } = await got(themeUrl);
let items = themeResponse
- .match(/{"title":".*?"string":".*?"}}/g)
+ .match(/\{"title":".*?"string":".*?"\}\}/g)
.slice(0, limit)
.map((item) => {
item = JSON.parse(
diff --git a/lib/routes/magazinelib/latest-magazine.tsx b/lib/routes/magazinelib/latest-magazine.tsx
index 2c101052cb56..ee1f4c4b1f07 100644
--- a/lib/routes/magazinelib/latest-magazine.tsx
+++ b/lib/routes/magazinelib/latest-magazine.tsx
@@ -46,7 +46,7 @@ async function handler(ctx) {
if (subTitle === undefined) {
subTitle = '';
} else {
- subTitle = subTitle.replaceAll(/[^\dA-Za-z]+/g, ' ').toUpperCase();
+ subTitle = subTitle.replaceAll(/[^\dA-Z]+/gi, ' ').toUpperCase();
subTitle = ` - ${subTitle}`;
}
diff --git a/lib/routes/mastodon/utils.ts b/lib/routes/mastodon/utils.ts
index 0bebaab81c85..8b33870b7731 100644
--- a/lib/routes/mastodon/utils.ts
+++ b/lib/routes/mastodon/utils.ts
@@ -40,8 +40,8 @@ const parseStatuses = (data) =>
const accountRepostedBy = item.reblog ? item.account : null;
item = item.reblog ?? item;
- const content = item.content ? item.content.replaceAll(/|<\/span.*?>/gm, '') : '';
- const contentRemovedHtml = content.replaceAll(/<(?:.|\n)*?>/gm, '\n');
+ const content = item.content ? item.content.replaceAll(/|<\/span.*?>/g, '') : '';
+ const contentRemovedHtml = content.replaceAll(/<(?:.|\n)*?>/g, '\n');
const author = `${item.account.display_name} (@${item.account.acct})`;
const link = item.url;
diff --git a/lib/routes/maven/central.ts b/lib/routes/maven/central.ts
index c6a1a6634824..dee6acf2c8b8 100644
--- a/lib/routes/maven/central.ts
+++ b/lib/routes/maven/central.ts
@@ -45,7 +45,7 @@ export const route: Route = {
* Handles cases without delimiters: 5.0.0beta2, 7.0.0canary
* Handles secondary versions: 1.0.0-M6.1
*/
-const UNSTABLE_VERSION_REGEX = /[-_.]?(rc|m|snapshot|alpha|beta|preview|canary)[.\d]*$/i;
+const UNSTABLE_VERSION_REGEX = /[-_.]?(?:rc|m|snapshot|alpha|beta|preview|canary)[.\d]*$/i;
/**
* Regex to extract date in the format YYYY-MM-DD HH:mm (e.g., 2024-09-22 04:19)
diff --git a/lib/routes/metacritic/index.tsx b/lib/routes/metacritic/index.tsx
index 9f402f8ced1a..4c867dab650e 100644
--- a/lib/routes/metacritic/index.tsx
+++ b/lib/routes/metacritic/index.tsx
@@ -81,7 +81,7 @@ async function handler(ctx) {
if (platforms.length || networks.length) {
const labels = {};
- const labelPattern = String.raw`{label:"([^"]+)",value:(\d+),href:a,meta:{mcDisplayWeight`;
+ const labelPattern = String.raw`\{label:"([^"]+)",value:(\d+),href:a,meta:\{mcDisplayWeight`;
for (const m of currentResponse.match(new RegExp(labelPattern, 'g'))) {
const matches = m.match(new RegExp(labelPattern));
diff --git a/lib/routes/meteor/utils.ts b/lib/routes/meteor/utils.ts
index 8b7de2293589..124f57a07b26 100644
--- a/lib/routes/meteor/utils.ts
+++ b/lib/routes/meteor/utils.ts
@@ -25,7 +25,7 @@ const getBoards = (tryGet) =>
});
const renderDesc = (desc) => {
- const youTube = /(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([\w-]+)&?/g;
+ const youTube = /(?:https?:\/\/)?(?:www\.)?youtu\.?be.*(?:v=|v\/|\/)([\w-]+)&?/g;
const matchYouTube = desc.match(youTube);
const matchImgur = desc.match(/https:\/\/i.imgur.com\/\w*.(jpg|png|gif|jpeg)/g);
const matchVideo = desc.match(/(https:\/\/storage\.meteor\.today\/video\/[\da-f]{24}\.)(mp4|mov|avi|flv|wmv|mpeg|mkv)/gi);
diff --git a/lib/routes/mirror/index.ts b/lib/routes/mirror/index.ts
index 658715621d53..4a0b4754af5b 100644
--- a/lib/routes/mirror/index.ts
+++ b/lib/routes/mirror/index.ts
@@ -39,7 +39,7 @@ async function handler(ctx) {
const response = await got(currentUrl);
- const data = JSON.parse(response.data.match(/"__NEXT_DATA__" type="application\/json">({"props":.*})<\/script>/)[1]);
+ const data = JSON.parse(response.data.match(/"__NEXT_DATA__" type="application\/json">(\{"props":.*\})<\/script>/)[1]);
const items = Object.keys(data.props.pageProps.__APOLLO_STATE__)
.filter((key) => key.startsWith('entry:'))
diff --git a/lib/routes/modelscope/community.tsx b/lib/routes/modelscope/community.tsx
index 341202c55389..4a7a5314a8ce 100644
--- a/lib/routes/modelscope/community.tsx
+++ b/lib/routes/modelscope/community.tsx
@@ -72,7 +72,7 @@ async function handler(ctx) {
const initialData = JSON.parse(
$('script')
.text()
- .match(/window\.__INITIAL_STATE__\s*=\s*({.*?});/)[1]
+ .match(/window\.__INITIAL_STATE__\s*=\s*(\{.*?\});/)[1]
);
item.description = renderDescription(item.thumb, item.description, initialData.pageData.detail.ext.content);
diff --git a/lib/routes/mrinalxdev/blog.ts b/lib/routes/mrinalxdev/blog.ts
index 5b2ff9c3d25e..e9485d133041 100644
--- a/lib/routes/mrinalxdev/blog.ts
+++ b/lib/routes/mrinalxdev/blog.ts
@@ -41,7 +41,7 @@ async function handler() {
const text = $el.text().trim();
// Extract date from link text (e.g., "2nd October, 2025 Redis 101 : From a Beginners POV")
- const dateMatch = text.match(/^(\d{1,2}(?:st|nd|rd|th)\s+\w+,\s+\d{4})\s+(.+)$/);
+ const dateMatch = text.match(/^(\d{1,2}(?:st|nd|rd|th)\s+\w+,\s+\d{4})\s+(\S.*)$/);
let date: string | undefined;
let title: string;
diff --git a/lib/routes/mydrivers/index.tsx b/lib/routes/mydrivers/index.tsx
index 9cabfc0395a3..b9754e5e1853 100644
--- a/lib/routes/mydrivers/index.tsx
+++ b/lib/routes/mydrivers/index.tsx
@@ -53,7 +53,7 @@ async function handler(ctx) {
let newTitle = '';
- if (!/^(\w+\/\w+)$/.test(category)) {
+ if (!/^\w+\/\w+$/.test(category)) {
newTitle = `${title} - ${Object.hasOwn(categories, category) ? categories[category] : categories[Object.keys(categories)[0]]}`;
category = `ac/${category}`;
}
diff --git a/lib/routes/mydrivers/rank.ts b/lib/routes/mydrivers/rank.ts
index 7f5f115ccedd..88da71f1fe2f 100644
--- a/lib/routes/mydrivers/rank.ts
+++ b/lib/routes/mydrivers/rank.ts
@@ -47,7 +47,7 @@ async function handler(ctx) {
let items = $('a')
.toArray()
- .filter((item) => /\/(\d+)\.html?/.test($(item).prop('href')))
+ .filter((item) => /\/\d+\.html?/.test($(item).prop('href')))
.slice(0, limit)
.map((item) => {
item = $(item);
diff --git a/lib/routes/natgeo/dailyphoto.tsx b/lib/routes/natgeo/dailyphoto.tsx
index 347b66384799..9357400224a1 100644
--- a/lib/routes/natgeo/dailyphoto.tsx
+++ b/lib/routes/natgeo/dailyphoto.tsx
@@ -51,7 +51,7 @@ async function handler() {
const response = await cache.tryGet(apiUrl, async () => (await got(apiUrl)).data, config.cache.contentExpire, false);
const $ = load(response);
- const natgeo = JSON.parse($.html().match(/window\['__natgeo__']=(.*);/)[1]);
+ const natgeo = JSON.parse($.html().match(/window\['__natgeo__'\]=(.*);/)[1]);
const media = natgeo.page.content.mediaspotlight.frms[0].mods[0].edgs[1].media;
const items = media.map((item) => ({
diff --git a/lib/routes/nationalgeographic/latest-stories.tsx b/lib/routes/nationalgeographic/latest-stories.tsx
index afda5cbc60cb..c3ba067ce433 100644
--- a/lib/routes/nationalgeographic/latest-stories.tsx
+++ b/lib/routes/nationalgeographic/latest-stories.tsx
@@ -11,7 +11,7 @@ const findNatgeo = ($) =>
JSON.parse(
$('script')
.text()
- .match(/\['__natgeo__']=({.*?});/)[1]
+ .match(/\['__natgeo__'\]=(\{.*?\});/)[1]
);
type StoryMedia = {
diff --git a/lib/routes/nature/utils.ts b/lib/routes/nature/utils.ts
index bebefabc07c2..f30ada7aab34 100644
--- a/lib/routes/nature/utils.ts
+++ b/lib/routes/nature/utils.ts
@@ -105,7 +105,7 @@ const getDataLayer = (html) =>
JSON.parse(
html('script[data-test=dataLayer]')
.text()
- .match(/window\.dataLayer = \[(.*)];/s)[1]
+ .match(/window\.dataLayer = \[(.*)\];/s)[1]
);
const cookieJar = new CookieJar();
diff --git a/lib/routes/ncpssd/newlist.ts b/lib/routes/ncpssd/newlist.ts
index 8201212a2b5a..61421915ce69 100644
--- a/lib/routes/ncpssd/newlist.ts
+++ b/lib/routes/ncpssd/newlist.ts
@@ -37,7 +37,7 @@ async function handler() {
const title = $(p)
.find('a')
.text()
- .replaceAll(/(\r\n|\n|\r)/gm, '')
+ .replaceAll(/(\r\n|\n|\r)/g, '')
.trim();
const articleUrl =
baseUrl +
diff --git a/lib/routes/neu/yz.ts b/lib/routes/neu/yz.ts
index 1b8ae5844b38..8e195936112a 100644
--- a/lib/routes/neu/yz.ts
+++ b/lib/routes/neu/yz.ts
@@ -40,7 +40,7 @@ const parsePage = async (items, type) => {
})(),
author: type === DOWNLOAD_ID ? DOWNLOAD_AUTHOR : '',
};
- if (type === DOWNLOAD_ID && /\.(pdf|docx?|xlsx?|zip|rar|7z)$/i.test(url)) {
+ if (type === DOWNLOAD_ID && /\.(?:pdf|docx?|xlsx?|zip|rar|7z)$/i.test(url)) {
resultItem.description = `
${title}
点击进入下载地址传送门~
diff --git a/lib/routes/nga/forum.ts b/lib/routes/nga/forum.ts
index 920454dc74a5..b7768df13848 100644
--- a/lib/routes/nga/forum.ts
+++ b/lib/routes/nga/forum.ts
@@ -35,11 +35,11 @@ async function handler(ctx) {
}
const formatContent = (content) =>
content
- .replaceAll(/\[img](.+?)\[\/img]/g, (match, p1) => {
+ .replaceAll(/\[img\](.+?)\[\/img\]/g, (match, p1) => {
const src = p1.replaceAll(/\?.*/g, '');
return `
`;
})
- .replaceAll(/\[url](.+?)\[\/url]/g, '$1');
+ .replaceAll(/\[url\](.+?)\[\/url\]/g, '$1');
const homePage = await got.post('https://ngabbs.com/app_api.php?__lib=subject&__act=list', {
headers: {
'X-User-Agent': X_UA,
diff --git a/lib/routes/nga/post.ts b/lib/routes/nga/post.ts
index 6f0a7782f287..a13284a4e482 100644
--- a/lib/routes/nga/post.ts
+++ b/lib/routes/nga/post.ts
@@ -48,7 +48,7 @@ async function handler(ctx) {
const getLastPageId = async (tid, authorId) => {
const $ = await getPage(tid, authorId);
const nav = $('#pagebtop');
- const match = nav.html().match(/{0:'\/read\.php\?tid=(\d+).*?',1:(\d+),.*?}/);
+ const match = nav.html().match(/\{0:'\/read\.php\?tid=(\d)[^']*',1:(\d+),[^}]*\}/);
return match ? match[2] : 1;
};
@@ -62,33 +62,33 @@ async function handler(ctx) {
const formatContent = (str) => {
// 简单样式
- str = deepReplace(str, /\[(b|u|i|del|code|sub|sup)](.+?)\[\/\1]/g, '<$1>$2$1>');
+ str = deepReplace(str, /\[([bui]|del|code|sub|sup)\](.+?)\[\/\1\]/g, '<$1>$2$1>');
str = str
- .replaceAll(/\[dice](.+?)\[\/dice]/g, 'ROLL : $1')
- .replaceAll(/\[color=(.+?)](.+?)\[\/color]/g, '$2')
- .replaceAll(/\[font=(.+?)](.+?)\[\/font]/g, '$2')
- .replaceAll(/\[size=(.+?)](.+?)\[\/size]/g, '$2')
- .replaceAll(/\[align=(.+?)](.+?)\[\/align]/g, '$2');
+ .replaceAll(/\[dice\](.+?)\[\/dice\]/g, 'ROLL : $1')
+ .replaceAll(/\[color=([^\]]+)\](.+?)\[\/color\]/g, '$2')
+ .replaceAll(/\[font=([^\]]+)\](.+?)\[\/font\]/g, '$2')
+ .replaceAll(/\[size=([^\]]+)\](.+?)\[\/size\]/g, '$2')
+ .replaceAll(/\[align=([^\]]+)\](.+?)\[\/align\]/g, '$2');
// 列表
- str = deepReplace(str, /\[\*](.+?)(?=\[\*]|\[\/list])/g, '$1');
- str = deepReplace(str, /\[list](.+?)\[\/list]/g, '');
+ str = deepReplace(str, /\[\*\](.+?)(?=\[\*\]|\[\/list\])/g, '$1');
+ str = deepReplace(str, /\[list\](.+?)\[\/list\]/g, '');
// 图片
- str = str.replaceAll(/\[img](.+?)\[\/img]/g, (m, src) => `
`);
+ str = str.replaceAll(/\[img\](.+?)\[\/img\]/g, (m, src) => `
`);
// 折叠
- str = deepReplace(str, /\[collapse(?:=(.+?))?](.+?)\[\/collapse]/g, '$1
$2 ');
+ str = deepReplace(str, /\[collapse(?:=([^\]]+))?\](.+?)\[\/collapse\]/g, '$1
$2 ');
// 引用
- str = deepReplace(str, /\[quote](.+?)\[\/quote]/g, '$1
')
- .replaceAll(/\[@(.+?)]/g, '@$1')
- .replaceAll(/\[uid=(\d+)](.+?)\[\/uid]/g, '@$2')
- .replaceAll(/\[tid=(\d+)](.+?)\[\/tid]/g, '$2')
- .replaceAll(/\[pid=(\d+),(\d+),(\d+)](.+?)\[\/pid]/g, (m, pid, tid, page, str) => {
+ str = deepReplace(str, /\[quote\](.+?)\[\/quote\]/g, '$1
')
+ .replaceAll(/\[@(.+?)\]/g, '@$1')
+ .replaceAll(/\[uid=(\d+)\](.+?)\[\/uid\]/g, '@$2')
+ .replaceAll(/\[tid=(\d+)\](.+?)\[\/tid\]/g, '$2')
+ .replaceAll(/\[pid=(\d+),(\d+),(\d+)\](.+?)\[\/pid\]/g, (m, pid, tid, page, str) => {
const url = `https://nga.178.com/read.php?tid=${tid}&page=${page}#pid${pid}Anchor`;
return `${str}`;
});
// 链接
- str = str.replaceAll(/\[url=(.+?)](.+?)\[\/url]/g, '$2');
+ str = str.replaceAll(/\[url=([^\]]+)\](.+?)\[\/url\]/g, '$2');
// 分割线
- str = str.replaceAll(/\[h](.+?)\[\/h]/g, '$1
');
+ str = str.replaceAll(/\[h\](.+?)\[\/h\]/g, '$1
');
return str;
};
diff --git a/lib/routes/nhentai/util.tsx b/lib/routes/nhentai/util.tsx
index aa953f25bea3..416e9b6a0eb5 100644
--- a/lib/routes/nhentai/util.tsx
+++ b/lib/routes/nhentai/util.tsx
@@ -148,7 +148,7 @@ const getDetail = async (simple) => {
const galleryImgs = $('.gallerythumb img')
.toArray()
.map((ele) => new URL($(ele).attr('data-src'), baseUrl).href)
- .map((src) => src.replace(/(.+)(\d+)t\.(.+)/, (_, p1, p2, p3) => `${p1}${p2}.${p3}`)) // thumb to high-quality
+ .map((src) => src.replace(/(.+)(\d)t\.(.+)/, (_, p1, p2, p3) => `${p1}${p2}.${p3}`)) // thumb to high-quality
.map((src) => src.replace(/t(\d+)\.nhentai\.net/, 'i$1.nhentai.net'))
.map((src) => src.replace(/\.(jpg|png|gif)\.webp$/, '.$1')) // 移除重複的.webp後綴
.map((src) => src.replace(/\.webp\.webp$/, '.webp')); // 處理.webp.webp的情況
diff --git a/lib/routes/nikkei/cn/index.ts b/lib/routes/nikkei/cn/index.ts
index 191a4e5105f9..4441eaea30d5 100644
--- a/lib/routes/nikkei/cn/index.ts
+++ b/lib/routes/nikkei/cn/index.ts
@@ -66,7 +66,7 @@ async function handler(ctx) {
let language: string;
let path = getSubPath(ctx);
- if (/^\/cn\/(cn|zh)/.test(path)) {
+ if (/^\/cn\/(?:cn|zh)/.test(path)) {
language = path.match(/^\/cn\/(cn|zh)/)[1];
path = path.match(new RegExp(String.raw`\/cn\/` + language + '(.*)'))[1];
} else {
diff --git a/lib/routes/nintendo/eshop-hk.ts b/lib/routes/nintendo/eshop-hk.ts
index 4b8607752c8c..4b4fd80f9e91 100644
--- a/lib/routes/nintendo/eshop-hk.ts
+++ b/lib/routes/nintendo/eshop-hk.ts
@@ -50,7 +50,7 @@ async function handler(ctx) {
const gallery = JSON.parse(
$('[type=text/x-magento-init]')
.text()
- .match(/{\n\s+"\[data-gal{2}ery-role=gal{2}ery-placeholder]": {\n\s+"mage(?:\/gal{2}ery){2}".*?}{4}(?:\s+}\n){3}/s)
+ .match(/\{\n\s+"\[data-gal{2}ery-role=gal{2}ery-placeholder\]": \{\n\s+"mage(?:\/gal{2}ery){2}".*?\}{4}(?:\s+\}\n){3}/s)
);
description = renderEshopHkDescription({
@@ -60,7 +60,7 @@ async function handler(ctx) {
host: 'store.nintendo.com.hk',
});
} else if (item.link.startsWith('https://ec.nintendo.com/')) {
- const jsonData = JSON.parse(response.match(/NXSTORE\.titleDetail\.jsonData = ({.*?});/)[1]);
+ const jsonData = JSON.parse(response.match(/NXSTORE\.titleDetail\.jsonData = (\{.*?\});/)[1]);
const { data: priceData } = await got('https://ec.nintendo.com/api/HK/zh/guest_prices', {
searchParams: {
ns_uids: jsonData.id,
diff --git a/lib/routes/nintendo/system-update.ts b/lib/routes/nintendo/system-update.ts
index c4fdb27667ea..149b470b7e27 100644
--- a/lib/routes/nintendo/system-update.ts
+++ b/lib/routes/nintendo/system-update.ts
@@ -47,7 +47,7 @@ async function handler() {
.toArray()
.map((element) => $(element).html())
.join('\n');
- const matched_version = /(\d\.)+\d/.exec(heading);
+ const matched_version = /(?:\d\.)+\d/.exec(heading);
return {
title: heading,
diff --git a/lib/routes/nowcoder/discuss.ts b/lib/routes/nowcoder/discuss.ts
index 458af092671f..2044b149a167 100644
--- a/lib/routes/nowcoder/discuss.ts
+++ b/lib/routes/nowcoder/discuss.ts
@@ -53,7 +53,7 @@ async function handler(ctx) {
const out = await Promise.all(
list.map((info) => {
const title = info.title || 'tzgg';
- const itemUrl = new URL(info.link, host).href.replace(/^(.*)\?(.*)$/, '$1');
+ const itemUrl = new URL(info.link, host).href.replace(/^([^\n\r\u2028\u2029]*)\?[^\n\r?\u2028\u2029]*$/, '$1');
return cache.tryGet(itemUrl, async () => {
const response = await got.get(itemUrl);
diff --git a/lib/routes/odaily/activity.ts b/lib/routes/odaily/activity.ts
index 554b90bfa24f..f401d4f60cab 100644
--- a/lib/routes/odaily/activity.ts
+++ b/lib/routes/odaily/activity.ts
@@ -54,7 +54,7 @@ async function handler(ctx) {
url: item.link,
});
- const content = load(detailResponse.data.match(/"content":"(.*)"}},"secondaryList":/)[1]);
+ const content = load(detailResponse.data.match(/"content":"(.*)"\}\},"secondaryList":/)[1]);
content('img').each((_, el) => {
content(el).attr(
diff --git a/lib/routes/odaily/post.ts b/lib/routes/odaily/post.ts
index c2cef7b46ce3..2de881e3c61c 100644
--- a/lib/routes/odaily/post.ts
+++ b/lib/routes/odaily/post.ts
@@ -68,7 +68,7 @@ async function handler(ctx) {
cache.tryGet(item.link, async () => {
const detailResponse = await got(item.link);
- const ssr = JSON.parse(`{${detailResponse.data.match(/window\.__INITIAL_STATE__ = {(.*)}/)[1]}}`);
+ const ssr = JSON.parse(`{${detailResponse.data.match(/window\.__INITIAL_STATE__ = \{(.*)\}/)[1]}}`);
const content = load(ssr.post.detail.content, null, false);
content('img').each((_, img) => {
diff --git a/lib/routes/oeeee/utils.ts b/lib/routes/oeeee/utils.ts
index 706dc335f70b..9f8217b060eb 100644
--- a/lib/routes/oeeee/utils.ts
+++ b/lib/routes/oeeee/utils.ts
@@ -20,7 +20,7 @@ const parseArticle = (item, tryGet) =>
item.description +=
content('.post-cont')
.html()
- .replaceAll(/data:image\S*=="\s*\n*\s*original="/g, '') ?? '';
+ .replaceAll(/data:image\S*=="\s*original="/g, '') ?? '';
if (!item.pubDate) {
item.pubDate = timezone(parseDate(content('.introduce').text().split()), +8);
}
diff --git a/lib/routes/outagereport/index.ts b/lib/routes/outagereport/index.ts
index d155a1876523..59a2ee124dc0 100644
--- a/lib/routes/outagereport/index.ts
+++ b/lib/routes/outagereport/index.ts
@@ -35,8 +35,8 @@ async function handler(ctx) {
// use RegExp because of irregular class name
const gaugeRegexp = /class="Gauge__Count.*?>(\d+)<\/text>/; // Core Pattern
- const gaugeTextRegexp = /class="Gauge__MessageWrapper.*?class="Gauge__Message.*?>(.*?)<\/span>/; // Core Pattern
- const rssDescribeRegexp = /){2,}/g, '
')
// ruby 標籤(為日文漢字標註讀音)
// ruby tags (for Japanese kanji readings)
- .replaceAll(/\[\[rb:(.*?)>(.*?)\]\]/g, '$1')
+ .replaceAll(/\[\[rb:([^>\n\r\u2028\u2029]*)>(.*?)\]\]/g, '$1')
// 外部連結
// external links
- .replaceAll(/\[\[jumpuri:(.*?)>(.*?)\]\]/g, '$1')
+ .replaceAll(/\[\[jumpuri:([^>\n\r\u2028\u2029]*)>(.*?)\]\]/g, '$1')
// 頁面跳轉,但由於 [newpage] 使用 hr 分隔,沒有頁數,沒必要跳轉,所以只顯示文字
// Page jumps, but since [newpage] uses hr separators, without the page numbers, jumping isn't needed, so just display text
.replaceAll(/\[jump:(\d+)\]/g, 'Jump to page $1')
diff --git a/lib/routes/playno1/av.ts b/lib/routes/playno1/av.ts
index 04956e769cc6..e0de6cf58cd1 100644
--- a/lib/routes/playno1/av.ts
+++ b/lib/routes/playno1/av.ts
@@ -56,7 +56,7 @@ async function handler(ctx) {
author: item
.find('.fire_right')
.text()
- .match(/作者:(.*)\s*\|/)[1]
+ .match(/作者:([^|]*)\|/)[1]
.trim(),
};
});
diff --git a/lib/routes/qingting/channel.ts b/lib/routes/qingting/channel.ts
index 6a9e47dfda9d..c1afb06fb42a 100644
--- a/lib/routes/qingting/channel.ts
+++ b/lib/routes/qingting/channel.ts
@@ -42,7 +42,7 @@ async function handler(ctx) {
items.map((item) =>
cache.tryGet(item.link, async () => {
response = await ofetch(item.link);
- const data = JSON.parse(response.match(/},"program":(.*?),"plist":/)[1]);
+ const data = JSON.parse(response.match(/\},"program":(.*?),"plist":/)[1]);
item.description = data.richtext;
return item;
})
diff --git a/lib/routes/qingting/podcast.ts b/lib/routes/qingting/podcast.ts
index b99513f3497b..bbde582e2d3e 100644
--- a/lib/routes/qingting/podcast.ts
+++ b/lib/routes/qingting/podcast.ts
@@ -83,7 +83,7 @@ async function handler(ctx) {
},
});
- const detail = JSON.parse(detailRes.match(/},"program":(.*?),"plist":/)[1]);
+ const detail = JSON.parse(detailRes.match(/\},"program":(.*?),"plist":/)[1]);
const rssItem = {
title: item.title,
diff --git a/lib/routes/quantamagazine/archive.ts b/lib/routes/quantamagazine/archive.ts
index c9bf893db74f..a383a60d6108 100644
--- a/lib/routes/quantamagazine/archive.ts
+++ b/lib/routes/quantamagazine/archive.ts
@@ -13,16 +13,16 @@ const processArticleContent = (html: string | null, articleLink?: string): strin
}
// Handle LaTeX formulas
- let processed = html.replaceAll(/\$latex([\S\s]+?)\$/g, '
');
+ let processed = html.replaceAll(/\$latex([\s\S]+?)\$/g, '
');
// Handle embedded images with captions
- processed = processed.replaceAll(/
?/g, (_match, src, cap) => {
+ processed = processed.replaceAll(/
?/g, (_match, src, cap) => {
const imgUrl = src.replaceAll(/\\([^nu])/g, '$1');
const img = `

`;
const noBS = cap.replaceAll(/\\([^nu])/g, '$1');
const removeNL = noBS.replaceAll(String.raw`\n`, '');
- const caption = removeNL.replaceAll(/\\u(\d{1,3}[a-z]\d?|\d{4}?)/g, (_omit, s) => String.fromCodePoint(Number.parseInt(s, 16)));
+ const caption = removeNL.replaceAll(/\\u(\d{1,3}[a-z]\d?|\d{4})/g, (_omit, s) => String.fromCodePoint(Number.parseInt(s, 16)));
return `
${img}${caption}`;
});
diff --git a/lib/routes/rawkuma/manga.tsx b/lib/routes/rawkuma/manga.tsx
index cbf47ff3bb8c..4c3783909664 100644
--- a/lib/routes/rawkuma/manga.tsx
+++ b/lib/routes/rawkuma/manga.tsx
@@ -70,7 +70,7 @@ async function handler(ctx) {
const content = load(detailResponse);
- const imageMatches = detailResponse.match(/"images":(\[.*?])}],"lazyload"/);
+ const imageMatches = detailResponse.match(/"images":(\[.*?\])\}\],"lazyload"/);
const images = imageMatches ? JSON.parse(imageMatches[1]) : [];
diff --git a/lib/routes/readhub/index.ts b/lib/routes/readhub/index.ts
index c5138ee4f608..689d162e27c4 100644
--- a/lib/routes/readhub/index.ts
+++ b/lib/routes/readhub/index.ts
@@ -37,7 +37,7 @@ async function handler(ctx) {
const { data: currentResponse } = await got(currentUrl);
- const type = currentResponse.match(/\[\\"type\\",\\"(\d+)\\",\\"d\\"]/)?.[1] ?? '1';
+ const type = currentResponse.match(/\[\\"type\\",\\"(\d+)\\",\\"d\\"\]/)?.[1] ?? '1';
const { data: response } = await got(apiTopicUrl, {
searchParams: {
diff --git a/lib/routes/readhub/util.ts b/lib/routes/readhub/util.ts
index 2bb28b445f60..825214c66fc5 100644
--- a/lib/routes/readhub/util.ts
+++ b/lib/routes/readhub/util.ts
@@ -26,7 +26,7 @@ const processItems = async (items, tryGet) =>
const { data: detailResponse } = await got(item.link);
- const data = JSON.parse(detailResponse.match(/{\\"topic\\":(.*?)}]\\n"]\)<\/script>/)[1].replaceAll(String.raw`\"`, '"'));
+ const data = JSON.parse(detailResponse.match(/\{\\"topic\\":(.*?)\}\]\\n"\]\)<\/script>/)[1].replaceAll(String.raw`\"`, '"'));
item.title = data.title;
item.link = data.url ?? new URL(`topic/${data.uid}`, rootUrl).href;
diff --git a/lib/routes/reuters/common.tsx b/lib/routes/reuters/common.tsx
index f440cf2a011c..1c8decff6586 100644
--- a/lib/routes/reuters/common.tsx
+++ b/lib/routes/reuters/common.tsx
@@ -288,7 +288,7 @@ async function handler(ctx) {
const matches = content('script#fusion-metadata')
.text()
- .match(/Fusion.globalContent=({[\S\s]*?});/);
+ .match(/Fusion.globalContent=(\{[\s\S]*?\});/);
if (matches) {
const data = JSON.parse(matches[1]);
@@ -310,7 +310,7 @@ async function handler(ctx) {
item.title = content('meta[property="og:title"]').attr('content');
item.pubDate = parseDate(detailResponse.data.match(/"datePublished":"(.*?)","dateModified/)[1]);
item.author = detailResponse.data
- .match(/{"@type":"Person","name":"(.*?)"}/g)
+ .match(/\{"@type":"Person","name":"(.*?)"\}/g)
.map((p) => p.match(/"name":"(.*?)"/)[1])
.join(', ');
item.description = content('article').html();
diff --git a/lib/routes/runyeah/posts.ts b/lib/routes/runyeah/posts.ts
index 5e241ff79f27..a21a477cdc83 100644
--- a/lib/routes/runyeah/posts.ts
+++ b/lib/routes/runyeah/posts.ts
@@ -29,7 +29,7 @@ async function handler(ctx) {
let data = response;
if (typeof response !== 'object') {
// remove php warnings before JSON
- data = JSON.parse(response.match(/\[(.*)]/)[0]);
+ data = JSON.parse(response.match(/\[(.*)\]/)[0]);
}
const items = data.map((item) => ({
diff --git a/lib/routes/shisu/en.ts b/lib/routes/shisu/en.ts
index 62438ea48cb4..5845a98a1fa3 100644
--- a/lib/routes/shisu/en.ts
+++ b/lib/routes/shisu/en.ts
@@ -49,8 +49,8 @@ async function process(baseUrl: string, section: any) {
const $ = load(r);
j.description = $('.details-con')
.html()!
- .replaceAll(/
[\S\s]*?<\/o:p>/g, '')
- .replaceAll(/(]*> <\/p>\s*)+/gm, '
');
+ .replaceAll(/[\s\S]*?<\/o:p>/g, '')
+ .replaceAll(/(]*> <\/p>\s*)+/g, '
');
return j;
})
)
diff --git a/lib/routes/sina/utils.tsx b/lib/routes/sina/utils.tsx
index e1a7c302596a..68c44e813e93 100644
--- a/lib/routes/sina/utils.tsx
+++ b/lib/routes/sina/utils.tsx
@@ -48,7 +48,7 @@ const parseArticle = (item, tryGet) =>
const slideData = JSON.parse(
$('script')
.text()
- .match(/var slide_data = ({.*?})\s/)[1]
+ .match(/var slide_data = (\{.*?\})\s/)[1]
);
item.description = renderToString(
<>
diff --git a/lib/routes/sis001/common.ts b/lib/routes/sis001/common.ts
index 1dbcb72911e3..89b8a12d7b32 100644
--- a/lib/routes/sis001/common.ts
+++ b/lib/routes/sis001/common.ts
@@ -53,7 +53,7 @@ async function getThread(cookie: string, item: DataItem) {
$('.postinfo')
.eq(0)
.text()
- .match(/发表于 (.*)\s*只看该作者/)[1],
+ .match(/发表于 (.*)(?:[\n\r\u2028\u2029]\s*)?只看该作者/)[1],
'YYYY-M-D HH:mm'
),
8
@@ -65,7 +65,7 @@ async function getThread(cookie: string, item: DataItem) {
.html()
?.replaceAll('\n', '')
.replaceAll(/\u3000{2}.+?(((?:
){2})|( ))/g, (str) => `${str.replaceAll('
', '')}
`)
- .replaceAll(/\u3000{6,}(.+?)<\/p>/g, '
$1
')
+ .replaceAll(/\u3000{6,}([^\u3000\n\r\u2028\u2029].*?|\u3000)<\/p>/g, '
$1
')
.replaceAll(' ', '')
.replace(/
+
/, '') + ($('.defaultpost .postattachlist').html() ?? '');
return item;
diff --git a/lib/routes/smartlink/index.ts b/lib/routes/smartlink/index.ts
index e0d04bebbb23..4fd221133adf 100644
--- a/lib/routes/smartlink/index.ts
+++ b/lib/routes/smartlink/index.ts
@@ -15,7 +15,7 @@ function parseTitle(smartlinkUrl: string): string {
let titleSlug = dateIndex !== -1 && dateIndex < pathSegments.length - 1 ? pathSegments[dateIndex + 1] : pathSegments.at(-1) || '';
// Remove .html/.htm extension if present
- titleSlug = titleSlug.replace(/\.(html?|htm)$/i, '');
+ titleSlug = titleSlug.replace(/\.(html?)$/i, '');
// Convert hyphens to spaces and capitalize each word
return toTitleCase(titleSlug.replaceAll('-', ' '));
diff --git a/lib/routes/sohu/mobile.ts b/lib/routes/sohu/mobile.ts
index 5fc65c0322d7..2d40aab9d6fc 100644
--- a/lib/routes/sohu/mobile.ts
+++ b/lib/routes/sohu/mobile.ts
@@ -36,7 +36,7 @@ async function handler() {
// 从HTML中提取JSON数据
const $ = cheerio.load(response);
const jsonScript = $('script:contains("WapHomeRenderData")').text();
- const jsonMatch = jsonScript?.match(/window\.WapHomeRenderData\s*=\s*({.*})/s);
+ const jsonMatch = jsonScript?.match(/window\.WapHomeRenderData\s*=\s*(\{.*\})/s);
if (!jsonMatch?.[1]) {
throw new Error('WapHomeRenderData 数据未找到');
}
diff --git a/lib/routes/sohu/mp.tsx b/lib/routes/sohu/mp.tsx
index 1b9a3a07eb4f..8b1cfdf4353a 100644
--- a/lib/routes/sohu/mp.tsx
+++ b/lib/routes/sohu/mp.tsx
@@ -140,7 +140,7 @@ async function handler(ctx) {
const blockRenderData = JSON.parse(
$('script:contains("column_2_text")')
.text()
- .match(/({.*})/)?.[1]
+ .match(/(\{.*\})/)?.[1]
);
const renderData = blockRenderData[Object.keys(blockRenderData).find((e) => e.startsWith('FeedSlideloadAuthor'))];
const briefIntroductionCard = blockRenderData[Object.keys(blockRenderData).find((e) => e.startsWith('BriefIntroductionCard'))].param.data.list[0];
diff --git a/lib/routes/solidot/_article.ts b/lib/routes/solidot/_article.ts
index 827570f18240..1dd70b9de099 100644
--- a/lib/routes/solidot/_article.ts
+++ b/lib/routes/solidot/_article.ts
@@ -18,7 +18,7 @@ export default async function get_article(url) {
const $ = load(data);
const date_raw = $('div.talk_time').clone().children().remove().end().text();
- const date_str_zh = date_raw.replaceAll(/^[^`]*发表于(.*分)[^`]*$/g, '$1'); // use [^`] to match \n
+ const date_str_zh = date_raw.replaceAll(/^[^`]*发表于(?=(.*分))\1[^`]*$/g, '$1'); // use [^`] to match \n
const date_str = date_str_zh
.replaceAll(/[年月]/g, '-')
.replaceAll('时', ':')
diff --git a/lib/routes/sony/downloads.ts b/lib/routes/sony/downloads.ts
index 0e6f89f42a14..f8cd5f114652 100644
--- a/lib/routes/sony/downloads.ts
+++ b/lib/routes/sony/downloads.ts
@@ -42,7 +42,7 @@ async function handler(ctx) {
const $ = load(data);
const contents = $('script:contains("window.__PRELOADED_STATE__.downloads")').text();
- const regex = /window\.__PRELOADED_STATE__\.downloads\s*=\s*({.*?});\s*window\.__PRELOADED_STATE__/s;
+ const regex = /window\.__PRELOADED_STATE__\.downloads\s*=\s*(\{.*?\});\s*window\.__PRELOADED_STATE__/s;
const match = contents.match(regex);
let results = {};
diff --git a/lib/routes/steam/curator.tsx b/lib/routes/steam/curator.tsx
index 7dd9d2e4ece7..03c969dd9834 100644
--- a/lib/routes/steam/curator.tsx
+++ b/lib/routes/steam/curator.tsx
@@ -62,7 +62,7 @@ Examples:
const reviewContent = el.find('.recommendation_desc').text().trim();
const reviewDateText = el.find('.curator_review_date').text().trim();
- const notCurrentYearPattern = /,\s\b\d{4}\b$/;
+ const notCurrentYearPattern = /,\s\d{4}$/;
const reviewPubDate = notCurrentYearPattern.test(reviewDateText) ? parseDate(reviewDateText) : parseDate(`${reviewDateText}, ${new Date().getFullYear()}`);
const description = renderToString();
diff --git a/lib/routes/steam/news.ts b/lib/routes/steam/news.ts
index ccc7c3970a9c..ed6894e806bb 100644
--- a/lib/routes/steam/news.ts
+++ b/lib/routes/steam/news.ts
@@ -179,12 +179,12 @@ const linebreakRenderer = (tree: BBobCoreTagNodeTree) =>
const plainUrlRenderer = (tree: BBobCoreTagNodeTree) =>
tree.walk((node) => {
- if (typeof node === 'string' && /https?:\/\/[^\s]+/.test(node)) {
+ if (typeof node === 'string' && /https?:\/\/\S+/.test(node)) {
let lastIndex = 0;
let match: RegExpExecArray | null;
const content: NodeContent[] = [];
- const urlRe = /https?:\/\/[^\s]+/g;
+ const urlRe = /https?:\/\/\S+/g;
while ((match = urlRe.exec(node)) !== null) {
if (match.index > lastIndex) {
content.push(node.slice(lastIndex, match.index));
@@ -250,7 +250,7 @@ const customPreset: PresetFactory = presetHTML5.extend((tags) => ({
previewyoutube: (node) => ({
tag: 'iframe',
attrs: {
- src: `https://www.youtube-nocookie.com/embed/${(getUniqAttr(node.attrs) as string).match(/[A-Za-z0-9_-]+/)?.[0]}`,
+ src: `https://www.youtube-nocookie.com/embed/${(getUniqAttr(node.attrs) as string).match(/[\w-]+/)?.[0]}`,
title: 'YouTube video player',
frameborder: '0',
allowFullScreen: '1',
diff --git a/lib/routes/steam/workshop-search.tsx b/lib/routes/steam/workshop-search.tsx
index ef49063c4722..cadf710862b8 100644
--- a/lib/routes/steam/workshop-search.tsx
+++ b/lib/routes/steam/workshop-search.tsx
@@ -66,7 +66,7 @@ Language Parameter:
// const script_tag = item.next('script');
// console.log(`script_tag:${script_tag.text()}`);
const hoverContent = item.next('script').text();
- const regex = /SharedFileBindMouseHover\(\s*"sharedfile_\d+",\s*(?:true|false),\s*({.*?})\s*\);/;
+ const regex = /SharedFileBindMouseHover\(\s*"sharedfile_\d+",\s*(?:true|false),\s*(\{.*?\})\s*\);/;
const match = hoverContent.match(regex);
let entryDescription = '';
diff --git a/lib/routes/supchina/index.ts b/lib/routes/supchina/index.ts
index a2965c0975cf..984ac98d5e04 100644
--- a/lib/routes/supchina/index.ts
+++ b/lib/routes/supchina/index.ts
@@ -43,7 +43,7 @@ async function handler(ctx) {
author: item
.find(String.raw`dc\:creator`)
.html()
- .match(/CDATA\[(.*?)]/)[1],
+ .match(/CDATA\[(.*?)\]/)[1],
category: item
.find('category')
.toArray()
@@ -51,7 +51,7 @@ async function handler(ctx) {
(c) =>
$(c)
.html()
- .match(/CDATA\[(.*?)]/)[1]
+ .match(/CDATA\[(.*?)\]/)[1]
),
pubDate: parseDate(item.find('pubDate').text()),
};
diff --git a/lib/routes/swjtu/gsee/yjs.ts b/lib/routes/swjtu/gsee/yjs.ts
index 5e2bd3feab6f..83515ddadfd4 100644
--- a/lib/routes/swjtu/gsee/yjs.ts
+++ b/lib/routes/swjtu/gsee/yjs.ts
@@ -13,7 +13,7 @@ const getItem = (item) => {
const newsDate = item
.find('dd')
.text()
- .match(/\d{4}(-|\/|.)\d{1,2}\1\d{1,2}/)[0];
+ .match(/\d{4}(.)\d{1,2}\1\d{1,2}/)[0];
const infoTitle = newsInfo.text();
const link = rootURL + newsInfo.find('a').last().attr('href').slice(2);
diff --git a/lib/routes/swjtu/scai.ts b/lib/routes/swjtu/scai.ts
index a9dcf8798327..45056316b18b 100644
--- a/lib/routes/swjtu/scai.ts
+++ b/lib/routes/swjtu/scai.ts
@@ -67,7 +67,7 @@ const getItem = (item, cache) => {
// 'date' may be undefined. and 'parseDate' will return current time.
// 转其他院的通知,获取不到具体时间,先从列表页获取具体信息
if (dateText) {
- const dateMatch = dateText.match(/\d{4}(-|\/|.)\d{1,2}\1\d{1,2}/);
+ const dateMatch = dateText.match(/\d{4}(.)\d{1,2}\1\d{1,2}/);
if (!dateMatch || !dateMatch[0]) {
return null;
}
diff --git a/lib/routes/swjtu/sports.ts b/lib/routes/swjtu/sports.ts
index edaaa63d52fa..c3967bc62e3b 100644
--- a/lib/routes/swjtu/sports.ts
+++ b/lib/routes/swjtu/sports.ts
@@ -44,7 +44,7 @@ const getItem = (item, cache) => {
$('div.info span:nth-of-type(3)')
.text()
.slice(3)
- .match(/\d{4}(-|\/|.)\d{1,2}\1\d{1,2}/)?.[0]
+ .match(/\d{4}(.)\d{1,2}\1\d{1,2}/)?.[0]
);
const description = $('div.detail-wrap').html();
return {
diff --git a/lib/routes/swpu/utils.ts b/lib/routes/swpu/utils.ts
index 11cb95227443..4ae3ccdd1d08 100644
--- a/lib/routes/swpu/utils.ts
+++ b/lib/routes/swpu/utils.ts
@@ -1,5 +1,5 @@
function isCompleteUrl(url) {
- return /^\w+?:\/\/.*?\//.test(url);
+ return /^\w+:\/\/.*?\//.test(url);
}
function joinUrl(url1, url2) {
diff --git a/lib/routes/szse/disclosure/listed-notice.ts b/lib/routes/szse/disclosure/listed-notice.ts
index 37dba801088b..075aec9875bd 100644
--- a/lib/routes/szse/disclosure/listed-notice.ts
+++ b/lib/routes/szse/disclosure/listed-notice.ts
@@ -10,7 +10,7 @@ import timezone from '@/utils/timezone';
function isValidDate(dateString: string): boolean {
// 正则表达式检查格式:YYYY-MM-DD
- const regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
+ const regex = /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;
if (!regex.test(dateString)) {
return false;
}
diff --git a/lib/routes/tass/news.ts b/lib/routes/tass/news.ts
index 8463e762ea9c..429298022372 100644
--- a/lib/routes/tass/news.ts
+++ b/lib/routes/tass/news.ts
@@ -40,7 +40,7 @@ async function handler(ctx) {
const sectionId = $('.container .section-page')
.attr('ng-init')
- .match(/sectionId\s*=\s*(\d+?);/);
+ .match(/sectionId\s*=\s*(\d+);/);
const { data: response } = await got.post('https://tass.com/userApi/categoryNewsList', {
json: {
diff --git a/lib/routes/tencent/news/author.tsx b/lib/routes/tencent/news/author.tsx
index 23de40840dc5..02c6da3bcfaf 100644
--- a/lib/routes/tencent/news/author.tsx
+++ b/lib/routes/tencent/news/author.tsx
@@ -68,7 +68,7 @@ async function handler(ctx): Promise {
const data = JSON.parse(
$('script:contains("window.DATA")')
.text()
- .match(/window\.DATA = ({.+});/)[1]
+ .match(/window\.DATA = (\{.+\});/)[1]
);
const $data = load(data.originContent?.text || '', null, false);
if ($data) {
diff --git a/lib/routes/tesla/cx.ts b/lib/routes/tesla/cx.ts
index 8ea59460c1e3..116fead80aa3 100644
--- a/lib/routes/tesla/cx.ts
+++ b/lib/routes/tesla/cx.ts
@@ -145,7 +145,7 @@ async function handler(ctx) {
alt: item.venueName ?? item.title,
}
: undefined,
- description: item.description?.replaceAll(/\["|"]/g, '') ?? undefined,
+ description: item.description?.replaceAll(/\["|"\]/g, '') ?? undefined,
data: item.parkingLocationId
? {
title: item.venueName ?? item.title,
diff --git a/lib/routes/threads/utils.ts b/lib/routes/threads/utils.ts
index d26a88751456..2570f653fa28 100644
--- a/lib/routes/threads/utils.ts
+++ b/lib/routes/threads/utils.ts
@@ -31,7 +31,7 @@ const extractTokens = async (user): Promise<{ lsd: string }> => {
const $ = load(response);
const data = $('script:contains("LSD"):first').text();
- const lsd = data.match(/"LSD",\[],{"token":"([\w@-]+)"},/)?.[1];
+ const lsd = data.match(/"LSD",\[\],\{"token":"([\w@-]+)"\},/)?.[1];
if (!lsd) {
throw new NotFoundError('LSD token not found');
diff --git a/lib/routes/transcriptforest/index.ts b/lib/routes/transcriptforest/index.ts
index 254f5492c5d9..072bc3506d37 100644
--- a/lib/routes/transcriptforest/index.ts
+++ b/lib/routes/transcriptforest/index.ts
@@ -41,7 +41,7 @@ async function handler(ctx) {
const { data: firstResponse } = await got(rootUrl);
- const data = JSON.parse(firstResponse.match(/({"props".*"scriptLoader":\[]})<\/script>/)?.[1]);
+ const data = JSON.parse(firstResponse.match(/(\{"props".*"scriptLoader":\[\]\})<\/script>/)?.[1]);
const buildId = data.buildId;
const defaultLocale = data.defaultLocale;
diff --git a/lib/routes/twitter/api/web-api/gql-id-resolver.ts b/lib/routes/twitter/api/web-api/gql-id-resolver.ts
index aac492bf1106..91c304c90040 100644
--- a/lib/routes/twitter/api/web-api/gql-id-resolver.ts
+++ b/lib/routes/twitter/api/web-api/gql-id-resolver.ts
@@ -30,7 +30,7 @@ async function fetchTwitterPage(): Promise {
function extractQueryIds(scriptContent: string): Record {
const ids: Record = {};
- const matches = scriptContent.matchAll(/queryId:"([^"]+?)".+?operationName:"([^"]+?)"/g);
+ const matches = scriptContent.matchAll(/queryId:"([^"]+)".+?operationName:"([^"]+)"/g);
for (const match of matches) {
const [, queryId, operationName] = match;
if (operationNames.includes(operationName)) {
diff --git a/lib/routes/twitter/utils.ts b/lib/routes/twitter/utils.ts
index afe8532f08ba..cadd107c0d70 100644
--- a/lib/routes/twitter/utils.ts
+++ b/lib/routes/twitter/utils.ts
@@ -11,7 +11,7 @@ const getOriginalImg = (url) => {
format = 'jpg';
}
return `${m[1]}?format=${format}&name=orig`;
- } else if ((m = url.match(/^(https?:\/\/\w+\.twimg\.com\/.+)(\?.+)$/i))) {
+ } else if ((m = url.match(/^(https?:\/\/\w+\.twimg\.com\/[^?]+)(\?.+)$/i))) {
const pars = getQueryParams(url);
if (!pars.format || !pars.name) {
return url;
diff --git a/lib/routes/txrjy/fornumtopic.tsx b/lib/routes/txrjy/fornumtopic.tsx
index 18ecdd6896bc..d3dcf242227e 100644
--- a/lib/routes/txrjy/fornumtopic.tsx
+++ b/lib/routes/txrjy/fornumtopic.tsx
@@ -70,12 +70,12 @@ async function handler(ctx) {
.remove()
.end()
.html()
- ?.replaceAll(/()/g, '$1$2')
+ ?.replaceAll(/()/g, '$1$2')
.replaceAll(/()/g, '$1src$2');
const pattlHtml = content(item)
.find('div.pattl')
.html()
- ?.replaceAll(/()/g, '$1$2')
+ ?.replaceAll(/()/g, '$1$2')
.replaceAll(/()/g, '$1src$2');
const author = content(item).find('a.xw1').text().trim();
diff --git a/lib/routes/udn/breaking-news.tsx b/lib/routes/udn/breaking-news.tsx
index 4fa9fe943a1e..85099d70fb86 100644
--- a/lib/routes/udn/breaking-news.tsx
+++ b/lib/routes/udn/breaking-news.tsx
@@ -62,7 +62,7 @@ async function handler(ctx) {
.eq(0)
.text()
.trim()
- .replaceAll(/[\b\t\n]/g, '');
+ .replaceAll(/[\t\n]/g, '');
const data = metadata.startsWith('[') ? JSON.parse(metadata)[0] : JSON.parse(metadata);
// e.g. https://udn.com/news/story/7331/6576320
const content = $('.article-content__editor');
@@ -90,7 +90,7 @@ async function handler(ctx) {
// 轉角24小時
description = $('.story_body_content')
.html()
- .split(//g)
+ .split(//g)
.slice(1, -1)
.join('');
}
diff --git a/lib/routes/upc/jwc.ts b/lib/routes/upc/jwc.ts
index b0c67c28dfc6..a69e5da01ec8 100644
--- a/lib/routes/upc/jwc.ts
+++ b/lib/routes/upc/jwc.ts
@@ -48,7 +48,7 @@ const handler = async (ctx) => {
const scriptContent = $('body script').first().html();
let dataObj = null;
if (scriptContent) {
- const match = scriptContent.match(/data\s*:\s*function\s*\(\)\s*{\s*return\s*{[^}]*data\s*:\s*({[\s\S]*?})/);
+ const match = scriptContent.match(/data\s*:\s*function\s*\(\)\s*\{\s*return\s*\{[^}]*data\s*:\s*(\{[\s\S]*?\})/);
if (match && match[1]) {
const dataStr = match[1];
dataObj = JSON.parse(dataStr);
diff --git a/lib/routes/ups/track.ts b/lib/routes/ups/track.ts
index 5421c6d30dde..e7646f54dd0c 100644
--- a/lib/routes/ups/track.ts
+++ b/lib/routes/ups/track.ts
@@ -68,7 +68,7 @@ async function handler(ctx) {
const dateTimeStr = dateTimeRaw
.trim()
- .replace(/(\d{1,}\/\d{1,}\/\d{4})(\d{1,}:\d{1,}\s[AP]\.?M\.?)/, '$1 $2')
+ .replace(/(\d+\/\d+\/\d{4})(\d+:\d+\s[AP]\.?M\.?)/, '$1 $2')
.replaceAll('P.M.', 'PM')
.replaceAll('A.M.', 'AM');
@@ -78,7 +78,7 @@ async function handler(ctx) {
.find(`#stApp_milestoneActivityLocation${i}`)
.text()
.trim()
- .replaceAll(/\s*\n+\s*/g, '\n');
+ .replaceAll(/\s*\n\s*/g, '\n');
const lines = activityCellText
.split('\n')
diff --git a/lib/routes/uptimerobot/rss.tsx b/lib/routes/uptimerobot/rss.tsx
index 6b1afae07eb9..a5fdbdd8e912 100644
--- a/lib/routes/uptimerobot/rss.tsx
+++ b/lib/routes/uptimerobot/rss.tsx
@@ -6,7 +6,7 @@ import InvalidParameterError from '@/errors/types/invalid-parameter';
import type { Route } from '@/types';
import { fallback, queryToBoolean } from '@/utils/readable-social';
-const titleRegex = /(.+)\s+is\s+([A-Z]+)\s+\((.+)\)/;
+const titleRegex = /(.*\S)\s+is\s+([A-Z]+)\s+\((.+)\)/;
const formatTime = (s) => {
const duration = dayjs.duration(s - 0, 'seconds');
diff --git a/lib/routes/vcb-s/category.ts b/lib/routes/vcb-s/category.ts
index bfd8880b927c..890a15845153 100644
--- a/lib/routes/vcb-s/category.ts
+++ b/lib/routes/vcb-s/category.ts
@@ -59,7 +59,7 @@ async function handler(ctx) {
const items = data.map((item) => {
const description = renderDescription({
- post: item.content.rendered.replaceAll(/]*>(.*?)<\/pre>/gs, '$1
').replaceAll(/]+>(.*?)<\/div>/gs, '$1
'),
medias: item._embedded['wp:featuredmedia'],
});
diff --git a/lib/routes/vcb-s/index.ts b/lib/routes/vcb-s/index.ts
index df8ec6c9f6aa..1895f826d270 100644
--- a/lib/routes/vcb-s/index.ts
+++ b/lib/routes/vcb-s/index.ts
@@ -33,7 +33,7 @@ async function handler(ctx) {
const items = data.map((item) => {
const description = renderDescription({
- post: item.content.rendered.replaceAll(/]*>(.*?)<\/pre>/gs, '$1
').replaceAll(/]+>(.*?)<\/div>/gs, '$1
'),
medias: item._embedded['wp:featuredmedia'],
});
diff --git a/lib/routes/weibo/utils.ts b/lib/routes/weibo/utils.ts
index c4df2ea2fd19..67511437dcb4 100644
--- a/lib/routes/weibo/utils.ts
+++ b/lib/routes/weibo/utils.ts
@@ -26,11 +26,11 @@ const formatDescriptionText = (html, { showEmojiInDescription, showLinkIconInDes
let formattedHtml = html;
if (!showEmojiInDescription) {
- formattedHtml = formattedHtml.replaceAll(/
]*?alt=["']?([^>]+?)["']?\s[^>]*?\/><\/span>/g, '$1');
+ formattedHtml = formattedHtml.replaceAll(/
]*?alt=["']?([^>\s"']+)["']?\s[^>]*?\/><\/span>/g, '$1');
}
if (!showLinkIconInDescription) {
- formattedHtml = formattedHtml.replaceAll(/(]*>)
]*><\/span>[^<>]*?([^<>]*?)<\/span><\/a>/g, '$1$2');
+ formattedHtml = formattedHtml.replaceAll(/(]*>)
]*><\/span>[^<>]*([^<>]*)<\/span><\/a>/g, '$1$2');
}
return formattedHtml;
@@ -141,7 +141,7 @@ const weiboUtils = {
})(),
formatTitle: (html) =>
html
- .replaceAll(/
]*?alt=["']?([^>]+?)["']?\s[^>]*?\/?><\/span>/g, '$1') // 表情转换
+ .replaceAll(/
]*?alt=["']?([^>\s"']+)["']?\s[^>]*?\/?><\/span>/g, '$1') // 表情转换
.replaceAll(/(
]*>)<\/span>/g, '') // 去掉所有图标
.replaceAll(/
/g, '[图片]')
// impossible to have inline script in weibo posts, but CodeQL complains about it
diff --git a/lib/routes/wenku8/volume.ts b/lib/routes/wenku8/volume.ts
index ff0381de503a..addd9ea65c91 100644
--- a/lib/routes/wenku8/volume.ts
+++ b/lib/routes/wenku8/volume.ts
@@ -42,7 +42,7 @@ async function handler(ctx) {
title: `轻小说文库 ${$('#title').text()} 最新卷`,
link,
item: await cache.tryGet(volumeUrl, async () =>
- [...(await get(volumeUrl)).matchAll(/\s{2}(\S.*)\r?\n([\S\s]+?)\r?\n\r?\n/g)]
+ [...(await get(volumeUrl)).matchAll(/\s{2}(\S.*)\r?\n([\s\S]+?)\r?\n\r?\n/g)]
.map((chapter, index) => ({
title: chapter[1],
description: chapter[2]
diff --git a/lib/routes/wfu/news.ts b/lib/routes/wfu/news.ts
index c1945c2a7073..613e796ed73a 100644
--- a/lib/routes/wfu/news.ts
+++ b/lib/routes/wfu/news.ts
@@ -24,7 +24,7 @@ async function loadContent(link) {
let response;
// 如果不是 大学的站点, 直接返回简单的标题即可
// 判断 是否外站链接,如果是 则直接返回页面 不做单独的解析
- const https_reg = /^https:\/\/www.wfu.edu.cn(.*)/;
+ const https_reg = /^https:\/\/www\.wfu\.edu\.cn\/.*/;
if (!https_reg.test(link)) {
return { description };
}
diff --git a/lib/routes/wikipedia/current-events.ts b/lib/routes/wikipedia/current-events.ts
index 8ae433d945ec..82cd50125781 100644
--- a/lib/routes/wikipedia/current-events.ts
+++ b/lib/routes/wikipedia/current-events.ts
@@ -51,12 +51,12 @@ function parseCurrentEventsTemplate(wikitext: string): string | null {
// Look for {{Current events|content=...}} template
// The closing }} is always at the end of wikitext
- const contentMatch = wikitext.match(/\{\{Current events\s*\|[\s\S]*?content\s*=\s*([\s\S]*)\}\}$/);
+ const contentMatch = wikitext.match(/\{\{Current events\s*\|[\s\S]*?content(?=(\s*=))\1\s*((?:\S[\s\S]*)?)\}\}$/);
if (!contentMatch) {
return null;
}
- let content = contentMatch[1].trim();
+ let content = contentMatch[2].trim();
// Strip comments to detect empty content
content = stripComments(content);
@@ -84,7 +84,7 @@ function convertWikiLinks(html: string): string {
function convertExternalLinks(html: string): string {
// Convert external links [URL Text] or [URL]
- html = html.replaceAll(/\[([^\s\]]+)\s+([^\]]+)\]/g, '$2');
+ html = html.replaceAll(/\[([^\s\]]+)\s+([^\s\]][^\]]*|\s)\]/g, '$2');
html = html.replaceAll(/\[([^\s\]]+)\]/g, '$1');
return html;
}
@@ -186,7 +186,7 @@ function processListsAndLines(html: string): string {
}
// Check for bullet points
- const bulletMatch = trimmedLine.match(/^(\*+)\s*(.*)$/);
+ const bulletMatch = trimmedLine.match(/^(\*+)(?!\*)\s*((?:\S.*)?)$/);
if (bulletMatch) {
const depth = bulletMatch[1].length;
const content = bulletMatch[2];
diff --git a/lib/routes/wmc-bj/publish.tsx b/lib/routes/wmc-bj/publish.tsx
index e16afd07207e..822fa2653b67 100644
--- a/lib/routes/wmc-bj/publish.tsx
+++ b/lib/routes/wmc-bj/publish.tsx
@@ -46,7 +46,7 @@ async function handler(ctx) {
),
category: categories,
guid: `${currentUrl}#${datetime}`,
- pubDate: timezone(parseDate(/^[A-Za-z]{3}/.test(datetime) ? datetime.replace(/^\w+/, '') : datetime, ['DD MMM HH:mm', 'MM/DD HH:mm']), +0),
+ pubDate: timezone(parseDate(/^[A-Z]{3}/i.test(datetime) ? datetime.replace(/^\w+/, '') : datetime, ['DD MMM HH:mm', 'MM/DD HH:mm']), +0),
},
];
diff --git a/lib/routes/wnacg/common.tsx b/lib/routes/wnacg/common.tsx
index 16cf18bfbce6..5c1edf68e0fb 100644
--- a/lib/routes/wnacg/common.tsx
+++ b/lib/routes/wnacg/common.tsx
@@ -85,7 +85,7 @@ export async function handler(ctx) {
const imgListMatch = $('script')
.text()
- .match(/var imglist = (\[.*]);"\);/)[1];
+ .match(/var imglist = (\[.*\]);"\);/)[1];
const imgList = JSON.parse(imgListMatch.replaceAll('url:', '"url":').replaceAll('caption:', '"caption":').replaceAll('fast_img_host+\\', '').replaceAll('\\', ''));
diff --git a/lib/routes/wordpress/index.ts b/lib/routes/wordpress/index.ts
index a0558f897558..225f0d44d4f0 100644
--- a/lib/routes/wordpress/index.ts
+++ b/lib/routes/wordpress/index.ts
@@ -17,7 +17,7 @@ async function handler(ctx) {
throw new ConfigNotFoundError(`This RSS is disabled unless 'ALLOW_USER_SUPPLY_UNSAFE_DOMAIN' is set to 'true'.`);
}
- if (!/^(https?):\/\/[^\s#$./?].\S*$/i.test(url)) {
+ if (!/^https?:\/\/[^\s#$./?].\S*$/i.test(url)) {
throw new Error('Invalid URL');
}
@@ -39,7 +39,7 @@ async function handler(ctx) {
try {
const { data: response } = await got(apiUrl);
- const items = (Array.isArray(response) ? response : JSON.parse(response.match(/(\[.*])$/)[1])).slice(0, limit).map((item) => {
+ const items = (Array.isArray(response) ? response : JSON.parse(response.match(/(\[.*\])$/)[1])).slice(0, limit).map((item) => {
const terminologies = item._embedded['wp:term'];
const guid = item.guid?.rendered ?? item.guid;
diff --git a/lib/routes/wsj/news.ts b/lib/routes/wsj/news.ts
index c9c575f0e119..034cc4016e7b 100644
--- a/lib/routes/wsj/news.ts
+++ b/lib/routes/wsj/news.ts
@@ -59,7 +59,7 @@ async function handler(ctx) {
const $ = load(response.data);
const contents = $('script:contains("window.__STATE__")').text();
- const data = JSON.parse(contents.match(/{.*}/)[0]).data;
+ const data = JSON.parse(contents.match(/\{.*\}/)[0]).data;
const filteredKeys = Object.entries(data)
.filter(([key, value]) => {
if (!key.startsWith('article')) {
diff --git a/lib/routes/xaufe/jiaowu.ts b/lib/routes/xaufe/jiaowu.ts
index 6f8a568aa059..43cac6d1cf95 100644
--- a/lib/routes/xaufe/jiaowu.ts
+++ b/lib/routes/xaufe/jiaowu.ts
@@ -80,7 +80,7 @@ async function handler(ctx) {
url: item.link,
});
const $ = load(response.body);
- item.author = /作者:(\S*)\s{4}/g.exec($('p', '.main_contit').text())[1];
+ item.author = /作者:(\S*)\s{4}/.exec($('p', '.main_contit').text())[1];
item.description = $('#vsb_content').html();
return item;
})
diff --git a/lib/routes/xhamster/index.ts b/lib/routes/xhamster/index.ts
index c92562d5a00c..144b6d36444a 100644
--- a/lib/routes/xhamster/index.ts
+++ b/lib/routes/xhamster/index.ts
@@ -60,7 +60,7 @@ interface Initials {
}
function extractInitials(scriptContent: string): Initials {
- const match = scriptContent.match(/window\.initials\s*=\s*([\s\S]*?);?$/);
+ const match = scriptContent.match(/window\.initials\s*=\s*(\S[\s\S]*?);?$/);
if (!match) {
throw new Error('initials not found');
}
diff --git a/lib/routes/xinpianchang/index.ts b/lib/routes/xinpianchang/index.ts
index 55a662320595..3509d86e8312 100644
--- a/lib/routes/xinpianchang/index.ts
+++ b/lib/routes/xinpianchang/index.ts
@@ -34,7 +34,7 @@ async function handler(ctx) {
const { data, response } = await getData(currentUrl, cache.tryGet);
- let items = JSON.parse(response.match(/"list":(\[.*?]),"total"/)[1]);
+ let items = JSON.parse(response.match(/"list":(\[.*?\]),"total"/)[1]);
items = await processItems(items.slice(0, limit), cache.tryGet);
diff --git a/lib/routes/xueqiu/snb.ts b/lib/routes/xueqiu/snb.ts
index 141f971b2657..32ac6e1abf62 100644
--- a/lib/routes/xueqiu/snb.ts
+++ b/lib/routes/xueqiu/snb.ts
@@ -35,7 +35,7 @@ async function handler(ctx) {
});
const data = response.data;
- const pattern = /SNB.cubeInfo = {(.+)}/;
+ const pattern = /SNB.cubeInfo = \{(.+)\}/;
const info = pattern.exec(data);
const obj = JSON.parse('{' + info[1] + '}');
const rebalancing_histories = obj.sell_rebalancing.rebalancing_histories;
diff --git a/lib/routes/xueqiu/user.ts b/lib/routes/xueqiu/user.ts
index 5b111f133908..641d81f902f7 100644
--- a/lib/routes/xueqiu/user.ts
+++ b/lib/routes/xueqiu/user.ts
@@ -92,7 +92,7 @@ async function handler(ctx) {
const content = await mainPage.evaluate(() => {
const articleContent = document.querySelector('.article__bd')?.innerHTML || '';
- const statusMatch = document.documentElement.innerHTML.match(/SNOWMAN_STATUS = (.*?});/);
+ const statusMatch = document.documentElement.innerHTML.match(/SNOWMAN_STATUS = (.*?\});/);
return {
articleContent,
statusData: statusMatch ? statusMatch[1] : null,
diff --git a/lib/routes/xys/new.tsx b/lib/routes/xys/new.tsx
index 921714e76537..c50e50dfdff5 100644
--- a/lib/routes/xys/new.tsx
+++ b/lib/routes/xys/new.tsx
@@ -67,7 +67,7 @@ async function handler(ctx) {
.filter((item) => !item.link.endsWith('.zip'))
.map((item) =>
cache.tryGet(item.link, async () => {
- const youTube = /(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([\w-]+)&?/g;
+ const youTube = /(?:https?:\/\/)?(?:www\.)?youtu\.?be.*(?:v=|v\/|\/)([\w-]+)&?/g;
const matchYoutube = item.link.match(youTube);
if (matchYoutube) {
diff --git a/lib/routes/yamibo/utils.ts b/lib/routes/yamibo/utils.ts
index 437d5d14a114..1fcdb07f4900 100644
--- a/lib/routes/yamibo/utils.ts
+++ b/lib/routes/yamibo/utils.ts
@@ -45,12 +45,12 @@ export async function fetchThread(
// sometimes may trigger anti-crawling measures
if (data.startsWith('