diff --git a/lib/routes/500px/tribe-set.ts b/lib/routes/500px/tribe-set.ts
index 57d6f7f06bb92b..c157f336940a7a 100644
--- a/lib/routes/500px/tribe-set.ts
+++ b/lib/routes/500px/tribe-set.ts
@@ -2,7 +2,6 @@ import { Route } from '@/types';
import { getCurrentPath } from '@/utils/helpers';
const __dirname = getCurrentPath(import.meta.url);
-import cache from '@/utils/cache';
import { parseDate } from '@/utils/parse-date';
import { art } from '@/utils/render';
import path from 'node:path';
@@ -14,14 +13,6 @@ export const route: Route = {
categories: ['picture'],
example: '/500px/tribe/set/f5de0b8aa6d54ec486f5e79616418001',
parameters: { id: '部落 ID' },
- features: {
- requireConfig: false,
- requirePuppeteer: false,
- antiCrawler: false,
- supportBT: false,
- supportPodcast: false,
- supportScihub: false,
- },
name: '部落影集',
maintainers: ['TonyRL'],
handler,
@@ -31,8 +22,8 @@ async function handler(ctx) {
const id = ctx.req.param('id');
const limit = Number.parseInt(ctx.req.query('limit')) || 100;
- const { tribe } = await getTribeDetail(id, cache.tryGet);
- const tribeSets = await getTribeSets(id, limit, cache.tryGet);
+ const { tribe } = await getTribeDetail(id);
+ const tribeSets = await getTribeSets(id, limit);
const items = tribeSets.map((item) => ({
title: item.title,
diff --git a/lib/routes/500px/user.ts b/lib/routes/500px/user.ts
deleted file mode 100644
index 1a4a9686e80fc8..00000000000000
--- a/lib/routes/500px/user.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Route } from '@/types';
-import { getCurrentPath } from '@/utils/helpers';
-const __dirname = getCurrentPath(import.meta.url);
-
-import cache from '@/utils/cache';
-import { art } from '@/utils/render';
-import { parseDate } from '@/utils/parse-date';
-import path from 'node:path';
-import { baseUrl, getUserInfoFromUsername, getUserInfoFromId, getUserWorks } from './utils';
-
-export const route: Route = {
- path: '/user/works/:id',
- categories: ['picture'],
- example: '/500px/user/works/hujunli',
- parameters: { id: '摄影师 ID' },
- features: {
- requireConfig: false,
- requirePuppeteer: false,
- antiCrawler: false,
- supportBT: false,
- supportPodcast: false,
- supportScihub: false,
- },
- radar: [
- {
- source: ['500px.com.cn/:id', '500px.com.cn/community/user-details/:id', '500px.com.cn/community/user-details/:id/*'],
- },
- ],
- name: '摄影师作品',
- maintainers: ['TonyRL'],
- handler,
-};
-
-async function handler(ctx) {
- let { id } = ctx.req.param();
- const limit = Number.parseInt(ctx.req.query('limit')) || 100;
-
- if (id.length !== 33) {
- id = (await getUserInfoFromUsername(id, cache.tryGet)).id;
- }
-
- const userInfo = await getUserInfoFromId(id, cache.tryGet);
- const userWorks = await getUserWorks(id, limit, cache.tryGet);
-
- const items = userWorks.map((item) => ({
- title: item.title || '无题',
- description: art(path.join(__dirname, 'templates/user.art'), { item }),
- author: item.uploaderInfo.nickName,
- pubDate: parseDate(item.createdTime, 'x'),
- link: `${baseUrl}/community/photo-details/${item.id}`,
- }));
-
- return {
- title: userInfo.nickName,
- description: userInfo.about,
- image: userInfo.avatar.a1,
- link: `${baseUrl}/${id}`,
- item: items,
- };
-}
diff --git a/lib/routes/500px/utils.ts b/lib/routes/500px/utils.ts
index a540a755d06f69..420f97a9f6f9f0 100644
--- a/lib/routes/500px/utils.ts
+++ b/lib/routes/500px/utils.ts
@@ -1,4 +1,5 @@
-import got from '@/utils/got';
+import ofetch from '@/utils/ofetch';
+import cache from '@/utils/cache';
import { load } from 'cheerio';
import { config } from '@/config';
@@ -24,39 +25,39 @@ const headers = {
'X-Tingyun-Id': `Fm3hXcTiLT8;r=${Date.now() % 1e8}`,
};
-const getUserInfoFromUsername = (username, tryGet) =>
- tryGet(`500px:user:${username}`, async () => {
- const { data } = await got(`${baseUrl}/${username}`);
+const getUserInfoFromUsername = (username) =>
+ cache.tryGet(`500px:user:${username}`, async () => {
+ const data = await ofetch(`${baseUrl}/${username}`);
const $ = load(data);
return JSON.parse(
$('script[type="text/javascript"]')
.text()
- .match(/var cur_user = new Object\((.*?)\);/)[1]
+ .match(/var cur_user = new Object\((.*?)\);/)?.[1] || '{}'
);
});
-const getUserInfoFromId = (id, tryGet) =>
- tryGet(`500px:user:indexInfo:${id}`, async () => {
- const { data } = await got(`${baseUrl}/community/v2/user/indexInfo`, {
+const getUserInfoFromId = (id) =>
+ cache.tryGet(`500px:user:indexInfo:${id}`, async () => {
+ const data = await ofetch(`${baseUrl}/community/v2/user/indexInfo`, {
headers: {
...headers,
},
- searchParams: {
+ query: {
queriedUserId: id,
},
});
return data.data;
});
-const getUserWorks = (id, limit, tryGet) =>
- tryGet(
+const getUserWorks = (id, limit) =>
+ cache.tryGet(
`500px:user:profile:${id}`,
async () => {
- const { data } = await got(`${baseUrl}/community/v2/user/profile`, {
+ const data = await ofetch(`${baseUrl}/community/v2/user/profile`, {
headers: {
...headers,
},
- searchParams: {
+ query: {
resourceType: '0,2,4',
imgsize: 'p1,p2,p3,p4',
queriedUserId: id,
@@ -66,21 +67,21 @@ const getUserWorks = (id, limit, tryGet) =>
type: 'json',
},
});
- return data.data;
+ return data;
},
config.cache.routeExpire,
false
);
-const getTribeDetail = (id, tryGet) =>
- tryGet(
+const getTribeDetail = (id) =>
+ cache.tryGet(
`500px:tribeDetail:${id}`,
async () => {
- const { data } = await got(`${baseUrl}/community/tribe/tribeDetail`, {
+ const data = await ofetch(`${baseUrl}/community/tribe/tribeDetail`, {
headers: {
...headers,
},
- searchParams: {
+ query: {
tribeId: id,
},
});
@@ -90,15 +91,15 @@ const getTribeDetail = (id, tryGet) =>
false
);
-const getTribeSets = (id, limit, tryGet) =>
- tryGet(
+const getTribeSets = (id, limit) =>
+ cache.tryGet(
`500px:tribeSets:${id}`,
async () => {
- const { data } = await got(`${baseUrl}/community/tribe/getTribeSetsV2`, {
+ const data = await ofetch(`${baseUrl}/community/tribe/getTribeSetsV2`, {
headers: {
...headers,
},
- searchParams: {
+ query: {
tribeId: id,
privacy: 1,
page: 1,
diff --git a/lib/routes/discourse/notifications.ts b/lib/routes/discourse/notifications.ts
index 2216a50bc90837..0dff0bfbfbf165 100644
--- a/lib/routes/discourse/notifications.ts
+++ b/lib/routes/discourse/notifications.ts
@@ -1,7 +1,7 @@
import { Route } from '@/types';
import cache from '@/utils/cache';
import { getConfig } from './utils';
-import got from '@/utils/got';
+import ofetch from '@/utils/ofetch';
export const route: Route = {
path: '/:configId/notifications/:fulltext?',
@@ -32,7 +32,7 @@ If you opt to enable \`fulltext\` feature, consider adding \`limit\` parameter t
async function handler(ctx) {
const { link, key } = getConfig(ctx);
- const response = await got(`${link}/notifications.json`, { headers: { 'User-Api-Key': key } }).json();
+ const response = await ofetch(`${link}/notifications.json`, { headers: { 'User-Api-Key': key } });
let items = response.notifications.slice(0, ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 10).map((e) => ({
title: e.fancy_title ?? e.data.badge_name,
link: `${link}/${Object.hasOwn(e.data, 'badge_id') ? `badges/${e.data.badge_id}/${e.data.badge_slug}?username=${e.data.username}` : `t/topic/${e.topic_id}/${e.post_number}`}`,
@@ -48,7 +48,7 @@ async function handler(ctx) {
if (e.original_post_id) {
const post_link = `${link}/posts/${e.original_post_id}.json`;
return cache.tryGet(post_link, async () => {
- const { cooked } = await got(post_link, { headers: { 'User-Api-Key': key } }).json();
+ const { cooked } = await ofetch(post_link, { headers: { 'User-Api-Key': key } });
return { ...e, description: cooked };
});
} else {
@@ -58,7 +58,7 @@ async function handler(ctx) {
);
}
- const { about } = await got(`${link}/about.json`, { headers: { 'User-Api-Key': key } }).json();
+ const { about } = await ofetch(`${link}/about.json`, { headers: { 'User-Api-Key': key } });
return {
title: `${about.title} - Notifications`,
description: about.description,
diff --git a/lib/routes/hitcon/namespace.ts b/lib/routes/hitcon/namespace.ts
new file mode 100644
index 00000000000000..3cda88d4c2b9a1
--- /dev/null
+++ b/lib/routes/hitcon/namespace.ts
@@ -0,0 +1,6 @@
+import type { Namespace } from '@/types';
+
+export const namespace: Namespace = {
+ name: 'HITCON',
+ url: 'hitcon.org',
+};
diff --git a/lib/routes/hitcon/templates/zeroday.art b/lib/routes/hitcon/templates/zeroday.art
new file mode 100644
index 00000000000000..f051ea4fa19653
--- /dev/null
+++ b/lib/routes/hitcon/templates/zeroday.art
@@ -0,0 +1,8 @@
+
+ - {{ vender }}
+ - ZDID: {{ code }}
+ - 風險: {{ risk }}
+ - 處理狀態: {{ status }}
+ - 通報者: {{ reporter }}
+ - 通報日期: {{ date }}
+
diff --git a/lib/routes/hitcon/zeroday.ts b/lib/routes/hitcon/zeroday.ts
new file mode 100644
index 00000000000000..ce3aa2a297a224
--- /dev/null
+++ b/lib/routes/hitcon/zeroday.ts
@@ -0,0 +1,109 @@
+import type { Data, DataItem, Route } from '@/types';
+import type { Context } from 'hono';
+import { load } from 'cheerio';
+import puppeteer from '@/utils/puppeteer';
+import logger from '@/utils/logger';
+import { art } from '@/utils/render';
+import path from 'node:path';
+import { parseDate } from '@/utils/parse-date';
+import { getCurrentPath } from '@/utils/helpers';
+
+const __dirname = getCurrentPath(import.meta.url);
+
+export const route: Route = {
+ name: '漏洞',
+ categories: ['programming'],
+ path: '/zeroday/vulnerability/:status?',
+ example: '/hitcon/zeroday/vulnerability',
+ parameters: {
+ status: '漏洞状态,见下表',
+ },
+ maintainers: ['KarasuShin'],
+ radar: [
+ {
+ source: ['zeroday.hitcon.org/vulnerability/:status?'],
+ },
+ ],
+ features: {
+ requirePuppeteer: true,
+ },
+ handler,
+ description: `| 缺省 | all | closed | disclosed | patching |
+ | ------ | ---- | ------ | --------- | -------- |
+ | 活動中 | 全部 | 關閉 | 公開 | 修補中 |`,
+};
+
+const baseUrl = 'https://zeroday.hitcon.org/vulnerability';
+
+const titleMap = {
+ all: '全部',
+ closed: '關閉',
+ disclosed: '公開',
+ patching: '修補中',
+};
+
+async function handler(ctx: Context): Promise {
+ let url = baseUrl;
+ const status = ctx.req.param('status');
+ if (status) {
+ url += `/${status}`;
+ }
+
+ const browser = await puppeteer();
+ const page = await browser.newPage();
+ await page.setRequestInterception(true);
+
+ page.on('request', (request) => {
+ request.resourceType() === 'document' ? request.continue() : request.abort();
+ });
+
+ logger.http(`Requesting ${url}`);
+ await page.goto(url, {
+ waitUntil: 'domcontentloaded',
+ });
+
+ const response = await page.evaluate(() => document.documentElement.innerHTML);
+ browser.close();
+
+ const $ = load(response);
+ const items: DataItem[] = $('.zdui-strip-list>li')
+ .toArray()
+ .map((el) => {
+ const title = $(el).find('.title a');
+ const vulData = $(el).find('.vul-data');
+ const code = vulData
+ .find('.code')
+ .contents()
+ .filter(function () {
+ return this.nodeType === 3;
+ })
+ .text();
+ const risk = vulData.find('.risk span').eq(1).text();
+ const vender = vulData.find('.vender').find('.v-name-full').text();
+ const status = vulData.find('.status').text().replace('Status:', '').trim();
+ const date = vulData.find('.date').text().replace('Date:', '').trim();
+ const reporter = vulData.find('.zdui-author-badge').find('a>span').text();
+ const description = art(path.join(__dirname, 'templates/zeroday.art'), {
+ code,
+ risk,
+ vender,
+ status,
+ date,
+ reporter,
+ });
+
+ return {
+ title: title.text(),
+ link: title.attr('href'),
+ description,
+ pubDate: parseDate(date),
+ };
+ });
+
+ return {
+ title: status ? titleMap[status] ?? 'ZeroDay' : '活動中',
+ link: url,
+ item: items,
+ image: 'https://zeroday.hitcon.org/images/favicon/favicon.png',
+ };
+}
diff --git a/lib/routes/modrinth/versions.ts b/lib/routes/modrinth/versions.ts
index 41d0bd44fb2026..3f851e43b7bb8a 100644
--- a/lib/routes/modrinth/versions.ts
+++ b/lib/routes/modrinth/versions.ts
@@ -4,19 +4,20 @@ import { parseDate } from '@/utils/parse-date';
import { art } from '@/utils/render';
import path from 'node:path';
import { config } from '@/config';
-import got from '@/utils/got';
+import _ofetch from '@/utils/ofetch';
import MarkdownIt from 'markdown-it';
import type { Author, Project, Version } from '@/routes/modrinth/api';
import type { Context } from 'hono';
const __dirname = getCurrentPath(import.meta.url);
-const customGot = got.extend({
+const ofetch = _ofetch.create({
headers: {
// https://docs.modrinth.com/#section/User-Agents
'user-agent': config.trueUA,
},
});
+
const md = MarkdownIt({
html: true,
});
@@ -83,19 +84,19 @@ async function handler(ctx: Context) {
*/
const parsedQuery = new URLSearchParams(routeParams);
- parsedQuery.set('loaders', parsedQuery.has('loaders') ? JSON.stringify(parsedQuery.getAll('loaders')) : '');
- parsedQuery.set('game_versions', parsedQuery.has('game_versions') ? JSON.stringify(parsedQuery.getAll('game_versions')) : '');
-
try {
- const project = await customGot(`https://api.modrinth.com/v2/project/${id}`).json();
- const versions = await customGot(`https://api.modrinth.com/v2/project/${id}/version`, {
- searchParams: parsedQuery,
- }).json();
- const authors = await customGot(`https://api.modrinth.com/v2/users`, {
- searchParams: {
+ const project = await ofetch(`https://api.modrinth.com/v2/project/${id}`);
+ const versions = await ofetch(`https://api.modrinth.com/v2/project/${id}/version`, {
+ query: {
+ loaders: parsedQuery.has('loaders') ? JSON.stringify(parsedQuery.getAll('loaders')) : '',
+ game_versions: parsedQuery.has('game_versions') ? JSON.stringify(parsedQuery.getAll('game_versions')) : '',
+ },
+ });
+ const authors = await ofetch(`https://api.modrinth.com/v2/users`, {
+ query: {
ids: JSON.stringify([...new Set(versions.map((it) => it.author_id))]),
},
- }).json();
+ });
const groupedAuthors = >{};
for (const author of authors) {
groupedAuthors[author.id] = author;
diff --git a/lib/routes/nikkei/news.ts b/lib/routes/nikkei/news.ts
index 6d3fb1c2e7dfbf..757dd8d999922a 100644
--- a/lib/routes/nikkei/news.ts
+++ b/lib/routes/nikkei/news.ts
@@ -14,14 +14,6 @@ export const route: Route = {
categories: ['traditional-media'],
example: '/nikkei/news',
parameters: { category: 'Category, see table below', article_type: 'Only includes free articles, set `free` to enable, disabled by default' },
- features: {
- requireConfig: false,
- requirePuppeteer: false,
- antiCrawler: false,
- supportBT: false,
- supportPodcast: false,
- supportScihub: false,
- },
radar: [
{
source: ['www.nikkei.com/:category/archive', 'www.nikkei.com/:category'],
@@ -29,7 +21,7 @@ export const route: Route = {
},
],
name: 'News',
- maintainers: ['Arracc'],
+ maintainers: ['Arracc', 'ladeng07'],
handler,
description: `| 総合 | オピニオン | 経済 | 政治 | 金融 | マーケット | ビジネス | マネーのまなび | テック | 国際 | スポーツ | 社会・調査 | 地域 | 文化 | ライフスタイル |
| ---- | ---------- | ------- | -------- | --------- | ---------- | -------- | -------------- | ---------- | ------------- | -------- | ---------- | ----- | ------- | -------------- |
@@ -47,18 +39,18 @@ async function handler(ctx) {
const $ = load(data);
let categoryName = '';
- const listSelector = $('div#CONTENTS_MAIN').children('div.m-miM09').not('.PRa');
- const paidSelector = 'span.m-iconMember';
+ const listSelector = $('[class^="container_"] [class^="default_"]:has(article)');
+ const paidSelector = 'img[class^="icon_"]';
let list = listSelector.toArray().map((item) => {
item = $(item);
item.find('p a').remove();
return {
- title: item.find('.m-miM09_titleL').text(),
- link: `${baseUrl}${item.find('.m-miM09_title a').attr('href')}`,
- image: item.find('.m-miM09_thumb img').removeAttr('style').removeAttr('width').removeAttr('height').parent().html(),
+ title: item.find('[class^="titleLink_"]').text(),
+ link: `${baseUrl}${item.find('[class^="title_"] a').attr('href')}`,
+ image: item.find('[class^="image_"] img').removeAttr('style').removeAttr('width').removeAttr('height').parent().html(),
category: item
- .find('.m-miM09_keyword a')
+ .find('[class^="topicItem_"] a')
.toArray()
.map((item) => $(item).text()),
paywall: !!item.find(paidSelector).length,
diff --git a/lib/routes/seekingalpha/index.ts b/lib/routes/seekingalpha/index.ts
index 64dd20548aae97..e1f2fad9168bb5 100644
--- a/lib/routes/seekingalpha/index.ts
+++ b/lib/routes/seekingalpha/index.ts
@@ -1,9 +1,12 @@
import { Route } from '@/types';
import cache from '@/utils/cache';
-import got from '@/utils/got';
-import { load } from 'cheerio';
+import ofetch from '@/utils/ofetch';
+import { art } from '@/utils/render';
import { parseDate } from '@/utils/parse-date';
-import dayjs from 'dayjs';
+import { getCurrentPath } from '@/utils/helpers';
+import path from 'node:path';
+const __dirname = getCurrentPath(import.meta.url);
+
const baseUrl = 'https://seekingalpha.com';
export const route: Route = {
@@ -12,12 +15,7 @@ export const route: Route = {
example: '/seekingalpha/TSM/transcripts',
parameters: { symbol: 'Stock symbol', category: 'Category, see below, `news` by default' },
features: {
- requireConfig: false,
- requirePuppeteer: false,
- antiCrawler: false,
- supportBT: false,
- supportPodcast: false,
- supportScihub: false,
+ antiCrawler: true,
},
radar: [
{
@@ -33,39 +31,76 @@ export const route: Route = {
| analysis | news | transcripts | press-releases | related-analysis |`,
};
+const getMachineCookie = () =>
+ cache.tryGet('seekingalpha:machine_cookie', async () => {
+ const response = await ofetch.raw(baseUrl);
+ return response.headers.getSetCookie().map((c) => c.split(';')[0]);
+ });
+
+const apiParams = {
+ article: {
+ slug: '/articles',
+ include: 'author,primaryTickers,secondaryTickers,otherTags,presentations,presentations.slides,author.authorResearch,author.userBioTags,co_authors,promotedService,sentiments',
+ },
+ news: {
+ slug: '/news',
+ include: 'author,primaryTickers,secondaryTickers,otherTags',
+ },
+ pr: {
+ slug: '/press_releases',
+ include: 'acquireService,primaryTickers',
+ },
+};
+
async function handler(ctx) {
const { category = 'news', symbol } = ctx.req.param();
const pageUrl = `${baseUrl}/symbol/${symbol.toUpperCase()}/${category === 'transcripts' ? `earnings/${category}` : category}`;
- const response = await got(`${baseUrl}/api/v3/symbols/${symbol.toUpperCase()}/${category}`, {
- searchParams: {
- cacheBuster: category === 'news' ? dayjs().format('YYYY-MM-DD') : undefined,
+ const machineCookie = await getMachineCookie();
+ const response = await ofetch(`${baseUrl}/api/v3/symbols/${symbol.toUpperCase()}/${category}`, {
+ headers: {
+ cookie: machineCookie.join('; '),
+ },
+ query: {
+ 'filter[since]': 0,
+ 'filter[until]': 0,
id: symbol.toLowerCase(),
include: 'author,primaryTickers,secondaryTickers,sentiments',
- 'page[size]': ctx.req.query('limit') ? Number(ctx.req.query('limit')) : category === 'news' ? 40 : 20,
+ 'page[size]': ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : category === 'news' ? 40 : 20,
+ 'page[number]': 1,
},
});
- const list = response.data.data?.map((item) => ({
+ const list = response.data?.map((item) => ({
title: item.attributes.title,
link: new URL(item.links.self, baseUrl).href,
pubDate: parseDate(item.attributes.publishOn),
- author: response.data.included.find((i) => i.id === item.relationships.author.data.id).attributes.nick,
+ author: response.included.find((i) => i.id === item.relationships.author.data.id).attributes.nick,
+ id: item.id,
+ articleType: item.links.self.split('/')[1],
}));
const items = list
? await Promise.all(
list.map((item) =>
cache.tryGet(item.link, async () => {
- const response = await got(item.link);
- const $ = load(response.data);
-
- const summary = $('[data-test-id=article-summary-title]').length ? $('[data-test-id=article-summary-title]').html() + $('[data-test-id=article-summary-title]').next().html() : '';
+ const response = await ofetch(`${baseUrl}/api/v3${apiParams[item.articleType].slug}/${item.id}`, {
+ headers: {
+ cookie: machineCookie.join('; '),
+ },
+ query: {
+ include: apiParams[item.articleType].include,
+ },
+ });
- item.category = $('div[data-test-id=themes-list] a')
- .toArray()
- .map((c) => $(c).text());
- item.description = summary + $('div.paywall-full-content').html();
+ item.category = response.included.filter((i) => i.type === 'tag').map((i) => (i.attributes.company ? `${i.attributes.company} (${i.attributes.name})` : i.attributes.name));
+ item.description =
+ (response.data.attributes.summary?.length
+ ? art(path.join(__dirname, 'templates/summary.art'), {
+ summary: response.data.attributes.summary,
+ })
+ : '') + response.data.attributes.content;
+ item.updated = parseDate(response.data.attributes.lastModified);
return item;
})
@@ -74,8 +109,8 @@ async function handler(ctx) {
: [];
return {
- title: response.data.meta.page.title,
- description: response.data.meta.page.description,
+ title: response.meta.page.title,
+ description: response.meta.page.description,
link: pageUrl,
image: 'https://seekingalpha.com/samw/static/images/favicon.svg',
item: items,
diff --git a/lib/routes/seekingalpha/templates/summary.art b/lib/routes/seekingalpha/templates/summary.art
new file mode 100644
index 00000000000000..dd0f1c40880fb4
--- /dev/null
+++ b/lib/routes/seekingalpha/templates/summary.art
@@ -0,0 +1,4 @@
+Summary
+
+{{ each summary s }}- {{ s }}
{{ /each }}
+
diff --git a/package.json b/package.json
index 7b7b4b30041cd0..dde4de79004836 100644
--- a/package.json
+++ b/package.json
@@ -75,7 +75,7 @@
"fanfou-sdk": "5.0.0",
"form-data": "4.0.0",
"googleapis": "134.0.0",
- "hono": "4.2.2",
+ "hono": "4.2.3",
"html-to-text": "9.0.5",
"https-proxy-agent": "7.0.4",
"iconv-lite": "0.6.3",
@@ -143,20 +143,20 @@
"@types/mailparser": "3.4.4",
"@types/markdown-it": "14.0.0",
"@types/module-alias": "2.0.4",
- "@types/node": "20.12.4",
+ "@types/node": "20.12.7",
"@types/request-promise-native": "1.0.21",
"@types/sanitize-html": "2.11.0",
"@types/supertest": "6.0.2",
"@types/tiny-async-pool": "2.0.3",
"@types/tough-cookie": "4.0.5",
- "@typescript-eslint/eslint-plugin": "7.5.0",
+ "@typescript-eslint/eslint-plugin": "7.6.0",
"@typescript-eslint/parser": "7.6.0",
"@vercel/nft": "0.26.4",
"@vitest/coverage-v8": "1.4.0",
"eslint": "8.57.0",
"eslint-config-prettier": "9.1.0",
"eslint-nibble": "8.1.0",
- "eslint-plugin-n": "17.0.0",
+ "eslint-plugin-n": "17.1.0",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-unicorn": "52.0.0",
"eslint-plugin-yml": "1.14.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 415c19bf3a3a8f..87065f7ab25bd5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,10 +10,10 @@ dependencies:
version: 1.9.1
'@hono/swagger-ui':
specifier: 0.2.1
- version: 0.2.1(hono@4.2.2)
+ version: 0.2.1(hono@4.2.3)
'@hono/zod-openapi':
specifier: 0.10.0
- version: 0.10.0(hono@4.2.2)(zod@3.22.4)
+ version: 0.10.0(hono@4.2.3)(zod@3.22.4)
'@notionhq/client':
specifier: 2.2.14
version: 2.2.14
@@ -81,8 +81,8 @@ dependencies:
specifier: 134.0.0
version: 134.0.0
hono:
- specifier: 4.2.2
- version: 4.2.2
+ specifier: 4.2.3
+ version: 4.2.3
html-to-text:
specifier: 9.0.5
version: 9.0.5
@@ -281,8 +281,8 @@ devDependencies:
specifier: 2.0.4
version: 2.0.4
'@types/node':
- specifier: 20.12.4
- version: 20.12.4
+ specifier: 20.12.7
+ version: 20.12.7
'@types/request-promise-native':
specifier: 1.0.21
version: 1.0.21
@@ -299,8 +299,8 @@ devDependencies:
specifier: 4.0.5
version: 4.0.5
'@typescript-eslint/eslint-plugin':
- specifier: 7.5.0
- version: 7.5.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.4)
+ specifier: 7.6.0
+ version: 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.4)
'@typescript-eslint/parser':
specifier: 7.6.0
version: 7.6.0(eslint@8.57.0)(typescript@5.4.4)
@@ -320,8 +320,8 @@ devDependencies:
specifier: 8.1.0
version: 8.1.0(eslint@8.57.0)
eslint-plugin-n:
- specifier: 17.0.0
- version: 17.0.0(eslint@8.57.0)
+ specifier: 17.1.0
+ version: 17.1.0(eslint@8.57.0)
eslint-plugin-prettier:
specifier: 5.1.3
version: 5.1.3(@types/eslint@8.56.7)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
@@ -375,7 +375,7 @@ devDependencies:
version: 4.3.2(typescript@5.4.4)
vitest:
specifier: 1.4.0
- version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0)
+ version: 1.4.0(@types/node@20.12.7)(jsdom@24.0.0)
packages:
@@ -1966,15 +1966,15 @@ packages:
engines: {node: '>=18.14.1'}
dev: false
- /@hono/swagger-ui@0.2.1(hono@4.2.2):
+ /@hono/swagger-ui@0.2.1(hono@4.2.3):
resolution: {integrity: sha512-wBxVMRe3/v8xH4o6icmwztiIq0DG0s7+jHVMHVUAoFFCWEQNL2iskMmQtrhSDtsFmBZUeUFQUaaJ6Ir6DOmHLA==}
peerDependencies:
hono: '*'
dependencies:
- hono: 4.2.2
+ hono: 4.2.3
dev: false
- /@hono/zod-openapi@0.10.0(hono@4.2.2)(zod@3.22.4):
+ /@hono/zod-openapi@0.10.0(hono@4.2.3)(zod@3.22.4):
resolution: {integrity: sha512-XvUtRMI5IugLSkdadYi349k1I40RntfeDqAcIskQ5dXqD+7ZEn3PxGX/jntyHXcbTLLotfzRTXQi0eh4Bb/LWg==}
engines: {node: '>=16.0.0'}
peerDependencies:
@@ -1982,18 +1982,18 @@ packages:
zod: 3.*
dependencies:
'@asteasolutions/zod-to-openapi': 7.0.0(zod@3.22.4)
- '@hono/zod-validator': 0.2.1(hono@4.2.2)(zod@3.22.4)
- hono: 4.2.2
+ '@hono/zod-validator': 0.2.1(hono@4.2.3)(zod@3.22.4)
+ hono: 4.2.3
zod: 3.22.4
dev: false
- /@hono/zod-validator@0.2.1(hono@4.2.2)(zod@3.22.4):
+ /@hono/zod-validator@0.2.1(hono@4.2.3)(zod@3.22.4):
resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==}
peerDependencies:
hono: '>=3.9.0'
zod: ^3.19.1
dependencies:
- hono: 4.2.2
+ hono: 4.2.3
zod: 3.22.4
dev: false
@@ -2039,7 +2039,7 @@ packages:
dependencies:
'@inquirer/type': 1.2.1
'@types/mute-stream': 0.0.4
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
'@types/wrap-ansi': 3.0.0
ansi-escapes: 4.3.2
chalk: 4.1.2
@@ -2670,14 +2670,14 @@ packages:
/@types/etag@1.8.3:
resolution: {integrity: sha512-QYHv9Yeh1ZYSMPQOoxY4XC4F1r+xRUiAriB303F4G6uBsT3KKX60DjiogvVv+2VISVDuJhcIzMdbjT+Bm938QQ==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: true
/@types/fs-extra@11.0.4:
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
dependencies:
'@types/jsonfile': 6.1.4
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: true
/@types/git-rev-sync@2.0.2:
@@ -2694,7 +2694,7 @@ packages:
/@types/imapflow@1.0.18:
resolution: {integrity: sha512-BoWZUoMktji2YJmkRY8z0KsjvyDNpBzeC/rLVMFKcHkPxaKp+SHBFfx/kj7ltKh3l010Lc9RZqnJs8KUMNhf6Q==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: true
/@types/istanbul-lib-coverage@2.0.6:
@@ -2704,7 +2704,7 @@ packages:
/@types/jsdom@21.1.6:
resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
'@types/tough-cookie': 4.0.5
parse5: 7.1.2
dev: true
@@ -2720,7 +2720,7 @@ packages:
/@types/jsonfile@6.1.4:
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: true
/@types/linkify-it@3.0.5:
@@ -2734,7 +2734,7 @@ packages:
/@types/mailparser@3.4.4:
resolution: {integrity: sha512-C6Znp2QVS25JqtuPyxj38Qh+QoFcLycdxsvcc6IZCGekhaMBzbdTXzwGzhGoYb3TfKu8IRCNV0sV1o3Od97cEQ==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
iconv-lite: 0.6.3
dev: true
@@ -2769,18 +2769,18 @@ packages:
/@types/mute-stream@0.0.4:
resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: true
/@types/node-fetch@2.6.11:
resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
form-data: 4.0.0
dev: false
- /@types/node@20.12.4:
- resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==}
+ /@types/node@20.12.7:
+ resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==}
dependencies:
undici-types: 5.26.5
@@ -2805,7 +2805,7 @@ packages:
resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==}
dependencies:
'@types/caseless': 0.12.5
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
'@types/tough-cookie': 4.0.5
form-data: 2.5.1
@@ -2828,7 +2828,7 @@ packages:
dependencies:
'@types/cookiejar': 2.1.5
'@types/methods': 1.1.4
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: true
/@types/supertest@6.0.2:
@@ -2861,12 +2861,12 @@ packages:
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
requiresBuild: true
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
dev: false
optional: true
- /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.4):
- resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==}
+ /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.4):
+ resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@@ -2878,17 +2878,17 @@ packages:
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.4)
- '@typescript-eslint/scope-manager': 7.5.0
- '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4)
- '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4)
- '@typescript-eslint/visitor-keys': 7.5.0
+ '@typescript-eslint/scope-manager': 7.6.0
+ '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4)
+ '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4)
+ '@typescript-eslint/visitor-keys': 7.6.0
debug: 4.3.4
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.4)
+ ts-api-utils: 1.3.0(typescript@5.4.4)
typescript: 5.4.4
transitivePeerDependencies:
- supports-color
@@ -2923,14 +2923,6 @@ packages:
'@typescript-eslint/visitor-keys': 6.21.0
dev: true
- /@typescript-eslint/scope-manager@7.5.0:
- resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==}
- engines: {node: ^18.18.0 || >=20.0.0}
- dependencies:
- '@typescript-eslint/types': 7.5.0
- '@typescript-eslint/visitor-keys': 7.5.0
- dev: true
-
/@typescript-eslint/scope-manager@7.6.0:
resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==}
engines: {node: ^18.18.0 || >=20.0.0}
@@ -2939,8 +2931,8 @@ packages:
'@typescript-eslint/visitor-keys': 7.6.0
dev: true
- /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.4):
- resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==}
+ /@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.4):
+ resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -2949,11 +2941,11 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4)
- '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4)
+ '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4)
+ '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4)
debug: 4.3.4
eslint: 8.57.0
- ts-api-utils: 1.2.1(typescript@5.4.4)
+ ts-api-utils: 1.3.0(typescript@5.4.4)
typescript: 5.4.4
transitivePeerDependencies:
- supports-color
@@ -2964,11 +2956,6 @@ packages:
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/types@7.5.0:
- resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==}
- engines: {node: ^18.18.0 || >=20.0.0}
- dev: true
-
/@typescript-eslint/types@7.6.0:
resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==}
engines: {node: ^18.18.0 || >=20.0.0}
@@ -2996,28 +2983,6 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.4):
- resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==}
- engines: {node: ^18.18.0 || >=20.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/types': 7.5.0
- '@typescript-eslint/visitor-keys': 7.5.0
- debug: 4.3.4
- globby: 11.1.0
- is-glob: 4.0.3
- minimatch: 9.0.3
- semver: 7.6.0
- ts-api-utils: 1.3.0(typescript@5.4.4)
- typescript: 5.4.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4):
resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==}
engines: {node: ^18.18.0 || >=20.0.0}
@@ -3059,8 +3024,8 @@ packages:
- typescript
dev: true
- /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.4):
- resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==}
+ /@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.4):
+ resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -3068,9 +3033,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
- '@typescript-eslint/scope-manager': 7.5.0
- '@typescript-eslint/types': 7.5.0
- '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4)
+ '@typescript-eslint/scope-manager': 7.6.0
+ '@typescript-eslint/types': 7.6.0
+ '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4)
eslint: 8.57.0
semver: 7.6.0
transitivePeerDependencies:
@@ -3086,14 +3051,6 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
- /@typescript-eslint/visitor-keys@7.5.0:
- resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==}
- engines: {node: ^18.18.0 || >=20.0.0}
- dependencies:
- '@typescript-eslint/types': 7.5.0
- eslint-visitor-keys: 3.4.3
- dev: true
-
/@typescript-eslint/visitor-keys@7.6.0:
resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==}
engines: {node: ^18.18.0 || >=20.0.0}
@@ -3147,7 +3104,7 @@ packages:
strip-literal: 2.0.0
test-exclude: 6.0.0
v8-to-istanbul: 9.2.0
- vitest: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0)
+ vitest: 1.4.0(@types/node@20.12.7)(jsdom@24.0.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -4744,8 +4701,8 @@ packages:
eslint-compat-utils: 0.1.2(eslint@8.57.0)
dev: true
- /eslint-plugin-n@17.0.0(eslint@8.57.0):
- resolution: {integrity: sha512-0Ihff+kWUIiXYTNTotGj/yRI1X5uCh/lef5Hr7ih/mFeYMQ3bPfN0KxlrfhU+Xn4x697l/TPO6zxqE33M1yD0w==}
+ /eslint-plugin-n@17.1.0(eslint@8.57.0):
+ resolution: {integrity: sha512-+MTiTej3B07+8vS/RfSMD1w4O9VVR9BSJT9kSa9QUsBlXzKi5PZc+lB3w+iu/2eIS3drFU7zCikSrD8Yn8PEBQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=8.23.0'
@@ -4757,7 +4714,6 @@ packages:
get-tsconfig: 4.7.2
globals: 14.0.0
ignore: 5.3.1
- is-builtin-module: 3.2.1
minimatch: 9.0.4
semver: 7.6.0
dev: true
@@ -5681,8 +5637,8 @@ packages:
resolution: {integrity: sha512-4FP6J0oI8jqb6gLLl9tSwVdosWJ/AKSGJ+HwYf6Ixe4MUcEkst4uWzpVQrNOCin0fzTRQbXV8ePheU8WiiDYBw==}
dev: false
- /hono@4.2.2:
- resolution: {integrity: sha512-mDmjBHF6uBNN3TASdAbDCFsN9FLbrlgXyFZkhLEkU7hUgk0+T9hcsUrL/nho4qV+Xk0RDHx7gop4Q1gelZZVRw==}
+ /hono@4.2.3:
+ resolution: {integrity: sha512-yZDnPOp/XzjIB7KUWaOxwLSywnhxMvAKth8hfKhWQiWXeZhBfC6GlFnEst/FOOgn7rSWjShhQPS89PLEuHxq3Q==}
engines: {node: '>=16.0.0'}
dev: false
@@ -9105,15 +9061,6 @@ packages:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
dev: true
- /ts-api-utils@1.2.1(typescript@5.4.4):
- resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==}
- engines: {node: '>=16'}
- peerDependencies:
- typescript: '>=4.2.0'
- dependencies:
- typescript: 5.4.4
- dev: true
-
/ts-api-utils@1.3.0(typescript@5.4.4):
resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
engines: {node: '>=16'}
@@ -9474,7 +9421,7 @@ packages:
vfile-message: 4.0.2
dev: true
- /vite-node@1.4.0(@types/node@20.12.4):
+ /vite-node@1.4.0(@types/node@20.12.7):
resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@@ -9483,7 +9430,7 @@ packages:
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
- vite: 5.1.5(@types/node@20.12.4)
+ vite: 5.1.5(@types/node@20.12.7)
transitivePeerDependencies:
- '@types/node'
- less
@@ -9511,7 +9458,7 @@ packages:
- typescript
dev: true
- /vite@5.1.5(@types/node@20.12.4):
+ /vite@5.1.5(@types/node@20.12.7):
resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@@ -9539,7 +9486,7 @@ packages:
terser:
optional: true
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
esbuild: 0.19.12
postcss: 8.4.35
rollup: 4.12.0
@@ -9547,7 +9494,7 @@ packages:
fsevents: 2.3.3
dev: true
- /vitest@1.4.0(@types/node@20.12.4)(jsdom@24.0.0):
+ /vitest@1.4.0(@types/node@20.12.7)(jsdom@24.0.0):
resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@@ -9572,7 +9519,7 @@ packages:
jsdom:
optional: true
dependencies:
- '@types/node': 20.12.4
+ '@types/node': 20.12.7
'@vitest/expect': 1.4.0
'@vitest/runner': 1.4.0
'@vitest/snapshot': 1.4.0
@@ -9591,8 +9538,8 @@ packages:
strip-literal: 2.0.0
tinybench: 2.6.0
tinypool: 0.8.2
- vite: 5.1.5(@types/node@20.12.4)
- vite-node: 1.4.0(@types/node@20.12.4)
+ vite: 5.1.5(@types/node@20.12.7)
+ vite-node: 1.4.0(@types/node@20.12.7)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less