diff --git a/lib/app.tsx b/lib/app.tsx
index c3b27ab41f..5615affc10 100644
--- a/lib/app.tsx
+++ b/lib/app.tsx
@@ -1,4 +1,4 @@
-import '@/utils/request-wrapper';
+import '@/utils/request-rewriter';
import { Hono } from 'hono';
diff --git a/lib/config.test.ts b/lib/config.test.ts
index 1d59fd0f92..edf38055a6 100644
--- a/lib/config.test.ts
+++ b/lib/config.test.ts
@@ -1,5 +1,4 @@
import { describe, expect, it, afterEach, vi } from 'vitest';
-import nock from 'nock';
afterEach(() => {
vi.resetModules();
@@ -93,11 +92,6 @@ describe('config', () => {
it('remote config', async () => {
process.env.REMOTE_CONFIG = 'http://rsshub.test/config';
- nock(/rsshub\.test/)
- .get('/config')
- .reply(200, {
- UA: 'test',
- });
const { config } = await import('./config');
await new Promise((resolve) => setTimeout(resolve, 100));
expect(config.ua).toBe('test');
diff --git a/lib/config.ts b/lib/config.ts
index d99935c457..2be41d9e52 100644
--- a/lib/config.ts
+++ b/lib/config.ts
@@ -1,6 +1,6 @@
import 'dotenv/config';
import randUserAgent from '@/utils/rand-user-agent';
-import got from 'got';
+import { ofetch } from 'ofetch';
let envs = process.env;
@@ -634,9 +634,8 @@ const calculateValue = () => {
calculateValue();
if (envs.REMOTE_CONFIG) {
- got.get(envs.REMOTE_CONFIG)
- .then(async (response) => {
- const data = JSON.parse(response.body);
+ ofetch(envs.REMOTE_CONFIG)
+ .then(async (data) => {
if (data) {
envs = Object.assign(envs, data);
calculateValue();
diff --git a/lib/errors/index.test.ts b/lib/errors/index.test.ts
index a89a84af62..f76af62198 100644
--- a/lib/errors/index.test.ts
+++ b/lib/errors/index.test.ts
@@ -22,7 +22,7 @@ describe('httperror', () => {
it(`httperror`, async () => {
const response = await request.get('/test/httperror');
expect(response.status).toBe(503);
- expect(response.text).toMatch('Response code 404 (Not Found): target website might be blocking our access, you can host your own RSSHub instance for a better usability.');
+ expect(response.text).toMatch('404 Not Found: target website might be blocking our access, you can host your own RSSHub instance for a better usability.');
}, 20000);
});
diff --git a/lib/errors/index.tsx b/lib/errors/index.tsx
index f2ff4bde7e..913bd3b82c 100644
--- a/lib/errors/index.tsx
+++ b/lib/errors/index.tsx
@@ -39,7 +39,7 @@ export const errorHandler: ErrorHandler = (error, ctx) => {
}
let message = '';
- if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError')) {
+ if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError' || error.name === 'FetchError')) {
ctx.status(503);
message = `${error.message}: target website might be blocking our access, you can host your own RSSHub instance for a better usability.`;
} else if (error instanceof RequestInProgressError) {
diff --git a/lib/middleware/cache.test.ts b/lib/middleware/cache.test.ts
index 7edce9fc5b..393d8153e7 100644
--- a/lib/middleware/cache.test.ts
+++ b/lib/middleware/cache.test.ts
@@ -3,7 +3,7 @@ import Parser from 'rss-parser';
import wait from '@/utils/wait';
process.env.CACHE_EXPIRE = '1';
-process.env.CACHE_CONTENT_EXPIRE = '3';
+process.env.CACHE_CONTENT_EXPIRE = '2';
const parser = new Parser();
@@ -38,7 +38,7 @@ describe('cache', () => {
expect(response3.headers).not.toHaveProperty('rsshub-cache-status');
const parsed3 = await parser.parseString(await response3.text());
- await wait(3 * 1000 + 100);
+ await wait(2 * 1000 + 100);
const response4 = await app.request('/test/cache');
const parsed4 = await parser.parseString(await response4.text());
@@ -51,7 +51,7 @@ describe('cache', () => {
await wait(1 * 1000 + 100);
const response5 = await app.request('/test/refreshCache');
const parsed5 = await parser.parseString(await response5.text());
- await wait(2 * 1000 + 100);
+ await wait(1 * 1000 + 100);
const response6 = await app.request('/test/refreshCache');
const parsed6 = await parser.parseString(await response6.text());
@@ -86,7 +86,7 @@ describe('cache', () => {
expect(response3.headers).not.toHaveProperty('rsshub-cache-status');
const parsed3 = await parser.parseString(await response3.text());
- await wait(3 * 1000 + 100);
+ await wait(2 * 1000 + 100);
const response4 = await app.request('/test/cache');
const parsed4 = await parser.parseString(await response4.text());
@@ -99,7 +99,7 @@ describe('cache', () => {
await wait(1 * 1000 + 100);
const response5 = await app.request('/test/refreshCache');
const parsed5 = await parser.parseString(await response5.text());
- await wait(2 * 1000 + 100);
+ await wait(1 * 1000 + 100);
const response6 = await app.request('/test/refreshCache');
const parsed6 = await parser.parseString(await response6.text());
diff --git a/lib/middleware/parameter.test.ts b/lib/middleware/parameter.test.ts
index 2a31436d30..6fb8788bbf 100644
--- a/lib/middleware/parameter.test.ts
+++ b/lib/middleware/parameter.test.ts
@@ -1,8 +1,12 @@
import { describe, expect, it, vi } from 'vitest';
-import app from '@/app';
import Parser from 'rss-parser';
-import { config } from '@/config';
-import nock from 'nock';
+
+process.env.OPENAI_API_KEY = 'sk-1234567890';
+process.env.OPENAI_API_ENDPOINT = 'https://api.openai.mock/v1';
+
+vi.mock('@/utils/request-rewriter', () => ({ default: null }));
+const { config } = await import('@/config');
+const { default: app } = await import('@/app');
const parser = new Parser();
@@ -424,26 +428,6 @@ describe('multi parameter', () => {
describe('openai', () => {
it(`chatgpt`, async () => {
- vi.resetModules();
-
- process.env.OPENAI_API_KEY = 'sk-1234567890';
- const app = (await import('@/app')).default;
- const { config } = await import('@/config');
- nock(config.openai.endpoint)
- .post('/chat/completions')
- .reply(() => [
- 200,
- {
- choices: [
- {
- message: {
- content: 'Summary of the article.',
- },
- },
- ],
- },
- ]);
-
const responseWithGpt = await app.request('/test/gpt?chatgpt=true');
const responseNormal = await app.request('/test/gpt');
diff --git a/lib/middleware/parameter.ts b/lib/middleware/parameter.ts
index 8306f39cc4..843f9bc1f9 100644
--- a/lib/middleware/parameter.ts
+++ b/lib/middleware/parameter.ts
@@ -1,7 +1,7 @@
import * as entities from 'entities';
import { load, type CheerioAPI, type Element } from 'cheerio';
import { simplecc } from 'simplecc-wasm';
-import got from '@/utils/got';
+import ofetch from '@/utils/ofetch';
import { config } from '@/config';
import { RE2JS } from 're2js';
import markdownit from 'markdown-it';
@@ -34,8 +34,9 @@ const resolveRelativeLink = ($: CheerioAPI, elem: Element, attr: string, baseUrl
const summarizeArticle = async (articleText: string) => {
const apiUrl = `${config.openai.endpoint}/chat/completions`;
- const response = await got.post(apiUrl, {
- json: {
+ const response = await ofetch(apiUrl, {
+ method: 'POST',
+ body: {
model: config.openai.model,
max_tokens: config.openai.maxTokens,
messages: [
@@ -49,8 +50,7 @@ const summarizeArticle = async (articleText: string) => {
},
});
- // @ts-expect-error custom field
- return response.data.choices[0].message.content;
+ return response.choices[0].message.content;
};
const getAuthorString = (item) => {
@@ -305,8 +305,7 @@ const middleware: MiddlewareHandler = async (ctx, next) => {
if (link) {
// if parser failed, return default description and not report error
try {
- // @ts-expect-error custom field
- const { data: res } = await got(link);
+ const res = await ofetch(link);
const $ = load(res);
const result = await Parser.parse(link, {
html: $.html(),
diff --git a/lib/routes/bloomberg/utils.ts b/lib/routes/bloomberg/utils.ts
index b48da12585..0bcbbefc76 100644
--- a/lib/routes/bloomberg/utils.ts
+++ b/lib/routes/bloomberg/utils.ts
@@ -99,7 +99,7 @@ const parseArticle = (item) =>
res = await got(apiUrl, { headers });
} catch (error) {
// fallback
- if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError')) {
+ if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError' || error.name === 'FetchError')) {
try {
res = await got(item.link, { headers });
} catch {
@@ -214,7 +214,7 @@ const parseReactRendererPage = async (res, api, item) => {
return await parseStoryJson(res.data, item);
} catch (error) {
// fallback
- if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError')) {
+ if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError' || error.name === 'FetchError')) {
return {
title: item.title,
link: item.link,
diff --git a/lib/routes/gov/chinatax/latest.ts b/lib/routes/gov/chinatax/latest.ts
index 6b54a4c734..9999b6e496 100644
--- a/lib/routes/gov/chinatax/latest.ts
+++ b/lib/routes/gov/chinatax/latest.ts
@@ -56,7 +56,7 @@ async function handler() {
item.description = content('#fontzoom').html();
return item;
} catch (error) {
- if (error.name === 'HTTPError') {
+ if (error.name === 'HTTPError' || error.name === 'FetchError') {
item.description = error.message;
return item;
}
diff --git a/lib/routes/line/utils.ts b/lib/routes/line/utils.ts
index e55c00d46b..8d9712e488 100644
--- a/lib/routes/line/utils.ts
+++ b/lib/routes/line/utils.ts
@@ -29,7 +29,7 @@ const parseItems = (list, tryGet) =>
});
data = response.data;
} catch (error) {
- if (error instanceof got.HTTPError && error.response.statusCode === 404) {
+ if ((error.name === 'HTTPError' || error.name === 'FetchError') && error.response.statusCode === 404) {
logger.error(`Error parsing article ${item.link}: ${error.message}`);
return item;
}
diff --git a/lib/routes/phoronix/index.ts b/lib/routes/phoronix/index.ts
index d4063906a3..e4413fd4b9 100644
--- a/lib/routes/phoronix/index.ts
+++ b/lib/routes/phoronix/index.ts
@@ -72,7 +72,7 @@ const webFetch = (url) =>
try {
return webFetchCb(await got(url));
} catch (error) {
- if (error.name === 'HTTPError' && error.response.statusCode === 404) {
+ if ((error.name === 'HTTPError' || error.name === 'FetchError') && error.response.statusCode === 404) {
return '404';
}
throw error;
diff --git a/lib/routes/pixiv/token.ts b/lib/routes/pixiv/token.ts
index ac0d9e5425..98356a0579 100644
--- a/lib/routes/pixiv/token.ts
+++ b/lib/routes/pixiv/token.ts
@@ -15,34 +15,27 @@ const refreshToken = (tryGet) =>
tryGet(
'pixiv:accessToken',
() =>
- got
- .post('https://oauth.secure.pixiv.net/auth/token', {
- form: {
- ...authorizationInfo,
- get_secure_url: 1,
- grant_type: 'refresh_token',
- refresh_token: config.pixiv.refreshToken,
- },
- headers: {
- ...maskHeader,
- },
- responseType: 'json',
- resolveBodyOnly: true,
- })
- .catch((error) => {
- logger.error('Pixiv refresh token failed.');
- logger.error(error);
- }),
+ got.post('https://oauth.secure.pixiv.net/auth/token', {
+ form: {
+ ...authorizationInfo,
+ get_secure_url: 1,
+ grant_type: 'refresh_token',
+ refresh_token: config.pixiv.refreshToken,
+ },
+ headers: {
+ ...maskHeader,
+ },
+ }),
3600,
false
);
async function getToken(tryGet) {
- const result = await refreshToken(tryGet);
+ const { data } = await refreshToken(tryGet);
// let expireTime;
- if (result && result.access_token) {
+ if (data && data.access_token) {
logger.debug('Pixiv refresh token success.');
- token = result.access_token;
+ token = data.access_token;
// expireTime = result.expires_in;
}
// } else {
diff --git a/lib/routes/wechat/feeddd.ts b/lib/routes/wechat/feeddd.ts
index d71c01a4f8..97a4a52c33 100644
--- a/lib/routes/wechat/feeddd.ts
+++ b/lib/routes/wechat/feeddd.ts
@@ -13,7 +13,7 @@ export default async (ctx) => {
try {
response = await got(apiUrl);
} catch (error) {
- if (error.name === 'HTTPError' && error.response.statusCode === 404) {
+ if ((error.name === 'HTTPError' || error.name === 'FetchError') && error.response.statusCode === 404) {
throw new Error('该公众号不存在,有关如何获取公众号 id,详见 https://docs.rsshub.app/routes/new-media#wei-xin-gong-zhong-hao-feeddd-lai-yuan');
}
throw error;
diff --git a/lib/routes/wfu/news.ts b/lib/routes/wfu/news.ts
index eefca4f5b5..b0bf76ff61 100644
--- a/lib/routes/wfu/news.ts
+++ b/lib/routes/wfu/news.ts
@@ -32,7 +32,7 @@ async function loadContent(link) {
response = await got.get(link);
} catch (error) {
// 如果网络问题 直接出错
- if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError')) {
+ if (error.name && (error.name === 'HTTPError' || error.name === 'RequestError' || error.name === 'FetchError')) {
description = 'Page 404 Please Check!';
}
return { description };
diff --git a/lib/setup.test.ts b/lib/setup.test.ts
new file mode 100644
index 0000000000..192d9fe827
--- /dev/null
+++ b/lib/setup.test.ts
@@ -0,0 +1,77 @@
+import { afterAll, afterEach } from 'vitest';
+import { setupServer } from 'msw/node';
+import { http, HttpResponse } from 'msw';
+
+const server = setupServer(
+ http.post(`https://api.openai.mock/v1/chat/completions`, () =>
+ HttpResponse.json({
+ choices: [
+ {
+ message: {
+ content: 'Summary of the article.',
+ },
+ },
+ ],
+ })
+ ),
+ http.get(`http://rsshub.test/config`, () =>
+ HttpResponse.json({
+ UA: 'test',
+ })
+ ),
+ http.get(`http://rsshub.test/buildData`, () =>
+ HttpResponse.text(`
+
+ -
+ 1
+
RSSHub1
+
+ -
+ 2
+
RSSHub2
+
+
+
`)
+ ),
+ http.get(`https://mp.weixin.qq.com/rsshub_test/wechatMp_fetchArticle`, () =>
+ HttpResponse.text(
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ 'description
\n' +
+ 'mpName
\n' +
+ ''
+ )
+ ),
+ http.get(`http://rsshub.test/headers`, ({ request }) =>
+ HttpResponse.json({
+ ...Object.fromEntries(request.headers.entries()),
+ })
+ ),
+ http.post(`http://rsshub.test/form-post`, async ({ request }) => {
+ const formData = await request.formData();
+ return HttpResponse.json({
+ test: formData.get('test'),
+ });
+ }),
+ http.post(`http://rsshub.test/json-post`, async ({ request }) => {
+ const jsonData = (await request.json()) as {
+ test: string;
+ };
+ return HttpResponse.json({
+ test: jsonData?.test,
+ });
+ }),
+ http.get(`http://rsshub.test/rss`, () => HttpResponse.text(' '))
+);
+server.listen();
+
+afterAll(() => server.close());
+afterEach(() => server.resetHandlers());
+
+export default server;
diff --git a/lib/utils/common-config.test.ts b/lib/utils/common-config.test.ts
index 84b4c15c95..57839fd38e 100644
--- a/lib/utils/common-config.test.ts
+++ b/lib/utils/common-config.test.ts
@@ -1,6 +1,5 @@
import { describe, expect, it } from 'vitest';
import configUtils, { transElemText, replaceParams, getProp } from '@/utils/common-config';
-import nock from 'nock';
describe('index', () => {
it('transElemText', () => {
@@ -40,23 +39,6 @@ describe('index', () => {
});
it('buildData', async () => {
- nock('http://rsshub.test')
- .get('/buildData')
- .reply(() => [
- 200,
- `
-
- -
- 1
-
RSSHub1
-
- -
- 2
-
RSSHub2
-
-
-
`,
- ]);
const data = await configUtils({
link: 'http://rsshub.test/buildData',
url: 'http://rsshub.test/buildData',
diff --git a/lib/utils/common-config.ts b/lib/utils/common-config.ts
index 65e84d2094..74d1b7c2bf 100644
--- a/lib/utils/common-config.ts
+++ b/lib/utils/common-config.ts
@@ -1,5 +1,5 @@
-import cheerio from 'cheerio';
-import got from '@/utils/got';
+import { load } from 'cheerio';
+import ofetch from '@/utils/ofetch';
import iconv from 'iconv-lite';
function transElemText($, prop) {
@@ -37,8 +37,8 @@ function getProp(data, prop, $) {
}
async function buildData(data) {
- const response = await got.get(data.url);
- const contentType = response.headers['content-type'] || '';
+ const response = await ofetch.raw(data.url);
+ const contentType = response.headers.get('content-type') || '';
// 若没有指定编码,则默认utf-8
let charset = 'utf-8';
for (const attr of contentType.split(';')) {
@@ -47,8 +47,8 @@ async function buildData(data) {
}
}
// @ts-expect-error custom property
- const responseData = charset === 'utf-8' ? response.data : iconv.decode((await got.get({ url: data.url, responseType: 'buffer' })).data, charset);
- const $ = cheerio.load(responseData);
+ const responseData = charset === 'utf-8' ? response._data : iconv.decode(await ofetch(data.url, { responseType: 'buffer' }), charset);
+ const $ = load(responseData);
const $item = $(data.item.item);
// 这里应该是可以通过参数注入一些代码的,不过应该无伤大雅
return {
diff --git a/lib/utils/got-deprecated.ts b/lib/utils/got-deprecated.ts
new file mode 100644
index 0000000000..d99ddc3f6d
--- /dev/null
+++ b/lib/utils/got-deprecated.ts
@@ -0,0 +1,79 @@
+import logger from '@/utils/logger';
+import { config } from '@/config';
+import got, { CancelableRequest, Response as GotResponse, OptionsInit, Options, Got } from 'got';
+
+type Response = GotResponse & {
+ data: T;
+ status: number;
+};
+
+type GotRequestFunction = {
+ (url: string | URL, options?: Options): CancelableRequest>>;
+ (url: string | URL, options?: Options): CancelableRequest>;
+ (options: Options): CancelableRequest>>;
+ (options: Options): CancelableRequest>;
+};
+
+// @ts-expect-error got instance with custom response type
+const custom: {
+ all?: (list: Array>) => Promise>;
+ get: GotRequestFunction;
+ post: GotRequestFunction;
+ put: GotRequestFunction;
+ patch: GotRequestFunction;
+ head: GotRequestFunction;
+ delete: GotRequestFunction;
+} & GotRequestFunction &
+ Got = got.extend({
+ retry: {
+ limit: config.requestRetry,
+ statusCodes: [400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 421, 422, 423, 424, 426, 428, 429, 431, 451, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511, 521, 522, 524],
+ },
+ hooks: {
+ beforeRetry: [
+ (err, count) => {
+ logger.error(`Request ${err.options.url} fail, retry attempt #${count}: ${err}`);
+ },
+ ],
+ beforeRedirect: [
+ (options, response) => {
+ logger.http(`Redirecting to ${options.url} for ${response.requestUrl}`);
+ },
+ ],
+ afterResponse: [
+ // @ts-expect-error custom response type
+ (response: Response>) => {
+ try {
+ response.data = typeof response.body === 'string' ? JSON.parse(response.body) : response.body;
+ } catch {
+ // @ts-expect-error for compatibility
+ response.data = response.body;
+ }
+ response.status = response.statusCode;
+ return response;
+ },
+ ],
+ init: [
+ (
+ options: OptionsInit & {
+ data?: string;
+ }
+ ) => {
+ // compatible with axios api
+ if (options && options.data) {
+ options.body = options.body || options.data;
+ }
+ },
+ ],
+ },
+ headers: {
+ 'user-agent': config.ua,
+ },
+ timeout: {
+ request: config.requestTimeout,
+ },
+});
+custom.all = (list) => Promise.all(list);
+
+export default custom;
+export type { Response, Options } from 'got';
diff --git a/lib/utils/got.test.ts b/lib/utils/got.test.ts
index 59d69c2348..b09ff977e4 100644
--- a/lib/utils/got.test.ts
+++ b/lib/utils/got.test.ts
@@ -1,88 +1,51 @@
-import { describe, expect, it, afterEach, vi } from 'vitest';
-import nock from 'nock';
-
-afterEach(() => {
- vi.resetModules();
-});
+import { describe, expect, it, vi } from 'vitest';
+import { http, HttpResponse } from 'msw';
+import got from '@/utils/got';
+import { config } from '@/config';
describe('got', () => {
it('headers', async () => {
- const { default: got } = await import('@/utils/got');
- const { config } = await import('@/config');
- nock('http://rsshub.test')
- .get('/test')
- .reply(function () {
- expect(this.req.headers['user-agent']).toBe(config.ua);
- return [200, ''];
- });
-
- await got.get('http://rsshub.test/test');
+ const { data } = await got('http://rsshub.test/headers');
+ expect(data['user-agent']).toBe(config.ua);
});
it('retry', async () => {
- const { default: got } = await import('@/utils/got');
- const { config } = await import('@/config');
const requestRun = vi.fn();
- nock('http://rsshub.test')
- .get('/testRerty')
- .times(config.requestRetry + 1)
- .reply(() => {
+ const { default: server } = await import('@/setup.test');
+ server.use(
+ http.get(`http://rsshub.test/retry-test`, () => {
requestRun();
- return [503, '0'];
- });
+ return HttpResponse.error();
+ })
+ );
try {
- await got.get('http://rsshub.test/testRerty');
+ await got.get('http://rsshub.test/retry-test');
} catch (error: any) {
- expect(error.name).toBe('HTTPError');
+ expect(error.name).toBe('FetchError');
}
// retries
expect(requestRun).toHaveBeenCalledTimes(config.requestRetry + 1);
});
- it('axios', async () => {
- const { default: got } = await import('@/utils/got');
- nock('http://rsshub.test')
- .post('/post')
- .reply(() => [200, '{"code": 0}']);
-
- const response1 = await got.post('http://rsshub.test/post', {
+ it('form-post', async () => {
+ const response = await got.post('http://rsshub.test/form-post', {
form: {
- test: 1,
+ test: 'rsshub',
},
});
- expect(response1.statusCode).toBe(200);
- // @ts-expect-error custom property
- expect(response1.status).toBe(200);
- expect(response1.body).toBe('{"code": 0}');
- // @ts-expect-error custom property
- expect(response1.data.code).toBe(0);
+ expect(response.body).toBe('{"test":"rsshub"}');
+ expect(response.data.test).toBe('rsshub');
});
- it('timeout', async () => {
- process.env.REQUEST_TIMEOUT = '500';
-
- const { default: got } = await import('@/utils/got');
- nock('http://rsshub.test')
- .get('/timeout')
- .delay(600)
- .reply(() => [200, '{"code": 0}']);
-
- const logger = (await import('@/utils/logger')).default;
- // @ts-expect-error unused
- const loggerSpy = vi.spyOn(logger, 'error').mockReturnValue({});
-
- try {
- await got.get('http://rsshub.test/timeout');
- throw new Error('Timeout Invalid');
- } catch (error: any) {
- expect(error.name).toBe('RequestError');
- }
- expect(loggerSpy).toHaveBeenCalledWith(expect.stringContaining('http://rsshub.test/timeout'));
-
- loggerSpy.mockRestore();
-
- delete process.env.REQUEST_TIMEOUT;
+ it('json-post', async () => {
+ const response = await got.post('http://rsshub.test/json-post', {
+ json: {
+ test: 'rsshub',
+ },
+ });
+ expect(response.body).toBe('{"test":"rsshub"}');
+ expect(response.data.test).toBe('rsshub');
});
});
diff --git a/lib/utils/got.ts b/lib/utils/got.ts
index d99ddc3f6d..a602fab3a5 100644
--- a/lib/utils/got.ts
+++ b/lib/utils/got.ts
@@ -1,79 +1,66 @@
-import logger from '@/utils/logger';
-import { config } from '@/config';
-import got, { CancelableRequest, Response as GotResponse, OptionsInit, Options, Got } from 'got';
+import { destr } from 'destr';
+import ofetch from '@/utils/ofetch';
-type Response = GotResponse & {
- data: T;
- status: number;
-};
-
-type GotRequestFunction = {
- (url: string | URL, options?: Options): CancelableRequest>>;
- (url: string | URL, options?: Options): CancelableRequest>;
- (options: Options): CancelableRequest>>;
- (options: Options): CancelableRequest>;
-};
-
-// @ts-expect-error got instance with custom response type
-const custom: {
- all?: (list: Array>) => Promise>;
- get: GotRequestFunction;
- post: GotRequestFunction;
- put: GotRequestFunction;
- patch: GotRequestFunction;
- head: GotRequestFunction;
- delete: GotRequestFunction;
-} & GotRequestFunction &
- Got = got.extend({
- retry: {
- limit: config.requestRetry,
- statusCodes: [400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 421, 422, 423, 424, 426, 428, 429, 431, 451, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511, 521, 522, 524],
- },
- hooks: {
- beforeRetry: [
- (err, count) => {
- logger.error(`Request ${err.options.url} fail, retry attempt #${count}: ${err}`);
- },
- ],
- beforeRedirect: [
- (options, response) => {
- logger.http(`Redirecting to ${options.url} for ${response.requestUrl}`);
- },
- ],
- afterResponse: [
- // @ts-expect-error custom response type
- (response: Response>) => {
- try {
- response.data = typeof response.body === 'string' ? JSON.parse(response.body) : response.body;
- } catch {
- // @ts-expect-error for compatibility
- response.data = response.body;
- }
- response.status = response.statusCode;
- return response;
- },
- ],
- init: [
- (
- options: OptionsInit & {
- data?: string;
- }
- ) => {
- // compatible with axios api
- if (options && options.data) {
- options.body = options.body || options.data;
- }
- },
- ],
- },
- headers: {
- 'user-agent': config.ua,
- },
- timeout: {
- request: config.requestTimeout,
- },
+const gotofetch = ofetch.create({
+ parseResponse: (responseText) => ({
+ data: destr(responseText),
+ body: responseText,
+ }),
});
-custom.all = (list) => Promise.all(list);
-export default custom;
-export type { Response, Options } from 'got';
+const getFakeGot = (defaultOptions?: any) => {
+ const fakeGot = (request, options?: any) => {
+ if (!(typeof request === 'string' || request instanceof Request) && request.url) {
+ options = {
+ ...request,
+ ...options,
+ };
+ request = request.url;
+ }
+ if (options?.hooks?.beforeRequest) {
+ for (const hook of options.hooks.beforeRequest) {
+ hook(options);
+ }
+ delete options.hooks;
+ }
+
+ options = {
+ ...defaultOptions,
+ ...options,
+ };
+
+ if (options?.json && !options.body) {
+ options.body = options.json;
+ delete options.json;
+ }
+ if (options?.form && !options.body) {
+ const body = new FormData();
+ for (const key in options.form) {
+ body.append(key, options.form[key]);
+ }
+ options.body = body;
+ if (!options.headers) {
+ options.headers = {};
+ }
+ delete options.form;
+ }
+ if (options?.searchParams) {
+ request += '?' + new URLSearchParams(options.searchParams).toString();
+ delete options.searchParams;
+ }
+
+ return gotofetch(request, options);
+ };
+
+ fakeGot.get = (request, options) => fakeGot(request, { ...options, method: 'GET' });
+ fakeGot.post = (request, options) => fakeGot(request, { ...options, method: 'POST' });
+ fakeGot.put = (request, options) => fakeGot(request, { ...options, method: 'PUT' });
+ fakeGot.patch = (request, options) => fakeGot(request, { ...options, method: 'PATCH' });
+ fakeGot.head = (request, options) => fakeGot(request, { ...options, method: 'HEAD' });
+ fakeGot.delete = (request, options) => fakeGot(request, { ...options, method: 'DELETE' });
+ fakeGot.extend = (options) => getFakeGot(options);
+
+ return fakeGot;
+};
+
+export default getFakeGot();
diff --git a/lib/utils/ofetch.ts b/lib/utils/ofetch.ts
new file mode 100644
index 0000000000..06f77e3792
--- /dev/null
+++ b/lib/utils/ofetch.ts
@@ -0,0 +1,17 @@
+import { createFetch } from 'ofetch';
+import { config } from '@/config';
+import logger from '@/utils/logger';
+
+const rofetch = createFetch().create({
+ retry: config.requestRetry,
+ retryDelay: 1000,
+ timeout: config.requestTimeout,
+ onRequestError({ request, error }) {
+ logger.error(`Request ${request} fail: ${error}`);
+ },
+ headers: {
+ 'user-agent': config.ua,
+ },
+});
+
+export default rofetch;
diff --git a/lib/utils/proxy/index.ts b/lib/utils/proxy/index.ts
index b49730693b..aa0c5c9a7a 100644
--- a/lib/utils/proxy/index.ts
+++ b/lib/utils/proxy/index.ts
@@ -2,6 +2,7 @@ import { config } from '@/config';
import { PacProxyAgent } from 'pac-proxy-agent';
import { HttpsProxyAgent } from 'https-proxy-agent';
import { SocksProxyAgent } from 'socks-proxy-agent';
+import { ProxyAgent } from 'undici';
const proxyIsPAC = config.pacUri || config.pacScript;
@@ -24,11 +25,23 @@ if (proxyIsPAC) {
}
let agent: PacProxyAgent | HttpsProxyAgent | SocksProxyAgent | null = null;
+let dispatcher: ProxyAgent | null = null;
if (proxyIsPAC) {
agent = new PacProxyAgent(`pac+${proxyUri}`);
} else if (proxyUri) {
if (proxyUri.startsWith('http')) {
- agent = new HttpsProxyAgent(proxyUri);
+ agent = new HttpsProxyAgent(proxyUri, {
+ headers: {
+ 'proxy-authorization': config.proxy?.auth ? `Basic ${config.proxy?.auth}` : undefined,
+ },
+ });
+ dispatcher = new ProxyAgent({
+ uri: proxyUri,
+ token: config.proxy?.auth ? `Basic ${config.proxy?.auth}` : undefined,
+ requestTls: {
+ rejectUnauthorized: process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0',
+ },
+ });
} else if (proxyUri.startsWith('socks')) {
agent = new SocksProxyAgent(proxyUri);
}
@@ -36,6 +49,7 @@ if (proxyIsPAC) {
export default {
agent,
+ dispatcher,
proxyUri,
proxyObj,
proxyUrlHandler,
diff --git a/lib/utils/rand-user-agent.test.ts b/lib/utils/rand-user-agent.test.ts
index 4ccea6ad99..c459190dd6 100644
--- a/lib/utils/rand-user-agent.test.ts
+++ b/lib/utils/rand-user-agent.test.ts
@@ -1,7 +1,6 @@
import { describe, expect, it } from 'vitest';
-import got from '@/utils/got';
+import ofetch from '@/utils/ofetch';
import { config } from '@/config';
-import nock from 'nock';
import randUserAgent from '@/utils/rand-user-agent';
const mobileUa = randUserAgent({ browser: 'mobile safari', os: 'ios', device: 'mobile' });
@@ -23,30 +22,16 @@ describe('rand-user-agent', () => {
});
it('should has default random ua', async () => {
- nock('https://rsshub.test')
- .get('/test')
- .reply(function () {
- expect(this.req.headers['user-agent']).toBe(config.ua);
- expect(this.req.headers['user-agent']).not.toBe(mobileUa);
- expect(this.req.headers['user-agent']).not.toBe('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');
- return [200, ''];
- });
- await got('https://rsshub.test/test');
+ const response = await ofetch('http://rsshub.test/headers');
+ expect(response['user-agent']).toBe(config.ua);
});
it('should match ua configurated', async () => {
- nock('https://rsshub.test')
- .get('/test')
- .reply(function () {
- return [200, { ua: this.req.headers['user-agent'] }];
- });
-
- const resonse = await got('https://rsshub.test/test', {
+ const response = await ofetch('http://rsshub.test/headers', {
headers: {
'user-agent': mobileUa,
},
});
- // @ts-expect-error custom field
- expect(resonse.data.ua).toBe(mobileUa);
+ expect(response['user-agent']).toBe(mobileUa);
});
});
diff --git a/lib/utils/request-rewriter.test.ts b/lib/utils/request-rewriter.test.ts
new file mode 100644
index 0000000000..44b1a37f4c
--- /dev/null
+++ b/lib/utils/request-rewriter.test.ts
@@ -0,0 +1,137 @@
+import { describe, expect, it, vi } from 'vitest';
+import undici from 'undici';
+import got from 'got';
+import http from 'node:http';
+
+process.env.PROXY_URI = 'http://rsshub.proxy:2333/';
+process.env.PROXY_AUTH = 'rsshubtest';
+process.env.PROXY_URL_REGEX = 'headers';
+
+await import('@/utils/request-rewriter');
+const { config } = await import('@/config');
+const { default: ofetch } = await import('@/utils/ofetch');
+
+describe('request-rewriter', () => {
+ it('fetch', async () => {
+ const fetchSpy = vi.spyOn(undici, 'fetch');
+
+ try {
+ await (await fetch('http://rsshub.test/headers')).json();
+ } catch {
+ // ignore
+ }
+
+ // headers
+ const headers: Headers = fetchSpy.mock.lastCall?.[0].headers;
+ expect(headers.get('user-agent')).toBe(config.ua);
+ expect(headers.get('accept')).toBe('*/*');
+ expect(headers.get('referer')).toBe('http://rsshub.test');
+
+ // proxy
+ const options = fetchSpy.mock.lastCall?.[1];
+ const agentKey = Object.getOwnPropertySymbols(options?.dispatcher).find((s) => s.description === 'proxy agent options');
+ const agentUri = agentKey ? options?.dispatcher?.[agentKey].uri : null;
+ expect(agentUri).toBe(process.env.PROXY_URI);
+
+ // proxy auth
+ const headersKey = Object.getOwnPropertySymbols(options?.dispatcher).find((s) => s.description === 'proxy headers');
+ const agentHeaders = headersKey ? options?.dispatcher?.[headersKey] : null;
+ expect(agentHeaders['proxy-authorization']).toBe(`Basic ${process.env.PROXY_AUTH}`);
+
+ // url regex not match
+ {
+ try {
+ await (await fetch('http://rsshub.test/rss')).json();
+ } catch {
+ // ignore
+ }
+ const options = fetchSpy.mock.lastCall?.[1];
+ expect(options?.dispatcher).toBeUndefined();
+ }
+ });
+
+ it('ofetch', async () => {
+ const fetchSpy = vi.spyOn(undici, 'fetch');
+
+ try {
+ await ofetch('http://rsshub.test/headers', {
+ retry: 0,
+ });
+ } catch {
+ // ignore
+ }
+
+ // headers
+ const headers: Headers = fetchSpy.mock.lastCall?.[0].headers;
+ expect(headers.get('user-agent')).toBe(config.ua);
+ expect(headers.get('accept')).toBe('*/*');
+ expect(headers.get('referer')).toBe('http://rsshub.test');
+
+ // proxy
+ const options = fetchSpy.mock.lastCall?.[1];
+ const agentKey = Object.getOwnPropertySymbols(options?.dispatcher).find((s) => s.description === 'proxy agent options');
+ const agentUri = agentKey ? options?.dispatcher?.[agentKey].uri : null;
+ expect(agentUri).toBe(process.env.PROXY_URI);
+
+ // proxy auth
+ const headersKey = Object.getOwnPropertySymbols(options?.dispatcher).find((s) => s.description === 'proxy headers');
+ const agentHeaders = headersKey ? options?.dispatcher?.[headersKey] : null;
+ expect(agentHeaders['proxy-authorization']).toBe(`Basic ${process.env.PROXY_AUTH}`);
+
+ // url regex not match
+ {
+ try {
+ await ofetch('http://rsshub.test/rss', {
+ retry: 0,
+ });
+ } catch {
+ // ignore
+ }
+ const options = fetchSpy.mock.lastCall?.[1];
+ expect(options?.dispatcher).toBeUndefined();
+ }
+ });
+
+ it('http', async () => {
+ const httpSpy = vi.spyOn(http, 'request');
+
+ try {
+ await got.get('http://rsshub.test/headers', {
+ headers: {
+ 'user-agent': undefined,
+ accept: undefined,
+ },
+ });
+ } catch {
+ // ignore
+ }
+
+ // headers
+ const options = httpSpy.mock.lastCall?.[1];
+ const headers = options?.headers;
+ expect(headers?.['user-agent']).toBe(config.ua);
+ expect(headers?.accept).toBe('*/*');
+ expect(headers?.referer).toBe('http://rsshub.test');
+
+ // proxy
+ const agentUri = options?.agent?.proxy?.href;
+ expect(agentUri).toBe(process.env.PROXY_URI);
+ expect(options?.agent?.proxyHeaders['proxy-authorization']).toBe(`Basic ${process.env.PROXY_AUTH}`);
+
+ // url regex not match
+ {
+ try {
+ await got.get('http://rsshub.test/rss', {
+ headers: {
+ 'user-agent': undefined,
+ accept: undefined,
+ },
+ });
+ } catch {
+ // ignore
+ }
+ const options = httpSpy.mock.lastCall?.[1];
+ expect(options?.agent).toBeUndefined();
+ }
+ });
+});
diff --git a/lib/utils/request-rewriter/fetch.ts b/lib/utils/request-rewriter/fetch.ts
new file mode 100644
index 0000000000..69861eb0b5
--- /dev/null
+++ b/lib/utils/request-rewriter/fetch.ts
@@ -0,0 +1,50 @@
+import logger from '@/utils/logger';
+import { config } from '@/config';
+import undici, { Request, RequestInfo, RequestInit } from 'undici';
+import proxy from '@/utils/proxy';
+
+const wrappedFetch: typeof undici.fetch = (input: RequestInfo, init?: RequestInit) => {
+ const request = new Request(input, init);
+ const options: RequestInit = {};
+
+ logger.debug(`Outgoing request: ${request.method} ${request.url}`);
+
+ // ua
+ if (!request.headers.get('user-agent')) {
+ request.headers.set('user-agent', config.ua);
+ }
+
+ // accept
+ if (!request.headers.get('accept')) {
+ request.headers.set('accept', '*/*');
+ }
+
+ // referer
+ if (!request.headers.get('referer')) {
+ try {
+ const urlHandler = new URL(request.url);
+ request.headers.set('referer', urlHandler.origin);
+ } catch {
+ // ignore
+ }
+ }
+
+ // proxy
+ if (!options.dispatcher && proxy.dispatcher) {
+ const proxyRegex = new RegExp(proxy.proxyObj.url_regex);
+ let urlHandler;
+ try {
+ urlHandler = new URL(request.url);
+ } catch {
+ // ignore
+ }
+
+ if (proxyRegex.test(request.url) && request.url.startsWith('http') && !(urlHandler && urlHandler.host === proxy.proxyUrlHandler?.host)) {
+ options.dispatcher = proxy.dispatcher;
+ }
+ }
+
+ return undici.fetch(request, options);
+};
+
+export default wrappedFetch;
diff --git a/lib/utils/request-rewriter/get.ts b/lib/utils/request-rewriter/get.ts
new file mode 100644
index 0000000000..7a0b21e6f2
--- /dev/null
+++ b/lib/utils/request-rewriter/get.ts
@@ -0,0 +1,70 @@
+import http from 'node:http';
+import https from 'node:https';
+import logger from '@/utils/logger';
+import { config } from '@/config';
+import proxy from '@/utils/proxy';
+
+type Get = typeof http.get | typeof https.get | typeof http.request | typeof https.request;
+
+const getWrappedGet: (origin: T) => T = (origin) =>
+ function (this: any, ...args: Parameters) {
+ let url: URL | null;
+ let options: http.RequestOptions = {};
+ let callback: ((res: http.IncomingMessage) => void) | undefined;
+ if (typeof args[0] === 'string' || args[0] instanceof URL) {
+ url = new URL(args[0]);
+ if (typeof args[1] === 'object') {
+ options = args[1];
+ callback = args[2];
+ } else if (typeof args[1] === 'function') {
+ options = {};
+ callback = args[1];
+ }
+ } else {
+ options = args[0];
+ try {
+ url = new URL(options.href || `${options.protocol || 'http:'}//${options.hostname || options.host}${options.path}${options.search || (options.query ? `?${options.query}` : '')}`);
+ } catch {
+ url = null;
+ }
+ if (typeof args[1] === 'function') {
+ callback = args[1];
+ }
+ }
+ if (!url) {
+ return Reflect.apply(origin, this, args) as ReturnType;
+ }
+
+ logger.debug(`Outgoing request: ${options.method || 'GET'} ${url}`);
+
+ options.headers = options.headers || {};
+ const headersLowerCaseKeys = new Set(Object.keys(options.headers).map((key) => key.toLowerCase()));
+
+ // ua
+ if (!headersLowerCaseKeys.has('user-agent')) {
+ options.headers['user-agent'] = config.ua;
+ }
+
+ // Accept
+ if (!headersLowerCaseKeys.has('accept')) {
+ options.headers.accept = '*/*';
+ }
+
+ // referer
+ if (!headersLowerCaseKeys.has('referer')) {
+ options.headers.referer = url.origin;
+ }
+
+ // proxy
+ if (!options.agent && proxy.agent) {
+ const proxyRegex = new RegExp(proxy.proxyObj.url_regex);
+
+ if (proxyRegex.test(url.toString()) && url.protocol.startsWith('http') && url.host !== proxy.proxyUrlHandler?.host) {
+ options.agent = proxy.agent;
+ }
+ }
+
+ return Reflect.apply(origin, this, [url, options, callback]) as ReturnType;
+ };
+
+export default getWrappedGet;
diff --git a/lib/utils/request-rewriter/index.ts b/lib/utils/request-rewriter/index.ts
new file mode 100644
index 0000000000..74e793167f
--- /dev/null
+++ b/lib/utils/request-rewriter/index.ts
@@ -0,0 +1,19 @@
+import { Headers, FormData, Request, Response } from 'undici';
+import http from 'node:http';
+import https from 'node:https';
+
+import fetch from '@/utils/request-rewriter/fetch';
+import getWrappedGet from '@/utils/request-rewriter/get';
+
+Object.defineProperties(globalThis, {
+ fetch: { value: fetch },
+ Headers: { value: Headers },
+ FormData: { value: FormData },
+ Request: { value: Request },
+ Response: { value: Response },
+});
+
+http.get = getWrappedGet(http.get);
+http.request = getWrappedGet(http.request);
+https.get = getWrappedGet(https.get);
+https.request = getWrappedGet(https.request);
diff --git a/lib/utils/request-wrapper.test.ts b/lib/utils/request-wrapper.test.ts
deleted file mode 100644
index 1b126d5068..0000000000
--- a/lib/utils/request-wrapper.test.ts
+++ /dev/null
@@ -1,365 +0,0 @@
-import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest';
-
-import got from '@/utils/got';
-import parser from '@/utils/rss-parser';
-import nock from 'nock';
-import http from 'node:http';
-
-let check: (
- request: Request & {
- agent: any;
- path: string;
- }
-) => void = () => {};
-const simpleResponse = ' ';
-
-beforeEach(() => {
- delete process.env.PAC_URI;
- delete process.env.PAC_SCRIPT;
-});
-
-afterEach(() => {
- delete process.env.PROXY_URI;
- delete process.env.PROXY_PROTOCOL;
- delete process.env.PROXY_HOST;
- delete process.env.PROXY_PORT;
- delete process.env.PROXY_AUTH;
- delete process.env.PROXY_URL_REGEX;
-
- nock.restore();
- nock.activate();
- check = () => {};
-
- const httpWrap = (func) => {
- const origin = func;
- return function (url, request) {
- if (typeof url === 'object') {
- if (url instanceof URL) {
- check(request);
- } else {
- check(url);
- }
- } else {
- check(request);
- }
- // @ts-expect-error any
- // eslint-disable-next-line prefer-rest-params
- return Reflect.apply(origin, this, arguments);
- };
- };
- http.get = httpWrap(http.get);
- http.request = httpWrap(http.request);
-
- vi.resetModules();
-});
-
-describe('got', () => {
- it('headers', async () => {
- await import('@/utils/request-wrapper');
-
- nock(/rsshub\.test/)
- .get(/.*/)
- .times(3)
- .reply(function () {
- expect(this.req.headers.referer).toBe('http://api.rsshub.test');
- expect(this.req.headers.host).toBe('api.rsshub.test');
- return [200, simpleResponse];
- });
-
- await got.get('http://api.rsshub.test/test');
- await got.get('http://api.rsshub.test');
-
- await parser.parseURL('http://api.rsshub.test/test');
- });
-
- it('proxy-uri socks', async () => {
- process.env.PROXY_URI = 'socks5://user:pass@rsshub.proxy:2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- expect(request.agent.constructor.name).toBe('SocksProxyAgent');
- expect(request.agent.proxy.host).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe(2333);
- expect(request.agent.proxy.type).toBe(5);
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('proxy-uri http', async () => {
- process.env.PROXY_URI = 'http://user:pass@rsshub.proxy:2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- expect(request.agent.constructor.name).toBe('HttpsProxyAgent');
- expect(request.agent.proxy.protocol).toBe('http:');
- expect(request.agent.proxy.username).toBe('user');
- expect(request.agent.proxy.password).toBe('pass');
- expect(request.agent.proxy.host).toBe('rsshub.proxy:2333');
- expect(request.agent.proxy.hostname).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('proxy-uri https', async () => {
- process.env.PROXY_URI = 'https://rsshub.proxy:2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- expect(request.agent.constructor.name).toBe('HttpsProxyAgent');
- expect(request.agent.proxy.protocol).toBe('https:');
- expect(request.agent.proxy.host).toBe('rsshub.proxy:2333');
- expect(request.agent.proxy.hostname).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('proxy socks', async () => {
- process.env.PROXY_PROTOCOL = 'socks';
- process.env.PROXY_HOST = 'rsshub.proxy';
- process.env.PROXY_PORT = '2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- expect(request.agent.constructor.name).toBe('SocksProxyAgent');
- expect(request.agent.proxy.host).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe(2333);
- expect(request.agent.proxy.type).toBe(5);
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('proxy http', async () => {
- process.env.PROXY_PROTOCOL = 'http';
- process.env.PROXY_HOST = 'rsshub.proxy';
- process.env.PROXY_PORT = '2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- expect(request.agent.constructor.name).toBe('HttpsProxyAgent');
- expect(request.agent.proxy.protocol).toBe('http:');
- expect(request.agent.proxy.host).toBe('rsshub.proxy:2333');
- expect(request.agent.proxy.hostname).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('proxy https', async () => {
- process.env.PROXY_PROTOCOL = 'https';
- process.env.PROXY_HOST = 'rsshub.proxy';
- process.env.PROXY_PORT = '2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- expect(request.agent.constructor.name).toBe('HttpsProxyAgent');
- expect(request.agent.proxy.protocol).toBe('https:');
- expect(request.agent.proxy.host).toBe('rsshub.proxy:2333');
- expect(request.agent.proxy.hostname).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('pac-uri http', async () => {
- process.env.PAC_URI = 'http://rsshub.proxy:2333';
-
- await import('@/utils/request-wrapper');
-
- check = (request) => {
- expect(request.agent.constructor.name).toBe('PacProxyAgent');
- expect(request.agent.uri.protocol).toBe('http:');
- expect(request.agent.uri.host).toBe('rsshub.proxy:2333');
- expect(request.agent.uri.hostname).toBe('rsshub.proxy');
- expect(request.agent.uri.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('pac-uri https', async () => {
- process.env.PAC_URI = 'https://rsshub.proxy:2333';
-
- await import('@/utils/request-wrapper');
-
- check = (request) => {
- expect(request.agent.constructor.name).toBe('PacProxyAgent');
- expect(request.agent.uri.protocol).toBe('https:');
- expect(request.agent.uri.host).toBe('rsshub.proxy:2333');
- expect(request.agent.uri.hostname).toBe('rsshub.proxy');
- expect(request.agent.uri.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('pac-uri ftp', async () => {
- process.env.PAC_URI = 'ftp://rsshub.proxy:2333';
-
- await import('@/utils/request-wrapper');
-
- check = (request) => {
- expect(request.agent.constructor.name).toBe('PacProxyAgent');
- expect(request.agent.uri.protocol).toBe('ftp:');
- expect(request.agent.uri.host).toBe('rsshub.proxy:2333');
- expect(request.agent.uri.hostname).toBe('rsshub.proxy');
- expect(request.agent.uri.port).toBe('2333');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('pac-uri file', async () => {
- process.env.PAC_URI = 'file:///D:/rsshub/proxy';
-
- await import('@/utils/request-wrapper');
-
- check = (request) => {
- expect(request.agent.constructor.name).toBe('PacProxyAgent');
- expect(request.agent.uri.protocol).toBe('file:');
- expect(request.agent.uri.pathname).toBe('/D:/rsshub/proxy');
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('pac-script data', async () => {
- process.env.PAC_SCRIPT = "function FindProxyForURL(url,host){return 'DIRECT';}";
-
- await import('@/utils/request-wrapper');
-
- check = (request) => {
- expect(request.agent.constructor.name).toBe('PacProxyAgent');
- expect(request.agent.uri.protocol).toBe('data:');
- expect(request.agent.uri.pathname).toBe("text/javascript;charset=utf-8,function%20FindProxyForURL(url%2Chost)%7Breturn%20'DIRECT'%3B%7D");
- };
-
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(200, simpleResponse);
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-
- it('auth', async () => {
- process.env.PROXY_AUTH = 'testtest';
- process.env.PROXY_PROTOCOL = 'http'; // only http(s) proxies extract auth from Headers
- process.env.PROXY_HOST = 'rsshub.proxy';
- process.env.PROXY_PORT = '2333';
-
- await import('@/utils/request-wrapper');
-
- nock(/rsshub\.test/)
- .get('/auth')
- .times(2)
- .reply(function () {
- expect(this.req.headers['proxy-authorization']).toBe('Basic testtest');
- return [200, simpleResponse];
- });
-
- await got.get('http://rsshub.test/auth');
- await parser.parseURL('http://rsshub.test/auth');
- });
-
- it('url_regex', async () => {
- process.env.PROXY_URL_REGEX = 'url_regex';
- process.env.PROXY_PROTOCOL = 'socks';
- process.env.PROXY_HOST = 'rsshub.proxy';
- process.env.PROXY_PORT = '2333';
-
- await import('@/utils/request-wrapper');
- check = (request) => {
- if (request.path === '/url_regex') {
- expect(request.agent.constructor.name).toBe('SocksProxyAgent');
- expect(request.agent.proxy.host).toBe('rsshub.proxy');
- expect(request.agent.proxy.port).toBe(2333);
- } else if (request.path === '/proxy') {
- expect(request.agent).toBe(undefined);
- }
- };
-
- nock(/rsshub\.test/)
- .get('/url_regex')
- .times(2)
- .reply(() => [200, simpleResponse]);
- nock(/rsshub\.test/)
- .get('/proxy')
- .times(2)
- .reply(() => [200, simpleResponse]);
-
- await got.get('http://rsshub.test/url_regex');
- await parser.parseURL('http://rsshub.test/url_regex');
-
- await got.get('http://rsshub.test/proxy');
- await parser.parseURL('http://rsshub.test/proxy');
- });
-});
diff --git a/lib/utils/request-wrapper.ts b/lib/utils/request-wrapper.ts
deleted file mode 100644
index 352f7d2dba..0000000000
--- a/lib/utils/request-wrapper.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import { config } from '@/config';
-import logger from '@/utils/logger';
-import http, { type RequestOptions } from 'node:http';
-import https from 'node:https';
-import proxy from '@/utils/proxy';
-
-let proxyWrapper: (
- url: string,
- options: RequestOptions & {
- headers: Record;
- }
-) => boolean = () => false;
-
-if (proxy.agent) {
- const proxyRegex = new RegExp(proxy.proxyObj.url_regex);
- const protocolMatch = (protocolLike?: string | null) => protocolLike?.toLowerCase().startsWith('http');
-
- proxyWrapper = (url, options) => {
- let urlHandler;
- try {
- urlHandler = new URL(url);
- } catch {
- // ignore
- }
- if (proxyRegex.test(url) && (protocolMatch(options.protocol) || protocolMatch(url)) && (!urlHandler || urlHandler.host !== proxy.proxyUrlHandler?.host)) {
- options.agent = proxy.agent || false;
- if (proxy.proxyObj.auth) {
- options.headers['Proxy-Authorization'] = `Basic ${proxy.proxyObj.auth}`;
- }
- return true;
- }
- return false;
- };
-}
-
-const requestWrapper = (url: string, options: http.RequestOptions = {}) => {
- options.headers = options.headers || {};
-
- const optionsWithHeaders = options as http.RequestOptions & {
- headers: Record;
- };
- const headersLowerCaseKeys = new Set(Object.keys(optionsWithHeaders.headers).map((key) => key.toLowerCase()));
-
- let prxied = false;
- if (config.proxyStrategy === 'all') {
- prxied = proxyWrapper(url, optionsWithHeaders);
- } else if (config.proxyStrategy === 'on_retry' && (optionsWithHeaders as any).retryCount) {
- // TODO
- prxied = proxyWrapper(url, optionsWithHeaders);
- }
- if (prxied) {
- logger.debug(`Proxy for ${url}`);
- } else {
- logger.debug(`Requesting ${url}`);
- }
-
- // ua
- if (!headersLowerCaseKeys.has('user-agent')) {
- options.headers['user-agent'] = config.ua;
- }
-
- // Accept
- if (!headersLowerCaseKeys.has('accept')) {
- options.headers.Accept = '*/*';
- }
-
- let urlHandler;
- try {
- urlHandler = new URL(url);
- } catch {
- // ignore
- }
-
- if (
- urlHandler && // referer
- !headersLowerCaseKeys.has('referer')
- ) {
- options.headers.referer = urlHandler.origin;
- }
-};
-
-const httpWrap = (func: typeof http.request) => {
- const origin = func;
- const warpped: typeof http.request = function (...args) {
- let url: string;
- let options: http.RequestOptions;
- if (args[0] instanceof URL || typeof args[0] === 'string') {
- url = args[0].toString();
- options = args[1] as http.RequestOptions;
- } else {
- options = args[0] as http.RequestOptions;
- url = `${options.protocol}//${options.hostname || options.host}${options.path}`;
- }
- requestWrapper(url, options);
-
- // @ts-expect-error apply
- return origin.apply(this, args);
- };
- return warpped;
-};
-
-http.get = httpWrap(http.get);
-https.get = httpWrap(https.get);
-http.request = httpWrap(http.request);
-https.request = httpWrap(https.request);
diff --git a/lib/utils/rss-parser.test.ts b/lib/utils/rss-parser.test.ts
index 20b6664b56..0b09b61ea5 100644
--- a/lib/utils/rss-parser.test.ts
+++ b/lib/utils/rss-parser.test.ts
@@ -1,17 +1,9 @@
import { describe, expect, it } from 'vitest';
import parser from '@/utils/rss-parser';
-import { config } from '@/config';
-import nock from 'nock';
-describe('got', () => {
- it('headers', async () => {
- nock('http://rsshub.test')
- .get('/test')
- .reply(function () {
- expect(this.req.headers['user-agent']).toBe(config.ua);
- return [200, ' '];
- });
-
- await parser.parseURL('http://rsshub.test/test');
+describe('rss-parser', () => {
+ it('rss', async () => {
+ const result = await parser.parseURL('http://rsshub.test/rss');
+ expect(result).toBeTruthy();
});
});
diff --git a/lib/utils/wechat-mp.test.ts b/lib/utils/wechat-mp.test.ts
index b4811e84cd..e700a6e425 100644
--- a/lib/utils/wechat-mp.test.ts
+++ b/lib/utils/wechat-mp.test.ts
@@ -1,6 +1,5 @@
import { describe, expect, it } from 'vitest';
import { load } from 'cheerio';
-import nock from 'nock';
import { fixArticleContent, fetchArticle, finishArticleItem, normalizeUrl } from '@/utils/wechat-mp';
// date from the cache will be an ISO8601 string, so we need to use this function
@@ -91,22 +90,6 @@ describe('wechat-mp', () => {
it('fetchArticle_&_finishArticleItem', async () => {
const ct = 1_636_626_300;
- const exampleMpArticlePage =
- '\n' +
- '\n' +
- '\n' +
- '\n' +
- '\n' +
- 'description
\n' +
- 'mpName
\n' +
- '';
-
- nock('https://mp.weixin.qq.com')
- .get('/rsshub_test/wechatMp_fetchArticle')
- .reply(() => [200, exampleMpArticlePage]);
const httpsUrl = 'https://mp.weixin.qq.com/rsshub_test/wechatMp_fetchArticle';
const httpUrl = httpsUrl.replace(/^https:\/\//, 'http://');
diff --git a/lib/utils/wechat-mp.ts b/lib/utils/wechat-mp.ts
index ae03957b8d..0615ab1c94 100644
--- a/lib/utils/wechat-mp.ts
+++ b/lib/utils/wechat-mp.ts
@@ -25,7 +25,7 @@
* For more details of these functions, please refer to the jsDoc in the source code.
*/
-import got from '@/utils/got';
+import ofetch from '@/utils/ofetch';
import { load, type Cheerio, type Element } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
import cache from '@/utils/cache';
@@ -196,9 +196,8 @@ const normalizeUrl = (url, bypassHostCheck = false) => {
const fetchArticle = (url, bypassHostCheck = false) => {
url = normalizeUrl(url, bypassHostCheck);
return cache.tryGet(url, async () => {
- const response = await got(url);
- // @ts-expect-error custom field
- const $ = load(response.data);
+ const data = await ofetch(url);
+ const $ = load(data);
const title = ($('meta[property="og:title"]').attr('content') || '').replaceAll('\\r', '').replaceAll('\\n', ' ');
const author = $('meta[name=author]').attr('content');
@@ -209,9 +208,8 @@ const fetchArticle = (url, bypassHostCheck = false) => {
const originalUrl = detectOriginalArticleUrl($);
if (originalUrl) {
// try to fetch the description from the original article
- const originalResponse = await got(normalizeUrl(originalUrl, bypassHostCheck));
- // @ts-expect-error custom field
- const original$ = load(originalResponse.data);
+ const data = await ofetch(normalizeUrl(originalUrl, bypassHostCheck));
+ const original$ = load(data);
description += fixArticleContent(original$('#js_content'));
}
@@ -230,7 +228,7 @@ const fetchArticle = (url, bypassHostCheck = false) => {
let mpName = $('.profile_nickname').first().text();
mpName = mpName && mpName.trim();
- return { title, author, description, summary, pubDate, mpName, link: response.url };
+ return { title, author, description, summary, pubDate, mpName, link: url };
}) as Promise<{
title: string;
author: string;
diff --git a/package.json b/package.json
index b87a404f61..7cd349712d 100644
--- a/package.json
+++ b/package.json
@@ -67,6 +67,7 @@
"crypto-js": "4.2.0",
"currency-symbol-map": "5.1.0",
"dayjs": "1.11.8",
+ "destr": "2.0.3",
"directory-import": "3.3.1",
"dotenv": "16.4.5",
"entities": "4.5.0",
@@ -75,7 +76,6 @@
"form-data": "4.0.0",
"git-rev-sync": "3.0.2",
"googleapis": "134.0.0",
- "got": "14.2.1",
"hono": "4.1.5",
"html-to-text": "9.0.5",
"https-proxy-agent": "7.0.4",
@@ -94,6 +94,7 @@
"module-alias": "2.2.3",
"notion-to-md": "3.1.1",
"oauth-1.0a": "2.2.6",
+ "ofetch": "1.3.4",
"otplib": "12.0.1",
"pac-proxy-agent": "7.0.1",
"proxy-chain": "2.4.0",
@@ -117,6 +118,7 @@
"tough-cookie": "4.1.3",
"tsx": "4.7.1",
"twitter-api-v2": "1.16.1",
+ "undici": "6.10.2",
"uuid": "9.0.1",
"winston": "3.13.0",
"xxhash-wasm": "1.0.2",
@@ -160,11 +162,12 @@
"eslint-plugin-unicorn": "51.0.1",
"eslint-plugin-yml": "1.13.2",
"fs-extra": "11.2.0",
+ "got": "14.2.1",
"husky": "9.0.11",
"js-beautify": "1.15.1",
"lint-staged": "15.2.2",
"mockdate": "3.0.5",
- "nock": "13.5.4",
+ "msw": "2.2.13",
"prettier": "3.2.5",
"remark-parse": "11.0.0",
"supertest": "6.3.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8d67e52b86..55a499b446 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -56,6 +56,9 @@ dependencies:
dayjs:
specifier: 1.11.8
version: 1.11.8
+ destr:
+ specifier: 2.0.3
+ version: 2.0.3
directory-import:
specifier: 3.3.1
version: 3.3.1
@@ -80,9 +83,6 @@ dependencies:
googleapis:
specifier: 134.0.0
version: 134.0.0
- got:
- specifier: 14.2.1
- version: 14.2.1
hono:
specifier: 4.1.5
version: 4.1.5
@@ -137,6 +137,9 @@ dependencies:
oauth-1.0a:
specifier: 2.2.6
version: 2.2.6
+ ofetch:
+ specifier: 1.3.4
+ version: 1.3.4
otplib:
specifier: 12.0.1
version: 12.0.1
@@ -206,6 +209,9 @@ dependencies:
twitter-api-v2:
specifier: 1.16.1
version: 1.16.1
+ undici:
+ specifier: 6.10.2
+ version: 6.10.2
uuid:
specifier: 9.0.1
version: 9.0.1
@@ -331,6 +337,9 @@ devDependencies:
fs-extra:
specifier: 11.2.0
version: 11.2.0
+ got:
+ specifier: 14.2.1
+ version: 14.2.1
husky:
specifier: 9.0.11
version: 9.0.11
@@ -343,9 +352,9 @@ devDependencies:
mockdate:
specifier: 3.0.5
version: 3.0.5
- nock:
- specifier: 13.5.4
- version: 13.5.4
+ msw:
+ specifier: 2.2.13
+ version: 2.2.13(typescript@5.4.3)
prettier:
specifier: 3.2.5
version: 3.2.5
@@ -378,14 +387,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /@ampproject/remapping@2.2.1:
- resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.22
- dev: true
-
/@ampproject/remapping@2.3.0:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
@@ -551,8 +552,8 @@ packages:
'@babel/types': 7.24.0
dev: true
- /@babel/helper-module-imports@7.24.1:
- resolution: {integrity: sha512-HfEWzysMyOa7xI5uQHc/OcZf67/jc+xe/RZlznWQHhbb8Pg1SkRdbK4yEi61aY8wxQA7PkSfoojtLQP/Kpe3og==}
+ /@babel/helper-module-imports@7.24.3:
+ resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
@@ -566,7 +567,7 @@ packages:
dependencies:
'@babel/core': 7.24.3
'@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
@@ -629,8 +630,8 @@ packages:
'@babel/types': 7.24.0
dev: true
- /@babel/helper-string-parser@7.23.4:
- resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
+ /@babel/helper-string-parser@7.24.1:
+ resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
engines: {node: '>=6.9.0'}
dev: true
@@ -672,14 +673,6 @@ packages:
js-tokens: 4.0.0
picocolors: 1.0.0
- /@babel/parser@7.23.9:
- resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==}
- engines: {node: '>=6.0.0'}
- hasBin: true
- dependencies:
- '@babel/types': 7.24.0
- dev: true
-
/@babel/parser@7.24.1:
resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==}
engines: {node: '>=6.0.0'}
@@ -949,7 +942,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.24.3
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@babel/helper-plugin-utils': 7.24.0
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.3)
dev: true
@@ -1583,16 +1576,16 @@ packages:
resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
dev: true
- /@babel/runtime-corejs2@7.23.9:
- resolution: {integrity: sha512-lwwDy5QfMkO2rmSz9AvLj6j2kWt5a4ulMi1t21vWQEO0kNCFslHoszat8reU/uigIQSUDF31zraZG/qMkcqAlw==}
+ /@babel/runtime-corejs2@7.24.1:
+ resolution: {integrity: sha512-De0q0utpUPiXnc7+B7Ku86mJ0eDItC/v3uFa/lQkq63XnHyZiytDHeCIvechlnVwwpU2ChjGF7c3I+mBrTudwg==}
engines: {node: '>=6.9.0'}
dependencies:
core-js: 2.6.12
regenerator-runtime: 0.14.1
dev: false
- /@babel/runtime@7.24.0:
- resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==}
+ /@babel/runtime@7.24.1:
+ resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.1
@@ -1625,20 +1618,11 @@ packages:
- supports-color
dev: true
- /@babel/types@7.23.9:
- resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
- dev: true
-
/@babel/types@7.24.0:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-string-parser': 7.23.4
+ '@babel/helper-string-parser': 7.24.1
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
dev: true
@@ -1647,6 +1631,18 @@ packages:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true
+ /@bundled-es-modules/cookie@2.0.0:
+ resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==}
+ dependencies:
+ cookie: 0.5.0
+ dev: true
+
+ /@bundled-es-modules/statuses@1.0.1:
+ resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
+ dependencies:
+ statuses: 2.0.1
+ dev: true
+
/@colors/colors@1.6.0:
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
engines: {node: '>=0.1.90'}
@@ -1670,6 +1666,16 @@ packages:
cpu: [ppc64]
os: [aix]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/aix-ppc64@0.20.2:
+ resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/android-arm64@0.19.12:
@@ -1678,6 +1684,16 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/android-arm64@0.20.2:
+ resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/android-arm@0.19.12:
@@ -1686,6 +1702,16 @@ packages:
cpu: [arm]
os: [android]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/android-arm@0.20.2:
+ resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/android-x64@0.19.12:
@@ -1694,6 +1720,16 @@ packages:
cpu: [x64]
os: [android]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/android-x64@0.20.2:
+ resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/darwin-arm64@0.19.12:
@@ -1702,6 +1738,16 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/darwin-arm64@0.20.2:
+ resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/darwin-x64@0.19.12:
@@ -1710,6 +1756,16 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/darwin-x64@0.20.2:
+ resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/freebsd-arm64@0.19.12:
@@ -1718,6 +1774,16 @@ packages:
cpu: [arm64]
os: [freebsd]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.20.2:
+ resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/freebsd-x64@0.19.12:
@@ -1726,6 +1792,16 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/freebsd-x64@0.20.2:
+ resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-arm64@0.19.12:
@@ -1734,6 +1810,16 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-arm64@0.20.2:
+ resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-arm@0.19.12:
@@ -1742,6 +1828,16 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-arm@0.20.2:
+ resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-ia32@0.19.12:
@@ -1750,6 +1846,16 @@ packages:
cpu: [ia32]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-ia32@0.20.2:
+ resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-loong64@0.19.12:
@@ -1758,6 +1864,16 @@ packages:
cpu: [loong64]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-loong64@0.20.2:
+ resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-mips64el@0.19.12:
@@ -1766,6 +1882,16 @@ packages:
cpu: [mips64el]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-mips64el@0.20.2:
+ resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-ppc64@0.19.12:
@@ -1774,6 +1900,16 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-ppc64@0.20.2:
+ resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-riscv64@0.19.12:
@@ -1782,6 +1918,16 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-riscv64@0.20.2:
+ resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-s390x@0.19.12:
@@ -1790,6 +1936,16 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-s390x@0.20.2:
+ resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-x64@0.19.12:
@@ -1798,6 +1954,16 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/linux-x64@0.20.2:
+ resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/netbsd-x64@0.19.12:
@@ -1806,6 +1972,16 @@ packages:
cpu: [x64]
os: [netbsd]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/netbsd-x64@0.20.2:
+ resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/openbsd-x64@0.19.12:
@@ -1814,6 +1990,16 @@ packages:
cpu: [x64]
os: [openbsd]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/openbsd-x64@0.20.2:
+ resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/sunos-x64@0.19.12:
@@ -1822,6 +2008,16 @@ packages:
cpu: [x64]
os: [sunos]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/sunos-x64@0.20.2:
+ resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/win32-arm64@0.19.12:
@@ -1830,6 +2026,16 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/win32-arm64@0.20.2:
+ resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/win32-ia32@0.19.12:
@@ -1838,6 +2044,16 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/win32-ia32@0.20.2:
+ resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
optional: true
/@esbuild/win32-x64@0.19.12:
@@ -1846,6 +2062,16 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
+ dev: false
+ optional: true
+
+ /@esbuild/win32-x64@0.20.2:
+ resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
@@ -1949,6 +2175,39 @@ packages:
lodash: 4.17.21
dev: true
+ /@inquirer/confirm@3.1.0:
+ resolution: {integrity: sha512-nH5mxoTEoqk6WpoBz80GMpDSm9jH5V9AF8n+JZAZfMzd9gHeEG9w1o3KawPRR72lfzpP+QxBHLkOKLEApwhDiQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@inquirer/core': 7.1.0
+ '@inquirer/type': 1.2.1
+ dev: true
+
+ /@inquirer/core@7.1.0:
+ resolution: {integrity: sha512-FRCiDiU54XHt5B/D8hX4twwZuzSP244ANHbu3R7CAsJfiv1dUOz24ePBgCZjygEjDUi6BWIJuk4eWLKJ7LATUw==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@inquirer/type': 1.2.1
+ '@types/mute-stream': 0.0.4
+ '@types/node': 20.11.30
+ '@types/wrap-ansi': 3.0.0
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-spinners: 2.9.2
+ cli-width: 4.1.0
+ figures: 3.2.0
+ mute-stream: 1.0.0
+ run-async: 3.0.0
+ signal-exit: 4.1.0
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+ dev: true
+
+ /@inquirer/type@1.2.1:
+ resolution: {integrity: sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==}
+ engines: {node: '>=18'}
+ dev: true
+
/@ioredis/commands@1.2.0:
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
dev: false
@@ -1977,15 +2236,6 @@ packages:
'@sinclair/typebox': 0.27.8
dev: true
- /@jridgewell/gen-mapping@0.3.3:
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.22
- dev: true
-
/@jridgewell/gen-mapping@0.3.5:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -2000,11 +2250,6 @@ packages:
engines: {node: '>=6.0.0'}
dev: true
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
- dev: true
-
/@jridgewell/set-array@1.2.1:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
@@ -2014,13 +2259,6 @@ packages:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
dev: true
- /@jridgewell/trace-mapping@0.3.22:
- resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
/@jridgewell/trace-mapping@0.3.25:
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
dependencies:
@@ -2028,15 +2266,15 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
- /@lifeomic/attempt@3.0.3:
- resolution: {integrity: sha512-GlM2AbzrErd/TmLL3E8hAHmb5Q7VhDJp35vIbyPVA5Rz55LZuRr8pwL3qrwwkVNo05gMX1J44gURKb4MHQZo7w==}
+ /@lifeomic/attempt@3.1.0:
+ resolution: {integrity: sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==}
dev: false
/@mapbox/node-pre-gyp@1.0.11:
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
dependencies:
- detect-libc: 2.0.2
+ detect-libc: 2.0.3
https-proxy-agent: 5.0.1
make-dir: 3.1.0
node-fetch: 2.7.0
@@ -2044,7 +2282,7 @@ packages:
npmlog: 5.0.1
rimraf: 3.0.2
semver: 7.6.0
- tar: 6.2.0
+ tar: 6.2.1
transitivePeerDependencies:
- encoding
- supports-color
@@ -2062,8 +2300,25 @@ packages:
- supports-color
dev: true
+ /@mswjs/cookies@1.1.0:
+ resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /@mswjs/interceptors@0.26.14:
+ resolution: {integrity: sha512-q4S8RGjOUzv3A3gCawuKkUEcNJXjdPaSqoRHFvuZPWQnc7yOw702iGBRDMJoBK+l0KSv9XN8YP5ek6duRzrpqw==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@open-draft/deferred-promise': 2.2.0
+ '@open-draft/logger': 0.3.0
+ '@open-draft/until': 2.1.0
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ strict-event-emitter: 0.5.1
+ dev: true
+
/@nodelib/fs.scandir@2.1.5:
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ resolution: {integrity: sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz}
engines: {node: '>= 8'}
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -2097,6 +2352,21 @@ packages:
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
dev: true
+ /@open-draft/deferred-promise@2.2.0:
+ resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
+ dev: true
+
+ /@open-draft/logger@0.3.0:
+ resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==}
+ dependencies:
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ dev: true
+
+ /@open-draft/until@2.1.0:
+ resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ dev: true
+
/@otplib/core@12.0.1:
resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==}
dev: false
@@ -2157,7 +2427,7 @@ packages:
engines: {node: '>=10'}
hasBin: true
dependencies:
- '@babel/runtime-corejs2': 7.23.9
+ '@babel/runtime-corejs2': 7.24.1
'@postlight/ci-failed-test-reporter': 1.0.26
cheerio: 0.22.0
difflib: github.com/postlight/difflib.js/32e8e38c7fcd935241b9baab71bb432fd9b166ed
@@ -2167,7 +2437,7 @@ packages:
moment-parseformat: 3.0.0
postman-request: 2.88.1-postman.33
string-direction: 0.1.2
- turndown: 7.1.2
+ turndown: 7.1.3
valid-url: 1.0.9
wuzzy: 0.1.8
yargs-parser: 15.0.3
@@ -2229,104 +2499,109 @@ packages:
picomatch: 2.3.1
dev: true
- /@rollup/rollup-android-arm-eabi@4.12.0:
- resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==}
+ /@rollup/rollup-android-arm-eabi@4.13.0:
+ resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-android-arm64@4.12.0:
- resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==}
+ /@rollup/rollup-android-arm64@4.13.0:
+ resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-darwin-arm64@4.12.0:
- resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==}
+ /@rollup/rollup-darwin-arm64@4.13.0:
+ resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-darwin-x64@4.12.0:
- resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==}
+ /@rollup/rollup-darwin-x64@4.13.0:
+ resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm-gnueabihf@4.12.0:
- resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==}
+ /@rollup/rollup-linux-arm-gnueabihf@4.13.0:
+ resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm64-gnu@4.12.0:
- resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==}
+ /@rollup/rollup-linux-arm64-gnu@4.13.0:
+ resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm64-musl@4.12.0:
- resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==}
+ /@rollup/rollup-linux-arm64-musl@4.13.0:
+ resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-riscv64-gnu@4.12.0:
- resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==}
+ /@rollup/rollup-linux-riscv64-gnu@4.13.0:
+ resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-x64-gnu@4.12.0:
- resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==}
+ /@rollup/rollup-linux-x64-gnu@4.13.0:
+ resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-x64-musl@4.12.0:
- resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==}
+ /@rollup/rollup-linux-x64-musl@4.13.0:
+ resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==}
cpu: [x64]
os: [linux]
+ libc: [musl]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-arm64-msvc@4.12.0:
- resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==}
+ /@rollup/rollup-win32-arm64-msvc@4.13.0:
+ resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-ia32-msvc@4.12.0:
- resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==}
+ /@rollup/rollup-win32-ia32-msvc@4.13.0:
+ resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-x64-msvc@4.12.0:
- resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==}
+ /@rollup/rollup-win32-x64-msvc@4.13.0:
+ resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==}
cpu: [x64]
os: [win32]
requiresBuild: true
@@ -2391,7 +2666,7 @@ packages:
/@sindresorhus/is@6.2.0:
resolution: {integrity: sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ==}
engines: {node: '>=16'}
- dev: false
+ dev: true
/@stylistic/eslint-plugin-js@1.7.0(eslint@8.57.0):
resolution: {integrity: sha512-PN6On/+or63FGnhhMKSQfYcWutRlzOiYlVdLM6yN7lquoBTqUJHYnl4TA4MHwiAt46X5gRxDr1+xPZ1lOLcL+Q==}
@@ -2470,7 +2745,6 @@ packages:
engines: {node: '>=14.16'}
dependencies:
defer-to-connect: 2.0.1
- dev: false
/@tonyrl/rand-user-agent@2.0.56:
resolution: {integrity: sha512-7C2zOyvJsU2BxYayw+w/KjtP/InxYHzRWOWUuPj3XP3SGfnUTpQjKvEuo5K0LB+0YqF62w65LjHGE7Aw1irtaA==}
@@ -2496,6 +2770,10 @@ packages:
resolution: {integrity: sha512-V+pm3stv1Mvz8fSKJJod6CglNGVqEQ6OyuqitoDkWywEODM/eJd1eSuIp9xt6DrX8BWZ2eDSIzbw1tPCUTvGbQ==}
dev: false
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+ dev: true
+
/@types/cookiejar@2.1.5:
resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==}
dev: true
@@ -2547,7 +2825,6 @@ packages:
/@types/http-cache-semantics@4.0.4:
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
- dev: false
/@types/imapflow@1.0.18:
resolution: {integrity: sha512-BoWZUoMktji2YJmkRY8z0KsjvyDNpBzeC/rLVMFKcHkPxaKp+SHBFfx/kj7ltKh3l010Lc9RZqnJs8KUMNhf6Q==}
@@ -2624,6 +2901,12 @@ packages:
/@types/ms@0.7.34:
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+ /@types/mute-stream@0.0.4:
+ resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
+ dependencies:
+ '@types/node': 20.11.30
+ dev: true
+
/@types/node-fetch@2.6.11:
resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
dependencies:
@@ -2671,8 +2954,12 @@ packages:
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
dev: true
- /@types/superagent@8.1.3:
- resolution: {integrity: sha512-R/CfN6w2XsixLb1Ii8INfn+BT9sGPvw74OavfkW4SwY+jeUcAwLZv2+bXLJkndnimxjEBm0RPHgcjW9pLCa8cw==}
+ /@types/statuses@2.0.5:
+ resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==}
+ dev: true
+
+ /@types/superagent@8.1.6:
+ resolution: {integrity: sha512-yzBOv+6meEHSzV2NThYYOA6RtqvPr3Hbob9ZLp3i07SH27CrYVfm8CrF7ydTmidtelsFiKx2I4gZAiAOamGgvQ==}
dependencies:
'@types/cookiejar': 2.1.5
'@types/methods': 1.1.4
@@ -2683,7 +2970,7 @@ packages:
resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==}
dependencies:
'@types/methods': 1.1.4
- '@types/superagent': 8.1.3
+ '@types/superagent': 8.1.6
dev: true
/@types/tiny-async-pool@2.0.3:
@@ -2701,6 +2988,10 @@ packages:
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
dev: true
+ /@types/wrap-ansi@3.0.0:
+ resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==}
+ dev: true
+
/@types/yauzl@2.10.3:
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
requiresBuild: true
@@ -2732,7 +3023,7 @@ packages:
ignore: 5.3.1
natural-compare: 1.4.0
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.3)
+ ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
@@ -2789,7 +3080,7 @@ packages:
'@typescript-eslint/utils': 7.4.0(eslint@8.57.0)(typescript@5.4.3)
debug: 4.3.4
eslint: 8.57.0
- ts-api-utils: 1.2.1(typescript@5.4.3)
+ ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
@@ -2821,7 +3112,7 @@ packages:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.3)
+ ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
@@ -2843,7 +3134,7 @@ packages:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.3)
+ ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
@@ -2915,7 +3206,7 @@ packages:
'@mapbox/node-pre-gyp': 1.0.11
'@rollup/pluginutils': 4.2.1
acorn: 8.11.3
- acorn-import-attributes: 1.9.2(acorn@8.11.3)
+ acorn-import-attributes: 1.9.4(acorn@8.11.3)
async-sema: 3.1.1
bindings: 1.5.0
estree-walker: 2.0.2
@@ -2934,13 +3225,13 @@ packages:
peerDependencies:
vitest: 1.4.0
dependencies:
- '@ampproject/remapping': 2.2.1
+ '@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
debug: 4.3.4
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.4
- istanbul-reports: 3.1.6
+ istanbul-reports: 3.1.7
magic-string: 0.30.8
magicast: 0.3.3
picocolors: 1.0.0
@@ -3008,8 +3299,8 @@ packages:
event-target-shim: 5.0.1
dev: false
- /acorn-import-attributes@1.9.2(acorn@8.11.3):
- resolution: {integrity: sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==}
+ /acorn-import-attributes@1.9.4(acorn@8.11.3):
+ resolution: {integrity: sha512-dNIX/5UEnZvVL94dV2scl4VIooK36D8AteP4xiz7cPKhDbhLhSuWkzG580g+Q7TXJklp+Z21SiaK7/HpLO84Qg==}
peerDependencies:
acorn: ^8
dependencies:
@@ -3077,11 +3368,9 @@ packages:
type-fest: 0.21.3
dev: true
- /ansi-escapes@6.2.0:
- resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==}
+ /ansi-escapes@6.2.1:
+ resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
engines: {node: '>=14.16'}
- dependencies:
- type-fest: 3.13.1
dev: true
/ansi-regex@2.1.1:
@@ -3280,8 +3569,8 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- /bare-events@2.2.0:
- resolution: {integrity: sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==}
+ /bare-events@2.2.2:
+ resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==}
requiresBuild: true
dev: false
optional: true
@@ -3290,15 +3579,15 @@ packages:
resolution: {integrity: sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==}
requiresBuild: true
dependencies:
- bare-events: 2.2.0
- bare-os: 2.2.0
+ bare-events: 2.2.2
+ bare-os: 2.2.1
bare-path: 2.1.0
- streamx: 2.15.8
+ streamx: 2.16.1
dev: false
optional: true
- /bare-os@2.2.0:
- resolution: {integrity: sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==}
+ /bare-os@2.2.1:
+ resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==}
requiresBuild: true
dev: false
optional: true
@@ -3307,15 +3596,15 @@ packages:
resolution: {integrity: sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==}
requiresBuild: true
dependencies:
- bare-os: 2.2.0
+ bare-os: 2.2.1
dev: false
optional: true
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- /basic-ftp@5.0.4:
- resolution: {integrity: sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==}
+ /basic-ftp@5.0.5:
+ resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
engines: {node: '>=10.0.0'}
dev: false
@@ -3394,8 +3683,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001587
- electron-to-chromium: 1.4.669
+ caniuse-lite: 1.0.30001600
+ electron-to-chromium: 1.4.717
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
dev: true
@@ -3405,7 +3694,7 @@ packages:
dev: false
/buffer-equal-constant-time@1.0.1:
- resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+ resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=, tarball: https://registry.npmmirror.com/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz}
dev: false
/buffer@5.7.1:
@@ -3448,7 +3737,6 @@ packages:
/cacheable-lookup@7.0.0:
resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
engines: {node: '>=14.16'}
- dev: false
/cacheable-request@10.2.14:
resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
@@ -3459,9 +3747,8 @@ packages:
http-cache-semantics: 4.1.1
keyv: 4.5.4
mimic-response: 4.0.0
- normalize-url: 8.0.0
+ normalize-url: 8.0.1
responselike: 3.0.0
- dev: false
/call-bind@1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
@@ -3471,7 +3758,7 @@ packages:
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
- set-function-length: 1.2.1
+ set-function-length: 1.2.2
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -3504,8 +3791,8 @@ packages:
engines: {node: '>=10'}
dev: false
- /caniuse-lite@1.0.30001587:
- resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==}
+ /caniuse-lite@1.0.30001600:
+ resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==}
dev: true
/caseless@0.12.0:
@@ -3714,6 +4001,11 @@ packages:
engines: {node: '>= 10'}
dev: true
+ /cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+ dev: true
+
/clipboardy@1.2.2:
resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==}
engines: {node: '>=4'}
@@ -3729,7 +4021,6 @@ packages:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
- dev: false
/clone-deep@0.2.4:
resolution: {integrity: sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==}
@@ -3828,7 +4119,7 @@ packages:
dev: true
/concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=, tarball: https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz}
/config-chain@1.1.13:
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
@@ -3845,14 +4136,13 @@ packages:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
dev: true
- /cookiejar@2.1.4:
- resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==}
+ /cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
dev: true
- /core-js-compat@3.36.0:
- resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==}
- dependencies:
- browserslist: 4.23.0
+ /cookiejar@2.1.4:
+ resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==}
dev: true
/core-js-compat@3.36.1:
@@ -3953,11 +4243,12 @@ packages:
resolution: {integrity: sha512-LO/lzYRw134LMDVnLyAf1dHE5tyO6axEFkR3TXjQIOmMkAM9YL6QsiUwuXzZAmFnuDJcs4hayOgyIYtViXFrLw==}
dev: false
- /d@1.0.1:
- resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
+ /d@1.0.2:
+ resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
+ engines: {node: '>=0.12'}
dependencies:
es5-ext: 0.10.64
- type: 1.2.0
+ type: 2.7.2
dev: false
/dashdash@1.14.1:
@@ -4042,7 +4333,6 @@ packages:
engines: {node: '>=10'}
dependencies:
mimic-response: 3.1.0
- dev: false
/deep-eql@4.1.3:
resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
@@ -4068,7 +4358,6 @@ packages:
/defer-to-connect@2.0.1:
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
engines: {node: '>=10'}
- dev: false
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
@@ -4105,8 +4394,12 @@ packages:
engines: {node: '>=6'}
dev: true
- /detect-libc@2.0.2:
- resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
+ /destr@2.0.3:
+ resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
+ dev: false
+
+ /detect-libc@2.0.3:
+ resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'}
dev: true
@@ -4270,8 +4563,8 @@ packages:
semver: 7.6.0
dev: true
- /electron-to-chromium@1.4.669:
- resolution: {integrity: sha512-E2SmpffFPrZhBSgf8ibqanRS2mpuk3FIRDzLDwt7WFpfgJMKDHJs0hmacyP0PS1cWsq0dVkwIIzlscNaterkPg==}
+ /electron-to-chromium@1.4.717:
+ resolution: {integrity: sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==}
dev: true
/ellipsize@0.1.0:
@@ -4342,7 +4635,7 @@ packages:
requiresBuild: true
dependencies:
es6-iterator: 2.0.3
- es6-symbol: 3.1.3
+ es6-symbol: 3.1.4
esniff: 2.0.1
next-tick: 1.1.0
dev: false
@@ -4350,15 +4643,16 @@ packages:
/es6-iterator@2.0.3:
resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
dependencies:
- d: 1.0.1
+ d: 1.0.2
es5-ext: 0.10.64
- es6-symbol: 3.1.3
+ es6-symbol: 3.1.4
dev: false
- /es6-symbol@3.1.3:
- resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==}
+ /es6-symbol@3.1.4:
+ resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
+ engines: {node: '>=0.12'}
dependencies:
- d: 1.0.1
+ d: 1.0.2
ext: 1.7.0
dev: false
@@ -4391,6 +4685,38 @@ packages:
'@esbuild/win32-arm64': 0.19.12
'@esbuild/win32-ia32': 0.19.12
'@esbuild/win32-x64': 0.19.12
+ dev: false
+
+ /esbuild@0.20.2:
+ resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.20.2
+ '@esbuild/android-arm': 0.20.2
+ '@esbuild/android-arm64': 0.20.2
+ '@esbuild/android-x64': 0.20.2
+ '@esbuild/darwin-arm64': 0.20.2
+ '@esbuild/darwin-x64': 0.20.2
+ '@esbuild/freebsd-arm64': 0.20.2
+ '@esbuild/freebsd-x64': 0.20.2
+ '@esbuild/linux-arm': 0.20.2
+ '@esbuild/linux-arm64': 0.20.2
+ '@esbuild/linux-ia32': 0.20.2
+ '@esbuild/linux-loong64': 0.20.2
+ '@esbuild/linux-mips64el': 0.20.2
+ '@esbuild/linux-ppc64': 0.20.2
+ '@esbuild/linux-riscv64': 0.20.2
+ '@esbuild/linux-s390x': 0.20.2
+ '@esbuild/linux-x64': 0.20.2
+ '@esbuild/netbsd-x64': 0.20.2
+ '@esbuild/openbsd-x64': 0.20.2
+ '@esbuild/sunos-x64': 0.20.2
+ '@esbuild/win32-arm64': 0.20.2
+ '@esbuild/win32-ia32': 0.20.2
+ '@esbuild/win32-x64': 0.20.2
+ dev: true
/escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
@@ -4429,15 +4755,6 @@ packages:
source-map: 0.6.1
dev: false
- /eslint-compat-utils@0.1.2(eslint@8.57.0):
- resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
- engines: {node: '>=12'}
- peerDependencies:
- eslint: '>=6.0.0'
- dependencies:
- eslint: 8.57.0
- dev: true
-
/eslint-compat-utils@0.5.0(eslint@8.57.0):
resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==}
engines: {node: '>=12'}
@@ -4495,8 +4812,8 @@ packages:
optionator: 0.9.3
dev: true
- /eslint-plugin-es-x@7.5.0(eslint@8.57.0):
- resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==}
+ /eslint-plugin-es-x@7.6.0(eslint@8.57.0):
+ resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '>=8'
@@ -4504,7 +4821,7 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@eslint-community/regexpp': 4.10.0
eslint: 8.57.0
- eslint-compat-utils: 0.1.2(eslint@8.57.0)
+ eslint-compat-utils: 0.5.0(eslint@8.57.0)
dev: true
/eslint-plugin-n@16.6.2(eslint@8.57.0):
@@ -4516,8 +4833,8 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
builtins: 5.0.1
eslint: 8.57.0
- eslint-plugin-es-x: 7.5.0(eslint@8.57.0)
- get-tsconfig: 4.7.2
+ eslint-plugin-es-x: 7.6.0(eslint@8.57.0)
+ get-tsconfig: 4.7.3
globals: 13.24.0
ignore: 5.3.1
is-builtin-module: 3.2.1
@@ -4560,7 +4877,7 @@ packages:
'@eslint/eslintrc': 2.1.4
ci-info: 4.0.0
clean-regexp: 1.0.0
- core-js-compat: 3.36.0
+ core-js-compat: 3.36.1
eslint: 8.57.0
esquery: 1.5.0
indent-string: 4.0.0
@@ -4664,7 +4981,7 @@ packages:
resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
engines: {node: '>=0.10'}
dependencies:
- d: 1.0.1
+ d: 1.0.2
es5-ext: 0.10.64
event-emitter: 0.3.5
type: 2.7.2
@@ -4730,7 +5047,7 @@ packages:
/event-emitter@0.3.5:
resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
dependencies:
- d: 1.0.1
+ d: 1.0.2
es5-ext: 0.10.64
dev: false
@@ -4770,7 +5087,7 @@ packages:
human-signals: 5.0.0
is-stream: 3.0.0
merge-stream: 2.0.0
- npm-run-path: 5.2.0
+ npm-run-path: 5.3.0
onetime: 6.0.0
signal-exit: 4.1.0
strip-final-newline: 3.0.0
@@ -4855,8 +5172,8 @@ packages:
/fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- /fast-redact@3.3.0:
- resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==}
+ /fast-redact@3.5.0:
+ resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
engines: {node: '>=6'}
dev: false
@@ -4935,13 +5252,13 @@ packages:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
- flatted: 3.2.9
+ flatted: 3.3.1
keyv: 4.5.4
rimraf: 3.0.2
dev: true
- /flatted@3.2.9:
- resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
dev: true
/fn.name@1.1.0:
@@ -4985,7 +5302,7 @@ packages:
/form-data-encoder@4.0.2:
resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==}
engines: {node: '>= 18'}
- dev: false
+ dev: true
/form-data@2.3.3:
resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
@@ -5018,7 +5335,7 @@ packages:
dezalgo: 1.0.4
hexoid: 1.0.0
once: 1.4.0
- qs: 6.11.2
+ qs: 6.12.0
dev: true
/fs-extra@10.1.0:
@@ -5073,8 +5390,8 @@ packages:
wide-align: 1.1.5
dev: true
- /gaxios@6.2.0:
- resolution: {integrity: sha512-H6+bHeoEAU5D6XNc6mPKeN5dLZqEDs9Gpk6I+SZBEzK5So58JVrHPmevNi35fRl1J9Y5TaeLW0kYx3pCJ1U2mQ==}
+ /gaxios@6.3.0:
+ resolution: {integrity: sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==}
engines: {node: '>=14'}
dependencies:
extend: 3.0.2
@@ -5090,7 +5407,7 @@ packages:
resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==}
engines: {node: '>=14'}
dependencies:
- gaxios: 6.2.0
+ gaxios: 6.3.0
json-bigint: 1.0.0
transitivePeerDependencies:
- encoding
@@ -5105,7 +5422,6 @@ packages:
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- dev: false
/get-east-asian-width@1.2.0:
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
@@ -5122,9 +5438,9 @@ packages:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
- has-proto: 1.0.1
+ has-proto: 1.0.3
has-symbols: 1.0.3
- hasown: 2.0.1
+ hasown: 2.0.2
/get-stream@3.0.0:
resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
@@ -5141,14 +5457,14 @@ packages:
/get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- dev: false
/get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
+ dev: true
- /get-tsconfig@4.7.2:
- resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
+ /get-tsconfig@4.7.3:
+ resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==}
dependencies:
resolve-pkg-maps: 1.0.0
@@ -5156,7 +5472,7 @@ packages:
resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==}
engines: {node: '>= 14'}
dependencies:
- basic-ftp: 5.0.4
+ basic-ftp: 5.0.5
data-uri-to-buffer: 6.0.2
debug: 4.3.4
fs-extra: 11.2.0
@@ -5200,7 +5516,7 @@ packages:
foreground-child: 3.1.1
jackspeak: 2.3.6
minimatch: 9.0.3
- minipass: 5.0.0
+ minipass: 7.0.4
path-scurry: 1.10.1
dev: true
@@ -5242,13 +5558,13 @@ packages:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
dev: true
- /google-auth-library@9.6.3:
- resolution: {integrity: sha512-4CacM29MLC2eT9Cey5GDVK4Q8t+MMp8+OEdOaqD9MG6b0dOyLORaaeJMPQ7EESVgm/+z5EKYyFLxgzBJlJgyHQ==}
+ /google-auth-library@9.7.0:
+ resolution: {integrity: sha512-I/AvzBiUXDzLOy4iIZ2W+Zq33W4lcukQv1nl7C8WUA6SQwyQwUwu3waNmWNAvzds//FG8SZ+DnKnW/2k6mQS8A==}
engines: {node: '>=14'}
dependencies:
base64-js: 1.5.1
ecdsa-sig-formatter: 1.0.11
- gaxios: 6.2.0
+ gaxios: 6.3.0
gcp-metadata: 6.1.0
gtoken: 7.1.0
jws: 4.0.0
@@ -5257,14 +5573,14 @@ packages:
- supports-color
dev: false
- /googleapis-common@7.0.1:
- resolution: {integrity: sha512-mgt5zsd7zj5t5QXvDanjWguMdHAcJmmDrF9RkInCecNsyV7S7YtGqm5v2IWONNID88osb7zmx5FtrAP12JfD0w==}
+ /googleapis-common@7.1.0:
+ resolution: {integrity: sha512-p3KHiWDBBWJEXk6SYauBEvxw5+UmRy7k2scxGtsNv9eHsTbpopJ3/7If4OrNnzJ9XMLg3IlyQXpVp8YPQsStiw==}
engines: {node: '>=14.0.0'}
dependencies:
extend: 3.0.2
- gaxios: 6.2.0
- google-auth-library: 9.6.3
- qs: 6.11.2
+ gaxios: 6.3.0
+ google-auth-library: 9.7.0
+ qs: 6.12.0
url-template: 2.0.8
uuid: 9.0.1
transitivePeerDependencies:
@@ -5276,8 +5592,8 @@ packages:
resolution: {integrity: sha512-o8LhD1754W6MHWtpwAPeP1WUHgNxuMxCnLMDFlMKAA5kCMTNqX9/eaTXnkkAIv6YRfoKMQ6D1vyR6/biXuhE9g==}
engines: {node: '>=14.0.0'}
dependencies:
- google-auth-library: 9.6.3
- googleapis-common: 7.0.1
+ google-auth-library: 9.7.0
+ googleapis-common: 7.1.0
transitivePeerDependencies:
- encoding
- supports-color
@@ -5320,7 +5636,7 @@ packages:
lowercase-keys: 3.0.0
p-cancelable: 4.0.1
responselike: 3.0.0
- dev: false
+ dev: true
/graceful-fs@4.1.15:
resolution: {integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==}
@@ -5333,11 +5649,16 @@ packages:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true
+ /graphql@16.8.1:
+ resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+ dev: true
+
/gtoken@7.1.0:
resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==}
engines: {node: '>=14.0.0'}
dependencies:
- gaxios: 6.2.0
+ gaxios: 6.3.0
jws: 4.0.0
transitivePeerDependencies:
- encoding
@@ -5384,8 +5705,8 @@ packages:
dependencies:
es-define-property: 1.0.0
- /has-proto@1.0.1:
- resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+ /has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
engines: {node: '>= 0.4'}
/has-symbols@1.0.3:
@@ -5396,8 +5717,8 @@ packages:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
dev: true
- /hasown@2.0.1:
- resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
@@ -5407,6 +5728,10 @@ packages:
hasBin: true
dev: false
+ /headers-polyfill@4.0.3:
+ resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
+ dev: true
+
/heap@0.2.7:
resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==}
dev: false
@@ -5494,10 +5819,9 @@ packages:
/http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
- dev: false
- /http-proxy-agent@7.0.1:
- resolution: {integrity: sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==}
+ /http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
@@ -5529,7 +5853,6 @@ packages:
dependencies:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
- dev: false
/https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
@@ -5668,7 +5991,7 @@ packages:
re2:
optional: true
dependencies:
- '@lifeomic/attempt': 3.0.3
+ '@lifeomic/attempt': 3.1.0
'@types/chance': 1.1.6
'@types/request-promise': 4.1.51
bluebird: 3.7.2
@@ -5754,7 +6077,7 @@ packages:
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
/is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
@@ -5799,6 +6122,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /is-node-process@1.2.0:
+ resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
+ dev: true
+
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
@@ -5890,8 +6217,8 @@ packages:
- supports-color
dev: true
- /istanbul-reports@3.1.6:
- resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==}
+ /istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
engines: {node: '>=8'}
dependencies:
html-escaper: 2.0.2
@@ -5968,7 +6295,7 @@ packages:
decimal.js: 10.4.3
form-data: 4.0.0
html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.1
+ http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.4
is-potential-custom-element-name: 1.0.1
nwsapi: 2.2.7
@@ -6031,6 +6358,7 @@ packages:
/json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+ dev: false
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
@@ -6312,7 +6640,7 @@ packages:
resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
engines: {node: '>=18'}
dependencies:
- ansi-escapes: 6.2.0
+ ansi-escapes: 6.2.1
cli-cursor: 4.0.0
slice-ansi: 7.1.0
strip-ansi: 7.1.0
@@ -6344,7 +6672,6 @@ packages:
/lowercase-keys@3.0.0:
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: false
/lru-cache@10.2.0:
resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
@@ -6393,9 +6720,9 @@ packages:
/magicast@0.3.3:
resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==}
dependencies:
- '@babel/parser': 7.23.9
- '@babel/types': 7.23.9
- source-map-js: 1.0.2
+ '@babel/parser': 7.24.1
+ '@babel/types': 7.24.0
+ source-map-js: 1.2.0
dev: true
/mailparser@3.6.9:
@@ -6739,12 +7066,10 @@ packages:
/mimic-response@3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
- dev: false
/mimic-response@4.0.0:
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: false
/min-indent@1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
@@ -6782,6 +7107,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /minipass@7.0.4:
+ resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dev: true
+
/minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
@@ -6814,7 +7144,7 @@ packages:
acorn: 8.11.3
pathe: 1.1.2
pkg-types: 1.0.3
- ufo: 1.4.0
+ ufo: 1.5.3
dev: true
/mockdate@3.0.5:
@@ -6844,10 +7174,46 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false
+ /msw@2.2.13(typescript@5.4.3):
+ resolution: {integrity: sha512-ljFf1xZsU0b4zv1l7xzEmC6OZA6yD06hcx0H+dc8V0VypaP3HGYJa1rMLjQbBWl32ptGhcfwcPCWDB1wjmsftw==}
+ engines: {node: '>=18'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ typescript: '>= 4.7.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@bundled-es-modules/cookie': 2.0.0
+ '@bundled-es-modules/statuses': 1.0.1
+ '@inquirer/confirm': 3.1.0
+ '@mswjs/cookies': 1.1.0
+ '@mswjs/interceptors': 0.26.14
+ '@open-draft/until': 2.1.0
+ '@types/cookie': 0.6.0
+ '@types/statuses': 2.0.5
+ chalk: 4.1.2
+ graphql: 16.8.1
+ headers-polyfill: 4.0.3
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ path-to-regexp: 6.2.1
+ strict-event-emitter: 0.5.1
+ type-fest: 4.14.0
+ typescript: 5.4.3
+ yargs: 17.7.2
+ dev: true
+
/mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
dev: true
+ /mute-stream@1.0.0:
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
/nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -6872,16 +7238,9 @@ packages:
lower-case: 1.1.4
dev: false
- /nock@13.5.4:
- resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==}
- engines: {node: '>= 10.13'}
- dependencies:
- debug: 4.3.4
- json-stringify-safe: 5.0.1
- propagate: 2.0.1
- transitivePeerDependencies:
- - supports-color
- dev: true
+ /node-fetch-native@1.6.4:
+ resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
+ dev: false
/node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
@@ -6944,10 +7303,9 @@ packages:
validate-npm-package-license: 3.0.4
dev: true
- /normalize-url@8.0.0:
- resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==}
+ /normalize-url@8.0.1:
+ resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
engines: {node: '>=14.16'}
- dev: false
/notion-to-md@3.1.1:
resolution: {integrity: sha512-Zaa2P1B9Rx99bevFYTGuUMYbbfdHn2G1AZMsytYGDWIJjr6Ie1qp/8CorpwVUh1qrquES/V2PkEREqCuTu1zKA==}
@@ -6966,8 +7324,8 @@ packages:
path-key: 2.0.1
dev: false
- /npm-run-path@5.2.0:
- resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==}
+ /npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
path-key: 4.0.0
@@ -7013,6 +7371,14 @@ packages:
/object-inspect@1.13.1:
resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+ /ofetch@1.3.4:
+ resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==}
+ dependencies:
+ destr: 2.0.3
+ node-fetch-native: 1.6.4
+ ufo: 1.5.3
+ dev: false
+
/on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
@@ -7046,7 +7412,7 @@ packages:
/openapi3-ts@4.2.2:
resolution: {integrity: sha512-+9g4actZKeb3czfi9gVQ4Br2Ju3KwhCAQJBNaKgye5KggqcBLIhFHH+nIkcm0BUX00TrAJl6dH4JWgM4G4JWrw==}
dependencies:
- yaml: 2.3.4
+ yaml: 2.4.1
dev: false
/optionator@0.8.3:
@@ -7101,6 +7467,10 @@ packages:
'@otplib/preset-v11': 12.0.1
dev: false
+ /outvariant@1.4.2:
+ resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==}
+ dev: true
+
/p-cancelable@3.0.0:
resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
engines: {node: '>=12.20'}
@@ -7109,7 +7479,7 @@ packages:
/p-cancelable@4.0.1:
resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==}
engines: {node: '>=14.16'}
- dev: false
+ dev: true
/p-finally@1.0.0:
resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
@@ -7164,7 +7534,7 @@ packages:
agent-base: 7.1.0
debug: 4.3.4
get-uri: 6.0.3
- http-proxy-agent: 7.0.1
+ http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.4
pac-resolver: 7.0.1
socks-proxy-agent: 8.0.2
@@ -7263,7 +7633,11 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
lru-cache: 10.2.0
- minipass: 5.0.0
+ minipass: 7.0.4
+ dev: true
+
+ /path-to-regexp@6.2.1:
+ resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
dev: true
/path-type@4.0.0:
@@ -7326,7 +7700,7 @@ packages:
hasBin: true
dependencies:
atomic-sleep: 1.0.0
- fast-redact: 3.3.0
+ fast-redact: 3.5.0
on-exit-leak-free: 2.1.2
pino-abstract-transport: 1.1.0
pino-std-serializers: 6.2.2
@@ -7351,13 +7725,13 @@ packages:
engines: {node: '>=4'}
dev: true
- /postcss@8.4.35:
- resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
+ /postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
/postman-request@2.88.1-postman.33:
resolution: {integrity: sha512-uL9sCML4gPH6Z4hreDWbeinKU0p0Ke261nU7OvII95NU22HN6Dk7T/SaVPaj6T4TsQqGKIFw6/woLZnH7ugFNA==}
@@ -7433,11 +7807,6 @@ packages:
engines: {node: '>=0.4.0'}
dev: false
- /propagate@2.0.1:
- resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==}
- engines: {node: '>= 8'}
- dev: true
-
/proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
dev: true
@@ -7448,7 +7817,7 @@ packages:
dependencies:
agent-base: 7.1.0
debug: 4.3.4
- http-proxy-agent: 7.0.1
+ http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.4
lru-cache: 7.18.3
pac-proxy-agent: 7.0.1
@@ -7629,11 +7998,11 @@ packages:
- utf-8-validate
dev: false
- /qs@6.11.2:
- resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
+ /qs@6.12.0:
+ resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==}
engines: {node: '>=0.6'}
dependencies:
- side-channel: 1.0.5
+ side-channel: 1.0.6
/qs@6.5.3:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
@@ -7678,7 +8047,6 @@ packages:
/quick-lru@5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
- dev: false
/re2js@0.4.1:
resolution: {integrity: sha512-Kxb+OKXrEPowP4bXAF07NDXtgYX07S8HeVGgadx5/D/R41LzWg1kgTD2szIv2iHJM3vrAPnDKaBzfUE/7QWX9w==}
@@ -7775,7 +8143,7 @@ packages:
/regenerator-transform@0.15.2:
resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
dependencies:
- '@babel/runtime': 7.24.0
+ '@babel/runtime': 7.24.1
dev: true
/regexp-tree@0.1.27:
@@ -7831,7 +8199,7 @@ packages:
dev: false
/request-promise-core@1.1.4(request@2.88.2):
- resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==}
+ resolution: {integrity: sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=, tarball: https://registry.npmmirror.com/request-promise-core/download/request-promise-core-1.1.4.tgz}
engines: {node: '>=0.10.0'}
peerDependencies:
request: ^2.34
@@ -7884,14 +8252,12 @@ packages:
/require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- dev: false
/requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
/resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
- dev: false
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
@@ -7918,7 +8284,6 @@ packages:
engines: {node: '>=14.16'}
dependencies:
lowercase-keys: 3.0.0
- dev: false
/restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
@@ -7955,26 +8320,26 @@ packages:
dependencies:
glob: 7.2.3
- /rollup@4.12.0:
- resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==}
+ /rollup@4.13.0:
+ resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.12.0
- '@rollup/rollup-android-arm64': 4.12.0
- '@rollup/rollup-darwin-arm64': 4.12.0
- '@rollup/rollup-darwin-x64': 4.12.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.12.0
- '@rollup/rollup-linux-arm64-gnu': 4.12.0
- '@rollup/rollup-linux-arm64-musl': 4.12.0
- '@rollup/rollup-linux-riscv64-gnu': 4.12.0
- '@rollup/rollup-linux-x64-gnu': 4.12.0
- '@rollup/rollup-linux-x64-musl': 4.12.0
- '@rollup/rollup-win32-arm64-msvc': 4.12.0
- '@rollup/rollup-win32-ia32-msvc': 4.12.0
- '@rollup/rollup-win32-x64-msvc': 4.12.0
+ '@rollup/rollup-android-arm-eabi': 4.13.0
+ '@rollup/rollup-android-arm64': 4.13.0
+ '@rollup/rollup-darwin-arm64': 4.13.0
+ '@rollup/rollup-darwin-x64': 4.13.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.13.0
+ '@rollup/rollup-linux-arm64-gnu': 4.13.0
+ '@rollup/rollup-linux-arm64-musl': 4.13.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.13.0
+ '@rollup/rollup-linux-x64-gnu': 4.13.0
+ '@rollup/rollup-linux-x64-musl': 4.13.0
+ '@rollup/rollup-win32-arm64-msvc': 4.13.0
+ '@rollup/rollup-win32-ia32-msvc': 4.13.0
+ '@rollup/rollup-win32-x64-msvc': 4.13.0
fsevents: 2.3.3
dev: true
@@ -7993,6 +8358,11 @@ packages:
engines: {node: '>=0.12.0'}
dev: true
+ /run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
@@ -8031,7 +8401,7 @@ packages:
htmlparser2: 8.0.2
is-plain-object: 5.0.0
parse-srcset: 1.0.2
- postcss: 8.4.35
+ postcss: 8.4.38
dev: false
/sax@1.3.0:
@@ -8071,8 +8441,8 @@ packages:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
dev: true
- /set-function-length@1.2.1:
- resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==}
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.4
@@ -8124,8 +8494,8 @@ packages:
rechoir: 0.6.2
dev: false
- /side-channel@1.0.5:
- resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==}
+ /side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
@@ -8199,20 +8569,11 @@ packages:
dependencies:
agent-base: 7.1.0
debug: 4.3.4
- socks: 2.7.3
+ socks: 2.8.1
transitivePeerDependencies:
- supports-color
dev: false
- /socks@2.7.3:
- resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==}
- engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
- deprecated: please use 2.7.4 or 2.8.1 to fix package-lock issue
- dependencies:
- ip-address: 9.0.5
- smart-buffer: 4.2.0
- dev: false
-
/socks@2.8.1:
resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
@@ -8227,8 +8588,8 @@ packages:
atomic-sleep: 1.0.0
dev: false
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ /source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
/source-map@0.5.7:
@@ -8253,14 +8614,14 @@ packages:
spdx-license-ids: 3.0.17
dev: true
- /spdx-exceptions@2.4.0:
- resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==}
+ /spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
dev: true
/spdx-expression-parse@3.0.1:
resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
dependencies:
- spdx-exceptions: 2.4.0
+ spdx-exceptions: 2.5.0
spdx-license-ids: 3.0.17
dev: true
@@ -8315,6 +8676,11 @@ packages:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
dev: false
+ /statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
/std-env@3.7.0:
resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
dev: true
@@ -8334,15 +8700,19 @@ packages:
bluebird: 2.11.0
dev: false
- /streamx@2.15.8:
- resolution: {integrity: sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==}
+ /streamx@2.16.1:
+ resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==}
dependencies:
fast-fifo: 1.3.2
queue-tick: 1.0.1
optionalDependencies:
- bare-events: 2.2.0
+ bare-events: 2.2.2
dev: false
+ /strict-event-emitter@0.5.1:
+ resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
+ dev: true
+
/strict-uri-encode@2.0.0:
resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
engines: {node: '>=4'}
@@ -8455,7 +8825,7 @@ packages:
formidable: 2.1.2
methods: 1.1.2
mime: 2.6.0
- qs: 6.11.2
+ qs: 6.12.0
semver: 7.6.0
transitivePeerDependencies:
- supports-color
@@ -8526,11 +8896,11 @@ packages:
dependencies:
b4a: 1.6.6
fast-fifo: 1.3.2
- streamx: 2.15.8
+ streamx: 2.16.1
dev: false
- /tar@6.2.0:
- resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==}
+ /tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
dependencies:
chownr: 2.0.0
@@ -8604,8 +8974,8 @@ packages:
resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==}
dev: true
- /tinypool@0.8.2:
- resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==}
+ /tinypool@0.8.3:
+ resolution: {integrity: sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==}
engines: {node: '>=14.0.0'}
dev: true
@@ -8634,6 +9004,11 @@ packages:
hasBin: true
dev: false
+ /tlds@1.251.0:
+ resolution: {integrity: sha512-yztVk5O1LGKCjPd+7soBQyiKvSBXI5qugc/X0C7pLa0rV5ufBS6xcyX0pdf4NznO8xcZ5fqX248q+jTHd4AQJA==}
+ hasBin: true
+ dev: false
+
/tldts-core@6.1.16:
resolution: {integrity: sha512-rxnuCux+zn3hMF57nBzr1m1qGZH7Od2ErbDZjVm04fk76cEynTg3zqvHjx5BsBl8lvRTjpzIhsEGMHDH/Hr2Vw==}
dev: false
@@ -8720,8 +9095,8 @@ packages:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
dev: true
- /ts-api-utils@1.2.1(typescript@5.4.3):
- resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==}
+ /ts-api-utils@1.3.0(typescript@5.4.3):
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
@@ -8770,7 +9145,7 @@ packages:
hasBin: true
dependencies:
esbuild: 0.19.12
- get-tsconfig: 4.7.2
+ get-tsconfig: 4.7.3
optionalDependencies:
fsevents: 2.3.3
dev: false
@@ -8781,8 +9156,8 @@ packages:
safe-buffer: 5.2.1
dev: false
- /turndown@7.1.2:
- resolution: {integrity: sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==}
+ /turndown@7.1.3:
+ resolution: {integrity: sha512-Z3/iJ6IWh8VBiACWQJaA5ulPQE5E1QwvBHj00uGzdQxdRnd8fh1DPqNOJqzQDu6DkOstORrtXzf/9adB+vMtEA==}
dependencies:
domino: 2.1.6
dev: false
@@ -8839,15 +9214,11 @@ packages:
engines: {node: '>=10'}
dev: false
- /type-fest@3.13.1:
- resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
- engines: {node: '>=14.16'}
+ /type-fest@4.14.0:
+ resolution: {integrity: sha512-on5/Cw89wwqGZQu+yWO0gGMGu8VNxsaW9SB2HE8yJjllEk7IDTwnSN1dUVldYILhYPN5HzD7WAaw2cc/jBfn0Q==}
+ engines: {node: '>=16'}
dev: true
- /type@1.2.0:
- resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
- dev: false
-
/type@2.7.2:
resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
dev: false
@@ -8867,9 +9238,8 @@ packages:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
dev: false
- /ufo@1.4.0:
- resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==}
- dev: true
+ /ufo@1.5.3:
+ resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
/uglify-js@3.4.10:
resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==}
@@ -8890,6 +9260,11 @@ packages:
/undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+ /undici@6.10.2:
+ resolution: {integrity: sha512-HcVuBy7ACaDejIMdwCzAvO22OsiE6ir6ziTIr9kAE0vB+PheVe29ZvRN8p7FXCO2uZHTjEoUs5bPiFpuc/hwwQ==}
+ engines: {node: '>=18.0'}
+ dev: false
+
/unicode-canonical-property-names-ecmascript@2.0.0:
resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
engines: {node: '>=4'}
@@ -8975,7 +9350,7 @@ packages:
optional: true
dependencies:
ip-regex: 4.3.0
- tlds: 1.250.0
+ tlds: 1.251.0
dev: false
/url-template@2.0.8:
@@ -9026,7 +9401,7 @@ packages:
resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}
engines: {node: '>=10.12.0'}
dependencies:
- '@jridgewell/trace-mapping': 0.3.22
+ '@jridgewell/trace-mapping': 0.3.25
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
dev: true
@@ -9075,7 +9450,7 @@ packages:
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
- vite: 5.1.5(@types/node@20.11.30)
+ vite: 5.2.6(@types/node@20.11.30)
transitivePeerDependencies:
- '@types/node'
- less
@@ -9103,8 +9478,8 @@ packages:
- typescript
dev: true
- /vite@5.1.5(@types/node@20.11.30):
- resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==}
+ /vite@5.2.6(@types/node@20.11.30):
+ resolution: {integrity: sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -9132,9 +9507,9 @@ packages:
optional: true
dependencies:
'@types/node': 20.11.30
- esbuild: 0.19.12
- postcss: 8.4.35
- rollup: 4.12.0
+ esbuild: 0.20.2
+ postcss: 8.4.38
+ rollup: 4.13.0
optionalDependencies:
fsevents: 2.3.3
dev: true
@@ -9182,8 +9557,8 @@ packages:
std-env: 3.7.0
strip-literal: 2.0.0
tinybench: 2.6.0
- tinypool: 0.8.2
- vite: 5.1.5(@types/node@20.11.30)
+ tinypool: 0.8.3
+ vite: 5.2.6(@types/node@20.11.30)
vite-node: 1.4.0(@types/node@20.11.30)
why-is-node-running: 2.2.2
transitivePeerDependencies:
@@ -9403,7 +9778,6 @@ packages:
/y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
- dev: false
/yaeti@0.0.6:
resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==}
@@ -9427,12 +9801,18 @@ packages:
dependencies:
eslint-visitor-keys: 3.4.3
lodash: 4.17.21
- yaml: 2.3.4
+ yaml: 2.4.1
dev: true
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
+ dev: true
+
+ /yaml@2.4.1:
+ resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==}
+ engines: {node: '>= 14'}
+ hasBin: true
/yargs-parser@15.0.3:
resolution: {integrity: sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==}
@@ -9444,7 +9824,6 @@ packages:
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- dev: false
/yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
@@ -9457,7 +9836,6 @@ packages:
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
- dev: false
/yauzl@2.10.0:
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
diff --git a/tsconfig.json b/tsconfig.json
index 20bc583435..5ce6ad9584 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,7 +2,7 @@
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
- "moduleResolution": "node",
+ "moduleResolution": "bundler",
"strict": true,
"jsx": "react-jsx",
"jsxImportSource": "hono/jsx",
diff --git a/vitest.config.ts b/vitest.config.ts
index 2a4074bea7..fa395d2b2b 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -1,4 +1,4 @@
-import { defineConfig } from 'vitest/config';
+import { defineConfig, configDefaults } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
@@ -10,5 +10,7 @@ export default defineConfig({
exclude: ['lib/routes/**', 'lib/routes-deprecated/**'],
},
testTimeout: 10000,
+ setupFiles: ['./lib/setup.test.ts'],
+ exclude: [...configDefaults.exclude, './lib/setup.test.ts'],
},
});